天天看點

DRBD+Pacemaker詳解

一、DRBD定義

DRBD的全稱為:Distributed Replicated Block Device (DRBD)分布式塊裝置複制,DRBD是由核心子產品和相關腳本而構成,用以建構高可用性的叢集。其實作方式是通過網絡來鏡像整個裝置。它允許使用者在遠端機器上建立一個本地塊裝置的實時鏡像。與心跳連接配接結合使用,也可以把它看作是一種網絡RAID。DRBD因為是工作在系統核心空間,而不是使用者空間,它直接複制的是二進制資料,這是它速度快的根本原因。

一個DRBD系統由兩個以上節點構成,與HA叢集類似,也有主用節點和備用節點之分,在帶有主要裝置的節點上,應用程式和作業系統可以運作和通路DRBD裝置。

在主節點寫入的資料通過drbd裝置存儲到主節點的磁盤裝置中,同時,這個資料也會自動發送到備用節點相應的drbd裝置,最終寫入備用節點的磁盤裝置中,在備用節點上,drbd隻是将資料從drbd裝置寫入到備用節點的磁盤裝置中。

DRBD在資料進入Buffer Cache時,先經過DRBD這一層,複制一份資料經過TCP/IP協定封裝,發送到另一個節點上,另一個節點通過TCP/IP協定來接受複制過來的資料,同步到次節點的DRBD裝置上。

DRBD核心中工作模型:

<a href="http://s3.51cto.com/wyfs02/M00/24/F7/wKioL1NXfvCzD4vXAAH_MAq4llI473.jpg" target="_blank"></a>

DRBD是有資源組成:

resource name:可以使用除空白字元以外的任意ACSII表中的字元。

drbd裝置:drbd的裝置的通路路徑;裝置檔案/dev/drbd#。

disk:各節點為組成此drbd裝置所提供的塊裝置。

網絡屬性:節點間為了實作跨主機的磁盤鏡像而使用的網絡配置。

DRBD的複制模式:

協定A(異步)

資料一旦寫入磁盤并發送到本地TCP/IP協定棧中就認為完成了寫入操作。

協定B(半同步)

收到對方接收确認即發送到對方的TCP/IP協定棧就認為完成了寫入操作。

協定C(同步)

等待對方寫入完成後并傳回确認資訊才認為完成寫入操作。

腦裂(split brain)自動修複方法:

丢棄比較新的主節點的所做的修改:

在這種模式下,當網絡重建立立連接配接并且發現了裂腦,DRBD就會丢棄自切換到主節點後所修改的資料。

丢棄老的主節點所做的修改:

在這種模式下,DRBD将丢棄首先切換到主節點後所修改的資料。

丢棄修改比較少的主節點的修改:

在這種模式下,DRBD會檢查兩個節點的資料,然後丢棄修改比較少的主機上的節點。

一個節點資料沒有發生變化的完美的修複裂腦:

在這種模式下,如果其中一台主機的在發生裂腦時資料沒有發生修改,則可簡單的完美的修複并聲明已經解決裂腦問題。

了解基本概念後可以來安裝配置DRBD了。

二、安裝

由于在Linux 2.6.33以後的版本中,drbd已經內建到核心中;而之前的版本隻能通過兩種方法安裝:

1、對核心打更新檔;編譯該子產品

2、安裝rpm包(要與核心完全比對)

準備工作:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<code>#下載下傳與核心版本一緻的核心rpm包和使用者空間工具包</code>

<code>[root@node1 drbd]</code><code># ls</code>

<code>drbd</code><code>-</code><code>8.4</code><code>.</code><code>3</code><code>-</code><code>33.el6</code><code>.x86_64.rpm  drbd</code><code>-</code><code>kmdl</code><code>-</code><code>2.6</code><code>.</code><code>32</code><code>-</code><code>431.el6</code><code>-</code><code>8.4</code><code>.</code><code>3</code><code>-</code><code>33.el6</code><code>.x86_64.rpm</code>

<code>[root@node1 drbd]</code><code># uname -r</code>

<code>2.6</code><code>.</code><code>32</code><code>-</code><code>431.el6</code><code>.x86_64</code>

<code>                                                                                                                                                                                                                                                                                                                                                                                                              </code> 

<code>#兩個測試節點</code>

<code>node1.soul.com    </code><code>192.168</code><code>.</code><code>0.111</code>

<code>node2.soul.com    </code><code>192.168</code><code>.</code><code>0.112</code>

<code>                                                                                                                                                                                                                                                                                                                                                                                                        </code> 

<code>#保證時間同步;雙機互信</code>

<code>[root@node1 ~]</code><code># ssh node2 'date';date</code>

<code>Wed Apr </code><code>23</code> <code>18</code><code>:</code><code>13</code><code>:</code><code>30</code> <code>CST </code><code>2014</code>

<code>[root@node1 ~]</code><code>#</code>

<code>Wed Apr </code><code>23</code> <code>18</code><code>:</code><code>11</code><code>:</code><code>12</code> <code>CST </code><code>2014</code>

安裝:

<code>[root@node1 drbd]</code><code># rpm -ivh drbd-8.4.3-33.el6.x86_64.rpm drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm</code>

<code>warning: drbd</code><code>-</code><code>8.4</code><code>.</code><code>3</code><code>-</code><code>33.el6</code><code>.x86_64.rpm: Header V4 DSA</code><code>/</code><code>SHA1 Signature, key </code><code>ID</code> <code>66534c2b</code><code>: NOKEY</code>

<code>Preparing...                </code><code>########################################### [100%]</code>

<code>   </code><code>1</code><code>:drbd</code><code>-</code><code>kmdl</code><code>-</code><code>2.6</code><code>.</code><code>32</code><code>-</code><code>431.el</code><code>########################################### [ 50%]</code>

<code>   </code><code>2</code><code>:drbd                   </code><code>########################################### [100%]</code>

<code>[root@node1 drbd]</code><code># scp *.rpm node2:/root/drbd/</code>

<code>drbd</code><code>-</code><code>8.4</code><code>.</code><code>3</code><code>-</code><code>33.el6</code><code>.x86_64.rpm                                     </code><code>100</code><code>%</code>  <code>283KB</code> <code>283.3KB</code><code>/</code><code>s   </code><code>00</code><code>:</code><code>00</code> 

<code>drbd</code><code>-</code><code>kmdl</code><code>-</code><code>2.6</code><code>.</code><code>32</code><code>-</code><code>431.el6</code><code>-</code><code>8.4</code><code>.</code><code>3</code><code>-</code><code>33.el6</code><code>.x86_64.rpm                 </code><code>100</code><code>%</code>  <code>145KB</code> <code>145.2KB</code><code>/</code><code>s   </code><code>00</code><code>:</code><code>00</code> 

<code>[root@node1 drbd]</code><code># ssh node2 "rpm -ivh /root/drbd/*.rpm"</code>

<code>warning: </code><code>/</code><code>root</code><code>/</code><code>drbd</code><code>/</code><code>drbd</code><code>-</code><code>8.4</code><code>.</code><code>3</code><code>-</code><code>33.el6</code><code>.x86_64.rpm: Header V4 DSA</code><code>/</code><code>SHA1 Signature, key </code><code>ID</code> <code>66534c2b</code><code>: NOKEY</code>

<code>Preparing...                </code><code>##################################################</code>

<code>drbd</code><code>-</code><code>kmdl</code><code>-</code><code>2.6</code><code>.</code><code>32</code><code>-</code><code>431.el6</code>    <code>##################################################</code>

<code>drbd                        </code><code>##################################################</code>

<code>[root@node1 drbd]</code><code>#</code>

<code>#兩個節點都安裝相同的包</code>

檢視配置檔案

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

<code>[root@node1 ~]</code><code># cd /etc/drbd.d/</code>

<code>[root@node1 drbd.d]</code><code># ls</code>

<code>global_common.conf</code>

<code>[root@node1 drbd.d]</code><code>#</code>

<code>[root@node1 drbd.d]</code><code># vim global_common.conf</code>

<code>global</code> <code>{</code>

<code>        </code><code>usage</code><code>-</code><code>count no;    </code><code>#在可以通路網際網路的情況下drbd可以統計使用資料</code>

<code>        </code><code># minor-count dialog-refresh disable-ip-verification</code>

<code>}</code>

<code>common {</code>

<code>        </code><code>handlers {    </code><code>#處理器</code>

<code>                </code><code># These are EXAMPLE handlers only.</code>

<code>                </code><code># They may have severe implications,</code>

<code>                </code><code># like hard resetting the node under certain circumstances.</code>

<code>                </code><code># Be careful when chosing your poison.</code>

<code>                </code><code>#啟動下面這三項:</code>

<code>                </code><code>pri</code><code>-</code><code>on</code><code>-</code><code>incon</code><code>-</code><code>degr </code><code>"/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b &gt; /proc/sysrq-trigger ; reboot -f"</code><code>;</code>

<code>                </code><code>pri</code><code>-</code><code>lost</code><code>-</code><code>after</code><code>-</code><code>sb </code><code>"/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b &gt; /proc/sysrq-trigger ; reboot -f"</code><code>;</code>

<code>                </code><code>local</code><code>-</code><code>io</code><code>-</code><code>error </code><code>"/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o &gt; /proc/sysrq-trigger ; halt -f"</code><code>;</code>

<code>                </code><code># fence-peer "/usr/lib/drbd/crm-fence-peer.sh";</code>

<code>                </code><code># split-brain "/usr/lib/drbd/notify-split-brain.sh root";</code>

<code>                </code><code># out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";</code>

<code>                </code><code># after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;</code>

<code>        </code><code>}</code>

<code>        </code><code>startup {    </code><code>#啟動時執行腳本</code>

<code>                </code><code># wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb</code>

<code>        </code><code>options {</code>

<code>                </code><code># cpu-mask on-no-data-accessible</code>

<code>        </code><code>disk {    </code><code>#drbd裝置</code>

<code>                </code><code># size max-bio-bvecs on-io-error fencing disk-barrier disk-flushes</code>

<code>                </code><code># disk-drain md-flushes resync-rate resync-after al-extents</code>

<code>                </code><code># c-plan-ahead c-delay-target c-fill-target c-max-rate</code>

<code>                </code><code># c-min-rate disk-timeout</code>

<code>                </code><code>on</code><code>-</code><code>io</code><code>-</code><code>error     detach;    </code><code>#當io發生錯誤時直接拆掉磁盤</code>

<code>        </code><code>net {</code>

<code>                </code><code># protocol timeout max-epoch-size max-buffers unplug-watermark</code>

<code>                </code><code># connect-int ping-int sndbuf-size rcvbuf-size ko-count</code>

<code>                </code><code># allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri</code>

<code>                </code><code># after-sb-1pri after-sb-2pri always-asbp rr-conflict</code>

<code>                </code><code># ping-timeout data-integrity-alg tcp-cork on-congestion</code>

<code>                </code><code># congestion-fill congestion-extents csums-alg verify-alg</code>

<code>                </code><code># use-rle</code>

<code>                </code><code>cram</code><code>-</code><code>hmac</code><code>-</code><code>alg    </code><code>"sha1"</code><code>;</code>

<code>                </code><code>shared</code><code>-</code><code>secret     </code><code>"node.soul.com"</code><code>;    </code><code>#建議使用随機數值</code>

<code>                </code><code>protocol    C;    </code><code>#複制協定</code>

<code>syncer {</code>

<code>                </code><code>rate    </code><code>1000M</code><code>;    </code><code>#傳輸速率</code>

三、配置使用

提供一個磁盤分區;或單獨一個磁盤;兩節點需大小一緻

<code>[root@node1 ~]</code><code># fdisk -l /dev/sda</code>

<code>Disk </code><code>/</code><code>dev</code><code>/</code><code>sda: </code><code>128.8</code> <code>GB, </code><code>128849018880</code> <code>bytes</code>

<code>255</code> <code>heads, </code><code>63</code> <code>sectors</code><code>/</code><code>track, </code><code>15665</code> <code>cylinders</code>

<code>Units </code><code>=</code> <code>cylinders of </code><code>16065</code> <code>*</code> <code>512</code> <code>=</code> <code>8225280</code> <code>bytes</code>

<code>Sector size (logical</code><code>/</code><code>physical): </code><code>512</code> <code>bytes </code><code>/</code> <code>512</code> <code>bytes</code>

<code>I</code><code>/</code><code>O size (minimum</code><code>/</code><code>optimal): </code><code>512</code> <code>bytes </code><code>/</code> <code>512</code> <code>bytes</code>

<code>Disk identifier: </code><code>0x00076a20</code>

<code>   </code><code>Device Boot      Start         End      Blocks   </code><code>Id</code>  <code>System</code>

<code>/</code><code>dev</code><code>/</code><code>sda1   </code><code>*</code>           <code>1</code>          <code>26</code>      <code>204800</code>   <code>83</code>  <code>Linux</code>

<code>Partition </code><code>1</code> <code>does </code><code>not</code> <code>end on cylinder boundary.</code>

<code>/</code><code>dev</code><code>/</code><code>sda2              </code><code>26</code>        <code>7859</code>    <code>62914560</code>   <code>8e</code>  <code>Linux LVM</code>

<code>/</code><code>dev</code><code>/</code><code>sda3            </code><code>7859</code>        <code>8512</code>     <code>5252256</code>   <code>83</code>  <code>Linux    </code><code>#該分區作為drbd資源</code>

<code>#node2也是如此</code>

定義資源

<code>[root@node1 ~]</code><code># vim /etc/drbd.d/web.res</code>

<code>resource web {</code>

<code>        </code><code>on node1.soul.com {</code>

<code>                </code><code>device  </code><code>/</code><code>dev</code><code>/</code><code>drbd0;</code>

<code>                </code><code>disk    </code><code>/</code><code>dev</code><code>/</code><code>sda3;</code>

<code>                </code><code>address </code><code>192.168</code><code>.</code><code>0.111</code><code>:</code><code>7789</code><code>;</code>

<code>                </code><code>meta</code><code>-</code><code>disk       internal;</code>

<code>        </code><code>on node2.soul.com {</code>

<code>                </code><code>address </code><code>192.168</code><code>.</code><code>0.112</code><code>:</code><code>7789</code><code>;</code>

<code>                                                                                                                                                                                                                                                                                                                                                       </code> 

<code>#複制到node2上一份</code>

<code>[root@node1 ~]</code><code># scp /etc/drbd.d/web.res node2:/etc/drbd.d/</code>

<code>web.res                                                                </code><code>100</code><code>%</code>  <code>247</code>     <code>0.2KB</code><code>/</code><code>s   </code><code>00</code><code>:</code><code>00</code> 

<code>[root@node1 ~]</code><code># scp /etc/drbd.d/global_common.conf node2:/etc/drbd.d/</code>

<code>global_common.conf                                                     </code><code>100</code><code>%</code> <code>1945</code>     <code>1.9KB</code><code>/</code><code>s   </code><code>00</code><code>:</code><code>00</code> 

初始化資源并啟動服務

<code>[root@node1 ~]</code><code># drbdadm create-md web</code>

<code>Writing meta data...</code>

<code>initializing activity log</code>

<code>NOT initializing bitmap</code>

<code>New drbd meta data block successfully created.</code>

<code>#node2同樣執行</code>

<code>                                                                                                                                                                                                                                                                                                              </code> 

<code>[root@node1 ~]</code><code># service drbd start</code>

<code>Starting DRBD resources: [</code>

<code>     </code><code>create res: web</code>

<code>   </code><code>prepare disk: web</code>

<code>    </code><code>adjust disk: web</code>

<code>     </code><code>adjust net: web</code>

<code>]</code>

<code>..........</code>

<code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code><code>*</code>

<code> </code><code>DRBD's startup script waits </code><code>for</code> <code>the peer node(s) to appear.</code>

<code> </code><code>-</code> <code>In case this node was already a degraded cluster before the</code>

<code>   </code><code>reboot the timeout </code><code>is</code> <code>0</code> <code>seconds. [degr</code><code>-</code><code>wfc</code><code>-</code><code>timeout]</code>

<code> </code><code>-</code> <code>If the peer was available before the reboot the timeout will</code>

<code>   </code><code>expire after </code><code>0</code> <code>seconds. [wfc</code><code>-</code><code>timeout]</code>

<code>   </code><code>(These values are </code><code>for</code> <code>resource </code><code>'web'</code><code>; </code><code>0</code> <code>sec </code><code>-</code><code>&gt; wait forever)</code>

<code> </code><code>To abort waiting enter </code><code>'yes'</code> <code>[  </code><code>11</code><code>]:     </code><code>#等待node2啟動,node2啟動即可</code>

<code>.</code>

<code>[root@node1 ~]</code>

<code>                                                                                                                                                                                                                                                                                                            </code> 

<code>#檢視狀态</code>

<code>[root@node1 ~]</code><code># drbd-overview</code>

<code>  </code><code>0</code><code>:web</code><code>/</code><code>0</code>  <code>Connected Secondary</code><code>/</code><code>Secondary Inconsistent</code><code>/</code><code>Inconsistent C r</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code>

手動将其中一個節點提升為主節點

<code>[root@node1 ~]</code><code># drbdadm primary --force web</code>

<code>[root@node1 ~]</code><code># cat /proc/drbd</code>

<code>version: </code><code>8.4</code><code>.</code><code>3</code> <code>(api:</code><code>1</code><code>/</code><code>proto:</code><code>86</code><code>-</code><code>101</code><code>)</code>

<code>GIT</code><code>-</code><code>hash</code><code>: </code><code>89a294209144b68adb3ee85a73221f964d3ee515</code> <code>build by gardner@, </code><code>2013</code><code>-</code><code>11</code><code>-</code><code>29</code> <code>12</code><code>:</code><code>28</code><code>:</code><code>00</code>

<code> </code><code>0</code><code>: cs:SyncSource ro:Primary</code><code>/</code><code>Secondary ds:UpToDate</code><code>/</code><code>Inconsistent C r</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code>

<code>    </code><code>ns:</code><code>321400</code> <code>nr:</code><code>0</code> <code>dw:</code><code>0</code> <code>dr:</code><code>329376</code> <code>al:</code><code>0</code> <code>bm:</code><code>19</code> <code>lo:</code><code>0</code> <code>pe:</code><code>1</code> <code>ua:</code><code>8</code> <code>ap:</code><code>0</code> <code>ep:</code><code>1</code> <code>wo:f oos:</code><code>4931544</code>

<code>    </code><code>[&gt;...................] sync'ed:  </code><code>6.3</code><code>%</code> <code>(</code><code>4812</code><code>/</code><code>5128</code><code>)M</code>

<code>    </code><code>finish: </code><code>0</code><code>:</code><code>02</code><code>:</code><code>33</code> <code>speed: </code><code>32</code><code>,</code><code>048</code> <code>(</code><code>32</code><code>,</code><code>048</code><code>) K</code><code>/</code><code>sec</code>

<code>#顯示正常同步進行</code>

<code>#顯示的Primary/Secondary左邊為自己;右邊為對方節點</code>

<code>                                                                                                                                                                                                                                                                                           </code> 

<code>[root@node2 ~]</code><code># drbd-overview</code>

<code>  </code><code>0</code><code>:web</code><code>/</code><code>0</code>  <code>Connected Secondary</code><code>/</code><code>Primary UpToDate</code><code>/</code><code>UpToDate C r</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code>

<code>#node2上顯示</code>

手動做主從切換

<code>#因為同時隻能有一個為主;是以切換時;需要先将主的降級;才能提升</code>

<code>#且隻有主的才能格式化被挂載使用</code>

<code>node1</code>

<code>[root@node1 ~]</code><code># drbdadm secondary web</code>

<code>  </code><code>0</code><code>:web</code><code>/</code><code>0</code>  <code>Connected Secondary</code><code>/</code><code>Secondary UpToDate</code><code>/</code><code>UpToDate C r</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code>

<code>                                                                                                                                                                                                                                                                          </code> 

<code>node2</code>

<code>[root@node2 ~]</code><code># drbdadm primary web</code>

<code>  </code><code>0</code><code>:web</code><code>/</code><code>0</code>  <code>Connected Primary</code><code>/</code><code>Secondary UpToDate</code><code>/</code><code>UpToDate C r</code><code>-</code><code>-</code><code>-</code><code>-</code><code>-</code>

<code>#格式化挂載</code>

<code>[root@node2 ~]</code><code># mke2fs -t ext4 /dev/drbd0</code>

<code>This filesystem will be automatically checked every </code><code>35</code> <code>mounts </code><code>or</code>

<code>180</code> <code>days, whichever comes first.  Use tune2fs </code><code>-</code><code>c </code><code>or</code> <code>-</code><code>i to override.</code>

<code>[root@node2 ~]</code><code>#</code>

<code>[root@node2 ~]</code><code># mount /dev/drbd0 /mnt/</code>

<code>[root@node2 ~]</code><code># ls /mnt/</code>

<code>lost</code><code>+</code><code>found</code>

<code>#挂載成功 </code>

<code>#如果要為node1為主;這邊需要先解除安裝降級</code>

四、與pacemaker結合使用自動角色轉換

<code>                                                                                                                                                                          </code> 

<code>[root@node1 ~]</code><code># service drbd stop</code>

<code>Stopping </code><code>all</code> <code>DRBD resources: .</code>

<code>[root@node1 ~]</code><code># ssh node2 'service drbd stop'</code>

<code>[root@node1 ~]</code><code># chkconfig drbd off</code>

<code>[root@node1 ~]</code><code># ssh node2 'chkconfig drbd off'</code>

<code>#解除安裝降級關閉服務;且關閉開啟自動啟動。兩個節點相同操作</code>

配置pacemaker

<code>#具體配置就不詳細介紹了;上一篇介紹的有</code>

<code>[root@node1 ~]</code><code># crm status</code>

<code>Last updated: Wed Apr </code><code>23</code> <code>21</code><code>:</code><code>00</code><code>:</code><code>11</code> <code>2014</code>

<code>Last change: Wed Apr </code><code>23</code> <code>18</code><code>:</code><code>59</code><code>:</code><code>58</code> <code>2014</code> <code>via cibadmin on node1.soul.com</code>

<code>Stack: classic openais (with plugin)</code>

<code>Current DC: node2.soul.com </code><code>-</code> <code>partition with quorum</code>

<code>Version: </code><code>1.1</code><code>.</code><code>10</code><code>-</code><code>14.el6</code><code>-</code><code>368c726</code>

<code>2</code> <code>Nodes configured, </code><code>2</code> <code>expected votes</code>

<code>0</code> <code>Resources configured</code>

<code>Online: [ node1.soul.com node2.soul.com ]</code>

<code>                                                                                                                                                                 </code> 

<code>crm(live)configure</code><code># show</code>

<code>node node1.soul.com</code>

<code>node node2.soul.com</code>

<code>property</code> <code>$</code><code>id</code><code>=</code><code>"cib-bootstrap-options"</code> <code>\</code>

<code>    </code><code>dc</code><code>-</code><code>version</code><code>=</code><code>"1.1.10-14.el6-368c726"</code> <code>\</code>

<code>    </code><code>cluster</code><code>-</code><code>infrastructure</code><code>=</code><code>"classic openais (with plugin)"</code> <code>\</code>

<code>    </code><code>expected</code><code>-</code><code>quorum</code><code>-</code><code>votes</code><code>=</code><code>"2"</code> <code>\</code>

<code>    </code><code>stonith</code><code>-</code><code>enabled</code><code>=</code><code>"false"</code> <code>\</code>

<code>    </code><code>no</code><code>-</code><code>quorum</code><code>-</code><code>policy</code><code>=</code><code>"ignore"</code>

<code>rsc_defaults $</code><code>id</code><code>=</code><code>"rsc-options"</code> <code>\</code>

<code>    </code><code>resource</code><code>-</code><code>stickiness</code><code>=</code><code>"100"</code>

<code>#配置好直接檢視相關資訊</code>

配置drbd為高可用資源

<code>#drbd的資源代理是有linbit提供</code>

<code>crm(live)ra</code><code># info ocf:linbit:drbd</code>

<code>Parameters (</code><code>*</code> <code>denotes required, [] the default):</code>

<code>drbd_resource</code><code>*</code> <code>(string): drbd resource name</code>

<code>    </code><code>The name of the drbd resource </code><code>from</code> <code>the drbd.conf </code><code>file</code><code>.</code>

<code>drbdconf (string, [</code><code>/</code><code>etc</code><code>/</code><code>drbd.conf]): Path to drbd.conf</code>

<code>    </code><code>Full path to the drbd.conf </code><code>file</code><code>.</code>

<code>....</code>

<code>#檢視詳細資訊</code>

<code>#定義資源</code>

<code>crm(live)configure</code><code># primitive webdrbd ocf:linbit:drbd params drbd_resource=web op monitor role=Master interval=40s timeout=30s op monitor role=Slave interval=60s timeout=30s op start timeout=240s op stop timeout=100s</code>

<code>crm(live)configure</code><code># verify</code>

<code>crm(live)configure</code><code># master MS_webdrbd webdrbd meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"</code>

<code>primitive webdrbd ocf:linbit:drbd \</code>

<code>    </code><code>params drbd_resource</code><code>=</code><code>"web"</code> <code>\</code>

<code>    </code><code>op monitor role</code><code>=</code><code>"Master"</code> <code>interval</code><code>=</code><code>"40s"</code> <code>timeout</code><code>=</code><code>"30s"</code> <code>\</code>

<code>    </code><code>op monitor role</code><code>=</code><code>"Slave"</code> <code>interval</code><code>=</code><code>"60s"</code> <code>timeout</code><code>=</code><code>"30s"</code> <code>\</code>

<code>    </code><code>op start timeout</code><code>=</code><code>"240s"</code> <code>interval</code><code>=</code><code>"0"</code> <code>\</code>

<code>    </code><code>op stop timeout</code><code>=</code><code>"100s"</code> <code>interval</code><code>=</code><code>"0"</code>

<code>ms MS_webdrbd webdrbd \</code>

<code>    </code><code>meta master</code><code>-</code><code>max</code><code>=</code><code>"1"</code> <code>master</code><code>-</code><code>node</code><code>-</code><code>max</code><code>=</code><code>"1"</code> <code>clone</code><code>-</code><code>max</code><code>=</code><code>"2"</code> <code>clone</code><code>-</code><code>node</code><code>-</code><code>max</code><code>=</code><code>"1"</code> <code>notify</code><code>=</code><code>"true"</code>

<code>crm(live)configure</code><code># commit</code>

定義完成後可以檢視目前狀态

<code>crm(live)</code><code># status</code>

<code>Last updated: Wed Apr </code><code>23</code> <code>21</code><code>:</code><code>39</code><code>:</code><code>49</code> <code>2014</code>

<code>Last change: Wed Apr </code><code>23</code> <code>21</code><code>:</code><code>39</code><code>:</code><code>32</code> <code>2014</code> <code>via cibadmin on node1.soul.com</code>

<code>Current DC: node1.soul.com </code><code>-</code> <code>partition with quorum</code>

<code>2</code> <code>Resources configured</code>

<code> </code><code>Master</code><code>/</code><code>Slave </code><code>Set</code><code>: MS_webdrbd [webdrbd]</code>

<code>     </code><code>Masters: [ node1.soul.com ]</code>

<code>     </code><code>Slaves: [ node2.soul.com ]</code>

<code>                                                                                                                                 </code> 

<code>#可以讓node1下線測試</code>

<code>crm(live)</code><code># node standby node1.soul.com</code>

<code>Last updated: Wed Apr </code><code>23</code> <code>21</code><code>:</code><code>44</code><code>:</code><code>31</code> <code>2014</code>

<code>Last change: Wed Apr </code><code>23</code> <code>21</code><code>:</code><code>44</code><code>:</code><code>27</code> <code>2014</code> <code>via crm_attribute on node1.soul.com</code>

<code>Node node1.soul.com: standby</code>

<code>Online: [ node2.soul.com ]</code>

<code>     </code><code>Masters: [ node2.soul.com ]</code>

<code>     </code><code>Stopped: [ node1.soul.com ]</code>

<code>#可以看出node2自動變成主節點了</code>

五、定義webfs服務共享drbd資源

<code>crm(live)configure</code><code># primitive webfs ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/var/www/html" fstype="ext4" op monitor interval=30s timeout=40s on-fail=restart op start timeout=60s op stop timeout=60s</code>

<code>crm(live)configure</code><code># colocation webfs_with_MS_webdrbd_M inf: webfs MS_webdrbd:Master</code>

<code>crm(live)configure</code><code># order webfs_after_MS_webdrbd_M inf: MS_webdrbd:promote webfs:start</code>

<code>                                                                                                              </code> 

<code>Last updated: Wed Apr </code><code>23</code> <code>21</code><code>:</code><code>57</code><code>:</code><code>23</code> <code>2014</code>

<code>Last change: Wed Apr </code><code>23</code> <code>21</code><code>:</code><code>57</code><code>:</code><code>11</code> <code>2014</code> <code>via cibadmin on node1.soul.com</code>

<code>3</code> <code>Resources configured</code>

<code>     </code><code>Slaves: [ node1.soul.com ]</code>

<code> </code><code>webfs  (ocf::heartbeat:Filesystem):    Started node2.soul.com</code>

<code>[root@node2 ~]</code><code># ls /var/www/html/</code>

<code>issue  lost</code><code>+</code><code>found</code>

<code>#在node2上測試挂載成功</code>

<code>#測試轉移</code>

<code>crm(live)</code><code># node standby node2.soul.com</code>

<code>Last updated: Wed Apr </code><code>23</code> <code>21</code><code>:</code><code>59</code><code>:</code><code>00</code> <code>2014</code>

<code>Last change: Wed Apr </code><code>23</code> <code>21</code><code>:</code><code>58</code><code>:</code><code>51</code> <code>2014</code> <code>via crm_attribute on node1.soul.com</code>

<code>Node node2.soul.com: standby</code>

<code>Online: [ node1.soul.com ]</code>

<code>     </code><code>Stopped: [ node2.soul.com ]</code>

<code> </code><code>webfs  (ocf::heartbeat:Filesystem):    Started node1.soul.com</code>

<code>[root@node1 ~]</code><code># ls /var/www/html/</code>

<code>#測試轉移成功</code>

六、配置webip和webserver實作web服務高可用

<code>crm(live)</code><code># configure primitive webip ocf:heartbeat:IPaddr params ip="192.168.0.222" op monitor it=30s on-fail=restart</code>

<code>crm(live)configure</code><code># primitive webserver lsb:httpd op monitor interval=30s timeout=30s on-fail=restart</code>

<code>crm(live)configure</code><code># group webcluster MS_webdrbd  webip webfs webserver</code>

<code>INFO: resource references </code><code>in</code> <code>colocation:webfs_with_MS_webdrbd_M updated</code>

<code>INFO: resource references </code><code>in</code> <code>order:webfs_after_MS_webdrbd_M updated</code>

<code>group webcluster webip webfs webserver</code>

<code>        </code><code>meta master</code><code>-</code><code>max</code><code>=</code><code>"1"</code> <code>master</code><code>-</code><code>node</code><code>-</code><code>max</code><code>=</code><code>"1"</code> <code>clone</code><code>-</code><code>max</code><code>=</code><code>"2"</code> <code>clone</code><code>-</code><code>node</code><code>-</code><code>max</code><code>=</code><code>"1"</code> <code>notify</code><code>=</code><code>"true"</code>

<code>colocation webfs_with_MS_webdrbd_M inf: webcluster MS_webdrbd:Master</code>

<code>order webfs_after_MS_webdrbd_M inf: MS_webdrbd:promote webcluster:start</code>

<code>#檢視資訊正符合要求</code>

<code>            </code> 

<code>Last updated: Wed Apr </code><code>23</code> <code>23</code><code>:</code><code>02</code><code>:</code><code>26</code> <code>2014</code>

<code>Last change: Wed Apr </code><code>23</code> <code>22</code><code>:</code><code>55</code><code>:</code><code>36</code> <code>2014</code> <code>via cibadmin on node1.soul.com</code>

<code>5</code> <code>Resources configured</code>

<code> </code><code>Resource Group: webcluster</code>

<code>     </code><code>webip  (ocf::heartbeat:IPaddr):    Started node1.soul.com</code>

<code>     </code><code>webfs  (ocf::heartbeat:Filesystem):    Started node1.soul.com</code>

<code>     </code><code>webserver  (lsb:httpd):    Started node1.soul.com</code>

<code>#轉移測試</code>

<code>Last updated: Wed Apr </code><code>23</code> <code>23</code><code>:</code><code>03</code><code>:</code><code>18</code> <code>2014</code>

<code>Last change: Wed Apr </code><code>23</code> <code>23</code><code>:</code><code>03</code><code>:</code><code>15</code> <code>2014</code> <code>via crm_attribute on node1.soul.com</code>

<code>     </code><code>webip  (ocf::heartbeat:IPaddr):    Started node2.soul.com</code>

<code>     </code><code>webfs  (ocf::heartbeat:Filesystem):    Started node2.soul.com</code>

<code>     </code><code>webserver  (lsb:httpd):    Started node2.soul.com</code>

到此;drbd基礎與pacemaker實作自動轉移以完成。

本文轉自Mr_陳 51CTO部落格,原文連結:http://blog.51cto.com/chenpipi/1401404,如需轉載請自行聯系原作者

繼續閱讀