歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux配置 >> DRDB+Heartbeat群集配置

DRDB+Heartbeat群集配置

日期:2017/2/27 14:58:49   编辑:Linux配置

Distributed Replicated Block Device(DRBD)是一個用軟件實現的、無共享的、服務器之間鏡像塊設備內容的存儲復制解決方案。

數據鏡像:實時、透明、同步(所有服務器都成功後返回)、異步(本地服務器成功後返回)

DRBD的核心功能通過Linux的內核實現,最接近系統的IO棧,但它不能神奇地添加上層的功能比如檢測到EXT3文件系統的崩潰。

DRBD功能

單主模式:典型的高可靠性集群方案。

復主模式:需要采用共享cluster文件系統,如GFS和OCFS2。用於需要從2個節點並發訪問數據的場合,需要特別配置。

復制模式:3種模式:

協議A:異步復制協議。本地寫成功後立即返回,數據放在發送buffer中,可能丟失。

協議B:內存同步(半同步)復制協議。本地寫成功並將數據發送到對方後立即返回,如果雙機掉電,數據可能丟失。

協議C:同步復制協議。本地和對方寫成功確認後返回。如果雙機掉電或磁盤同時損壞,則數據可能丟失。

一般用協議C。選擇協議將影響流量,從而影響網絡時延。

有效的同步:按線性而不是當初寫的順序同步塊。同步損壞時間內的不一致數據。

在線的設備檢驗:一端順序計算底層存儲,得到一個數字,傳給另一端,另一端也計算,如果不一致,則稍後進行同步。建議一周或一月一次。

復制過程的一致性檢驗:加密後,對方若不一致則要求重傳。防止網卡、緩沖等問題導致位丟失、覆蓋等錯誤。

Split brain:當網絡出現暫時性故障,導致兩端都自己提升為Primary。兩端再次連通時,可以選擇email通知,建議手工處理這種情況。

當數據寫在緩沖區裡,沒有真正寫到磁盤上時,系統崩潰會導致數據丟失。而disk flush是指將數據真正寫到磁盤上後才返回。

有些帶電池的硬盤控制器,如帶電池的帶點出Dell PERC Raid卡,不但自帶緩存而且自帶電池,會在系統意外斷電或者崩潰後將最後的數據寫入磁盤,對這類控制器,可以使用disk flush,從而在保證性能的前提下提高了數據的安全性。

磁盤錯誤處理策略:

傳遞給上層:可能造成文件系統remounting成只讀,不推薦。

對上層屏蔽:用另一端的相應塊進行讀寫,應用不中斷。可以在任何方便的時候再切換。

不一致的(inconsistent)數據:不能以任何方式訪問和使用的數據。如正在同步時的目標節點數據,這些數據不能識別,不能mount,甚至不能通過磁盤的自動檢測。

過期的(outdated)數據:在備機上的數據,與主機一致,但不需要同步。如主備機網絡中斷後,備機上的數據就是過期的。

DRBD有接口允許應用程序在網絡中斷時將備機數據標識為過期的。DRBD拒絕將這個節點提升為主角色。這些管理接口在Heartbeat框架上得到完整實現。

一旦過期資源的復制鏈接恢復,他的過期標志自動清除,接著進行後台同步。

工作原理

在高可用(HA)中使用DRBD功能,可以代替使用一個共享盤陣.因為數據同時存在於本地主機和遠程主機上,

切換時,遠程主機只要使用它上面的那份備份數據,就可以繼續進行服務了.

實驗步驟:

DRBD

一、准備環境

1.系統環境

# uname –r //內核版本
2.6.18-164.el5
# cat /etc/redhat-release //查看系統信息
Red Hat Enterprise Linux Server release 5.4 (Tikanga)

2.修改主機名稱等

在節點1上進行修改

# hostname wj1.a.com //修改主機名稱
# vim /etc/sysconfig/network //修改文件

NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=wj1.a.com

之後退出再次登陸。

# hostname //查看名稱
wj1.a.com
# vim /etc/hosts //修改hosts文件

127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.2.1 wj1.a.com
192.168.2.3 wj 2.a.com

在節點2上進行修改

# hostname wj2.a.com //修改主機名稱
# vim /etc/sysconfig/network //修改文件

NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=wj2.a.com

之後退出再次登陸。

# hostname //查看名稱
wj2.a.com
# vim /etc/hosts //修改hosts文件

127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.2.1 wj1.a.com
192.168.2.3 wj2.a.com

3.安裝所需的文件

預先將所需的文件上傳到管理員家目錄。以下操作在wj1.a.com和wj2.a.com上都進行操作。

# yum localinstall *.rpm --nogpgcheck –y //使用yum進行安裝可以有效的解決包的依賴性問題。

4.同步時鐘

要求兩個節點上的始終必須要一致。

# hwclock -s //同步始終

5.加載模塊

在兩個節點上都去進行如下操作。

# modprobe drbd //加載drbd模塊
#

# lsmod |grep drbd //查看模塊
drbd 228528 0

6.創建新分區

以下操作要求在wj1.a.com和wj2.a.com上都進行。同時要求兩個節點所創建的新分區大小一致。

# fdisk -l //查看有關情況

Disk /dev/sda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1288 10241437+ 83 Linux
/dev/sda3 1289 1415 1020127+ 82 Linux swap / Solaris
# fdisk /dev/sda

The number of cylinders for this disk is set to 2610.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): n //創建新分區
Command action
e extended
p primary partition (1-4)
p //創建主分區
Selected partition 4
First cylinder (1416-2610, default 1416):
Using default value 1416
Last cylinder or +size or +sizeM or +sizeK (1416-2610, default 2610): +1G //兩個節點的分區大小要一致。

Command (m for help): p //顯示

Disk /dev/sda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1288 10241437+ 83 Linux
/dev/sda3 1289 1415 1020127+ 82 Linux swap / Solaris
/dev/sda4 1416 1538 987997+ 83 Linux

Command (m for help): w 保存

# fdisk -l //再次查看

Disk /dev/sda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1288 10241437+ 83 Linux
/dev/sda3 1289 1415 1020127+ 82 Linux swap / Solaris
/dev/sda4 1416 1538 987997+ 83 Linux
#

# partprobe /dev/sda //重新加載

二、DRBD配置

以下操作要求在節點wj1和wj2上都做。

1.修改conf配置文件

# cd /usr/share/doc/drbd83-8.3.8/
#ls
ChangeLog COPYING drbd.conf file.list README

#cp drbd.conf /etc/ 復制配置文件到相關目錄
cp: overwrite `/etc/drbd.conf'? y
#cd /etc/drbd.d/
# ls
global_common.conf
# cp -p global_common.conf global_common.conf.bak //最好對文件進行備份
# vim global_common.conf

//第一列是行的序號

1 global {
2 usage-count no;
3 }
4
5 common {
6 protocol C;
7 startup {

8 wfc-timeout 120;

9 degr-wfc-timeout 120;

10 }

11 disk {

12 on-io-error detach;

13 fencing resource-only;

14 }

15 net {

16 cram-hmac-alg "sha1";

17 shared-secret "mydrbdlab";
18 }
19 syncer {
20 rate 100M;
21 }
22 }

2.修改資源文件

# cd /etc/drbd.d/

# vim web.res

1 resource web {
2 on wj1.a.com {
3 device /dev/drbd0;
4 disk /dev/sda5;
5 address 192.168.2.1:7789;
6 meta-disk internal;
7 }
8 on wj2.a.com {
9 device /dev/drbd0;
10 disk /dev/sda5;
11 address 192.168.2.3:7789;
12 meta-disk internal;
13 }
14 }

3.創建資源

#drbdadm create-md web
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.

4.啟動服務、測試

創建文件系統(在主節點上實現)

mkfs -t ext3 -L drbdweb /dev/drbd0

[root@wj2 ~]# mkdir /web

[root@wj2 ~]# drbdadm primary web

[root@wj2 ~]# drbd-overview

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

[root@wj2 ~]# drbdadm role web

Primary/Secondary

[root@wj2 ~]# mount /dev/drbd0 /web

[root@wj2 web]# vim test.html

[root@wj2 ~]# umount /web

[root@wj2 ~]# drbdadm secondary web

測試,把wj2變成從的,wj1 變成主的

[root@wj1 web]# drbdadm primary web

[root@wj1 web]# mount /dev/drbd0 /web

[root@wj1 web]# ll /web

總計 20

drwx------ 2 root root 16384 10-18 00:13 lost+found

-rw-r--r-- 1 root root 18 10-17 16:28 test.html

[root@wj1 web]#

三 NFS配置

兩台服務器的nfs配置必須要一致。

1.修改相關文件

# vim /etc/exports

/web *(rw,sync,insecure,no_root_squash,no_wdelay)

2.執行相關操作。

#service portmap start && chkconfig portmap on

#service nfs start && chkconfig nfs on

3.修改nfs啟動腳本

# vim /etc/init.d/nfs

122 killproc nfsd –9

四、Heartbeat配置

Heartbeat的配置要求兩個節點的配置一致。在wj1和wj2上進行如下操作

1.復制模版文件

# cd /usr/share/doc/heartbeat-2.1.4/
# cp authkeys ha.cf haresources /etc/ha.d/

2.修改相關的配置信息

# cd /etc/ha.d/ //切換到相關目錄
# vim ha.cf

24 debugfile /var/log/ha-debug

29 logfile /var/log/ha-log

34 logfacility local0

48 keepalive 2

56 deadtime 10

76 udpport 694

121 bcast eth0 //此行可以添加在任意一行

157 auto_failback off

211 node wj1.a.com
212 node wj2.a.com

3.修改資源文件

# echo "node1.a.com IPaddr::192.168.2.2/24/eth0 drbddisk::web Filesystem::/dev/drbd0::/web::ext3 killnfsd">>/etc/ha.d/haresources

4.修改key文件

# vim authkeys

23 auth 1
24 1 crc

5.手工創建文件

# cd /etc/ha.d/resource.d/
# echo "killall -9 nfsd ; /etc/init.d/nfs restart ; exit 0" >>/etc/ha.d/resource.d/killnfsd

6.修改配置文件的權限

# chmod 600 /etc/ha.d/authkeys
# chmod 755 /etc/ha.d/resource.d/killnfsd

7.啟動服務

# service heartbeat start

五、測試

使用客戶端進行測試

1.掛載

#mkdir /mnt/nfs
#cd
#mount 192.168.2.2:/web /mnt/nfs

2.創建測試腳本文件

#vim /mnt/test.sh
//此配置腳本文件的主要作用是為了反復的讀寫操作

while true

do

echo --->trying touch x:`date`

touch x

echo <---done touch x:`date`

echo

sleep 2

done

~

3.執行測試文件

#cd /mnt/nfs/
# bash /mnt/test.sh

--->trying touch x:2012年 10月 17日 星期三 21:21:09 CST
<---done touch x: 2012年 10月 17日星期三 21:21:09 CST

//讓客戶端一直執行腳本文件,到服務器節點node1上關閉heartbeat服務,之後在客戶端會發現丟棄現象,之後文件系統又恢復正常。

--->trying touch x: 2012年 10月 17日 星期三 21:23:08 CST
touch: cannot touch `x': Stale NFS file handle
<-----done touch x: 2012年 10月 17日星期三 21:23:08 CST

--->trying touch x: 2012年 10月 17日星期三 21:23:43 CST
<-----done touch x: 2012年 10月 17日星期三 21:23:43 CST

Copyright © Linux教程網 All Rights Reserved