zhangxinba 发表于 2019-1-6 14:58:33

heartbeat drbd nfs高可用

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

  根据drbd在两个节点同步数据时的同步方式可分为同步,半同步,异步
  其中同步最安全,异步最高效,为什么这么说呢。
  在同步的时候,主节点要等待备节点把数据写入磁盘
  在异步的时候,主节点只要把数据封装成报文发送出去就完了,至于你写没写完我不关心
http://s3.运维网.com/wyfs02/M00/25/8B/wKiom1NjWUKyLC3YAAD21vYI-zY532.png
  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,只需安装用户空间工具
  # ssh node2 'uname -r';uname -r
  2.6.32-431.el6.x86_64
  2.6.32-431.el6.x86_64
  

  下载包安装
  # 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
  

  # 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一份
  # scp ./* node2:/etc/drbd.d/
  创建drbd
  # mkdir /var/lib/drbd
  # drbdadm create-md r0
  # service drbd start
  提升一个为主的
  # drbdadm primary r0 --force
  # 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
  # mkdir /mnt/drbd
  # mount /dev/drbd0 /mnt/drbd
  # cd /mnt/drbd
  # ls
  lost+found
  # mkdir data/shared -p
  # ls
  datalost+found
  

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

  # drbdadm primary r0
  # 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
  # mkdir /mnt/drbd
  # mount /dev/drbd0 /mnt/drbd
  # cd /mnt/drbd
  # ls
  datalost+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
  

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

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

  最后就是安装heartbeat了
  # yum install perl-TimeDate net-snmp-libs libnet PyXML gettext
  # 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
  

  # scp ha.cf authkeys haresources node2:/etc/ha.d
  

  # ssh node2 'service heartbeat start && chkconfig keartbeat on';service heartbeat start && chkconfig heartbeat on
  

  测试
  # 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
  已经提升为主的
  

  # showmount -e node1
  Export list for node1:
  /mnt/drbd/data/shared 192.168.100.0/24
  已经启动了nfs
  

  # ifconfig
  eth0:0    Link encap:EthernetHWaddr 00:0C:29:F8:B5:7A
  inet addr:192.168.100.200Bcast:192.168.100.255Mask:255.255.255.0
  UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1
  

  当节点1下线时
  # service heartbeat stop
  Stopping High-Availability services:
  Done.
  

  # ifconfig
  eth0:0    Link encap:EthernetHWaddr 00:0C:29:8A:B2:3B
  inet addr:192.168.100.200Bcast:192.168.100.255Mask:255.255.255.0
  UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1
  # showmount -e
  Export list for node2.xy.com:
  /mnt/drbd/data/shared 192.168.100.0/24
  

  # 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 gcckernel-develflex

  ./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
  # 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
  在从节点上
  # 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
  

  server127.127.1.0
  server 133.100.11.8
  

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




页: [1]
查看完整版本: heartbeat drbd nfs高可用