Drbd是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。它允许用户在远程机器上建立一个本地块设备的实时镜像。与心跳连接结合使用,也可以把它看作是一种网络RAID;简单的说使用drbd镜像技术实现后台两台服务器数据同步。
Drbd负责接收数据,把数据写到本地磁盘,然后发送给另一个主机。另一个主机再将数据存到自己的磁盘中。目前,drbd每次只允许对一个节点进行读写访问,这对于通常的故障切换高可用性集群来讲已经足够用了。以后的版本将支持两个节点进行读写存取。
A 数据一旦写入磁盘并发送到网络中就认为完成了写入操作 B 收到接收确认就认为完成了写入操作 C 收到写入确认就认为完成了写入操作
Heartbeat是Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运行在对方主机上的资源或者服务,keepalived主要控制IP飘移,配置应用简单,而且分层,layer3,4,5,各自配置极为简单,heartbeat不但可以控制IP飘移,更擅长对资源服务的控制,配置,应用比较复杂。
通过修改Heartbeat的配置文件,可以指定哪台Heartbeat服务器作为主服务器,则另一台服务器自动成为热备服务器,然后在热备服务器上配置Heartbeat守护程序来监听来自主服务器的心跳消息。如果热备服务器在指定的时间内未监听到来自主服务器的心跳,就会启动故障转移程序,并取得主服务器上的相关资源服务的所有权,接替主服务器继续不间断的提供服务,从而达到资源及服务高可用性的目的。以上描述是heartbeat主备的模式,heartbeat还支持主主模式,即两台服务器互为主备,这时它们之间会相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的心跳报文,那么,一方就会认为对方失效或者宕机了,这每个运行正常的主机就会启动自身的资源接管模块来接管运行在对方主机上的资源或者服务,继续为用户提供服务。一般情况下,可以较好的实现一台主机故障后,企业业务仍能不间断的持续运行。注意:所谓的业务不间断,在故障转移期间也是需要切换时间的<例如:停止数据库及存储服务等>heartbeat的主备高可用的切换时间一般是在5-20秒左右(服务器宕机的切换比人工切换要快)。另外,和keepalived高可用软件一样,heartbeat高可用是操作系统级别的,不是服务(软件)级别的,可以通过简单的脚本控制,实现服务级别的高可用。
加载成功!添加开机自加载
echo "modprobe drbd" >> /etc/rc.local创建共享目录
mkdir -p /backup echo "/backup *(rw,no_root_squash,no_all_squash,sync)" >/etc/exportsNFS开机设置
/etc/init.d/rpcbind start chkconfig rpcbind on chkconfig nfs off注意:NFS不需要启动,也不需要设置成开机启动,这些都将由后面的Heartbeat来完成。
配置drbd配置文件(两个节点)
vim /etc/drbd.d/global_common.conf global { usage-count yes; #是否参加DRBD使用者统计 } common { protocol C; #使用drbd的第三种同步协议 disk { on-io-error detach; } syncer { rate 100M; #100M传输速度 } } resource nfs { on drdb01 { #主机名称 device /dev/drbd1; #drbd网络磁盘 disk /dev/sdb1; #本地需要挂载的磁盘 address 10.0.0.20:7899; #主ip地址加drbd端口 meta-disk internal; } on drdb02 { device /dev/drbd1; disk /dev/sdb1; address 10.0.0.21:7899; meta-disk internal; } }简化配置文件
global { usage-count yes; #是否参加DRBD使用者统计 } common { protocol C; #使用drbd的第三种同步协议 disk { on-io-error detach; } syncer { rate 100M; #100M传输速度 } } resource nfs { device /dev/drbd1; #drbd网络磁盘 disk /dev/sdb1; #本地需要挂载的磁盘 meta-disk internal; on drdb01 { address 10.0.0.20:7899; } on drdb02 { address 10.0.0.21:7899; } }激活前面配置的Drbd资源nfs
drbdadm create-md nfs启动drbd
/etc/init.d/drbd start加入开机自启
chkconfig drbd on查看运行状态,两台设备都处于Secondary/Secondary状态.
cat /proc/drbd初始化主机(这几步只在主节点上操作)
drbdadm primary all #这台设备成为所有资源的主。如果命令失败,执行下一条
drbdadm -- --overwrite-data-of-peer primary all #把此节点设置为主节点,且从头开始同步数据查看格式化进度
watch -n1 'cat /proc/drbd'说明:
cs:两台数据连接状态ro:两台主机的状态ds:磁盘状态是“UpToDate/UpToDate”,同步状态。
注意:secondary节点上不允许对DRBD设备进行任何操作,包括只读。所有的读写操作只能在主节点上进行,只有当主节点挂掉时,secondary节点才能提升为主节点,继续进行读写操作。
修改authkeys
一共有三种认证方式供选择,第一种是CRC循环冗余校验,第二种是SHA1哈希算法,第三种是MD3哈希算法,其中他们的密码可以任意设置,但是两边密码必须保持一致。
授权authkeys
chmod 600 authkeys修改haresources文件,在最后一行加入VIP
echo "drdb01 IPaddr::10.0.0.25/32/eth0 drbddisk::nfs Filesystem::/dev/drbd1::/backup::ext4 nfs" >>haresourcesdrdb01 IPaddr::10.0.0.25/32/eth0 #主机名 后跟虚拟IP地址、接口
drbddisk::nfs #管理drbd资源的名称
Filesystem::/dev/drbd1::/backup::ext4 nfs #文件系统::挂载的目录及格式::后跟nfs资源脚本
主库上查看
查看VIP ip a|grep eth0
查看磁盘 df -h
从库上查看
查看VIP,没看到VIP是对的,只有主宕了才会切。
查看磁盘,没有挂载盘是对的,主宕了才会挂载过来。
实验挂载盘的服务器:10.0.0.25,进入对应的要挂载的目录下创建同名的目录
挂载到VIP上
showmount -e 10.0.0.25 #showmount -e 挂载的VIP地址将共享文件的目录挂载到10.0.0.25的/backup上
mount -t nfs 10.0.0.25:/backup /backup挂在完成,实现共享存储。
查看VIP是否释放 ip a|grep eth0 可以看到Vip已经释放
查看drbd资源是否释放df -h 可以看到资源已经释放。
查看资源状态变cat /proc/drbd 查看资源状态变为从
VIP是否漂移过来ip a|grep eth0 已看到VIP飘移成功
查看drbd资源df -h Drbd资源切换成功,并挂载
查看资源状态变cat /proc/drbd 查看资源状态变为主
主从切换完成,到此Drbd+Heartbeat实现Nfs的高可用至此结束!
转载于:https://www.cnblogs.com/wzxmt/p/10655094.html
