DRBD 高可用配置详解(转)
Posted 舒润
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DRBD 高可用配置详解(转)相关的知识,希望对你有一定的参考价值。
高可用性集群解释:
一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上。还指可以将集群中的某节点进行离线维护再上线,该过程并不影响整个集群的运行。
今天来做个Heartbeat+DRBD+NFS的高可用文件系统
1、实验VMware虚拟机2台 同时安装CentOS 6.6 x86_64的系统
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
#测试机1 [[email protected] ~] # ifconfig | sed -rn ‘/^[^ \t]/{N;s/(^[^ ]*).*addr:([^ ]*).*/\1 \2/p}‘ | awk ‘$2!~/^192\.168|^10\.|^127|^0|^$/{print $1"="$2}‘ eth0=172.16.6.100 eth1=172.16.6.101 [[email protected] ~] # hostname ZhongH6100.wxjr.com.cn [[email protected] ~] # cat /etc/centos-release CentOS release 6.6 (Final) [[email protected] ~] # #测试机2 [[email protected] ~] # ifconfig | sed -rn ‘/^[^ \t]/{N;s/(^[^ ]*).*addr:([^ ]*).*/\1 \2/p}‘ | awk ‘$2!~/^192\.168|^10\.|^127|^0|^$/{print $1"="$2}‘ eth0=172.16.7.100 eth1=172.16.7.101 [[email protected] ~] # hostname ZhongH7100.wxjr.com.cn [[email protected] ~] # cat /etc/centos-release CentOS release 6.6 (Final) [[email protected] ~] # |
2、修改主机名、指定hostname能被两主机互相访问、同步时间 #下面实验的时候大家仔细看命令是在哪个服务器上执行的仔细区分
是[[email protected] ~]还是[[email protected] ~]
如果是[[email protected] ~]那么就是两台机器都需要运行的
1
2
3
4
5
6
7
8
|
[[email protected] ~] # sed -ri ‘s/^(HOSTNAME=).*/\1ZhongH6100.wxjr.com.cn/‘ /etc/sysconfig/network [[email protected] ~] # hostname ZhongH6100.wxjr.com.cn [[email protected] ~] # sed -ri ‘s/^(HOSTNAME=).*/\1ZhongH7100.wxjr.com.cn/‘ /etc/sysconfig/network [[email protected] ~] # hostname ZhongH7100.wxjr.com.cn [[email protected] ~] # echo "172.16.7.100 ZhongH7100.wxjr.com.cn ZhongH7100" >> /etc/hosts [[email protected] ~] # echo "172.16.6.100 ZhongH6100.wxjr.com.cn ZhongH6100" >> /etc/hosts #下面这里就不单独做世界同步服务器了 直接ntp来做网络同步 [[email protected] ~] # echo "*/5 * * * * `which ntpdate` pool.ntp.org >/dev/null 2>&1" >> /var/spool/cron/root |
3、安装DRBD
DRBD简介 DRBD的全称为:DistributedReplicatedBlockDevice(DRBD)分布式块设备复制DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。它允许用户在远程机器上建立一个本地块设备的实时镜像。与心跳连接结合使用,也可以把它看作是一种网络RAID。 DRBD工作机制 Drbd负责接收数据,把数据写到本地磁盘,然后发送给另一个主机。另一个主机再将数据存到自己的磁盘中。目前,drbd每次只允许对一个节点进行读写访问,这对于通常的故障切换高可用性集群来讲已经足够用了。以后的版本将支持两个节点进行读写存取。 DRBD协议说明 A数据一旦写入磁盘并发送到网络中就认为完成了写入操作。 B收到接收确认就认为完成了写入操作。 C收到写入确认就认为完成了写入操作 DRBD官方下载地址:http://oss.linbit.com/drbd/
①、准备工作
1
2
3
4
5
|
[[email protected] ~] # yum clean all && yum makecache [[email protected] ~] # yum groupinstall "Development tools" "Server Platform Development" -y && yum update -y [[email protected] ~] # uname -r #查看内核版本 2.6.32-504.16.2.el6.centos.plus.x86_64 [[email protected] ~] # yum install kernel-devel kernel-headers flex #注意:安装kernel-devel一定要和你uname -r 看到的内核版本一致 |
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
[[email protected] ~] # cd /tmp && wget http://www.dwhd.org/wp-content/uploads/2015/05/drbd-8.4.3.tar.gz [[email protected] tmp] # tar xf drbd-8.4.3.tar.gz [[email protected] tmp] # cd drbd-8.4.3 [[email protected] drbd-8.4.3] # ./configure --prefix=/usr/local/drbd --sysconfdir=/etc/drbd \ --datarootdir= /usr/local/share/ --with-utils --with-km #--with-km是启用内核模块 [[email protected] drbd-8.4.3] # make KDIR=/usr/src/kernels/`uname -r`/ [[email protected] drbd-8.4.3] # make install [[email protected] drbd-8.4.3] # mkdir -p /usr/local/drbd/var/run/drbd [[email protected] drbd-8.4.3] # cp -a /etc/drbd/rc.d/init.d/drbd /etc/rc.d/init.d/ [[email protected] drbd-8.4.3] # chkconfig --add drbd [[email protected] drbd-8.4.3] # chkconfig drbd on [[email protected] drbd-8.4.3] # cd drbd [[email protected] drbd] # make clean [[email protected] drbd] # make KDIR=/usr/src/kernels/`uname -r`/ [[email protected] drbd] # cp drbd.ko /lib/modules/`uname -r`/kernel/lib/ [[email protected] drbd] # modprobe drbd [[email protected] drbd] # lsmod | grep drbd #查看模块是否加载成功 drbd 310172 0 libcrc32c 1246 1 drbd |
③、准备同步使用的磁盘 准备一个分区以备后面实验用,下面是我在sdb磁盘上新建了一个sdb1的主分区大小事30G
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
[[email protected] drbd] # dd if=/dev/zero of=/dev/sdb1 bs=1M count=1 情况sdb磁盘上的分区表 [[email protected] drbd] # fdisk /dev/sdb WARNING: DOS-compatible mode is deprecated. It‘s strongly recommended to switch off the mode ( command ‘c‘ ) and change display units to sectors ( command ‘u‘ ). Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-7832, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-7832, default 7832): +30G Command (m for help): p Disk /dev/sdb : 64.4 GB, 64424509440 bytes 255 heads, 63 sectors /track , 7832 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical /physical ): 512 bytes / 512 bytes I /O size (minimum /optimal ): 512 bytes / 512 bytes Disk identifier: 0x000a8ddb Device Boot Start End Blocks Id System /dev/sdb1 1 3917 31463271 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re- read partition table. Syncing disks. [[email protected] drbd] # |
④、制作环境变量文件、备份原始配置文件、修改配置文件、定义节点上的资源
1
2
3
4
5
|
[[email protected] drbd] # cd /etc/drbd/drbd.d [[email protected] drbd.d] # pwd /etc/drbd/drbd .d [[email protected] drbd.d] # echo "export PATH=/usr/local/drbd/sbin:\$PATH" > /etc/profile.d/drbd.8.4.3.sh [[email protected] drbd.d] # . /etc/profile.d/drbd.8.4.3.sh |
1
2
3
4
5
|
[[email protected] drbd.d] # cp global_common.conf global_common.conf_`date +%Y%m%d`_backup [[email protected] drbd.d] # ls -l 总用量 8 -rw-r--r-- 1 root root 1836 5月 23 21:36 global_common.conf -rw-r--r-- 1 root root 1836 5月 23 21:45 global_common.conf_20150523_backup |
⑤、修改全局配置文件
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
[[email protected] drbd.d] # :>global_common.conf #然后将配置文件改成下面的 [[email protected] drbd.d] # grep -Ev ‘(^#|^\s+#)‘ global_common.conf global { usage-count no; } common { protocol C; handlers { pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f" ; pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f" ; local -io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f" ; } startup { wfc-timeout 120; degr-wfc-timeout 120; } disk { on-io-error detach; fencing resource-only; } net { cram-hmac-alg "sha1" ; shared-secret "mydrbdlab" ; } syncer { rate 100M; } } |
⑥、定义节点上的资源
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
[[email protected] drbd.d] # vi web.res #写入下面的内容,具体视情况做更改 resource web { #这个web是定义资源的名字 on ZhongH6100.wxjr.com.cn { #on开头,后面是主机名称 device /dev/drbd0 ; #drbd设备名称 disk /dev/sdb1 ; #drbd0使用的磁盘分区为sdb1 address 172.16.6.101:7789; #设置drbd监听地址与端口 meta-disk internal; } on ZhongH7100.wxjr.com.cn { #on开头,后面是主机名称 device /dev/drbd0 ; #drbd设备名称 disk /dev/sdb1 ; #drbd0使用的磁盘分区为sdb1 address 172.16.7.101:7789; #设置drbd监听地址与端口 meta-disk internal; } } |
⑦、初始化资源
1
2
3
4
5
|
[[email protected] drbd.d] # drbdadm create-md web Writing meta data... initializing activity log NOT initializing bitmap New drbd meta data block successfully created. |
⑧、启动DRBD服务
01
02
03
04
05
06
07
08
09
10
11
12
|
[[email protected] drbd.d] # service drbd restart Stopping all DRBD resources: . Starting DRBD resources: [ create res: web prepare disk: web adjust disk: web adjust net: web ] outdated-wfc-timeout has to be shorter than degr-wfc-timeout outdated-wfc-timeout implicitly set to degr-wfc-timeout (120s) . [[email protected] drbd.d] # |
1
2
3
|
1
2
3
|
由于默认没有主次节点之分,因而需要设置两个主机的主次节点,选择需要设置为主节点的主机,然后执行如下命令:
drbdadm -- --overwrite-data-of-peer primary web #命令解释:调整当前节点上的web资源为主节点
⑨、调整172.16.6.101/172.16.6.100也就是node1也主节点
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
[[email protected] drbd.d] # drbdadm role web Secondary /Secondary [[email protected] drbd.d] # drbdadm -- --overwrite-data-of-peer primary web [[email protected] drbd.d] # drbd-overview 0:web /0 SyncSource Primary /Secondary UpToDate /Inconsistent C r---n- [>....................] sync ‘ed: 1.4% (30328 /30724 )M [[email protected] drbd.d] # cat /proc/drbd version: 8.4.3 (api:1 /proto :86-101) 0: cs:SyncSource ro:Primary /Secondary ds:UpToDate /Inconsistent C r---n- ns:2462744 nr:0 dw:0 dr:2466464 al:0 bm:150 lo:0 pe:3 ua:3 ap:0 ep:1 wo:f oos:29001596 [>...................] sync ‘ed: 7.9% (28320 /30724 )M finish: 0:04:44 speed: 101,772 (91,136) K /sec [[email protected] drbd.d] # drbdadm role web Primary /Secondary [[email protected] drbd.d] # cat /proc/drbd version: 8.4.3 (api:1 /proto :86-101) 0: cs:SyncSource ro:Primary /Secondary ds:UpToDate /Inconsistent C r----- ns:9051136 nr:0 dw:0 dr:9051808 al:0 bm:551 lo:3 pe:8 ua:3 ap:0 ep:1 wo:f oos:22419324 [====>...............] sync ‘ed: 28.8% (21892 /30724 )M finish: 0:04:06 speed: 90,776 (74,732) K /sec #由此可见:进度已经完成了28.8%,传输速度大概70M/S #注:ds是磁盘状态信息 dw是磁盘写信息 dr是磁盘读信息 |
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
[[email protected] drbd.d] # drbdadm cstate web SyncSource #SyncSource:以本节点为同步源的同步正在进行 #资源的连接状态;一个资源可能有以下连接状态中的一种 #StandAlone 独立的:网络配置不可用;资源还没有被连接或是被管理断开(使用 drbdadm disconnect 命令),或是由于出现认证失败或是脑裂的情况 #Disconnecting 断开:断开只是临时状态,下一个状态是StandAlone独立的 #Unconnected 悬空:是尝试连接前的临时状态,可能下一个状态为WFconnection和WFReportParams #Timeout 超时:与对等节点连接超时,也是临时状态,下一个状态为Unconected悬空 #BrokerPipe:与对等节点连接丢失,也是临时状态,下一个状态为Unconected悬空 #NetworkFailure:与对等节点推动连接后的临时状态,下一个状态为Unconected悬空 #ProtocolError:与对等节点推动连接后的临时状态,下一个状态为Unconected悬空 #TearDown 拆解:临时状态,对等节点关闭,下一个状态为Unconected悬空 #WFConnection:等待和对等节点建立网络连接 #WFReportParams:已经建立TCP连接,本节点等待从对等节点传来的第一个网络包 #Connected 连接:DRBD已经建立连接,数据镜像现在可用,节点处于正常状态 #StartingSyncS:完全同步,有管理员发起的刚刚开始同步,未来可能的状态为SyncSource或PausedSyncS #StartingSyncT:完全同步,有管理员发起的刚刚开始同步,下一状态为WFSyncUUID #WFBitMapS:部分同步刚刚开始,下一步可能的状态为SyncSource或PausedSyncS #WFBitMapT:部分同步刚刚开始,下一步可能的状态为WFSyncUUID #WFSyncUUID:同步即将开始,下一步可能的状态为SyncTarget或PausedSyncT #SyncSource:以本节点为同步源的同步正在进行 #SyncTarget:以本节点为同步目标的同步正在进行 #PausedSyncS:以本地节点是一个持续同步的源,但是目前同步已经暂停,可能是因为另外一个同步正在进行或是使用命令(drbdadm pause-sync)暂停了同步 #PausedSyncT:以本地节点为持续同步的目标,但是目前同步已经暂停,这可以是因为另外一个同步正在进行或是使用命令(drbdadm pause-sync)暂停了同步 #VerifyS:以本地节点为验证源的线上设备验证正在执行 #VerifyT:以本地节点为验证目标的线上设备验证正在执行 |
⑩、在主节点上创建文件系统、挂载主节点上的文件系统、在主节点分区中新建个文件
01
|
以上是关于DRBD 高可用配置详解(转)的主要内容,如果未能解决你的问题,请参考以下文章
Corosync+Pacemaker+DRBD+NFS高可用实例配置