作者 主題: 05.利用HA+DRDB來實作『home』目錄 筆記  (閱讀 19620 次)

0 會員 與 1 訪客 正在閱讀本文。

Niko

  • 活潑的大學生
  • ***
  • 文章數: 281
  • 性別: 男
    • 檢視個人資料
在開始前,小弟主要遇到的問題就是samba PDC(BDC),因為有兩台LDAP server,採用mirror的方式互相備份,但是兩台rootdn和rootpw不一樣時,samba只會使用smb.conf裡的『ldap admin dn = 』這個參數以及設定在secrets.tdb裡的密碼去try另一台LDAP server,導致如果ldap1當機,會連不上ldap2,這個問題小弟還沒有時間去深入研究,所以....暫時就先把ldap1、ldap2兩台的rootdn和rootpw設定成相同。

這篇筆記是參考Weithenn大大的『24小時不打烊的雲端服務:專家教你用 CentOS 架設萬年不掛的伺服器』這本書,所以許多的設定主要也是從書中來的。


以下是小弟的架構,採用HA+DRBD的方式,不會因某台file server掛掉而導致使用者(linux、windows)無法存取自己的家目錄。



OS : CentOS6.3 (64位元)
eth0 : IP是由DHCP產生 (小弟有自行架設DHCP+DNS server)
eth1 : IP採用手動方式設定

DRBD是用硬碟的區塊(block)來進行同步的動作,並不是某個檔或某個資料夾,所以小弟把smb1、smb2的『home』單獨切一個分割區出來,並做成LVM,名稱為 /dev/VolGroup/lv_home (兩台都相同)。

注意事項(smb1、smb2相同) :
1. heartbeat對於叢集主機的FQDN(Fully Qualified Doamin Name)要求非常嚴格,所以DNS務必要設定正確,並確保雙方主機都可使用FQDN去ping到對方。 (192.168.1.0/24 這個網段)
2. 『/dev/VolGroup/lv_home』不要去自動掛載它,NFS、Samba等服務也不要手動開啟和開機時啟動,所有的動作都會由DRBD與HA來負責。
3. SELinux(3.7.19-155)對heartbeat這個服務目前似乎有些問題存在,所以小弟暫時先設定成permissive。
4. 加入至LDAP client中

套件 :
DRBD : drbd83-utils、kmod-drbd83 (需安裝ELRepo套件庫)
HA : heartbeat、heartbeat-devel、heartbeat-libs (需安裝EPEL套件庫)

drbd與heartbeat的設定,在叢集主機中幾乎都是一樣的,要改的東西很少,所以小弟就以smb1來當範例,smb2只說明不一樣的地方。

DRBD (drbd83-utils-8.3.13-1、kmod-drbd83-8.3.13-2)

DRDB的主設定檔為/etc/drbd.conf;為了方便管理,會將設定檔分成多個部分,並且都保存至/etc/drbd.d目錄中,主設定檔僅使用『include』將這些設定檔整合起來。

=====================drbd.conf內容=====================
# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example

include "drbd.d/global_common.conf";                #整體環境設定
include "drbd.d/*.res";                                        #資源環境設定
====================================================


smb1主機設定 :
代碼: [選擇]
[root@smb1 ~]# vim  /etc/drbd.d/global_common.conf
global  {
                   minor-count 64;
                   usage-count yes;
}

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";

                   fence-peer  "/usr/lib64/heartbeat/drbd-peer-outdater -t 5";          #OS是64位元的話才會多一個"64"

                   pri-lost  "/usr/lib/drbd/notify-pri-lost.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot     -f";

                  split-brain  "/usr/lib/drbd/notify-split-brain.sh root";

                  out-of-sync  "/usr/lib/drbd/notify-out-of-sync.sh root";
  }

     startup  {
                  wfc-timeout  60
                  degr-wfc-timeout  120;
                  outdated-wfc-timeout  2;
  }

     disk  {
                 on-io-error   detach;
                 fencing  resource-only;
  }

     net  {
                after-sb-0pri  disconnect;
                after-sb-1pri  disconnect;
                after-sb-2pri  disconnect;
                #這三段主要是設定split-brain的自動恢復機制,暫時先設定"disconnect"
  }

     syncer  {
                 rate  10M;                #資料最大同步速率,單位是Mbyte。
  }
}


一個DRBD的設備(如:/dev/drbd0),就叫做一個資源(resource),一個資源裡包含了兩台以上的主機資訊
代碼: [選擇]
[root@smb1 ~]# vim  /etc/drbd.d/home.res
resource home {              #"home"就是DRBD的資源名稱       
        on smb1 {                                              #要與『#uname -n』所顯示的相同
                device    /dev/drbd0;                      #DRBD的設備
                disk      /dev/VolGroup/lv_home;    #"/dev/drbd0"指向實際的partition "/dev/VolGroup/lv_home"
                address   192.168.100.1:7788;     #同步用的IP和port
                meta-disk internal;
        }
        on smb2 {
                device    /dev/drbd0;
                disk      /dev/VolGroup/lv_home;
                address   192.168.100.2:7788;
                meta-disk internal;
        }
}


copy這兩份設定檔到smb2
代碼: [選擇]
[root@smb1 ~]# scp  /etc/drbd.d/*  smb2:/etc/drbd.d/

建立DRBD資源(smb2也是相同做法)
在開始建立時首先要塞點東西到『/dev/VolGroup/lv_home』裡面,否則 :

Device size would be truncated, which
would corrupt data and result in
'access beyond end of device' errors.
You need to either
   * use external meta data (recommended)
   * shrink that filesystem first
   * zero out the device (destroy the filesystem)
Operation refused.

可能會出現類似的錯誤訊息。

代碼: [選擇]
[root@smb1 ~]# dd  if=/dev/zero  of=/dev/VolGroup/lv_home  bs=1M  count=1010+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00715784 s, 1.5 GB/s

建立"home"資源
代碼: [選擇]
[root@smb1 ~]# drbdadm  create-md  homeWriting meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success

兩台主機都設定好後,接下來就可以開啟drbd的服務了。(service drbd start)


觀察DRBD的狀態
代碼: [選擇]
[root@smb1 ~]# service  drbd  status drbd driver loaded OK; device status:
version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by dag@Build64R6, 2012-09-04 12:06:10
m:res       cs                    ro                                     ds                                              p     mounted     fstype
0:home    Connected      Secondary/Secondary       Inconsistent/Inconsistent        C

ds欄位狀態顯示『Inconsistent』,代表兩台主機的『/dev/drbd0』尚未開始同步。

進行同步,並把smb1提升為Primary Node(smb1設定即可)
代碼: [選擇]
[root@smb1 ~]# drbdadm  --  --overwrite-data-of-peer  primary  home
代碼: [選擇]
[root@smb1 ~]# service  drbd  status version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by dag@Build64R6, 2012-09-04 12:06:10
m:res       cs                    ro                                     ds                                              p     mounted     fstype
0:home    SyncSource     Primary/Secondary           UpToDate/Inconsistent             C
...     sync'ed:    8.0%               (4604/4996)M

上面顯示『/dev/drbd0』正在進行同步中。

當同步完成後,smb1主機上所看到的DRBD狀態應為 : ro欄位顯示Primary/Secondary,ds欄位顯示UpToDate/UpToDate。

格式化『/dev/drbd0』(smb1設定即可)
代碼: [選擇]
[root@smb1 ~]# mkfs.ext4  /dev/drbd0
測試
代碼: [選擇]
[root@smb1 ~]# mount  /dev/drbd0  /home
代碼: [選擇]
[root@smb1 ~]# df  -h /dev/drbd0          4.9G  138M  4.5G   3%  /home

代碼: [選擇]
[root@smb1 ~]# service  drbd  status drbd driver loaded OK; device status:
version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by dag@Build64R6, 2012-09-04 12:06:10
m:res       cs                    ro                                     ds                                              p     mounted     fstype
0:home    Connected      Primary/Secondary           UpToDate/UpToDate               C     /home         ext4

可看到掛載點及檔案系統格式的資訊。

到此DRBD的建置就算完成了。

設定HA之前,先把smb1、smb2加入LDAP client,並且把NFS、Samba、Samba PDC(smb1)、Samba BDC(smb2)等服務設定好。

注意事項 : 由於現在的『/dev/drbd0』已經是處於同步的狀態,參考第四篇筆記把PDC設定好後,在home目錄下所建立的東西,如logon.bat、profiles等,在BDC上就不需要在去建立了,只要把samba設定好即可。而為了避免產生錯誤,先把smb2提升為primary,並掛載/home。

先把smb1降級(已設定好PDC等相關資料)
代碼: [選擇]
[root@smb1 ~]# umount  /home
[root@smb1 ~]# drbdadm  secondary  home

升級smb2
代碼: [選擇]
[root@smb2 ~]# drbdadm  primary  home
[root@smb2 ~]# mount  /dev/drbd0  /home

以下先來談談之前筆記一直沒寫到的Samba BDC(Backup Domain Controller) :
在smb2上先把samba、smbldap-tools安裝好,然後只需修改幾個地方,其餘的設定都與小弟第四篇的筆記相同。

代碼: [選擇]
[root@smb2 ~]# vim  /etc/samba/smb.conf domain master = No #修改成no

先啟動samba
代碼: [選擇]
[root@ smb2 ~]# /etc/init.d/nmb  start ; /etc/init.d/smb  start
加入LDAP管理員的密碼至samba
代碼: [選擇]
[root@ smb2 ~]# smbpasswd  -W
設定smbldap-tools script configuration
代碼: [選擇]
[root@ smb2 ~]# perl  /usr/share/doc/smbldap-tools-*/configure.pl . SID for domain LDAP: SID of the domain (can be obtained with 'net getlocalsid home')
  SID for domain LDAP [S-1-5-21-79182496-1355799292-2301990952] >S-1-5-21-2085468683-186526287-1002239668 #這裡要修改成smb1的SID,其餘設定同第四篇筆記

重開samba service,並測試
代碼: [選擇]
[root@ smb2 ~]# /etc/init.d/nmb  restart ; /etc/init.d/smb  restart
代碼: [選擇]
[root@smb2 ~]# testparm Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[home]"
Processing section "[netlogon]"
Loaded services file OK.
Server role: ROLE_DOMAIN_BDC
Press enter to see a dump of your service definitions

代碼: [選擇]
[root@ smb2 ~]# pdbedit  -Lv
測試完畢後,關閉samba、卸載home目錄,把DRBD降級成secondary;準備開始設置HA時,兩台主機的DRBD狀態都是 :
m:res       cs                    ro                                     ds                                              p     mounted     fstype
0:home    Connected      Secondary/Secondary       UpToDate/UpToDate                C


Heartbeat(heartbeat-3.0.4-1)

複製設定檔至 /etc/ha.d 目錄下
代碼: [選擇]
[root@smb1 ~]# cp  /usr/share/doc/heartbeat-3.0.4/ha.cf  /etc/ha.d/
[root@smb1 ~]# cp  /usr/share/doc/heartbeat-3.0.4/authkeys   /etc/ha.d/
[root@smb1 ~]# cp  /usr/share/doc/heartbeat-3.0.4/haresources   /etc/ha.d/

一樣,只要先在smb1主機上去修改設定,然後再copy到smb2上就可以了。

smb1主機設定 :
Heartbeat通訊設定檔
代碼: [選擇]
[root@smb1 ~]# vim  /etc/ha.d/ha.cf debugfile /var/log/ha-debug

logfile /var/log/ha-log

logfacility local0

keepalive 2           #每2秒會去偵測對方是否存活(心跳間隔)

deadtime 15   #如果smb2主機在15秒內沒有收到smb1的心跳信號,就會開始接管資源

warntime 5    #當備用節點(smb2)在5秒內沒有收到主節點(smb1)的心跳,就會在LOG中寫入一個警告訊息,但還不會切換服務

initdead 60            #第一次啟動heartbeat或重新開機時,超過60秒仍未完成雙方的連線,則判定服務啟動失敗

udpport 694

ucast eth0 192.168.1.5
ucast eth1 192.168.100.2
#smb2的IP (心跳線)

auto_failback off
#當smb2接管資源後,不允許smb1恢復正常運作時重新接管資源

node smb1
node smb2
#兩台主機的hostname,要和『uname  -n』相同

ping 192.168.1.1
#當網路(網卡) 失效時測試連線狀態用的,這裡指向小弟的DNS+DHCP server


respawn hacluster /usr/lib64/heartbeat/ipfail
respawn hacluster /usr/lib64/heartbeat/dopd
#設定與heartbeat 一起啟動、關閉的程序
《ipfail與dopd (drbd outdate-peer daemon)算是heartbeat的小工具;ipfail是用來檢測和處理網路故障,配合ping 這個參數來檢測;dopd是規範當我們的DRBD資料不同步時不允許切換。》

apiauth dopd gid=haclient uid=hacluster
apiauth ipfail gid=haclient uid=hacluster
#設定dopd、ipfail啟動時所使用的gid與uid


Heartbear資源設定檔
代碼: [選擇]
[root@smb1 ~]# vim  /etc/ha.d/haresources #在最後一行新增以下內容
smb1 IPaddr::192.168.1.6/24/eth0 drbddisk::home Filesystem::/dev/drbd0::/home::ext4 rpcbind nfs nmb smb


設定內容可分成五個部份來看 :

『smb1』: 預設Primary node的FQDN

『IPaddr::192.168.1.6/24/eth0』: 虛擬叢集的IP,設定在eth0網卡上

『drbddisk::home』: DRBD的資源名稱

『Filesystem::/dev/drbd0::/home::ext4』: DRBD的裝置,掛載點,檔案系統格式

『rpcbind  nfs  nmb  smb』: 要啟動的服務;啟動時是左到右,關閉是由右到左


Heartbear驗證設定檔
這個檔案主要是用在叢集主機節點 (Cluster Node) 之間的驗證檔,主機都必須具備此一檔案才會被認為是身處在同一個叢集中。

代碼: [選擇]
[root@smb1 ~]# vim  /etc/ha.d/authkeys auth 2
2 sha1 HI!

authkeys的權限一定要600才可以
代碼: [選擇]
[root@smb1 ~]# chmod 600 /etc/ha.d/authkeys

smb2主機設定 :

把先前smb1做好的設定檔scp過來
代碼: [選擇]
[root@smb2 ~]# scp smb1:/etc/ha.d/ha.cf /etc/ha.d/
[root@smb2 ~]# scp smb1:/etc/ha.d/haresources /etc/ha.d/
[root@smb2 ~]# scp smb1:/etc/ha.d/authkeys /etc/ha.d/

修改Heartbeat通訊設定檔
代碼: [選擇]
[root@smb2 ~]# vim /etc/ha.d/ha.cf#找到以下兩行,並修改成smb1的I
ucast eth0 192.168.1.4
ucast eth1 192.168.100.1


確認authkeys的權限是否為600
代碼: [選擇]
[root@smb2 ~]# ll /etc/ha.d/authkeys-rw-------. 1 root root 693 2012-11-12 23:08 /etc/ha.d/authkeys



接下來就是要將heartbeat設定成開機啟動,但要注意必須先啟動DRBD才可啟動heartbeat,否則系統在啟動過程中會因為DRBD還沒啟動 ( /dev/drbd0 尚未啟動),進而造成heartbeat啟動失敗。

代碼: [選擇]
[root@smb1 ~]# chkconfig heartbeat on
[root@smb2 ~]# chkconfig heartbeat on

檢查DRBD及heartbeat啟動順序
代碼: [選擇]
[root@smb1 ~]# ll /etc/rc.d/rc5.d/S7*/etc/rc.d/rc5.d/S70drbd -> ../init.d/drbd
/etc/rc.d/rc5.d/S75heartbeat -> ../init.d/heartbeat

代碼: [選擇]
[root@smb2 ~]# ll /etc/rc.d/rc5.d/S7*/etc/rc.d/rc5.d/S70drbd -> ../init.d/drbd
/etc/rc.d/rc5.d/S75heartbeat -> ../init.d/heartbeat

啟動heartbeat
代碼: [選擇]
[root@smb1 ~]# service heartbeat startStarting High-Availability services: INFO: Resource is stopped
Done.

代碼: [選擇]
[root@smb2 ~]# service heartbeat startStarting High-Availability services: INFO: Resource is stopped
Done.

檢查smb1狀態
代碼: [選擇]
[root@smb1 ~]# service drbd startdrbd driver loaded OK; device status:
version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by dag@Build64R6, 2012-09-04 12:06:10
m:res       cs                    ro                                     ds                                              p     mounted     fstype
0:home    Connected      Primary/Secondary           UpToDate/UpToDate                 C     /home         ext4

代碼: [選擇]
[root@smb1 ~]# df -h/dev/drbd0          4.9G  138M  4.5G   3%  /home

代碼: [選擇]
[root@smb1 ~]# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:78:91:1d brd ff:ff:ff:ff:ff:ff
inet 192.168.1.4/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.6/24 brd 192.168.1.255 scope global secondary eth0:0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:f3:31:04 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.1/24 brd 192.168.100.255 scope global eth1

代碼: [選擇]
[root@smb1 ~]# netstat -tunlp
#看是否有開啟nmbd (137、138) 及smbd (139) 的LISTEN port

由上面的資訊可看到heartbeat已經幫我們自動開啟先前設定的所有服務了。

至於要怎麼手動切換Active node 到smb2主機上?!
很簡單,只要把目前的Active node重新啟動heartbeat即可
代碼: [選擇]
[root@smb1 ~]# service heartbeat restart接著再去smb2檢查看看,資訊應該與上面檢查smb1的狀態相同。


災難測試
實作完成後當然要來測試一下囉!否則怎麼知道設定是否正確和所謂的『high availability』到底好不好用....
測試方向小弟採三種方式 :
1. smb1(Active node)的eth0網卡關閉,smb2是否會自動接管,smb1的eth0網卡恢複運作,smb2繼續接管並不會轉交回smb1
2. smb1、smb2的eth1網卡(192.168.100.0/24)關閉
3. smb2(目前的Active node)直接關閉電源,smb1是否會自動接管


1. 停用smb1的eth0網卡
代碼: [選擇]
[root@smb1 ~]# ifdown eth0
可開啟smb2的ha-log來觀察轉換的過程,由於資訊量很多小弟就不貼出來了,總之就是會發現smb1掛掉了(Link smb1:eth0 dead ),smb2告訴其他人我還活著(Telling other node that we have more visible ping nodes),接著smb2開始接手資源(acquire [all] resources from smb1)以及啟動服務,最後完成接管的動作(remote resource transition completed.)。

此時可至smb2上觀察eth0會多一個192.168.1.6的IP,DRBD的狀態應該也是Primary node等等...

重新啟動smb1的eth0網卡
代碼: [選擇]
[root@smb1 ~]# ifup eth0可發現heartbeat應該不會有任何的動作才對,Active node還在smb2上。


2. smb1、smb2的eth1網卡(192.168.100.0/24)關閉
這種作法會有兩種不同的狀態,假設目前DRBD的Primary node是smb1,eth1網卡有問題斷線,則雙方的DRBD的狀態會是
代碼: [選擇]
[root@smb1 ~]# service drbd statusm:res       cs                    ro                                     ds                                              p           mounted     fstype
0:home    StandAlone      Primary/Unknown            UpToDate/Outdated                  r-----    ext4

代碼: [選擇]
[root@smb2 ~]# service drbd statusm:res       cs                      ro                                     ds                                              p           mounted     fstype
0:home    WFConnection   Secondary/Unknown        Outdated/DUnknown                C

代碼: [選擇]
[root@smb1 ~]# ifup eth1
重新連接『home』資源
代碼: [選擇]
[root@smb1 ~]# drbdadm connect home

如果是Secondary node → smb2的eth1網卡斷線,雙方的DRBD狀態為
代碼: [選擇]
[root@smb1 ~]# service drbd statusm:res       cs                      ro                                     ds                                              p           mounted     fstype
0:home    WFConnection   Primary/Unknown            UpToDate/Outdated                  C           /home         ext4

代碼: [選擇]
[root@smb2 ~]# service drbd statusm:res       cs                    ro                                     ds                                              p           mounted     fstype
0:home    StandAlone     Secondary/Unknown        Outdated/DUnknown                r-----

代碼: [選擇]
[root@smb2 ~]# ifup eth1
重新連接『home』資源或重啟DRBD
代碼: [選擇]
[root@smb2 ~]# drbdadm connect homeor
代碼: [選擇]
[root@smb2 ~]# service drbd restart

3. 在smb1主機(Active node)上強制關閉電源,結果應與第1個測試相同,smb2會接管。

Split-Brain(裂腦)
簡單來說,就是DRBD無法判斷各節點之間的主從關係。
split-brain實際上是指在某種情況下,造成drbd的兩個節點斷開了連接,都以primary的身份來運作。當drbd某個primary node連接對方節點準備發送資訊的時候如果發現對方也是primary的狀態,那麼會立刻自行斷開連接,並認定當下已經發生split-brain,這時候會在log中記錄『Split-Brain detected,droppingconnection!』,也就是主機偵測到split-brain的狀況已經發生,但內建機制已無法自動解決問題,為了保全資料因此拒絕所有連線。
當發生split-brain之後,如果查看連接狀態,其中至少會有一個是StandAlone狀態,另外一個可能也是StandAlone (如果是同時發現split brain狀態),也有可能是WFConnection的狀態。

代碼: [選擇]
[root@smb1 ~]# service drbd statusm:res       cs                    ro                                     ds                                              p           mounted     fstype
0:home    StandAlone     Primary/Unknown             UpToDate/Outdated                  r-----    ext4

代碼: [選擇]
[root@smb2 ~]# service drbd statusm:res       cs                    ro                                     ds                                              p           mounted     fstype
0:home    StandAlone     Secondary/Unknown        UpToDate/Outdated                  r-----   

smb1為DRBD的primary,而smb2為secondary,此時分別查看兩台主機的DRBD狀態會發現,cs欄位為『StandAlone』,表示雙方皆認為只剩下自己在維持資料同步的服務;ds欄位為『UpToDate/Outdated』,表示雙方皆認為自己的資料是最新的,並等待備用主機來跟自己同步資料;p欄位為『r-----』,表示目前沒有採用任何資料同步複製模式來進行資料同步的動作。

split-brain有兩種解決辦法:
手動處理
假設想保留目前smb1上的資料,並且放棄smb2上的資料時....

首先要設定smb2的DRBD資源角色為secondary node
代碼: [選擇]
[root@smb2~]# drbdadm secondary home
放棄DRBD的資料
代碼: [選擇]
[root@smb2~]# drbdadm -- --discard-my-data connect home
接著設定smb1 :
重新連接DRBD資源
代碼: [選擇]
[root@smb1~]# drbdadm connect home
設定DRBD資源角色成為primary node
代碼: [選擇]
[root@smb1~]# drbdadm primary home
之後再度查看雙方的DRBD狀態,可以發現兩台主機已恢復正常了。

自動處理(這裡小弟還沒有測試完)
自動處理策略定義如下:
after-sb-0pri
當兩個節點的狀態都是secondary時,可以通過after-sb-0pri策略自動恢復。

1)disconnect
默認策略,沒有自動恢復,簡單的斷開連接。

2)discard-younger-primary
在split-brain發生前從主節點自動同步。

3)discard-older-primary
在split-brain發生時從變成primary的節點同步資料。

4)discard-least-changes
在split-brain發生時從資料區塊最多的節點同步資料。

5)discard-node-NODENAME
自動同步到指定的名稱節點。

after-sb-1pri
當兩個節點的狀態只有一個是primary時,可以通過after-sb-1pri策略自動恢復。

1)disconnect
默認策略,沒有自動恢復,簡單的斷開連接。

2)consensus
丟棄secondary或者簡單的斷開連接。

3)discard-secondary
丟棄secondary數據。

4)call-pri-lost-after-sb
按照after-sb-0pri的策略執行。

after-sb-2pri
當兩個節點的狀態都是primary時,可以通過after-sb-2pri策略自動恢復。

1)disconnect
默認策略,沒有自動恢復,簡單的斷開連接。

2)violently-as0p
按照after-sb-0pri的策略執行。

3)call-pri-lost-after-sb
按照after-sb-0pri的策略執行,並丟棄其他節點。

配置自動恢復
編輯『/etc/drbd.d/global_common.conf』,找到『net』部分,配置策略如下,所有節點完全一致。

after-sb-0pri discard-younger-primary;

after-sb-1pri discard-secondary;

after-sb-2pri call-pri-lost-after-sb;


資料來源:http://blog.csdn.net/kntao/article/details/7790263

LVM
最早開始規劃partition時,已經把smb1、smb2的單獨切一個分割區出來,並做成LVM,名稱為 /dev/VolGroup/lv_home,也就是我們的DRBD資源裝置,現在就來玩玩如何線上增加drbd resource的容量。

目前的容量 (兩台主機相同) :
代碼: [選擇]
[root@smb1~]# df -h檔案系統         Size    Used     Avail    Use%    掛載點
/dev/drbd0   4.9G   138M    4.5G    3%       /home

代碼: [選擇]
[root@smb1~]# lvsLV            VG              Attr          LSize
lv_home   VolGroup    -wi-ao--   4.88g

先增加1G的容量給LV (兩台主機都要執行) :
代碼: [選擇]
[root@smb1~]# lvresize -L +1G /dev/VolGroup/lv_homeExtending logical volume lv_home to 5.88 GiB
Logical volume lv_home successfully resized

代碼: [選擇]
[root@smb2~]# lvresize -L +1G /dev/VolGroup/lv_homeExtending logical volume lv_home to 5.88 GiB
Logical volume lv_home successfully resized

重置drdb resource(只需在primary主機上執行)
代碼: [選擇]
[root@smb1~]# drbdadm resize home
重置檔案系統容量 (只需在primary主機上執行)
代碼: [選擇]
[root@smb1~]# resize2fs /dev/drbd0resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/drbd0 is mounted on /home; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/drbd0 to 1542087 (4k) blocks.
The filesystem on /dev/drbd0 is now 1542087 blocks long.

查看容量
代碼: [選擇]
[root@smb1~]# df -h檔案系統         Size    Used     Avail    Use%    掛載點
/dev/drbd0   5.8G   138M    4.5G    3%       /home

手動切換Active node,並觀察smb2
代碼: [選擇]
[root@smb1~]# service heartbeat restart
代碼: [選擇]
[root@smb2~]# df -h檔案系統         Size    Used     Avail    Use%    掛載點
/dev/drbd0   5.8G   138M    4.5G    3%       /home


以上就是小弟初學成的筆記,還望各位大大們賜教,謝謝!!!
« 上次編輯: 2012-11-26 21:30 由 Niko »

treble

  • 活潑的大學生
  • ***
  • 文章數: 215
    • 檢視個人資料
    • 牛的大腦
Re: 05.利用HA+DRDB來實作『home』目錄筆記
« 回覆 #1 於: 2012-11-24 22:45 »

這個我們會用到,感謝分享
[牛的大腦  http://systw.net ] 用來放一些筆記資料
[單字我朋友  http://systw.net/word ] 練英文用的
2分鐘檢測你的單字能力 http://systw.net/word/q.php

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17484
    • 檢視個人資料
    • http://www.study-area.org
Re: 05.利用HA+DRDB來實作『home』目錄筆記
« 回覆 #2 於: 2012-11-25 09:18 »
太牛逼了~! 推~~

Niko

  • 活潑的大學生
  • ***
  • 文章數: 281
  • 性別: 男
    • 檢視個人資料
Re: 05.利用HA+DRDB來實作『home』目錄 筆記
« 回覆 #3 於: 2012-12-04 11:20 »
treble大,希望小弟的筆記能夠幫助到你 :)

netman大大別這麼說...小弟還嫩的很勒... :P

wlhfor

  • 懷疑的國中生
  • **
  • 文章數: 39
    • 檢視個人資料
Re: 05.利用HA+DRDB來實作『home』目錄 筆記
« 回覆 #4 於: 2014-05-29 12:15 »
很讚哦~~~最近也在研究做home目錄,因為之前單一台時,發現掛掉連登入都無法登入

另外請教一下niko大大,你連home目錄是連192.168.1.6嗎??

Niko

  • 活潑的大學生
  • ***
  • 文章數: 281
  • 性別: 男
    • 檢視個人資料
Re: 05.利用HA+DRDB來實作『home』目錄 筆記
« 回覆 #5 於: 2014-05-29 13:10 »
很讚哦~~~最近也在研究做home目錄,因為之前單一台時,發現掛掉連登入都無法登入

另外請教一下niko大大,你連home目錄是連192.168.1.6嗎??

依照小弟的架構來看,只要連192.168.1.6就可以,smb1或smb2會由HA自動去切換  :)

wlhfor

  • 懷疑的國中生
  • **
  • 文章數: 39
    • 檢視個人資料
Re: 05.利用HA+DRDB來實作『home』目錄 筆記
« 回覆 #6 於: 2014-05-29 15:27 »
了解~~~小弟先來試試,有問題再請教niko大大 :)

xiang

  • 鑽研的研究生
  • *****
  • 文章數: 712
  • 性別: 男
    • 檢視個人資料
Re: 05.利用HA+DRDB來實作『home』目錄 筆記
« 回覆 #7 於: 2014-06-05 22:35 »
哎呀  現在才看到這一篇

大大是不是該再來一場了  ;D

Niko

  • 活潑的大學生
  • ***
  • 文章數: 281
  • 性別: 男
    • 檢視個人資料
Re: 05.利用HA+DRDB來實作『home』目錄 筆記
« 回覆 #8 於: 2014-06-23 21:21 »
阿翔大,金歹勢,小弟我公、私事可能都要忙到明年才會比較有空一點....  XD

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17484
    • 檢視個人資料
    • http://www.study-area.org
Re: 05.利用HA+DRDB來實作『home』目錄 筆記
« 回覆 #9 於: 2014-06-24 00:13 »
明年要5倍哦~~

xiang

  • 鑽研的研究生
  • *****
  • 文章數: 712
  • 性別: 男
    • 檢視個人資料
Re: 05.利用HA+DRDB來實作『home』目錄 筆記
« 回覆 #10 於: 2014-06-24 07:03 »
大家會等你的 ;D

wlhfor

  • 懷疑的國中生
  • **
  • 文章數: 39
    • 檢視個人資料
Re: 05.利用HA+DRDB來實作『home』目錄 筆記
« 回覆 #11 於: 2014-07-01 16:09 »
感謝Niko大大,小弟做完了,只剩ldap automount弄不起來 :(

Niko

  • 活潑的大學生
  • ***
  • 文章數: 281
  • 性別: 男
    • 檢視個人資料
Re: 05.利用HA+DRDB來實作『home』目錄 筆記
« 回覆 #12 於: 2014-07-04 16:18 »
感謝Niko大大,小弟做完了,只剩ldap automount弄不起來 :(

automount我忘了筆記有沒有寫ㄟ~~好像沒有.....

不過帥哥netman大大有筆記
http://www.study-area.org/tips/smbldap/

另外還揪甘心ㄟ做個V低歐
https://www.youtube.com/watch?v=__kKzjOU6Xk&feature=youtu.be

這裡就有教automount.....

wlhfor

  • 懷疑的國中生
  • **
  • 文章數: 39
    • 檢視個人資料
Re: 05.利用HA+DRDB來實作『home』目錄 筆記
« 回覆 #13 於: 2014-07-07 12:39 »
哈...netman大的神作很早就拜讀過了,其實automount ldap有弄起來,目前還在查問題
1.如果ldapautomount裡的IP是設ldapserver本身,用ldapclient連automount是會起來
2.如果把IP改為drbd+heartbeat的VIP就連不起來,但手動mount VIP是可以的

我是打算
1.測試連到drbd本機的IP測試看看,如果可以,那真的很奇怪= =
2.再弄一台沒有drbd的NFS來試看看

wlhfor

  • 懷疑的國中生
  • **
  • 文章數: 39
    • 檢視個人資料
Re: 05.利用HA+DRDB來實作『home』目錄 筆記
« 回覆 #14 於: 2014-07-09 15:32 »
昏倒....用ldap automount好像只能做在ldapserver上,指到別台NFS上home目錄就連不上 :'(


找到問題了
nisMapEntry: ldap:ldapserver:nisMapName=auto.home,ou=AUTOFS,dc=c
 mwebgame,dc=com

dn: nisMapName=auto.home,ou=AUTOFS,dc=cmwebgame,dc=com
objectClass: nisMap
nisMapName: auto.home

dn: cn=/,nisMapName=auto.home,ou=AUTOFS,dc=cmwebgame,dc=com
objectClass: nisObject
nisMapName: auto.home
cn: /
nisMapEntry: -fstype=nfs,soft,intr,nodev,nosuid nfs:/home/&

這設定上面要設ldapserver的IP或域名,下面要設要mount的home Direct的IP或域名

搞定了^^
« 上次編輯: 2014-07-09 17:38 由 wlhfor »

linus1230

  • 可愛的小學生
  • *
  • 文章數: 3
    • 檢視個人資料
Re: 05.利用HA+DRDB來實作『home』目錄 筆記
« 回覆 #15 於: 2015-04-17 17:13 »
昏倒....用ldap automount好像只能做在ldapserver上,指到別台NFS上home目錄就連不上 :'(


找到問題了
nisMapEntry: ldap:ldapserver:nisMapName=auto.home,ou=AUTOFS,dc=c
 mwebgame,dc=com

dn: nisMapName=auto.home,ou=AUTOFS,dc=cmwebgame,dc=com
objectClass: nisMap
nisMapName: auto.home

dn: cn=/,nisMapName=auto.home,ou=AUTOFS,dc=cmwebgame,dc=com
objectClass: nisObject
nisMapName: auto.home
cn: /
nisMapEntry: -fstype=nfs,soft,intr,nodev,nosuid nfs:/home/&

這設定上面要設ldapserver的IP或域名,下面要設要mount的home Direct的IP或域名

搞定了^^
麼看明白這個問題怎麼解決的,我也遇到同樣的問題。。

wlhfor

  • 懷疑的國中生
  • **
  • 文章數: 39
    • 檢視個人資料
Re: 05.利用HA+DRDB來實作『home』目錄 筆記
« 回覆 #16 於: 2015-10-28 18:40 »
時間有點久遠,我有點忘了,但照意思上應該是這樣
192.168.1.100 ldapserver.aa.bb
192.168.1.200 nfs.aa.bb

上面那行要用192.168.1.100或ldapserver.aa.bb(前題要解析的到)
下面那行要用192.168.1.200或nfs.aa.bb(前題要解析的到)

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17484
    • 檢視個人資料
    • http://www.study-area.org
Re: 05.利用HA+DRDB來實作『home』目錄 筆記
« 回覆 #17 於: 2015-12-04 18:21 »
強貼啊~~ ^_^