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

[经验分享] heartbeat drbd nfs高可用

[复制链接]

尚未签到

发表于 2019-1-6 14:58:33 | 显示全部楼层 |阅读模式
  heartbeat drbd nfs高可用
  drbd:网络raid-1,用于通过网络镜像磁盘数据,属于磁盘块的镜像,和文件无关。
  数据要写入磁盘,先要把文件转换为磁盘上对应的扇区,块然后磁盘开始
  转圈圈(机械式的),把数据写到了磁盘,永久保存了数据。drbd就是工作在
  转换为扇区,块后,把对应的扇区,块记录下来。然后通过tcp报文传到远端
  存储。具体一点通常为了提升磁盘效率在内核会有一个buffer cache用于缓冲
  写的数据,在缓冲过后为了更好的提升磁盘性能,会把相邻的写操作放到一起
  把尽可能的降低随机io,让磁盘转一圈多写点数据,不用来回寻道。当然ssd
  就不存在这样的问题,因为它是电子的。比机械式的各方面都要优秀。就是有点贵。
  

  根据drbd在两个节点同步数据时的同步方式可分为同步,半同步,异步
  其中同步最安全,异步最高效,为什么这么说呢。
  在同步的时候,主节点要等待备节点把数据写入磁盘
  在异步的时候,主节点只要把数据封装成报文发送出去就完了,至于你写没写完我不关心

  heartbeat:实现高可用的,通过各节点的心跳信息,进行服务的转移以实现高可用
    本身带了集群的整个套件,包括心跳检测和资源管理。后来独立出来了
    一个pacemaker集群资源管理器,可结合openais独立出来的corosync心跳信息检测使用
  nfs:network file system
  

  192.168.100.25 主
  192.168.100.26 备
  192.168.100.200 vip
  准备
  # vim /etc/hosts
  192.168.100.25 node1.xy.com node1
  192.168.100.26 node2.xy.com node2
  

  # ssh-keygen
  # ssh-copy-id root@192.168.100.26
  # scp /etc/hosts node2:/etc/
  # ssh node2 "hostname node2.xy.com";hostname node1.xy.com
  # ssh node2 "ntpdate 192.168.100.254";ntpdate 192.168.100.254
  

  安装drbd
  先查看内核版本号,因为drbd要和内核严格匹配。kernal 2.6.33 自带drbd,只需安装用户空间工具
  [root@node1 ~]# ssh node2 'uname -r';uname -r
  2.6.32-431.el6.x86_64
  2.6.32-431.el6.x86_64
  

  下载包安装
  [root@node1 ~]# scp ./drbd* node2:~/
  drbd-8.4.3-33.el6.x86_64.rpm                                    100%  283KB 283.3KB/s   00:00
  drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm                100%  145KB 145.2KB/s   00:00
  

  [root@node1 ~]# ssh node2 'yum -y install ~/drbd*';yum -y install drbd*
  配置drbd
  # vim global_common.conf
global {
        usage-count no;
}
common {
        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 0;
                degr-wfc-timeout 120;
        }
        disk {
                on-io-error detach;
        }
        net {
                  protocol C;
                  cram-hmac-alg "sha1";
                  shared-secret "redhat";
        }
        syncer {
                rate 200M;
        }
}  

  添加一个资源
  先分一个磁盘分区,或者用lvm或者用一块磁盘
  # vim drbd0.res
resource r0 {
        device /dev/drbd0;
        disk /dev/sda4;
        meta-disk internal;
        on node1.xy.com {
        address 192.168.100.25:7789;
        }
        on node2.xy.com {
        address 192.168.100.26:7789;
        }
}  

  拷贝到node2一份
  [root@node1 drbd.d]# scp ./* node2:/etc/drbd.d/
  创建drbd
  # mkdir /var/lib/drbd
  # drbdadm create-md r0
  # service drbd start
  提升一个为主的
  # drbdadm primary r0 --force
  [root@node1 drbd.d]# cat /proc/drbd
  version: 8.4.3 (api:1/proto:86-101)
  GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-11-29 12:28:00
  0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---n-
  ns:596864 nr:0 dw:0 dr:603800 al:0 bm:36 lo:0 pe:2 ua:7 ap:0 ep:1 wo:f oos:457824
  [==========>.........] sync'ed: 57.0% (457824/1052768)K
  finish: 0:00:09 speed: 49,576 (49,576) K/sec
  在主的上创建文件系统
  # mke2fs -t ext4 /dev/drbd0
  [root@node1 drbd.d]# mkdir /mnt/drbd
  [root@node1 drbd.d]# mount /dev/drbd0 /mnt/drbd
  [root@node1 drbd.d]# cd /mnt/drbd
  [root@node1 drbd]# ls
  lost+found
  [root@node1 drbd]# mkdir data/shared -p
  [root@node1 drbd]# ls
  data  lost+found
  

  在另一个节点查看,因为从节点不能挂载,所以要先把主节点降级然后把从节点提升为主的才能查看
  [root@node1 mnt]# umount /mnt/drbd
  [root@node1 mnt]# drbdadm secondary r0
  

  [root@node2 drbd]# drbdadm primary r0
  [root@node2 drbd]# cat /proc/drbd
  version: 8.4.3 (api:1/proto:86-101)
  GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-11-29 12:28:00
  0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
  ns:4 nr:1102564 dw:1102568 dr:1017 al:1 bm:65 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
  [root@node2 drbd]# mkdir /mnt/drbd
  [root@node2 drbd]# mount /dev/drbd0 /mnt/drbd
  [root@node2 drbd]# cd /mnt/drbd
  [root@node2 drbd]# ls
  data  lost+found
  数据都有
  

  

  安装nfs
  # ssh node2 "yum -y install nfs-utils";yum -y install nfs-utils
  配置nfs
  # vim /etc/exports
  /mnt/drbd/data/shared192.168.100.0/24(rw)
  # scp /etc/exports node2:/etc/
  

  启动nfs
  service nfs start
  

  在另一个节点使用
  [root@node1 mnt]# showmount -e 192.168.100.26
  Export list for 192.168.100.26:
  /mnt/drbd/data/shared 192.168.100.0/24
  [root@node1 mnt]# mount -t nfs 192.168.100.26:/mnt/drbd/data/shared /mnt
  [root@node1 mnt]# cd /mnt
  [root@node1 mnt]# ls
  [root@node1 mnt]# mkdir mysql
  [root@node1 mnt]# ls
  mysql
  

  要根据需要修改权限后才能写的,我改成了777
  # umount /mnt
  

  最后就是安装heartbeat了
  # yum install perl-TimeDate net-snmp-libs libnet PyXML gettext
  [root@node2 ~]# yum -y remove cluster-glue
  # rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm
  

  # cd /etc/ha.d/
  # cp /usr/share/doc/heartbeat-2.1.4/authkeys ./
  # cp /usr/share/doc/heartbeat-2.1.4/haresources ./
  # cp /usr/share/doc/heartbeat-2.1.4/ha.cf ./
  # chmod 600 authkeys
  

  配置节点间认证
  auth 2
  #1 crc
  2 sha1 Hello!word
  #3 md5 Hello!
  

  # vim ha.cf
  logfile /var/log/ha-log
  logfacility     local0
  定义日志的
  keepalive 2
  定义多久检查一次心跳
  deadtime 10
  多久没收到心跳就认为别人挂了
  mcast eth0 225.90.0.1 694 1 0
  使用多播的方式发心跳信息
  auto_failback off
  节点从新上线后资源不会转移回去,on表示转回
  node    node1.xy.com node2.xy.com
  定义节点
  配置文件有说明英文版的
  

  # vim haresources
  node1.xy.com IPaddr::192.168.100.200/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/mnt/drbd::ext4 nfs
  

  [root@node1 ha.d]# scp ha.cf authkeys haresources node2:/etc/ha.d
  

  [root@node1 ha.d]# ssh node2 'service heartbeat start && chkconfig keartbeat on';service heartbeat start && chkconfig heartbeat on
  

  测试
  [root@node1 ha.d]# cat /proc/drbd
  version: 8.4.3 (api:1/proto:86-101)
  GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-11-29 12:28:00
  0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
  ns:1102576 nr:128 dw:49936 dr:1055574 al:11 bm:65 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
  已经提升为主的
  

  [root@node2 ha.d]# showmount -e node1
  Export list for node1:
  /mnt/drbd/data/shared 192.168.100.0/24
  已经启动了nfs
  

  [root@node1 ha.d]# ifconfig
  eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:F8:B5:7A
  inet addr:192.168.100.200  Bcast:192.168.100.255  Mask:255.255.255.0
  UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
  

  当节点1下线时
  [root@node1 mnt]# service heartbeat stop
  Stopping High-Availability services:
  Done.
  

  [root@node2 ha.d]# ifconfig
  eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:8A:B2:3B
  inet addr:192.168.100.200  Bcast:192.168.100.255  Mask:255.255.255.0
  UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
  [root@node2 ha.d]# showmount -e
  Export list for node2.xy.com:
  /mnt/drbd/data/shared 192.168.100.0/24
  

  [root@node2 ha.d]# cat /proc/drbd
  version: 8.4.3 (api:1/proto:86-101)
  GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-11-29 12:28:00
  0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
  ns:140 nr:1102580 dw:1102720 dr:2766 al:2 bm:65 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
  所有资源都转移了
  比corosync+pacemaker用容易配置,一行配置顶pacemaker一页
  但是pacemaker做的更精细,可配置的多,这也是优势也是劣势。如果用的熟练当然选
  corosync+pacemaker
  

  在配置的时候nfs不能启动,后来发现先启动rpcbind后就正常了,这应该是nfs的标准步骤。
  为了避免资源争用通常应该配置stonith设备
  

  如果drbd发生错误
  1,在从的上
  drbdadm secondary r0
  drbdadm disconnect all
  drbdadm --discard-my-data connect r0
  

  2,在主的上
  drbdadm disconnect all
  drbdadm connect r0
  

  ----------------------------
  编译安装drbd
  yum -y install gcc  kernel-devel  flex

  ./configure --with-km  --with-heartbeat  --prefix=/usr/local/drbd
  make && make install
  cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/init.d
  chmod +x /etc/init.d/drbd

  chkconfig --add drbd
  

  lvm+drbd
  [root@node4 drbd.d]# cat drbd0.res
resource r0 {
        device /dev/drbd0;
        disk /dev/mysql_vg/mysql_lv;
        meta-disk internal;
        on node4.xy.com {
        address 192.168.100.104:7789;
        }
        on node3.xy.com {
        address 192.168.100.103:7789;
        }
}
  在线扩容
  在主节点上
   lvextend -L 2G /dev/mysq_vg/mysql_lv
  在从节点上
   lvextend -L 2G /dev/mysql_vg/mysql_lv
  在主节点上
  drbdadm resize r0
  在从节点上
  [root@node4 /]# cat /proc/drbd
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@node4.xy.com, 2014-08-08 10:20:02
0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----
    ns:8 nr:453144 dw:453152 dr:1017 al:1 bm:24 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:661796
    [======>.............] sync'ed: 37.2% (661796/1048544)K
    finish: 0:00:23 speed: 27,624 (27,624) want: 8,240 K/sec
  drbdadm resize r0

  在主节点上
  resize2fs /dev/drbd0
  

  

  

  简单时间服务器配置
  # vim /etc/ntp.conf
  restrict default kod nomodify notrap nopeer noquery
  restrict -6 default kod nomodify notrap nopeer noquery
  restrict 127.0.0.1
  restrict -6 ::1
  restrict 192.168.100.0 mask 255.255.255.0 nomodify
  server 220.130.158.71 perfer
  server 59.124.196.83
  server
  server
  

  server  127.127.1.0
  server 133.100.11.8
  

  说明:
  server  配置你的上游时间服务器,可以有多个 perfer表示默认
  restrict [ip] mask [netmask] [parameter] 配置访问控制
  [parameter]可用的参数
  ignore:拒绝ntp连接
  nomodify:客户端不能使用ntpc,ntpq来修改服务器时间参数,但可以进行网络校时
  noquery:也是不提供ntp服务
  





运维网声明 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-660011-1-1.html 上篇帖子: CenTos6.8安装Heartbeat 下篇帖子: heartbeat 工作原理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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