Heartbeat爲我們提供了廉價的、可伸縮的高可用集羣方案。我們通過heartbeat+drbd+nfs在Linux下創建一個高可用(HA)的集羣服務器。
DRBD是一種塊設備,可以被用於高可用(HA)之中。它類似於一個網絡RAID-1功能。當你將數據寫入本地文件系統時,數據還將會被髮送到網絡中另一臺主機上。以相同的形式記錄在一個文件系統中。本地(主節點)與遠程主機(備節點)的數據可以保證實時同步。當本地系統出現故障時,遠程主機上還會保留有一份相同的數
拓撲圖:
一. 安裝前準備
實現高可用性羣集,兩個節點配置文件需要保持一致
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
node1與node2 的配置同樣。
[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配置是一樣的
在node1 與node2上初始化資源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
五.測試:
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%
通過上述案例可以實現高可用性,以及通過heartbeart控制DRDB的自動切換,而且保證文件系統的高可用性。