高可用性集群解釋:
一般是指當集群中有某個節點失效的情況下,其上的任務會自動轉移到其他正常的節點上。還指可以將集群中的某節點進行離線維護再上線,該過程並不影響整個集群的運行。
今天來做個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]
#
|