heartbeat drbd nfs高可用

drbd:网络raid-1,用于通过网络镜像磁盘数据,属于磁盘块的镜像,和文件无关。

    数据要写入磁盘,先要把文件转换为磁盘上对应的扇区,块然后磁盘开始

    转圈圈(机械式的),把数据写到了磁盘,永久保存了数据。drbd就是工作在

    转换为扇区,块后,把对应的扇区,块记录下来。然后通过tcp报文传到远端

    存储。具体一点通常为了提升磁盘效率在内核会有一个buffer cache用于缓冲

    写的数据,在缓冲过后为了更好的提升磁盘性能,会把相邻的写操作放到一起

    把尽可能的降低随机io,让磁盘转一圈多写点数据,不用来回寻道。当然ssd

    就不存在这样的问题,因为它是电子的。比机械式的各方面都要优秀。就是有点贵。


    根据drbd在两个节点同步数据时的同步方式可分为同步,半同步,异步

    其中同步最安全,异步最高效,为什么这么说呢。

    在同步的时候,主节点要等待备节点把数据写入磁盘

    在异步的时候,主节点只要把数据封装成报文发送出去就完了,至于你写没写完我不关心

heartbeat drbd nfs高可用_heartbeat drbd nfs高可

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 <ip or hostname> 配置你的上游时间服务器,可以有多个 perfer表示默认

restrict [ip] mask [netmask] [parameter] 配置访问控制

[parameter]可用的参数

ignore:拒绝ntp连接

nomodify:客户端不能使用ntpc,ntpq来修改服务器时间参数,但可以进行网络校时

noquery:也是不提供ntp服务