设为首页 收藏本站
查看: 1024|回复: 0

[经验分享] 群集之 DRDB+Heartbeat

[复制链接]

尚未签到

发表于 2019-1-6 13:56:09 | 显示全部楼层 |阅读模式
  群集之
  DRDB+Heartbeat
  Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。
  数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回)
  DRBD的核心功能通过Linux的内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT3文件系统的崩溃。
DRBD功能
  单主模式:典型的高可靠性集群方案。
  复主模式:需要采用共享cluster文件系统,如GFS和OCFS2。用于需要从2个节点并发访问数据的场合,需要特别配置。
  复制模式:3种模式:
  协议A:异步复制协议。本地写成功后立即返回,数据放在发送buffer中,可能丢失。
  协议B:内存同步(半同步)复制协议。本地写成功并将数据发送到对方后立即返回,如果双机掉电,数据可能丢失。
  协议C:同步复制协议。本地和对方写成功确认后返回。如果双机掉电或磁盘同时损坏,则数据可能丢失。
  一般用协议C。选择协议将影响流量,从而影响网络时延。
  有效的同步:按线性而不是当初写的顺序同步块。同步损坏时间内的不一致数据。
  在线的设备检验:一端顺序计算底层存储,得到一个数字,传给另一端,另一端也计算,如果不一致,则稍后进行同步。建议一周或一月一次。
  复制过程的一致性检验:加密后,对方若不一致则要求重传。防止网卡、缓冲等问题导致位丢失、覆盖等错误。
  Split brain:当网络出现暂时性故障,导致两端都自己提升为Primary。两端再次连通时,可以选择email通知,建议手工处理这种情况。
  当数据写在缓冲区里,没有真正写到磁盘上时,系统崩溃会导致数据丢失。而disk flush是指将数据真正写到磁盘上后才返回。
  有些带电池的硬盘控制器,如带电池的带点出Dell PERC Raid卡,不但自带缓存而且自带电池,会在系统意外断电或者崩溃后将最后的数据写入磁盘,对这类控制器,可以使用disk flush,从而在保证性能的前提下提高了数据的安全性。
  磁盘错误处理策略:
  传递给上层:可能造成文件系统remounting成只读,不推荐。
  对上层屏蔽:用另一端的相应块进行读写,应用不中断。可以在任何方便的时候再切换。
  不一致的(inconsistent)数据:不能以任何方式访问和使用的数据。如正在同步时的目标节点数据,这些数据不能识别,不能mount,甚至不能通过磁盘的自动检测。
  过期的(outdated)数据:在备机上的数据,与主机一致,但不需要同步。如主备机网络中断后,备机上的数据就是过期的。
  DRBD有接口允许应用程序在网络中断时将备机数据标识为过期的。DRBD拒绝将这个节点提升为主角色。这些管理接口在Heartbeat框架上得到完整实现。
  一旦过期资源的复制链接恢复,他的过期标志自动清除,接着进行后台同步。
工作原理
  在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵.因为数据同时存在于本地主机和远程主机上,
  切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了.
  实验步骤:
  
  DRBD
  一、准备环境
  
  1.系统环境
  
  # uname –r //内核版本   
2.6.18-164.el5   
# cat /etc/redhat-release  //查看系统信息   
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
  2.修改主机名称等
  在节点1上进行修改
  # hostname wj1.a.com //修改主机名称   
# vim /etc/sysconfig/network //修改文件
  NETWORKING=yes   
NETWORKING_IPV6=no     
HOSTNAME=wj1.a.com
  之后退出再次登陆。
  # hostname //查看名称   
wj1.a.com   
# vim /etc/hosts //修改hosts文件
  127.0.0.1                localhost.localdomain localhost   
::1             localhost6.localdomain6 localhost6     
192.168.2.1 wj1.a.com      
192.168.2.3 wj 2.a.com

  在节点2上进行修改
  # hostname wj2.a.com //修改主机名称   
# vim /etc/sysconfig/network //修改文件
  NETWORKING=yes   
NETWORKING_IPV6=no     
HOSTNAME=wj2.a.com
  之后退出再次登陆。
  # hostname //查看名称   
wj2.a.com     
# vim /etc/hosts //修改hosts文件
  127.0.0.1                localhost.localdomain localhost   
::1             localhost6.localdomain6 localhost6     
192.168.2.1 wj1.a.com      
192.168.2.3 wj2.a.com

  
  3.安装所需的文件
  
  预先将所需的文件上传到管理员家目录。以下操作在wj1.a.com和wj2.a.com上都进行操作。
  # yum localinstall *.rpm --nogpgcheck –y //使用yum进行安装可以有效的解决包的依赖性问题。
  4.同步时钟
  
  要求两个节点上的始终必须要一致。
  # hwclock -s //同步始终
  5.加载模块
  
  在两个节点上都去进行如下操作。
  # modprobe drbd //加载drbd模块   
#
  # lsmod |grep drbd //查看模块   
drbd                  228528  0
  
#
  6.创建新分区
  以下操作要求在wj1.a.com和wj2.a.com上都进行。同时要求两个节点所创建的新分区大小一致。
  # fdisk -l //查看有关情况
  Disk /dev/sda: 21.4 GB, 21474836480 bytes   
255 heads, 63 sectors/track, 2610 cylinders     
Units = cylinders of 16065 * 512 = 8225280 bytes
  Device Boot      Start         End      Blocks   Id  System   
/dev/sda1   *           1          13      104391   83  Linux     
/dev/sda2              14        1288    10241437+  83  Linux     
/dev/sda3            1289        1415     1020127+  82  Linux swap / Solaris     
# fdisk /dev/sda
  The number of cylinders for this disk is set to 2610.   
There is nothing wrong with that, but this is larger than 1024,     
and could in certain setups cause problems with:     
1) software that runs at boot time (e.g., old versions of LILO)     
2) booting and partitioning software from other OSs     
   (e.g., DOS FDISK, OS/2 FDISK)
  Command (m for help): n //创建新分区   
Command action     
   e   extended     
   p   primary partition (1-4)     
p //创建主分区   
Selected partition 4     
First cylinder (1416-2610, default 1416):     
Using default value 1416     
Last cylinder or +size or +sizeM or +sizeK (1416-2610, default 2610): +1G //两个节点的分区大小要一致。
  Command (m for help): p //显示
  Disk /dev/sda: 21.4 GB, 21474836480 bytes   
255 heads, 63 sectors/track, 2610 cylinders     
Units = cylinders of 16065 * 512 = 8225280 bytes
  Device Boot      Start         End      Blocks   Id  System   
/dev/sda1   *           1          13      104391   83  Linux     
/dev/sda2              14        1288    10241437+  83  Linux     
/dev/sda3            1289        1415     1020127+  82  Linux swap / Solaris     
/dev/sda4            1416        1538      987997+  83  Linux
  Command (m for help): w 保存
  # fdisk -l //再次查看
  Disk /dev/sda: 21.4 GB, 21474836480 bytes   
255 heads, 63 sectors/track, 2610 cylinders     
Units = cylinders of 16065 * 512 = 8225280 bytes
  Device Boot      Start         End      Blocks   Id  System   
/dev/sda1   *           1          13      104391   83  Linux     
/dev/sda2              14        1288    10241437+  83  Linux     
/dev/sda3            1289        1415     1020127+  82  Linux swap / Solaris     
/dev/sda4            1416        1538      987997+  83  Linux   
#
  # partprobe /dev/sda //重新加载
  二、DRBD配置
  
  以下操作要求在节点wj1和wj2上都做。
  1.修改conf配置文件
  # cd /usr/share/doc/drbd83-8.3.8/ #ls   
ChangeLog  COPYING drbd.conf  file.list  README
  #cp drbd.conf /etc/ 复制配置文件到相关目录   
cp: overwrite `/etc/drbd.conf'? y     
#cd /etc/drbd.d/   
#ls   
global_common.conf     
# cp -p global_common.conf global_common.conf.bak //最好对文件进行备份   
# vim global_common.conf
  //第一列是行的序号
  1 global {   
2         usage-count no;     
3 }     
4     
5 common {     
6         protocol C;     
7         startup {
  8                 wfc-timeout 120;
  9                 degr-wfc-timeout 120;
  10         }
  11         disk {
  12                 on-io-error detach;
  13                 fencing resource-only;
  14         }
  15         net {
  16         cram-hmac-alg "sha1";
  17         shared-secret "mydrbdlab";      
18         }     
19         syncer {     
20                 rate 100M;     
21         }     
22 }

  2.修改资源文件
  # cd /etc/drbd.d/
  # vim web.res
  1 resource web {   
2        on wj1.a.com {     
3        device /dev/drbd0;     
4        disk /dev/sda5;     
5        address 192.168.2.1:7789;     
6        meta-disk  internal;     
7        }     
8        on wj2.a.com {     
9        device /dev/drbd0;     
10        disk /dev/sda5;     
11        address 192.168.2.3:7789;     
12        meta-disk  internal;     
13        }     
14 }
  3.创建资源
  
  #drbdadm create-md web   
Writing meta data...     
initializing activity log     
NOT initialized bitmap     
New drbd meta data block successfully created.



  4.启动服务、测试
  
  创建文件系统(在主节点上实现)
  mkfs -t ext3 -L drbdweb /dev/drbd0
  [root@wj2 ~]# mkdir /web
  [root@wj2 ~]# drbdadm primary web
  [root@wj2 ~]# drbd-overview
  0:web Connected Primary/Secondary UpToDate/UpToDate C r----
  [root@wj2 ~]# drbdadm role web
  Primary/Secondary
  [root@wj2 ~]# mount /dev/drbd0 /web
  [root@wj2 web]# vim test.html
  [root@wj2 ~]# umount /web
  [root@wj2 ~]# drbdadm secondary web
  测试,把wj2变成从的,wj1 变成主的
  [root@wj1 web]# drbdadm primary web
  [root@wj1 web]# mount /dev/drbd0 /web
  [root@wj1 web]# ll /web
  总计 20
  drwx------ 2 root root 16384 10-18 00:13 lost+found
  -rw-r--r-- 1 root root 18 10-17 16:28 test.html
  [root@wj1 web]#
  三 NFS配置
  两台服务器的nfs配置必须要一致。
  1.修改相关文件
  # vim /etc/exports
  /web *(rw,sync,insecure,no_root_squash,no_wdelay)
  
  2.执行相关操作。
  #service portmap start && chkconfig portmap on
  #service nfs start && chkconfig nfs on
  
  3.修改nfs启动脚本
  # vim /etc/init.d/nfs
  122         killproc nfsd –9
  四、Heartbeat配置
  
  Heartbeat的配置要求两个节点的配置一致。在wj1和wj2上进行如下操作
  1.复制模版文件
  # cd /usr/share/doc/heartbeat-2.1.4/ # cp authkeys ha.cf haresources /etc/ha.d/
  
  2.修改相关的配置信息
  # cd /etc/ha.d/ //切换到相关目录   
#vim ha.cf
  24 debugfile /var/log/ha-debug
  29 logfile /var/log/ha-log
  34 logfacility     local0
  48 keepalive 2
  56 deadtime 10
  76 udpport 694
  121 bcast eth0 //此行可以添加在任意一行
  157 auto_failback off
  211 node    wj1.a.com   
212 node   wj2.a.com
  3.修改资源文件
  # echo "node1.a.com IPaddr::192.168.2.2/24/eth0 drbddisk::web Filesystem::/dev/drbd0::/web::ext3 killnfsd">>/etc/ha.d/haresources
  
  
  
  4.修改key文件
  # vim authkeys
  23 auth 1   
24 1 crc
  5.手工创建文件
  # cd /etc/ha.d/resource.d/ # echo "killall -9 nfsd ; /etc/init.d/nfs restart ; exit 0" >>/etc/ha.d/resource.d/killnfsd
  
  6.修改配置文件的权限
  # chmod 600 /etc/ha.d/authkeys   
# chmod 755 /etc/ha.d/resource.d/killnfsd
  
  7.启动服务
  # service heartbeat start
  
  五、测试
  使用客户端进行测试
  1.挂载
  #mkdir /mnt/nfs   
#cd    
#mount 192.168.2.2:/web /mnt/nfs
  2.创建测试脚本文件
  #vim /mnt/test.sh //此配置脚本文件的主要作用是为了反复的读写操作
  while true
  do
  echo --->trying touch x:`date`
  touch x
  echo trying touch x:2012年 10月 17日 星期三 21:21:09 CST   
trying touch x: 2012年 10月 17日 星期三 21:23:08 CST   
touch: cannot touch `x': Stale NFS file handle   
trying touch x: 2012年 10月 17日星期三 21:23:43 CST

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-659980-1-1.html 上篇帖子: heartbeat3.0安装和配置 下篇帖子: DRBD + HeartBeat + MooseFS-DevilRex119
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表