高可用性集群解釋:
一般是指當集群中有某個節點失效的情況下,其上的任務會自動轉移到其他正常的節點上。還指可以將集群中的某節點進行離線維護再上線,該過程並不影響整個集群的運行。
今天來做個Heartbeat+DRBD+NFS的高可用文件系統
1、實驗VMware虛擬機2台 同時安裝CentOS 6.6 x86_64的系統
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
#測試機1
[root@ZhongH6100 ~]
# ifconfig | sed -rn '/^[^ \t]/{N;s/(^[^ ]*).*addr:([^ ]*).*/\1 \2/p}' | awk '$2!~/^192\.168|^10\.|^127|^0|^$/{print $1"="$2}'
eth0=172.16.6.100
eth1=172.16.6.101
[root@ZhongH6100 ~]
# hostname
ZhongH6100.wxjr.com.cn
[root@ZhongH6100 ~]
# cat /etc/centos-release
CentOS release 6.6 (Final)
[root@ZhongH6100 ~]
#
#測試機2
[root@ZhongH7100 ~]
# ifconfig | sed -rn '/^[^ \t]/{N;s/(^[^ ]*).*addr:([^ ]*).*/\1 \2/p}' | awk '$2!~/^192\.168|^10\.|^127|^0|^$/{print $1"="$2}'
eth0=172.16.7.100
eth1=172.16.7.101
[root@ZhongH7100 ~]
# hostname
ZhongH7100.wxjr.com.cn
[root@ZhongH7100 ~]
# cat /etc/centos-release
CentOS release 6.6 (Final)
[root@ZhongH7100 ~]
#
|
2、修改主機名、指定hostname能被兩主機互相訪問、同步時間 #下面實驗的時候大家仔細看命令是在哪個服務器上執行的仔細區分
是[root@ZhongH6100 ~]還是[root@ZhongH7100 ~]
如果是[root@ZhongH100 ~]那么就是兩台機器都需要運行的
|
1
2
3
4
5
6
7
8
|
[root@ZhongH6100 ~]
# sed -ri 's/^(HOSTNAME=).*/\1ZhongH6100.wxjr.com.cn/' /etc/sysconfig/network
[root@ZhongH6100 ~]
# hostname ZhongH6100.wxjr.com.cn
[root@ZhongH7100 ~]
# sed -ri 's/^(HOSTNAME=).*/\1ZhongH7100.wxjr.com.cn/' /etc/sysconfig/network
[root@ZhongH7100 ~]
# hostname ZhongH7100.wxjr.com.cn
[root@ZhongH6100 ~]
# echo "172.16.7.100 ZhongH7100.wxjr.com.cn ZhongH7100" >> /etc/hosts
[root@ZhongH7100 ~]
# echo "172.16.6.100 ZhongH6100.wxjr.com.cn ZhongH6100" >> /etc/hosts
#下面這里就不單獨做世界同步服務器了 直接ntp來做網絡同步
[root@ZhongH100 ~]
# echo "*/5 * * * * `which ntpdate` pool.ntp.org >/dev/null 2>&1" >> /var/spool/cron/root
|
3、安裝DRBD
DRBD簡介 DRBD的全稱為:DistributedReplicatedBlockDevice(DRBD)分布式塊設備復制DRBD是由內核模塊和相關腳本而構成,用以構建高可用性的集群。其實現方式是通過網絡來鏡像整個設備。它允許用戶在遠程機器上建立一個本地塊設備的實時鏡像。與心跳連接結合使用,也可以把它看作是一種網絡RAID。 DRBD工作機制 Drbd負責接收數據,把數據寫到本地磁盤,然后發送給另一個主機。另一個主機再將數據存到自己的磁盤中。目前,drbd每次只允許對一個節點進行讀寫訪問,這對於通常的故障切換高可用性集群來講已經足夠用了。以后的版本將支持兩個節點進行讀寫存取。 DRBD協議說明 A數據一旦寫入磁盤並發送到網絡中就認為完成了寫入操作。 B收到接收確認就認為完成了寫入操作。 C收到寫入確認就認為完成了寫入操作 DRBD官方下載地址:http://oss.linbit.com/drbd/
①、准備工作
|
1
2
3
4
5
|
[root@ZhongH100 ~]
# yum clean all && yum makecache
[root@ZhongH100 ~]
# yum groupinstall "Development tools" "Server Platform Development" -y && yum update -y
[root@ZhongH100 ~]
# uname -r #查看內核版本
2.6.32-504.16.2.el6.centos.plus.x86_64
[root@ZhongH100 ~]
# yum install kernel-devel kernel-headers flex #注意:安裝kernel-devel一定要和你uname -r 看到的內核版本一致
|
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
[root@ZhongH100 ~]
# cd /tmp && wget http://www.dwhd.org/wp-content/uploads/2015/05/drbd-8.4.3.tar.gz
[root@ZhongH100 tmp]
# tar xf drbd-8.4.3.tar.gz
[root@ZhongH100 tmp]
# cd drbd-8.4.3
[root@ZhongH6100 drbd-8.4.3]
# ./configure --prefix=/usr/local/drbd --sysconfdir=/etc/drbd \
--datarootdir=
/usr/local/share/
--with-utils --with-km
#--with-km是啟用內核模塊
[root@ZhongH100 drbd-8.4.3]
# make KDIR=/usr/src/kernels/`uname -r`/
[root@ZhongH100 drbd-8.4.3]
# make install
[root@ZhongH100 drbd-8.4.3]
# mkdir -p /usr/local/drbd/var/run/drbd
[root@ZhongH100 drbd-8.4.3]
# cp -a /etc/drbd/rc.d/init.d/drbd /etc/rc.d/init.d/
[root@ZhongH100 drbd-8.4.3]
# chkconfig --add drbd
[root@ZhongH100 drbd-8.4.3]
# chkconfig drbd on
[root@ZhongH100 drbd-8.4.3]
# cd drbd
[root@ZhongH100 drbd]
# make clean
[root@ZhongH100 drbd]
# make KDIR=/usr/src/kernels/`uname -r`/
[root@ZhongH100 drbd]
# cp drbd.ko /lib/modules/`uname -r`/kernel/lib/
[root@ZhongH100 drbd]
# modprobe drbd
[root@ZhongH100 drbd]
# lsmod | grep drbd #查看模塊是否加載成功
drbd 310172 0
libcrc32c 1246 1 drbd
|
③、准備同步使用的磁盤 准備一個分區以備后面實驗用,下面是我在sdb磁盤上新建了一個sdb1的主分區大小事30G
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
[root@ZhongH100 drbd]
# dd if=/dev/zero of=/dev/sdb1 bs=1M count=1 情況sdb磁盤上的分區表
[root@ZhongH100 drbd]
# fdisk /dev/sdb
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (
command
'c'
) and change display
units
to
sectors (
command
'u'
).
Command (m
for
help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-7832, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-7832, default 7832): +30G
Command (m
for
help): p
Disk
/dev/sdb
: 64.4 GB, 64424509440 bytes
255 heads, 63 sectors
/track
, 7832 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical
/physical
): 512 bytes / 512 bytes
I
/O
size (minimum
/optimal
): 512 bytes / 512 bytes
Disk identifier: 0x000a8ddb
Device Boot Start End Blocks Id System
/dev/sdb1
1 3917 31463271 83 Linux
Command (m
for
help): w
The partition table has been altered!
Calling ioctl() to re-
read
partition table.
Syncing disks.
[root@ZhongH100 drbd]
#
|
④、制作環境變量文件、備份原始配置文件、修改配置文件、定義節點上的資源
|
1
2
3
4
5
|
[root@ZhongH100 drbd]
# cd /etc/drbd/drbd.d
[root@ZhongH100 drbd.d]
# pwd
/etc/drbd/drbd
.d
[root@ZhongH100 drbd.d]
# echo "export PATH=/usr/local/drbd/sbin:\$PATH" > /etc/profile.d/drbd.8.4.3.sh
[root@ZhongH100 drbd.d]
# . /etc/profile.d/drbd.8.4.3.sh
|
|
1
2
3
4
5
|
[root@ZhongH100 drbd.d]
# cp global_common.conf global_common.conf_`date +%Y%m%d`_backup
[root@ZhongH100 drbd.d]
# ls -l
總用量 8
-rw-r--r-- 1 root root 1836 5月 23 21:36 global_common.conf
-rw-r--r-- 1 root root 1836 5月 23 21:45 global_common.conf_20150523_backup
|
⑤、修改全局配置文件
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
[root@ZhongH100 drbd.d]
# :>global_common.conf
#然后將配置文件改成下面的
[root@ZhongH100 drbd.d]
# grep -Ev '(^#|^\s+#)' global_common.conf
global {
usage-count no;
}
common {
protocol C;
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 120;
degr-wfc-timeout 120;
}
disk {
on-io-error detach;
fencing resource-only;
}
net {
cram-hmac-alg
"sha1"
;
shared-secret
"mydrbdlab"
;
}
syncer {
rate 100M;
}
}
|
⑥、定義節點上的資源
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
[root@ZhongH100 drbd.d]
# vi web.res #寫入下面的內容,具體視情況做更改
resource web {
#這個web是定義資源的名字
on ZhongH6100.wxjr.com.cn {
#on開頭,后面是主機名稱
device
/dev/drbd0
;
#drbd設備名稱
disk
/dev/sdb1
;
#drbd0使用的磁盤分區為sdb1
address 172.16.6.101:7789;
#設置drbd監聽地址與端口
meta-disk internal;
}
on ZhongH7100.wxjr.com.cn {
#on開頭,后面是主機名稱
device
/dev/drbd0
;
#drbd設備名稱
disk
/dev/sdb1
;
#drbd0使用的磁盤分區為sdb1
address 172.16.7.101:7789;
#設置drbd監聽地址與端口
meta-disk internal;
}
}
|
⑦、初始化資源
|
1
2
3
4
5
|
[root@ZhongH100 drbd.d]
# drbdadm create-md web
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.
|
⑧、啟動DRBD服務
|
01
02
03
04
05
06
07
08
09
10
11
12
|
[root@ZhongH100 drbd.d]
# service drbd restart
Stopping all DRBD resources: .
Starting DRBD resources: [
create res: web
prepare disk: web
adjust disk: web
adjust net: web
]
outdated-wfc-timeout has to be shorter than degr-wfc-timeout
outdated-wfc-timeout implicitly
set
to degr-wfc-timeout (120s)
.
[root@ZhongH100 drbd.d]
#
|
|
1
2
3
|
[root@ZhongH6100 drbd.d]
# drbdadm role web
Secondary
/Secondary
[root@ZhongH6100 drbd.d]
#
|
|
1
2
3
|
[root@ZhongH7100 drbd.d]
# drbdadm role web
Secondary
/Secondary
[root@ZhongH7100 drbd.d]
#
|
由於默認沒有主次節點之分,因而需要設置兩個主機的主次節點,選擇需要設置為主節點的主機,然后執行如下命令:
drbdadm -- --overwrite-data-of-peer primary web #命令解釋:調整當前節點上的web資源為主節點

⑨、調整172.16.6.101/172.16.6.100也就是node1也主節點
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
[root@ZhongH6100 drbd.d]
# drbdadm role web
Secondary
/Secondary
[root@ZhongH6100 drbd.d]
# drbdadm -- --overwrite-data-of-peer primary web
[root@ZhongH6100 drbd.d]
# drbd-overview
0:web
/0
SyncSource Primary
/Secondary
UpToDate
/Inconsistent
C r---n-
[>....................]
sync
'ed: 1.4% (30328
/30724
)M
[root@ZhongH6100 drbd.d]
# cat /proc/drbd
version: 8.4.3 (api:1
/proto
:86-101)
GIT-
hash
: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@ZhongH6100.wxjr.com.cn, 2015-05-23 21:36:33
0: cs:SyncSource ro:Primary
/Secondary
ds:UpToDate
/Inconsistent
C r---n-
ns:2462744 nr:0 dw:0 dr:2466464 al:0 bm:150 lo:0 pe:3 ua:3 ap:0 ep:1 wo:f oos:29001596
[>...................]
sync
'ed: 7.9% (28320
/30724
)M
finish: 0:04:44 speed: 101,772 (91,136) K
/sec
[root@ZhongH6100 drbd.d]
# drbdadm role web
Primary
/Secondary
[root@ZhongH6100 drbd.d]
# cat /proc/drbd
version: 8.4.3 (api:1
/proto
:86-101)
GIT-
hash
: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@ZhongH6100.wxjr.com.cn, 2015-05-23 21:36:33
0: cs:SyncSource ro:Primary
/Secondary
ds:UpToDate
/Inconsistent
C r-----
ns:9051136 nr:0 dw:0 dr:9051808 al:0 bm:551 lo:3 pe:8 ua:3 ap:0 ep:1 wo:f oos:22419324
[====>...............]
sync
'ed: 28.8% (21892
/30724
)M
finish: 0:04:06 speed: 90,776 (74,732) K
/sec
#由此可見:進度已經完成了28.8%,傳輸速度大概70M/S
#注:ds是磁盤狀態信息 dw是磁盤寫信息 dr是磁盤讀信息
|
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
[root@ZhongH6100 drbd.d]
# drbdadm cstate web
SyncSource
#SyncSource:以本節點為同步源的同步正在進行
#資源的連接狀態;一個資源可能有以下連接狀態中的一種
#StandAlone 獨立的:網絡配置不可用;資源還沒有被連接或是被管理斷開(使用 drbdadm disconnect 命令),或是由於出現認證失敗或是腦裂的情況
#Disconnecting 斷開:斷開只是臨時狀態,下一個狀態是StandAlone獨立的
#Unconnected 懸空:是嘗試連接前的臨時狀態,可能下一個狀態為WFconnection和WFReportParams
#Timeout 超時:與對等節點連接超時,也是臨時狀態,下一個狀態為Unconected懸空
#BrokerPipe:與對等節點連接丟失,也是臨時狀態,下一個狀態為Unconected懸空
#NetworkFailure:與對等節點推動連接后的臨時狀態,下一個狀態為Unconected懸空
#ProtocolError:與對等節點推動連接后的臨時狀態,下一個狀態為Unconected懸空
#TearDown 拆解:臨時狀態,對等節點關閉,下一個狀態為Unconected懸空
#WFConnection:等待和對等節點建立網絡連接
#WFReportParams:已經建立TCP連接,本節點等待從對等節點傳來的第一個網絡包
#Connected 連接:DRBD已經建立連接,數據鏡像現在可用,節點處於正常狀態
#StartingSyncS:完全同步,有管理員發起的剛剛開始同步,未來可能的狀態為SyncSource或PausedSyncS
#StartingSyncT:完全同步,有管理員發起的剛剛開始同步,下一狀態為WFSyncUUID
#WFBitMapS:部分同步剛剛開始,下一步可能的狀態為SyncSource或PausedSyncS
#WFBitMapT:部分同步剛剛開始,下一步可能的狀態為WFSyncUUID
#WFSyncUUID:同步即將開始,下一步可能的狀態為SyncTarget或PausedSyncT
#SyncSource:以本節點為同步源的同步正在進行
#SyncTarget:以本節點為同步目標的同步正在進行
#PausedSyncS:以本地節點是一個持續同步的源,但是目前同步已經暫停,可能是因為另外一個同步正在進行或是使用命令(drbdadm pause-sync)暫停了同步
#PausedSyncT:以本地節點為持續同步的目標,但是目前同步已經暫停,這可以是因為另外一個同步正在進行或是使用命令(drbdadm pause-sync)暫停了同步
#VerifyS:以本地節點為驗證源的線上設備驗證正在執行
#VerifyT:以本地節點為驗證目標的線上設備驗證正在執行
|
⑩、在主節點上創建文件系統、掛載主節點上的文件系統、在主節點分區中新建個文件
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
[root@ZhongH6100 drbd.d]
# mke2fs -t ext4 -L drbdweb /dev/drbd0
mke2fs 1.41.12 (17-May-2010)
文件系統標簽=drbdweb
操作系統:Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1966560 inodes, 7865567 blocks
393278 blocks (5.00%) reserved
for
the super user
第一個數據塊=0
Maximum filesystem blocks=4294967296
241 block
groups
32768 blocks per group, 32768 fragments per group
8160 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
正在寫入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@ZhongH6100 drbd.d]
# mkdir /DRBD
[root@ZhongH6100 drbd.d]
# mount /dev/drbd0 /DRBD/
[root@ZhongH6100 drbd.d]
# echo -e "Hello World\nLegion\t$(date "+%Y-%m-%d %H:%M:%S")" > /DRBD/testDRBDfile
[root@ZhongH6100 drbd.d]
# cat /DRBD/testDRBDfile
Hello World
Legion 2015-05-23 22:45:07
[root@ZhongH6100 drbd.d]
#
|
⑪、更換node1為從節點、node2為主節點 卸載DRBD分區且更換node1為從節點
|
1
2
3
4
5
|
[root@ZhongH6100 drbd.d]
# umount /DRBD/
[root@ZhongH6100 drbd.d]
# drbdadm secondary web
[root@ZhongH6100 drbd.d]
# drbdadm role web
Secondary
/Secondary
[root@ZhongH6100 drbd.d]
#
|
|
1
2
3
4
5
6
|
[root@ZhongH7100 drbd.d]
# drbdadm primary web
[root@ZhongH7100 drbd.d]
# drbdadm role web
Primary
/Secondary
[root@ZhongH7100 drbd.d]
# drbd-overview
0:web
/0
Connected Primary
/Secondary
UpToDate
/UpToDate
C r-----
[root@ZhongH7100 drbd.d]
#
|
⑫、掛載節點二,查看文件是否同步了 HOHO~~
|
01
02
03
04
05
06
07
08
09
10
11
12
|
[root@ZhongH7100 drbd.d]
# mkdir /DRBD
[root@ZhongH7100 drbd.d]
# mount /dev/drbd0 /DRBD
[root@ZhongH7100 drbd.d]
# ls -l /DRBD
總用量 20
drwx------ 2 root root 16384 5月 23 22:41 lost+found
-rw-r--r-- 1 root root 39 5月 23 22:45 testDRBDfile
[root@ZhongH7100 drbd.d]
# date
2015年 05月 23日 星期六 22:55:00 CST
[root@ZhongH7100 drbd.d]
# cat /DRBD/testDRBDfile
Hello World
Legion 2015-05-23 22:45:07
[root@ZhongH7100 drbd.d]
#
|








