阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

147次阅读
没有评论

共计 4889 个字符,预计需要花费 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 gccc++ make kerneldevel kernelheaders 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 drbd8.4.3.tar.gz
  4. cd drbd8.4.3
  5. ./configure prefix=/usr/local/drbd withkm withheartbeat
  6. make KDIR=/usr/src/kernels/2.6.32573.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.32573.8.1.el6.x86_64/
  4. cp drbd.ko /lib/modules/2.6.32573.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 (14)
  17. p
  18. Partition number (14):1
  19. First cylinder (1130,default1):
  20. Usingdefault value 1
  21. Last cylinder,+cylinders or+size{K,M,G}(1130,default130):
  22. Usingdefault value 130
  23.  
  24. Command(m for help): w
  25. The partition table has been altered!
  26.  
  27. Calling ioctl() to reread 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. usagecount 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. metadisk internal;
  33. }
  34. on node2 {
  35. device /dev/drbd1;
  36. disk /dev/sdb1;
  37. address 172.16.3.32:7789;
  38. metadisk internal;
  39. }
  40. startup {
  41. wfctimeout 0;
  42. degrwfctimeout 120;
  43. }
  44. disk {
  45. onioerror 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 createmd 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/hadebug
  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 原理及特性概述 http://www.linuxidc.com/Linux/2015-11/124759.htm
快速安装及部署 DRBD  http://www.linuxidc.com/Linux/2015-11/124760.htm

Linux 高可用(HA)集群之 DRBD 详解 http://www.linuxidc.com/Linux/2013-08/89035.htm

DRBD 中文应用指南 PDF http://www.linuxidc.com/Linux/2013-08/89034.htm

CentOS 6.3 下 DRBD 安装配置笔记 http://www.linuxidc.com/Linux/2013-06/85600.htm

基于 DRBD+Corosync 实现高可用 MySQL http://www.linuxidc.com/Linux/2013-05/84471.htm

CentOS 6.4 下 DRBD 安装配置 http://www.linuxidc.com/Linux/2013-09/90536.htm

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

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-06/132264.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4889字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中