Heartbeat+nfs+drbd
前言說明:
heartbeat+nfs+drbd
背景:
現在好多公司爲了省錢,都沒有存儲服務器,但是企業還要求雙機熱備,數據的快速讀寫和數據的可靠性。
現在公司大部分架構是這個樣子的: 前端兩臺web服務器做ha單臺工作(熱備)比如說是兩臺nginx,後面就是真正的應用服務器,數據都放在本地然後用rsync同步。但是rsync同步有弊端實時性差,耗費資源,佔用系統性能。
大致過程描述和說明:
當client訪問web server(nginx)請求數據,nginx處理請求(分發),第一次請求會被分到A主機,第二次請求就會被分到B主機,A和B可以是java應用服務器也可以是php應用服務器或者是web服務器都可以(返回請求數據的應用服務器)。如果是A,會從A本地讀取數據或者寫入數據。但是如果client一個星期後再次訪問就有可能被分到B,這時就會出問題,因爲B上面沒有A上面的數據。
解決辦法有很多種,使用存儲是最好解決方案:
1.使用IBM dell 等硬件存儲服務器。(有錢就用,相對來說沒啥缺點)
2.使用 rsync 同步。 (如果數據庫不太重要,不要求實時性的可以使用)
3.使用nfs mfs 等共享磁盤 (存在單點故障)
4.使用ha+nfs+drbd 最好的解決方案 (完美解決方案)
說明:
ha nfs drbd
ha用做vip #使用heartbeat軟件,對外提供一個虛擬ip。
nfs做共享 #nfs服務 很簡單很好配置的軟件,然後由heartbeat來控制nfs服務。
drbd做最底層的數據庫同步效率很快 #用於主機間數據塊的同步,實時同步。drbd可以自己配置主從,但是nfs必須跟drbd master在一起。最終也由heartbeat控制。
其實這個地方少了個一個監控機制,heartbeat無法監控到nfs和drbd服務(可以考慮使用heartbeat的crm工具),如果再加上監控機制那就真的完美了。
作者:消失的光年
日期:2012/08/03
具體操作步驟:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
系統ubuntu 8.0.4
Server1=192.168.1.10
Server2=192.168.1.11
Vip=192.168.1.100
1. 安裝
apt-get install heartbeat
apt-get install drbd8-utils
apt-get install nfs-kernel-server
2. 配置drbd
1)磁盤配置
+++++++++++++++++++++++++++++++++++++++++
添加一塊磁盤 /sdb
fdisk /dev/sdb
n #新建分區
P #定義爲主分區
1 #分區號
回車 #選擇設備開始的節點號 默認就行
回車 #選擇設備結束的節點號 默認就行
w #保存退出
partprobe /dev/sdb 重新讀取分區信息
%注意千萬不要使用mkfs 命令格式化磁盤分區,現在還有沒有drbd設備,文件系統要建立在drbd設備上面%
第二臺服務器上面做同樣的操作
+++++++++++++++++++++++++++++++++++++++++
2)修改主機名
+++++++++++++++++++++++++++++++++++++++++++
hostname server1 #執行hostname命令實現臨時修改主機名
echo "server1" > /etc/hostname #修改主機名配置文件實現永久修改主機名
vim /etc/hosts #增加hosts主機名解析條目,後面的drbd.conf配置文件會用到
192.168.1.10 server1
192.168.1.11 server2
第二臺服務器上面做同樣的操作
+++++++++++++++++++++++++++++++++++++++++++
3)drbd配置文件
+++++++++++++++++++++++++++++++++++++++++++++++++
cat /etc/drbd.conf
global { usage-count no; }
common { syncer { rate 100M; } }
resource drbdtest {
protocol C;
startup {
wfc-timeout 600;
degr-wfc-timeout 120;
}
disk {
on-io-error detach;
}
net {
timeout 30;
connect-int 4;
ping-int 4;
max-buffers 2048;
max-epoch-size 2048;
ko-count 0;
#on-disconnect reconnect;
cram-hmac-alg sha1;
shared-secret "FooFunFactory";
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
}
syncer {
rate 100M;
}
on server1 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.1.10:7898;
meta-disk internal;
}
on server2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.1.11:7898;
meta-disk internal;
}
}
以上是drbd.conf 在/etc下面 可以直接拷貝過去使用
第二臺服務器上面做同樣的操作
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4)創建drbd存儲設備
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
drbdadm create-md drbdtest #如果執行第一遍不成功,就再執行一次。選擇yes回車就行
/etc/init.d/drbd start
/etc/init.d/drbd status #查看drbd狀態
drbdsetup /dev/drbd0 primary -o #強制爲主
mkfs.ext3 /dev/drbd0 #格式化磁盤(必須強制爲主後纔可以執行格式化命令)
mkdir /nfs
mount /dev/drbd0 /nfs
測試下
在做第二臺服務器的時候要先停掉第一臺服務器上面drbd服務,再強制第二臺服務器爲主,然後才能格式化磁盤
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3. 配置heartbeat
1)/etc/ha.d/ha.cf配置文件
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
root@tc-nfs1:/home# cat /etc/ha.d/ha.cf
logfile /var/log/ha-log
keepalive 2
deadtime 10
warntime 5
initdead 120
udpport 694
bcast eth0
ucast eth0 192.168.1.11
auto_failback off
node server1
node server2
ping 192.168.1.254
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluste
#####配置文件ha.cf解析########
keepalive 2 //保持時間
deadtime 10 //死亡時間
warntime 5 //警告時間
initdead 120 //啓動時間
udpport 694 //使用udp的端口
bcast eth0 //心跳接口
logfile /var/log/ha-log //日誌文件
auto_failback on //失敗自動退回
node node1.a.org //節點對應的主機名,這裏面要寫所有的
node node2.a.org
2)haresources配置內容;
server1 IPaddr::192.168.1.10024/eth0 drbddisk::drbdnfs Filesystem::/dev/drbd0::/data::ext3
3)authkeys的配置內容:
cat /etc/ha.d/authkeys
auth 1
1 sha1 sss
###解析#####
1 sha1 jlasdlfladddd //這個後面的密碼可以隨意寫,也可以使用自動生成隨機數(#dd if=/dev/urandom bs=512 count=1 |md5sum )的方式來生成,但是節點之間是一樣的
4.配置nfs服務
1)nfs配置文件
cat /etc/exports
/data *(rw,sync,no_root_squash,subtree_check)
2) 啓動nfs服務
/etc/init.d/nfs-kernel-server start
5. 驗證