heartbeat drbd nfs高可用

heartbeat drbd nfs高可用

drbd:網絡raid-1,用於通過網絡鏡像磁盤數據,屬於磁盤塊的鏡像,和文件無關。

    數據要寫入磁盤,先要把文件轉換爲磁盤上對應的扇區,塊然後磁盤開始

    轉圈圈(機械式的),把數據寫到了磁盤,永久保存了數據。drbd就是工作在

    轉換爲扇區,塊後,把對應的扇區,塊記錄下來。然後通過tcp報文傳到遠端

    存儲。具體一點通常爲了提升磁盤效率在內核會有一個buffer cache用於緩衝

    寫的數據,在緩衝過後爲了更好的提升磁盤性能,會把相鄰的寫操作放到一起

    把儘可能的降低隨機io,讓磁盤轉一圈多寫點數據,不用來回尋道。當然ssd

    就不存在這樣的問題,因爲它是電子的。比機械式的各方面都要優秀。就是有點貴。


    根據drbd在兩個節點同步數據時的同步方式可分爲同步,半同步,異步

    其中同步最安全,異步最高效,爲什麼這麼說呢。

    在同步的時候,主節點要等待備節點把數據寫入磁盤

    在異步的時候,主節點只要把數據封裝成報文發送出去就完了,至於你寫沒寫完我不關心

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 [email protected]

# 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 [email protected], 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服務


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章