heartbeat+drbd+nfs

Heartbeat爲我們提供了廉價的、可伸縮的高可用集羣方案。我們通過heartbeat+drbd+nfsLinux下創建一個高可用(HA)的集羣服務器。


DRBD是一種塊設備,可以被用於高可用(HA)之中。它類似於一個網絡RAID-1功能。當你將數據寫入本地文件系統時,數據還將會被髮送到網絡中另一臺主機上。以相同的形式記錄在一個文件系統中。本地(主節點)與遠程主機(備節點)的數據可以保證實時同步。當本地系統出現故障時,遠程主機上還會保留有一份相同的數


拓撲圖:

194549516.png


一. 安裝前準備


實現高可用性羣集,兩個節點配置文件需要保持一致


1.修改hosts文件


[root@node1 ~]# vim /etc/hosts


添加 192.168.2.10 node1.a.com node1


192.168.2.20 node2.a.com node2


2.修改network文件


[root@node1 ~]# hostname node1.a.com


[root@node1 ~]# vim /etc/sysconfig/network


更改 HOSTNAME=node1.a.com


3.配置yum


[root@node1 ~]# hwclock -s //同步時間


[root@node1 ~]# mkdir /mnt/cdrom


[root@node1 ~]# mount /dev/cdrom /mnt/cdrom


[root@node1 ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo


[rhel-server]


name=Red Hat Enterprise Linux server


baseurl=file:///mnt/cdrom/Server


enabled=1


gpgcheck=0


gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release


[rhel-cluster]


name=Red Hat Enterprise Linux cluster


baseurl=file:///mnt/cdrom/Cluster


enabled=1


gpgcheck=0


gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release


node1node2 的配置同樣。


[root@node1 ~]# scp /etc/yum.repos.d/rhel-debuginfo.repo node2.a.com:/etc/yum.repos.d/



.安裝drbd主文件


軟件:


kmod-drbd83-8.3.8-1.el5.centos.i686.rpm


drbd83-8.3.8-1.el5.centos.i386.rp


1.安裝DRBD軟件


[root@drbd1 ~]# rpm -ivh drbd83-8.3.8-1.el5.centos.i386.rpm //主文件安裝


[root@drbd1 ~]# rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.i686.rpm //內核文件安裝


2.加載內核


[root@drbd1 ~]# modprobe drbd


3.配置主文件


root@drbd1 ~]# vim /etc/drbd.conf 在末行模式下輸入如下命令


:r /usr/share/doc/drbd83-8.3.8/drbd.conf

# You can find an example in /usr/share/doc/drbd.../drbd.conf.example



include "drbd.d/global_common.conf";


include "drbd.d/*.res";


# please have a a look at the example configuration file in


# /usr/share/doc/drbd83/drbd.conf


#


4.創建一個共享空間


[root@node1 ha.d]# fdisk /dev/sda


n------->p-------->4--->+1G------>w


[root@node1 ha.d]# partprobe /dev/sda


5.配置全局文件


[root@drbd1 ~]# cd /etc/drbd.d


[root@drbd1 drbd.d]# cp global_common.conf global_common.conf.bak //備份文件


[root@drbd1 drbd.d]# vim global_common.conf 修改如下


global {


usage-count no; //取消DRBD使用者統計


# minor-count dialog-refresh disable-ip-verification


}


common {


protocol C; //使用協議C


startup {


wfc-timeout 120; //啓動延遲


degr-wfc-timeout 120;


}


disk { //fence防腦裂


on-io-error detach;


fencing resource-only;


}


net {


cram-hmac-alg "sha1"; //主備節點使用的通信算法


shared-secret "mydrbdlab";


}


syncer {


rate 100M; //主備節點同步速率


}


}



6.定義資源


[root@drbd1 ~]# vim web.res


resource web { (資源名稱)


on node1.a.com { (節點名)


device /dev/drbd0; (虛擬設備名稱)


disk /dev/sda4; (真實設備名)


address 192.168.2.10:7789; (監聽自身的IP的地址端口)


meta-disk internal;


}



on node2.a.com {


device /dev/drbd0;


disk /dev/sda4;


address 192.168.2.20:7789;


meta-disk internal;


}


}



7.node2也需要進行同樣的配置,配置與node1配置是一樣的


node1node2上初始化資源web


[root@drbd1 ~]# drbdadm create-md web


Writing meta data...


initializing activity log


NOT initialized bitmap


New drbd meta data block successfully created.


[root@drbd2 ~]# drbdadm create-md web


Writing meta data...


initializing activity log


NOT initialized bitmap


New drbd meta data block successfully created.


8.啓動drbd服務


注意兩個節點要一起啓動,否則在啓動時會處於一直等待狀態


[root@drbd1 ~]# service drbd start


[root@drbd2 ~]# service drbd start


9.查看節點狀態


在節點一上查看


[root@drbd1 ~]# drbd-overview


0:web Connected Secondary/Secondary Inconsistent/Inconsistent C r----


在節點二上查看


[root@drbd2 ~]# drbd-overview


0:web Connected Secondary/Secondary Inconsistent/Inconsistent C r----


web:資源名


Secondary/Secondary:自身狀態/另外節點狀態


由上面的兩個節點的狀態可看到,兩個節點都是備用節點,我們需要手動調整


10.drbd1.a.com調整爲主節點


[root@drbd1 ~]# drbdadm -- --overwrite-data-of-peer primary web


11.再次查看狀態


節點一


[root@drbd1 ~]# drbd-overview


0:web Connected Primary/Secondary UpToDate/UpToDate C r----


節點二


[root@drbd2 ~]# drbd-overview


0:web Connected Secondary/Primary UpToDate/UpToDate C r----


可以看出drbd1.a.com已經成爲主節點了


12.在主節點上創建文件系統


[root@drbd1 ~]# mkfs.ext3 -L drbdweb /dev/drbd0 L:卷名


13.測試


1> 在主節點上創建掛載點,掛載後,寫入一個文件


[root@drbd1 ~]# mkdir /mnt/drbd


[root@drbd1 ~]# mount /dev/drbd0 /mnt/drbd


[root@drbd1 ~]# cd /mnt/drbd


[root@drbd1 drbd]# touch index.html


[root@drbd1 drbd]# ll


total 16


-rw-r--r-- 1 root root 0 Jan 20 18:09 index.html


drwx------ 2 root root 16384 Jan 20 18:07 lost+found


[root@drbd1 drbd]#


2> drbd1.a.com配置成從節點,將drbd2.a.com配置成主節點


節點一


[root@drbd1 drbd]# cd


[root@drbd1 ~]#


[root@drbd1 ~]# umount /mnt/drbd


[root@drbd1 ~]# drbdadm secondary web


[root@drbd1 ~]# drbdadm role web


Secondary/Primary


[root@drbd1 ~]#


節點二


[root@drbd2 ~]# drbdadm primary web


[root@drbd2 ~]# drbd-overview


0:web Connected Primary/Secondary UpToDate/UpToDate C r----


3> 在節點二掛載,查看是否有內容


[root@drbd2 ~]# mkdir /mnt/drbd


[root@drbd2 ~]# mount /dev/drbd0 /mnt/drbd


[root@drbd2 ~]# ll /mnt/drbd/


total 16


-rw-r--r-- 1 root root 0 Jan 20 18:09 index.html //可以看到已經寫入成功


drwx------ 2 root root 16384 Jan 20 18:07 lost+found








.安裝heartbeat文件



軟件環境


heartbeat-2.1.4-9.el5.i386.rpm


heartbeat-devel-2.1.4-9.el5.i386.rpm


heartbeat-gui-2.1.4-9.el5.i386.rpm


heartbeat-pils-2.1.4-10.el5.i386.rpm


heartbeat-stonith-2.1.4-10.el5.i386.rpm


libnet-1.1.4-3.el5.i386.rpm


perl-MailTools-1.77-1.el5.noarch.rpm


1.安裝heartbeat主文件


[root@node1 ~]# cd heartbeat/


[root@node1 heartbeat]# yum localinstall * --nogpgcheck


[root@node1 ~]# cd /usr/share/doc/heartbeat-2.1.4/


[root@node1 heartbeat-2.1.4]# cp authkeys haresources ha.cf /etc/ha.d/


[root@node1 heartbeat-2.1.4]# vim ha.cf


# 日誌


#logfile /var/log/ha-log


#logfacility local0


# 心跳監測時間


#keepalive 2


# 死亡時間


#deadtime 5


# 服務器正常後由主服務器接管資源,另一臺服務器放棄該資源


auto_failback off



94 bcast eth1 //產生廣播監聽eth1


213 node node1.a.com //定義節點


214 node node2.a.com


2.驗證使用md5 認證密文


[root@node1 ~]# echo "123" | openssl md5


ba1f2511fc30423bdbb183fe33f3dd0f


[root@node1 heartbeat-2.1.4]# vim authkeys


auth 3


3 md5 ba1f2511fc30423bdbb183fe33f3dd0f


[root@node1 ha.d]# chmod 600 authkeys //修改權限


修改資源文件/etc/ha.d/haresources,定義HA羣集的資源


[root@node1 ha.d]# vim haresources


45 node1.a.com IPaddr::192.168.2.100/24/eth0 drbddisk::web Filesystem::/dev/drbd0::/mnt/drbd::ext3 killnfsd


注:該文件內IPaddr,Filesystem等腳本存放路徑在/etc/ha.d/resource.d/,也可在該目錄下存放服務啓動腳本(例如:mysql,www,將相同腳本名稱添加到/etc/ha.d/haresources內容中,從而跟隨heartbeat啓動而啓動該腳本。




IPaddr::192.168.2.100/24/eth0:用IPaddr腳本配置浮動VIP


drbddisk::r0:用drbddisk腳本實現DRBD主從節點資源組的掛載和卸載


Filesystem::/dev/drbd0::/mnt/drbd::ext3:用Filesystem腳本實現磁盤掛載和卸載





3.手工創建文件killnfsd


編輯腳本文件killnfsd,用來重啓NFS服務:


注:因爲NFS服務切換後,必須重新mount NFS共享出來的目錄,否則會報錯(待驗證)


[root@node2 ha.d]# vim resource.d/killnfsd


添加:killall -9 nfsd;


/ etc/init.d/nfs restart;


exit 0


[root@drbd1 ha.d]# chmod 755 resource.d/killnfsd


.配置NFS服務共享


1.編寫共享



[root@node1 ~]# vim /etc/exports


/mnt/drbd 192.168.2.0/24(rw,sync)


2. 導出共享清單


[root@drbd1 ha.d]# exportfs -rv


exporting 192.168.2.10/24:/mnt/drbd


3. 修改nfs啓動腳本


[root@drbd1 ha.d]# vim /etc/init.d/nfs //修改如下


122 killproc nfsd -9


Node2節點於node1配置基本一樣需要做同node1一樣的操作


4.啓動node1.a.com節點的heartbeat的服務:


# service heartbeat start


啓動node2.a.com節點的heartbeat的服務:


# service heartbeat start


5.查看heartbeat兩節點的狀態:


[root@node1 ~]# drbd-overview


193858443.png

193930514.png



193954989.png


.測試:


1. 開啓一個客戶端:


配置一個臨時地址: # ifconfig eth0 192.168.2.16


創建一個掛載點:


# mkdir /mnt/nfs # mount 192.168.2.100:/mnt/drbd /mnt/nfs


查看狀態


mount


2 heartbeat正常運行時: 查看NFS網絡文件系統:


[root@clent ~]# cd /mnt/nfs


[root@clent nfs]# ll


總計 16


-rw-r--r-- 1 root root 0 10-27 16:14 index.html


drwx------ 2 root root 16384 10-27 16:12 lost+found


3.node1.a.com中將heartbeat服務關閉:


[root@node1 ~]# service heartbeat stop


[root@node2 ~]# drbd-overview


0:web Connected Primary/Secondary UpToDate/UpToDate C r---- /mnt/drbd ext3 950M 18M 885M 2%


194030393.png


通過上述案例可以實現高可用性,以及通過heartbeart控制DRDB的自動切換,而且保證文件系統的高可用性。







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