CentOS 6.7下DRBD+Heartbeat 实时镜像和角色自动切换

zhaoweiping 2016-06-13

简介:

什么是DRBD?

Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。 数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回) DRBD的核心功能通过Linux的内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT3文件系统的崩溃。 DRBD的位置处于文件系统以下,比文件系统更加靠近操作系统内核及IO栈。

什么是Heartbeat?

Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。Heartbeat是目前开源Linux-HA项目最成功的一个例子,在行业内得到了广泛的应用。

系统环境:

两台全新安装的CentOS 6.7 x86_64虚拟机

CentOS 6.7下DRBD+Heartbeat 实时镜像和角色自动切换

准备工作:

  1. yum update
  2. #更新一下系统
  3.  
  4. reboot
  5. #然后重启

升级后uname -r查看一下内核版本,返回2.6.32-573.8.1.el6.x86_64

  1. yum install heartbeat gcc gcc-c++ make kernel-devel kernel-headers flex wget

node1和node2都要执行,这里需要注意一下kernel-devel安装的内核版本是不是和uname -r一致,如果不一致,需要升级到一致。

node1和node2都执行以下操作:

  1. wget http://oss.linbit.com/drbd/8.4/drbd-8.4.3.tar.gz
  2.  
  3. tar zxvf drbd-8.4.3.tar.gz
  4. cd drbd-8.4.3
  5. ./configure --prefix=/usr/local/drbd --with-km --with-heartbeat
  6. make KDIR=/usr/src/kernels/2.6.32-573.8.1.el6.x86_64/
  7. make install
  8.  
  9. mkdir -p /usr/local/drbd/var/run/drbd
  10. cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d/
  11. chkconfig --add drbd

安装drbd模块:

  1. cd drbd
  2. make clean
  3. make KDIR=/usr/src/kernels/2.6.32-573.8.1.el6.x86_64/
  4. cp drbd.ko /lib/modules/2.6.32-573.8.1.el6.x86_64/kernel/lib/
  5. depmod
  6.  
  7. cp -R /usr/local/drbd/etc/ha.d/resource.d/* /etc/ha.d/resource.d/

到这里drbd就算告一段落,为了实验,我在node1和node2上各自添加一块1G的硬盘sdb
CentOS 6.7下DRBD+Heartbeat 实时镜像和角色自动切换
对sdb这块硬盘分区

  1. [root@node1 drbd]# fdisk /dev/sdb
  2. Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
  3. Building a new DOS disklabel with disk identifier 0x894c2e0e.
  4. Changes will remain in memory only,until you decide to write them.
  5. After that, of course, the previous content won't be recoverable.
  6.  
  7. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
  8.  
  9. WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
  10. switch off the mode (command 'c')and change display units to
  11. sectors (command 'u').
  12.  
  13. Command(m for help): n
  14. Command action
  15. e extended
  16. p primary partition (1-4)
  17. p
  18. Partition number (1-4):1
  19. First cylinder (1-130,default1):
  20. Usingdefault value 1
  21. Last cylinder,+cylinders or+size{K,M,G}(1-130,default130):
  22. Usingdefault value 130
  23.  
  24. Command(m for help): w
  25. The partition table has been altered!
  26.  
  27. Calling ioctl() to re-read partition table.
  28. Syncing disks.
  1. partprobe
  2. #使刚才的设置生效,如果没有这个命令,yum install parted,虚拟机执行这个命令有时候会报错,直接reboot就行

现在node1和node2都有/dev/sdb1分区了,都不要去格式化,放着先,接下来:

  1. cd /usr/local/drbd/etc/drbd.d
  2.  
  3. cp global_common.conf global_common.conf.default
  4.  
  5. vi global_common.conf
  6. #这个文件里都是注释,删掉写我们自己的配置
  7.  
  8. global{
  9. usage-count no;
  10. #是否参加什么使用者统计之类的,大概是这意思,默认是yes
  11. }
  12.  
  13. #下面这个common大括号里的参数,在所有资源上都有效
  14.  
  15. common {
  16.  
  17. net {
  18. protocol C;
  19. #同步协议(有ABC三个,默认使用C),也就是一个写入请求,node1和node2都确认写入,才算是一个完整的数据写入
  20. }
  21.  
  22. }
  23.  
  24. vi /usr/local/drbd/etc/drbd.d/r0.res
  25. #创建资源r0
  26.  
  27. resource r0 {
  28. on node1 {
  29. device /dev/drbd1;
  30. disk /dev/sdb1;
  31. address 172.16.3.31:7789;
  32. meta-disk internal;
  33. }
  34. on node2 {
  35. device /dev/drbd1;
  36. disk /dev/sdb1;
  37. address 172.16.3.32:7789;
  38. meta-disk internal;
  39. }
  40. startup {
  41. wfc-timeout 0;
  42. degr-wfc-timeout 120;
  43. }
  44. disk {
  45. on-io-error detach;
  46. }
  47. }
  48.  
  49. scp r0.res global_common.conf node2:/usr/local/drbd/etc/drbd.d/
  50. #把配置文件传到node2

在node1和node2上操作:

  1. modprobe drbd
  2. #载入 drbd 模块
  3.  
  4. dd if=/dev/zero of=/dev/sdb1 bs=1M count=100
  5. #把一些资料塞到 sdb 內 (否则 create-md 时有可能会出现错误)
  6.  
  7. drbdadm create-md r0
  8. #建立 drbd resource
  9.  
  10. drbdadm up r0
  11. #启动 resource r0
  12.  
  13. 以下操作仅在node1执行:
  14.  
  15. drbdadm primary --force r0
  16. #设置node1为primary节点

上面已经完成了/dev/drbd1的初始化,现在把/dev/drbd1格式化成ext4文件系统。

  1. mkfs.ext4 /dev/drbd1
  2.  
  3. mkdir /data
  4.  
  5. mount /dev/drbd1 /data
  6. #然后将/dev/drbd1挂载到创建的/data目录

heartbeat配置:

  1. vi /etc/ha.d/ha.cf
  2. #创建ha.cf,并写入以下内容
  3.  
  4.  
  5. debugfile /var/log/ha-debug
  6. #打开错误日志报告
  7.  
  8.  
  9. keepalive 2
  10. #两秒检测一次心跳线连接
  11.  
  12.  
  13. deadtime 10
  14. #10 秒测试不到主服务器心跳线为有问题出现
  15.  
  16.  
  17. warntime 6
  18. #警告时间(最好在 2 ~ 10 之间)
  19.  
  20.  
  21. initdead 120
  22. #初始化启动时 120 秒无连接视为正常,或指定heartbeat 在启动时,需要等待120秒才去启动任何资源
  23.  
  24.  
  25. udpport 694
  26. #用 udp 的 694 端口连接
  27.  
  28.  
  29. ucast eth1 172.16.2.32
  30. #在node1上写node2的IP,反之。也就是eth1的心跳线
  31.  
  32.  
  33. node node1
  34. #主节点主机名
  35.  
  36.  
  37. node node2
  38. #备节点主机名
  39.  
  40.  
  41. auto_failback off
  42. #主节点恢复后可自动切换回来,这个一般开启,除非服务器性能差很大
  43.  
  44.  
  45. respawn hacluster /usr/lib64/heartbeat/ipfail
  46. #如果是32位系统就把lib64改成lib

配置authkeys

  1. vi /etc/ha.d/authkeys
  2. auth 1
  3. 1 crc
  4.  
  5. chmod 600/etc/ha.d/authkeys

配置haresources

  1. vi /etc/ha.d/haresources
  2. node1 IPaddr::192.168.1.33/24/eth0:0 drbddisk::r0 Filesystem::/dev/drbd1::/data::ext4
  3. #设置VIP
  4.  
  5.  
  6. scp authkeys ha.cf haresources node2:/etc/ha.d/
  7. #把配置文件传到node2

DRBD主从自动切换测试

首先启动node1的heartbeat,接着再启动node2的heartbeat。

然后启动node1上的drbd,接着启动node2上的drbd

稍等片刻,请看截图:
CentOS 6.7下DRBD+Heartbeat 实时镜像和角色自动切换
可以看到,现在VIP在node1上的eth0上,而且drbd状态是Primary状态,node2是Secondary状态,一切正常。

好,那现在来简单模拟一下node1宕机的场景,我直接把node1关机,现在再来node2上查看,请看截图:
CentOS 6.7下DRBD+Heartbeat 实时镜像和角色自动切换
可以看到,现在VIP已经成功飘逸到了node2,而node2上的drbd状态也变成了Primary,node1因为被我关机了,所有显示Unknown

那么我现在把node1开机,再来看node1是什么情况,请看截图:
CentOS 6.7下DRBD+Heartbeat 实时镜像和角色自动切换
可以看到,VIP依旧工作在node2上,没有飘回node1,这是我想要的,再看drbd,node1变成Secondary状态了,也没有变回Primary,不会和node2抢角色。

而之前因为node1关机,node2上的drbd现在也恢复正常
CentOS 6.7下DRBD+Heartbeat 实时镜像和角色自动切换
至此,整个CentOS 6.7 DRBD+Heartbeat 实时镜像和角色自动切换的实验到此结束,好了,谢谢阅读。

DRBD 的详细介绍:请点这里
DRBD 的下载地址:请点这里

相关推荐