Heartbeat+nfs+drbd(ubuntu)

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

 

第二臺服務器上面做同樣的操作

+++++++++++++++++++++++++++++++++++++++++++

 

3drbd配置文件

+++++++++++++++++++++++++++++++++++++++++++++++++

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  

 

 

 

 

2haresources配置內容;

 

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

###解析#####
    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. 驗證

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章