mysql服務器的HA集羣之corosync+drbd+pacemaker實現-下篇

 

案例應用:紅帽企業羣集和存儲管理之

mysql服務器的HA集羣之corosync+drbd+pacemaker實現-下篇

上篇地址:

http://xjzhujunjie.blog.51cto.com/3582724/886317

接上篇!!!

 
五.羣集管理

5.1 配置羣集的工作屬性 

corosync默認啓用了stonith,而當前集羣並沒有相應的stonith設備,因此此默認配置目前尚不可用,這可以通過如下命令先禁用stonith:
[root@node1 corosync]# cd

[root@node1 ~]# crm configure property stonith-enabled=false

[root@node1 ~]#
 
[root@node2 corosync]# cd

[root@node2 ~]# crm configure property stonith-enabled=false

[root@node2 ~]#
對於雙節點的集羣來說,我們要配置此選項來忽略quorum,即這時候票數不起作用,一個節點也能正常運行:
[root@node1 ~]#

[root@node1 ~]# crm configure property no-quorum-policy=ignore

[root@node1 ~]#
 
[root@node2 ~]#

[root@node2 ~]# crm configure property no-quorum-policy=ignore

[root@node2 ~]#
定義資源的粘性值,使資源不能再節點之間隨意的切換,因爲這樣是非常浪費系統的資源的。
資源黏性值範圍及其作用:
0:這是默認選項。資源放置在系統中的最適合位置。這意味着當負載能力“較好”或較差的節點變得可用時才轉移資源。此選項的作用基本等同於自動故障回覆,只是資源可能會轉移到非之前活動的節點上;
大於0:資源更願意留在當前位置,但是如果有更合適的節點可用時會移動。值越高表示資源越願意留在當前位置;
小於0:資源更願意移離當前位置。絕對值越高表示資源越願意離開當前位置;

INFINITY:如果不是因節點不適合運行資源(節點關機、節點待機、達到migration-threshold 或配置更改)而強制資源轉移,資源總是留在當前位置。此選項的作用幾乎等同於完全禁用自動故障回覆;

-INFINITY:資源總是移離當前位置;
 
我們這裏可以通過以下方式爲資源指定默認黏性值:
[root@node1 ~]#

[root@node1 ~]# crm configure rsc_defaults resource-stickiness=100

[root@node1 ~]#
 
[root@node2 ~]#

[root@node2 ~]# crm configure rsc_defaults resource-stickiness=100

[root@node2 ~]#

5.2 定義羣集服務及資源

5.2.1  改變drbd的狀態

[root@node2 ~]# drbd-overview

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

[root@node2 ~]# drbdadm secondary mysql
[root@node2 ~]# drbd-overview

  0:mysql  Connected Secondary/Secondary UpToDate/UpToDate C r----

[root@node2 ~]#
 
[root@node1 ~]# drbd-overview

  0:mysql  Connected Secondary/Secondary UpToDate/UpToDate C r----

[root@node1 ~]# drbdadm primary mysql
[root@node1 ~]# drbd-overview

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

[root@node1 ~]#

5.2.2  配置drbd爲羣集資源

1、查看當前集羣的配置信息,確保已經配置全局屬性參數爲兩節點集羣所適用
[root@node1 ~]# crm configure show
node node1.junjie.com
node node2.junjie.com

property $id="cib-bootstrap-options" \

    dc-version="1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f" \

    cluster-infrastructure="openais" \

    expected-quorum-votes="2" \

    stonith-enabled="false" \

    no-quorum-policy="ignore"
rsc_defaults $id="rsc-options" \
    resource-stickiness="100"
[root@node1 ~]#

2、將已經配置好的DRBD設備/dev/drbd0定義爲集羣服務;

[root@node1 ~]# service drbd stop
Stopping all DRBD resources: .
[root@node1 ~]# chkconfig drbd off
[root@node1 ~]# ssh node2 'service drbd stop'
Stopping all DRBD resources: .

[root@node1 ~]# ssh node2 'chkconfig drbd off'

[root@node1 ~]# drbd-overview
drbd not loaded
[root@node1 ~]# ssh node2 'drbd-overview'
drbd not loaded
[root@node1 ~]#

3、配置drbd爲集羣資源:

提供drbd的RA目前由OCF歸類爲linbit,其路徑爲/usr/lib/ocf/resource.d/linbit/drbd。我們可以使用如下命令來查看此RA及RA的meta信息:
[root@node1 ~]# crm ra classes
heartbeat
lsb
ocf / heartbeat linbit pacemaker
stonith
[root@node1 ~]# crm ra list ocf linbit

drbd     

[root@node1 ~]#

4、查看drbd的資源代理的相關信息:

[root@node1 ~]# crm ra info ocf:linbit:drbd
This resource agent manages a DRBD resource

as a master/slave resource. DRBD is a shared-nothing replicated storage

device. (ocf:linbit:drbd)
 
Master/Slave OCF Resource Agent for DRBD
 

Parameters (* denotes required, [] the default):

 
drbd_resource* (string): drbd resource name

    The name of the drbd resource from the drbd.conf file.

 

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

    Full path to the drbd.conf file.

 
Operations' defaults (advisory minimum):
 

    start         timeout=240

    promote       timeout=90

    demote        timeout=90

    notify        timeout=90

    stop          timeout=100

    monitor_Slave interval=20 timeout=20 start-delay=1m

    monitor_Master interval=10 timeout=20 start-delay=1m

[root@node1 ~]#

5、drbd需要同時運行在兩個節點上,但只能有一個節點(primary/secondary模型)是Master,而另一個節點爲Slave;因此,它是一種比較特殊的集羣資源,其資源類型爲多狀態(Multi-state)clone類型,即主機節點有Master和Slave之分,且要求服務剛啓動時兩個節點都處於slave狀態。

[root@node1 ~]# crm
crm(live)# configure

crm(live)configure# primitive mysqldrbd ocf:heartbeat:drbd params drbd_resource="mysql" op monitor role="Master" interval="30s"  op monitor role="Slave" interval="31s" op start timeout="240s" op stop timeout="100s"

crm(live)configure# ms MS_mysqldrbd mysqldrbd meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify="true"

crm(live)configure# show mysqldrbd
primitive mysqldrbd ocf:heartbeat:drbd \

    params drbd_resource="mysql" \

    op monitor interval="30s" role="Master" \

    op monitor interval="31s" role="Slave" \

    op start interval="0" timeout="240s" \

    op stop interval="0" timeout="100s"

crm(live)configure# show MS_mysqldrbd
ms MS_mysqldrbd mysqldrbd \

    meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"

確定無誤後,提交:

crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# exit
bye
[root@node1 ~]#

6、查看當前集羣運行狀態:

[root@node1 ~]# crm status
============
Last updated: Tue Feb  7 23:51:09 2012
Stack: openais

Current DC: node1.junjie.com - partition with quorum

Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
2 Nodes configured, 2 expected votes
1 Resources configured.
============
 
Online: [ node2.junjie.com node1.junjie.com ]
 
 Master/Slave Set: MS_mysqldrbd [mysqldrbd]

     Masters: [ node1.junjie.com ]

     Slaves: [ node2.junjie.com ]

[root@node1 ~]#
由上面的信息可以看出此時的drbd服務的Primary節點爲node1.junjie.com,Secondary節點爲node2.junjie.com。當然,也可以在node1上使用如下命令驗正當前主機是否已經成爲mysql資源的Primary節點:
[root@node1 ~]# drbdadm role mysql

Primary/Secondary

[root@node1 ~]# drbd-overview

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

[root@node1 ~]#
我們實現將drbd設置自動掛載至/mysqldata目錄。此外,此自動掛載的集羣資源需要運行於drbd服務的Master節點上,並且只能在drbd服務將某節點設置爲Primary以後方可啓動。
確保兩個節點上的設備已經卸載:
[root@node1 ~]# umount /dev/drbd0
[root@node2 ~]# umount /dev/drbd0
以下還在node1上操作:
[root@node1 ~]# crm
crm(live)# configure

crm(live)configure# primitive MysqlFS ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/mnt/mysqldata" fstype="ext3"  op start timeout=60s op stop timeout=60s

crm(live)configure#
crm(live)configure# show changed
primitive MysqlFS ocf:heartbeat:Filesystem \

    params device="/dev/drbd0" directory="/mnt/mysqldata" fstype="ext3" \

    op start interval="0" timeout="60s" \

    op stop interval="0" timeout="60s"

crm(live)configure#
crm(live)configure# commit
crm(live)configure# exit     
bye
[root@node1 ~]#

7、mysql資源的定義(node1上操作)

先爲mysql集羣創建一個IP地址資源,通過集羣提供服務時使用,這個地址就是客戶端訪問mysql服務器使用的ip地址;

[root@node1 ~]# crm configure primitive myip ocf:heartbeat:IPaddr params ip=192.168.101.88

[root@node1 ~]# crm configure primitive mysqlserver lsb:mysqld

[root@node1 ~]# crm status
============
Last updated: Wed Feb  8 00:01:23 2012
Stack: openais

Current DC: node1.junjie.com - partition with quorum

Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
2 Nodes configured, 2 expected votes
4 Resources configured.
============
 
Online: [ node2.junjie.com node1.junjie.com ]
 
 Master/Slave Set: MS_mysqldrbd [mysqldrbd]

     Masters: [ node1.junjie.com ]

     Slaves: [ node2.junjie.com ]

 MysqlFS   (ocf::heartbeat:Filesystem):    Started node1.junjie.com
 myip  (ocf::heartbeat:IPaddr): Started node2.junjie.com
 mysqlserver  (lsb:mysqld): Started node1.junjie.com
[root@node1 ~]#

8、配置資源的各種約束:

集羣擁有所有必需資源,但它可能還無法進行正確處理。資源約束則用以指定在哪些羣集節點上運行資源,以何種順序裝載資源,以及特定資源依賴於哪些其它資源。pacemaker共給我們提供了三種資源約束方法:

1)Resource Location(資源位置):定義資源可以、不可以或儘可能在哪些節點上運行

2)Resource Collocation(資源排列):排列約束用以定義集羣資源可以或不可以在某個節點上同時運行

3)Resource Order(資源順序):順序約束定義集羣資源在節點上啓動的順序。

定義約束時,還需要指定分數。各種分數是集羣工作方式的重要組成部分。其實,從遷移資源到決定在已降級集羣中停止哪些資源的整個過程是通過以某種方式修改分數來實現的。分數按每個資源來計算,資源分數爲負的任何節點都無法運行該資源。在計算出資源分數後,集羣選擇分數最高的節點。INFINITY(無窮大)目前定義爲 1,000,000。加減無窮大遵循以下3個基本規則:

1)任何值 + 無窮大 = 無窮大

2)任何值 - 無窮大 = -無窮大

3)無窮大 - 無窮大 = -無窮大

定義資源約束時,也可以指定每個約束的分數。分數表示指派給此資源約束的值。分數較高的約束先應用,分數較低的約束後應用。通過使用不同的分數爲既定資源創建更多位置約束,可以指定資源要故障轉移至的目標節點的順序。
我們要定義如下的約束:
[root@node1 ~]# crm
crm(live)# configure

crm(live)configure# colocation MysqlFS_with_mysqldrbd inf: MysqlFS MS_mysqldrbd:Master myip mysqlserver

crm(live)configure# order MysqlFS_after_mysqldrbd inf: MS_mysqldrbd:promote MysqlFS:start

crm(live)configure# order myip_after_MysqlFS mandatory: MysqlFS myip

crm(live)configure# order mysqlserver_after_myip  mandatory: myip mysqlserver

crm(live)configure# show changed

colocation MysqlFS_with_mysqldrbd inf: MysqlFS MS_mysqldrbd:Master myip mysqlserver

order MysqlFS_after_mysqldrbd inf: MS_mysqldrbd:promote MysqlFS:start

order myip_after_MysqlFS inf: MysqlFS myip

order mysqlserver_after_myip inf: myip mysqlserver

crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# exit
bye
[root@node1 ~]#

9.查看配置信息和狀態,並測試:

[root@node1 ~]# crm configure show
node node1.junjie.com
node node2.junjie.com
primitive MysqlFS ocf:heartbeat:Filesystem \

    params device="/dev/drbd0" directory="/mnt/mysqldata" fstype="ext3" \

    op start interval="0" timeout="60s" \

    op stop interval="0" timeout="60s"

primitive myip ocf:heartbeat:IPaddr \

    params ip="192.168.101.88"

primitive mysqldrbd ocf:heartbeat:drbd \

    params drbd_resource="mysql" \

    op monitor interval="30s" role="Master" \

    op monitor interval="31s" role="Slave" \

    op start interval="0" timeout="240s" \

    op stop interval="0" timeout="100s"

primitive mysqlserver lsb:mysqld
ms MS_mysqldrbd mysqldrbd \

    meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"

colocation MysqlFS_with_mysqldrbd inf: MysqlFS MS_mysqldrbd:Master myip mysqlserver

order MysqlFS_after_mysqldrbd inf: MS_mysqldrbd:promote MysqlFS:start

order myip_after_MysqlFS inf: MysqlFS myip

order mysqlserver_after_myip inf: myip mysqlserver

property $id="cib-bootstrap-options" \

    dc-version="1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f" \

    cluster-infrastructure="openais" \

    expected-quorum-votes="2" \

    stonith-enabled="false" \

    no-quorum-policy="ignore"
rsc_defaults $id="rsc-options" \
    resource-stickiness="100"
[root@node1 ~]#
[root@node1 ~]# crm status
============
Last updated: Wed Feb  8 00:08:06 2012
Stack: openais

Current DC: node1.junjie.com - partition with quorum

Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f

2 Nodes configured, 2 expected votes
4 Resources configured.
============
 
Online: [ node2.junjie.com node1.junjie.com ]
 
 Master/Slave Set: MS_mysqldrbd [mysqldrbd]

     Masters: [ node1.junjie.com ]

     Slaves: [ node2.junjie.com ]

 MysqlFS   (ocf::heartbeat:Filesystem):    Started node1.junjie.com
 myip  (ocf::heartbeat:IPaddr): Started node1.junjie.com
 mysqlserver  (lsb:mysqld): Started node1.junjie.com
[root@node1 ~]#

可見,服務現在在node1上正常運行:

在node1上的操作,查看羣集的運行狀態:

[root@node1 ~]# service mysqld status
MySQL running (8720)                                       [  OK  ]
[root@node1 ~]# mount |grep drbd

/dev/drbd0 on /mnt/mysqldata type ext3 (rw)

[root@node1 ~]#
[root@node1 ~]# ll /mnt/mysqldata/
total 24

drwxr-xr-x 5 mysql mysql  4096 Feb  8 00:05 data

-rw-r--r-- 1 root  root      4 Feb  7 21:28 f1

-rw-r--r-- 1 root  root      0 Feb  7 21:28 f2

drwx------ 2 root  root  16384 Feb  7 21:26 lost+found

[root@node1 ~]# ifconfig eth0:0

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:AE:83:D1 

          inet addr:192.168.101.88  Bcast:192.168.101.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          Interrupt:67 Base address:0x2000

 
[root@node1 ~]#

在node2上的操作,查看羣集的運行狀態:

[root@node2 ~]# service mysqld status
MySQL is not running                                       [FAILED]
[root@node2 ~]# mount |grep drbd
[root@node2 ~]# ll /mnt/mysqldata/
total 0
[root@node2 ~]# ifconfig eth0:0

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:D1:D4:32 

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          Interrupt:67 Base address:0x2000

 
[root@node2 ~]#

10.繼續測試羣集:

繼續測試:
在node1上操作,讓node1下線:
[root@node1 ~]# crm status
============
Last updated: Wed Feb  8 00:16:25 2012
Stack: openais

Current DC: node1.junjie.com - partition with quorum

Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f

2 Nodes configured, 2 expected votes
4 Resources configured.
============
 

Node node1.junjie.com: standby

Online: [ node2.junjie.com ]
 
 Master/Slave Set: MS_mysqldrbd [mysqldrbd]
     Masters: [ node2.junjie.com ]

     Stopped: [ mysqldrbd:0 ]

 MysqlFS   (ocf::heartbeat:Filesystem):    Started node2.junjie.com
 myip  (ocf::heartbeat:IPaddr): Started node2.junjie.com
 mysqlserver  (lsb:mysqld): Started node2.junjie.com
[root@node1 ~]#

在node2上的操作,查看羣集的運行狀態:

可見我們的資源已經都切換到了node2上:

[root@node2 ~]# service mysqld status
MySQL running (9093)                                       [  OK  ]
[root@node2 ~]# mount |grep drbd

/dev/drbd0 on /mnt/mysqldata type ext3 (rw)

[root@node2 ~]# ll /mnt/mysqldata/
total 24

drwxr-xr-x 5 mysql mysql  4096 Feb  8 00:16 data

-rw-r--r-- 1 root  root      4 Feb  7 21:28 f1

-rw-r--r-- 1 root  root      0 Feb  7 21:28 f2

drwx------ 2 root  root  16384 Feb  7 21:26 lost+found

[root@node2 ~]# ifconfig eth0:0

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:D1:D4:32 

          inet addr:192.168.101.88  Bcast:192.168.101.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          Interrupt:67 Base address:0x2000

 
[root@node2 ~]#
 
現在一切正常,我們可以驗證mysql服務是否能被正常訪問:
首先,在node2上面建立一個用戶user1,密碼:123456.
我們定義的是通過VIP:192.168.101.88來訪問mysql服務,現在node2上建立一個可以讓某個網段主機能訪問的賬戶(這個內容會同步drbd設備同步到node1上):
[root@node2 ~]# mysql
...

mysql>  grant all on *.* to user1@'192.168.%.%' identified by '123456';

Query OK, 0 rows affected (0.01 sec)
 
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
 
mysql> exit
Bye
[root@node2 ~]#

客戶端訪問測試

192.168.101.100客戶Ping測試192.168.101.88

192.168.101.100客戶訪問mysql數據庫192.168.101.88(成功訪問)

至此:使用corosync+drbd+pacemaker實現mysql服務器的高可用集羣成功完成!.

《完》

--xjzhujunjie

--2012/06/03 

上篇地址:

http://xjzhujunjie.blog.51cto.com/3582724/886317

接上篇!!!

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