drbd+corosync+pacemaker來實現mysql的高可用性羣集

拓撲及地址設置
wps_clip_p_w_picpath-5552
本實驗要用到的軟件包
drbd83-8.3.8-1.el5.centos.i386.rpm                  #drbd的管理包
kmod-drbd83-8.3.8-1.el5.centos.i686.rpm        #drbd的內核模塊
cluster-glue-1.0.6-1.6.el5.i386.rpm                  #在羣集中增加對更多節點的支持
cluster-glue-libs-1.0.6-1.6.el5.i386.rpm
corosync-1.2.7-1.1.el5.i386.rpm                      #corosync的主配置文件
corosynclib-1.2.7-1.1.el5.i386.rpm                   #corosync的庫文件
heartbeat-3.0.3-2.3.el5.i386.rpm                    #我們的heartbeat在這裏是做四層的資源代理用的
heartbeat-libs-3.0.3-2.3.el5.i386.rpm              #heartbeat的庫文件
ldirectord-1.0.1-1.el5.i386.rpm                       #在高可用性羣集中實驗對後面realserver的探測
libesmtp-1.0.4-5.el5.i386.rpm
openais-1.1.3-1.6.el5.i386.rpm
openaislib-1.1.3-1.6.el5.i386.rpm                   #openais的庫文件
pacemaker-1.1.5-1.1.el5.i386.rpm                 #pacemake的主配置文檔
pacemaker-libs-1.1.5-1.1.el5.i386.rpm           #pacemaker的庫文件
pacemaker-cts-1.1.5-1.1.el5.i386.rpm
perl-TimeDate-1.16-5.el5.noarch.rpm
resource-agents-1.0.4-1.1.el5.i386.rpm         #開啓資源代理的包
mysql-5.5.15-linux2.6-i686.tar.gz                 #mysql的綠色軟件
說明:資源的下載地址 http://down.51cto.com/data/402802
實驗步驟如下:
一.修改羣集中各節點的網絡參數
node1的地址爲192.168.2.10:
[root@localhost ~]# vim /etc/sysconfig/network
wps_clip_p_w_picpath-27094
[root@localhost ~]# hostname node1.a.com
重新連接到192.168.2.10
[root@node1 ~]# setup
wps_clip_p_w_picpath-15471
[root@node1 ~]# service network restart
正在關閉接口 eth0:                                        [確定]
關閉環回接口:                                             [確定]
彈出環回接口:                                             [確定]
彈出界面 eth0:                                            [確定]
[root@node1 ~]# vim /etc/hosts
wps_clip_p_w_picpath-21299
node2的地址爲192.168.2.20:
[root@cms ~]# vim /etc/sysconfig/network
wps_clip_p_w_picpath-12333
[root@cms ~]# hostname node2.a.com
重新連接到192.168.2.20
[root@node2 ~]# setup
wps_clip_p_w_picpath-3745
[root@node2 ~]# service network restart
Shutting down interface eth0:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:                                [  OK  ] 
[root@node2 ~]# vim /etc/hosts
wps_clip_p_w_picpath-18316
同步羣集中各節點的時間
[root@node1 ~]# hwclock -s
[root@node2 ~]# hwclock -s
二.在各個節點上面產生密鑰實現無密碼的通訊
node1:
[root@node1 ~]# ssh-keygen -t rsa   #產生一個rsa的非對稱加密的私鑰對
[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub node2 #拷貝到node2節點
node2:
[root@node2 ~]# ssh-keygen -t rsa   #產生一個rsa的非對稱加密的私鑰對
[root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub node2 #拷貝到node1節點
三.在各個節點上面配置好yum客戶端
[root@node1 ~]# vim /etc/yum.repos.d/server.repo
wps_clip_p_w_picpath-17057
[root@node1 ~]# scp /etc/yum.repos.d/server.repo  node2:/etc/yum.repos.d/          #配置node2的yum客戶端可以這樣做
 
四.將下載好的rpm包上傳到linux上的每個節點後查看
node1上:
wps_clip_p_w_picpath-14290
node2上:
wps_clip_p_w_picpath-23840
五.在各節點上面安裝drbd的rpm包
[root@node1 ~]# yum localinstall drbd kmod-drbd -y --nogpgcheck
[root@node2 ~]# yum localinstall drbd kmod-drbd -y --nogpgcheck
六.在各節點上增加一個大小類型都相關的drbd設備(sdb1)
node1:
[root@node1 ~]# fdisk /dev/sdb
(這些命令:n/p/1/1/+1000M/p/w)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-522, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-522, default 522):+1000M
Command (m for help): p
Disk /dev/sdb: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 123987966 83 Linux
[root@node1 ~]# partprobe /dev/sdb         #重新加載內核模塊
[root@node1 ~]# cat /proc/partitions         #查看
major minor #blocks name
8 0 20971520 sda
8 1 104391 sda1
8 2 1052257 sda2
8 3 19808145 sda3
8 16 4194304 sdb
8 17 987966 sdb1
Node2:
[root@node2 ~]# fdisk /dev/sdb
(這些命令:n/p/1/1/+1000M/p/w)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-522, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-522, default 522):+1000M
Command (m for help): p
Disk /dev/sdb: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 123987966 83 Linux
[root@node2 ~]# partprobe /dev/sdb        #重新加載內核模塊
[root@node2 ~]# cat /proc/partitions        #查看
major minor #blocks name
8 0 20971520 sda
8 1 104391 sda1
8 2 1052257 sda2
8 3 19808145 sda3
8 16 4194304 sdb
8 17 987966 sdb1
七.在每個節點上配置drbd
node1:
1.複製配置文件
[root@node1 ~]# cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc/
2.備份global_common.conf文件
[root@node1 ~]# cd /etc/drbd.d/
[root@node1 drbd.d]# ll
-rwxr-xr-x 1 root root 1418 Jun 4 2010 global_common.conf
[root@node1 drbd.d]# cp global_common.conf global_common.conf.bak
3.編輯global_common.conf
[root@node1 drbd.d]# vim global_common.conf
global {
        usage-count no; 
}
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";
        }
        startup {
                wfc-timeout 120;              #等待連接超時的時間
                degr-wfc-timeout 120;      #等待降級的節點連接超時的時間
}
        disk {
                on-io-error detach; 
        }
        net {
cram-hmac-alg "sha1";                    #使用sha1加密算法實現節點認證
shared-secret "mydrbdlab";             #認證碼
        }
        syncer {
                rate 100M;                      #定義同步數據時的速率
        }
}
4.編輯mysql的文件
[root@node1 drbd.d]# vim mysql.res     #在文件中有如下修改
resource mysql {
on node1.a.com {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.2.10:7789;
meta-disk internal;
}
on node2.a.com {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.2.20:7789;
meta-disk internal;
}
}
在node2上也要做上面的工作,這時我們可以從node1上拷貝
[root@node1 drbd.d]# scp -r /etc/drbd.* node2:/etc/
5.node1及node2上初始化定義mysql的資源並啓動相應的服務,在這裏我們並不需要設置開機自動啓動
[root@node1 drbd.d]# drbdadm create-md mysql
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
[root@node1 drbd.d]# service drbd start
[root@node2 drbd.d]# drbdadm create-md mysql
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
[root@node2 drbd.d]# service drbd start
[root@node2 drbd.d]#
6.使用drbd-overview命令來查看啓動狀態
[root@node1 drbd.d]# drbd-overview
0:mysql Connected Secondary/Secondary Inconsistent/Inconsistent C r----
將node1設置爲主節點並執行如下命令:
[root@node1 drbd.d]# drbdadm -- --overwrite-data-of-peer primary mysql
[root@node1 drbd.d]# drbd-overview          #再次查看啓動的狀態
0:mysql SyncSource Primary/Secondary UpToDate/Inconsistent C r----
[>...................] sync'ed: 8.7% (906616/987896)K delay_probe: 4
[root@node2 drbd.d]# cat /proc/drbd
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by [email protected], 2010-06-04 08:04:16
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----
ns:0 nr:987896 dw:987896 dr:0 al:0 bm:61 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
7.查看同步過程
[root@node1 drbd.d]# watch -n 1 'cat /proc/drbd'
8.在primary節點上創建文件系統
[root@node1 drbd.d]# mkfs -t ext3 /dev/drbd0      #格式化
[root@node1 drbd.d]# mkdir /mysqldata               #創建掛載點
[root@node1 drbd.d]# mount /dev/drbd0 /mysqldata/ #進行掛載
[root@node1 drbd.d]# cd /mysqldata
[root@node1 mysqldata]#touch f1 f2                    #創建2個文件
[root@node1 drbd.d]# ls /mysqldata/
-rw-r--r-- 1 root root 0 May 9 15:45 f1
-rw-r--r-- 1 root root 0 May 9 15:45 f2
drwx------ 2 root root 16384 May 9 15:41 lost+found
[root@node1 ~]# umount /mysqldata                  #卸載drbd設備
[root@node1 ~]# drbdadm secondary mysql        #將node1設置爲secondary節點
[root@node1 ~]# drbd-overview                          #再次查看啓動狀態
0:mysql Connected Secondary/Secondary UpToDate/UpToDate C r----
9.將node2設置爲primary節點
[root@node2 ~]# drbdadm primary mysql
[root@node2 ~]# drbd-overview
0:mysql Connected Primary/Secondary UpToDate/UpToDate C r----
[root@node2 ~]# mkdir /mysqldata
[root@node2 ~]# mount /dev/drbd0 /mysqldata         #掛載
[root@node2 ~]# ll /mysqldata/
total 16
-rw-r--r-- 1 root root 0 May 9 15:45 f1
-rw-r--r-- 1 root root 0 May 9 15:45 f2
drwx------ 2 root root 16384 May 9 15:41 lost+found
[root@node2 ~]# umount /mysqldata/ 
八.在各個節點上安裝配置mysql
1.node1上的配置,添加用戶和組
[root@node1 ~]# groupadd -r mysql
[root@node1 ~]# useradd -g mysql -r mysql
#設置node1爲主設備,node2爲從設備
node2上操作:
[root@node2 ~]# drbdadm secondary mysql
node1上操作:
[root@node1 ~]# drbdadm primary mysql
[root@node1 ~]# drbd-overview
0:mysql Connected Primary/Secondary UpToDate/UpToDate C r----
[root@node1 ~]# mount /dev/drbd0 /mysqldata      #掛載drbd設備
[root@node1 ~]# mkdir /mysqldata/data
[root@node1 ~]# chown -R mysql.mysql /mysqldata/data/
[root@node1 ~]# ls /mysqldata/         #查看一下
data
lost+found
2.安裝mysql
在node1上的:
[root@node1 ~]# tar zxvf mysql-5.5.15-linux2.6-i686.tar.gz -C /usr/local
[root@node1 ~]# cd /usr/local/
[root@node1 ~]# ln -sv mysql-5.5.15-linux2.6-i686  mysql
[root@node1 ~]# cd mysql
[root@node1 ~]# chown -R mysql:mysql  .
[root@node1 ~]# scripts/mysql_install_db --user=mysql --datadir=/mysqldata/data          #初始化mysql數據庫
[root@node1 ~]# chown -R root  .
[root@node1 ~]# cp support-files/my-large.cnf  /etc/my.cnf   #爲mysql提供主配置文件
[root@node1 ~]# vim /etc/my.cnf
thread_concurrency = 2
datadir = /mysqldata/data          #添加該行
[root@node1 ~]# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld     #爲mysql提供sysv服務腳本
在node2上的:
[root@node2 ~]# scp /etc/my.cnf node2:/etc/         #可從node1上拷貝過來
[root@node2 ~]# scp /etc/rc.d/init.d/mysqld node2:/etc/rc.d/init.d
[root@node2 ~]# chkconfig --add mysqld
[root@node2 ~]# chkconfig mysqld off                     #設置開機不能自動啓動
[root@node2 ~]# service mysqld start                    #啓動服務
測試之後關閉服務
[root@node2 ~]# service mysqld stop
[root@node2 ~]# ls /mysqldata/data                      #查看
node1上的
[root@node1 mysql]# ls /mysqldata/data/
ib_logfile0 ibdata1 mysql-bin.000001 node1.a.com.err performance_schema
ib_logfile1 mysql mysql-bin.index node1.a.com.pid test
[root@node1 ~]# service mysqld stop
[root@node1 ~]# vim /etc/man.config
MANPATH  /usr/local/mysql/man        #添加該行
[root@node1 ~]# ln -sv /usr/local/mysql/include  /usr/include/mysql        #建立鏈接輸出mysql的庫文件給系統庫查找路徑
[root@node1 ~]# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
[root@node1 ~]# ldconfig             #重新載入
[root@node1 ~]#vim /etc/profile      #修改PATH環境變量
PATH=$PATH:/usr/local/mysql/bin  . /etc/profile 
[root@node1 mysql]# echo $PATH       #重新讀取環境變量
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin
[root@node1 ~]#
[root@node1 ~]# umount /mysqldata    #卸載drbd設備
3.node2上的配置:
[root@node2 ~]# groupadd -r mysql
[root@node2 ~]# useradd -g mysql -r mysql
node1上操作:
[root@node2 ~]# drbdadm secondary mysql
node2上操作:
[root@node2 ~]# drbdadm primary mysql
[root@node2 ~]# mount /dev/drbd0 /mysqldata
[root@node2 ~]# ls /mysqldata/
data  lost+found
安裝mysql
[root@node2 ~]# tar zxfv mysql-5.5.15-linux2.6-i686.tar.gz -C /usr/local
[root@node2 ~]# cd /usr/local/
[root@node2 ~]# ln -sv mysql-5.5.15-linux2.6-i686  mysql
[root@node2 ~]# cd mysql
[root@node2 ~]# chown -R root:mysql  .
[root@node2 ~]# chkconfig --add mysqld
[root@node2 ~]# chkconfig mysqld off
[root@node2 ~]# service mysqld start
[root@node2 ~]# ls /mysqldata/data      #查看其中是否有文件
[root@node2 mysql]# ls /mysqldata/data/
ib_logfile0 ibdata1 mysql-bin.000001 mysql-bin.index node2.a.com.err performance_schema
ib_logfile1 mysql mysql-bin.000002 node1.a.com.err node2.a.com.pid test
[root@node2 ~]# service mysqld stop
[root@node2 ~]# umount /dev/drbd0     #卸載設備
九.在各個節點上安裝並配置corosync+pacemaker
1.安裝
[root@node1 ~]# yum install -y  cluster-glue-1.0.6-1.6.el5.i386.rpm
cluster-glue-libs-1.0.6-1.6.el5.i386.rpm
corosync-1.2.7-1.1.el5.i386.rpm
corosynclib-1.2.7-1.1.el5.i386.rpm
drbd83-8.3.8-1.el5.centos.i386.rpm
heartbeat-3.0.3-2.3.el5.i386.rpm
heartbeat-libs-3.0.3-2.3.el5.i386.rpm
kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
libesmtp-1.0.4-5.el5.i386.rpm
openais-1.1.3-1.6.el5.i386.rpm
openaislib-1.1.3-1.6.el5.i386.rpm
pacemaker-1.1.5-1.1.el5.i386.rpm
pacemaker-cts-1.1.5-1.1.el5.i386.rpm
pacemaker-libs-1.1.5-1.1.el5.i386.rpm
perl-TimeDate-1.16-5.el5.noarch.rpm
resource-agents-1.0.4-1.1.el5.i386.rpm
--nogpgcheck
[root@node2~]# yum install -y  cluster-glue-1.0.6-1.6.el5.i386.rpm
cluster-glue-libs-1.0.6-1.6.el5.i386.rpm
corosync-1.2.7-1.1.el5.i386.rpm
corosynclib-1.2.7-1.1.el5.i386.rpm
drbd83-8.3.8-1.el5.centos.i386.rpm
heartbeat-3.0.3-2.3.el5.i386.rpm
heartbeat-libs-3.0.3-2.3.el5.i386.rpm
kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
libesmtp-1.0.4-5.el5.i386.rpm
openais-1.1.3-1.6.el5.i386.rpm
openaislib-1.1.3-1.6.el5.i386.rpm
pacemaker-1.1.5-1.1.el5.i386.rpm
pacemaker-cts-1.1.5-1.1.el5.i386.rpm
pacemaker-libs-1.1.5-1.1.el5.i386.rpm
perl-TimeDate-1.16-5.el5.noarch.rpm
resource-agents-1.0.4-1.1.el5.i386.rpm
--nogpgcheck
2.配置
node1上的:
[root@node1 ~]# cd /etc/corosync/     #切換到主配置文件的目錄            
[root@node1 corosync]# cp corosync.conf.example corosync.conf
[root@node1 corosync]# vim corosync.conf
compatibility: whitetank
totem {   
        version: 2
        secauth: off
        threads: 0
        interface {
                ringnumber: 0
                bindnetaddr: 192.168.2.0     #修改這裏
                mcastaddr: 226.94.1.1
                mcastport: 5405
        }
}
logging {
        fileline: off
        to_stderr: no  
        to_logfile: yes  
        to_syslog: yes   
        logfile: /var/log/cluster/corosync.log 
cluster
        debug: off 
        timestamp: on /
        logger_subsys {
                subsys: AMF
                debug: off
        }  
}
amf {
        mode: disabled
}
service {
        ver: 0
        name: pacemaker
use_mgmtd: yes
}
aisexec {
        user: root
        group: root
}
[root@node1 corosync]# mkdir /var/log/cluster    #創建cluster目錄
[root@node1 corosync]# corosync-keygen           #生成密鑰用於驗證
[root@node1 corosync]# ll
-rw-r--r-- 1 root root 5384 Jul 28  2010 amf.conf.example
-r-------- 1 root root  128 May  8 14:09 authkey
-rw-r--r-- 1 root root  538 May  8 14:08 corosync.conf
-rw-r--r-- 1 root root  436 Jul 28  2010 corosync.conf.example
drwxr-xr-x 2 root root 4096 Jul 28  2010 service.d
drwxr-xr-x 2 root root 4096 Jul 28  2010 uidgid.d
將node1節點上的文件拷貝到節點node2上面
[root@node1 corosync]# scp -p authkey  corosync.conf node2:/etc/corosync/
[root@node1 corosync]# ssh node2 'mkdir /var/log/cluster'
3.在node1和node2節點上面啓動 corosync 的服務,然後驗證
[root@node1 corosync]# service corosync start
[root@node2 corosync]# service corosync start
驗證corosync引擎是否正常啓動
[root@node1 corosync]# grep -i  -e "corosync cluster engine" -e "configuration file" /var/log/messages 
4.查看初始化成員節點通知是否發出
[root@node1 corosync]# grep -i totem /var/log/messages
5.檢查這個過程中是否有錯誤產生
[root@node1 corosync]#grep -i error:  /var/log/messages  |grep -v unpack_resources             #停用stonith的錯誤
6.檢查pacemaker是否已經啓動了
[root@node1 corosync]# grep -i pcmk_startup /var/log/messages
node2的操作同node1這裏不再贅述,照做就行
7.在node1上查看羣集的狀態
[root@node1 ~]# crm status
Last updated: Wed May 9 18:28:57 2012
Stack: openais
Current DC: node1.a.com - partition with quorum
Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
2 Nodes configured, 2 expected votes
0 Resources configured.
============
Online: [ node1.a.com node2.a.com ]
十.配置羣集的工作屬性(在每個節點上都要使用下面提到的命令來配置)
corosync默認啓用了stonith,而當前集羣並沒有相應的stonith設備,因此此默認配置目前尚不可用,這可以通過如下命令先禁用stonith:
# crm configure property stonith-enabled=false
對於雙節點的集羣來說,我們要配置此選項來忽略quorum,即這時候票數不起作用,一個節點也能正常運行:
# crm configure property no-quorum-policy=ignore
定義資源的粘性值,使資源不能再節點之間隨意的切換,因爲這樣是非常浪費系統的資源的。
資源黏性值範圍及其作用:
0:這是默認選項。資源放置在系統中的最適合位置。這意味着當負載能力“較好”或較差的節點變得可用時才轉移資源。此選項的作用基本等同於自動故障回覆,只是資源可能會轉移到非之前活動的節點上;
大於0:資源更願意留在當前位置,但是如果有更合適的節點可用時會移動。值越高表示資源越願意留在當前位置;
小於0:資源更願意移離當前位置。絕對值越高表示資源越願意離開當前位置;
INFINITY:如果不是因節點不適合運行資源(節點關機、節點待機、達到migration-threshold 或配置更改)而強制資源轉移,資源總是留在當前位置。此選項的作用幾乎等同於完全禁用自動故障回覆;
-INFINITY:資源總是移離當前位置;
我們這裏可以通過以下方式爲資源指定默認黏性值:
# crm configure rsc_defaults resource-stickiness=100
十一.定義羣集服務及資源
1.查看當前集羣的配置信息,確保已經配置全局屬性參數爲兩節點集羣所適用
[root@node1 ~]# crm configure show
node node1.a.com
node node2.a.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"
2.將已經配置好的DRBD設備/dev/drbd0定義爲集羣服務
[root@node1 ~]# service drbd stop  #停止服務
[root@node1 ~]# chkconfig drbd off
[root@node1 ~]# ssh node2 "service drbd stop"
[root@node1 ~]# ssh node2 "chkconfig drbd off"
[root@node1 ~]# drbd-overview      #查看狀態
drbd not loaded
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
查看drbd的資源代理的相關信息:
[root@node1 ~]# crm ra info ocf:linbit:drbd
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
查看當前集羣運行狀態:
[root@node1 ~]# crm status
============
Last updated: Wed May 9 19:16:24 2012
Stack: openais
Current DC: node1.a.com - partition with quorum
Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
2 Nodes configured, 2 expected votes
1 Resources configured.
============
Online: [ node1.a.com node2.a.com ]
Master/Slave Set: MS_mysqldrbd [mysqldrbd]
Masters: [ node1.a.com ]
Slaves: [ node2.a.com ]
由上面的信息可以看出此時的drbd服務的Primary節點爲node1.a.com,Secondary節點爲node2.a.com。當然,也可以在node1上使用如下命令驗正當前主機是否已經成爲mysql資源的Primary節點:
[root@node1 ~]# drbdadm role mysql
Primary/Secondary
我們實現將drbd設置自動掛載至/mysqldata目錄。此外,此自動掛載的集羣資源需要運行於drbd服務的Master節點上,並且只能在drbd服務將某節點設置爲Primary以後方可啓動。
確保兩個節點上的設備已經卸載
[root@node1 ~]# umount /dev/drbd0
以下還在node1上操作:
[root@node1 ~]# crm
crm(live)# configure
crm(live)configure# primitive MysqlFS ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/mysqldata" fstype="ext3"  op start timeout=60s op stop timeout=60s
crm(live)configure# commit
crm(live)configure# exit
4.mysql資源的定義
先爲mysql集羣創建一個ip地址資源,通過集羣提供服務時使用,這個地址就是客戶端訪問mysql服務器使用的ip地址;
[root@node1 ~]# crm configure primitive myip ocf:heartbeat:IPaddr params ip=192.168.2.100
配置mysqld服務爲高可用資源
[root@node1 ~]# crm configure primitive mysqlserver lsb:mysqld
[root@node1 ~]# crm status
============
Last updated: Sat Apr 21 02:03:24 2012
Stack: openais
Current DC: node1.magedu.com - partition with quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
4 Resources configured.
============
Online: [ node1.a.com node2.a.com ]
Master/Slave Set: MS_mysqldrbd
     Masters: [ node1.a.com ]
     Slaves: [ node2.a.com ]
MysqlFS
(ocf::heartbeat:Filesystem): Started node1.a.com
myip
(ocf::heartbeat:IPaddr): Started node2.a.com
mysqlserver
(lsb:mysqld):
Started node1.a.com
5.配置資源的各種約束
定義如下的約束:
[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# verify
提交:
crm(live)configure# commit
crm(live)configure# exit
查看配置信息:
[root@node1 ~]# crm configure show
node node1.a.com \
attributes standby="off"
node node2.a.com \
attributes standby="off"
primitive MysqlFS ocf:heartbeat:Filesystem \
params device="/dev/drbd0" directory="/mydata" fstype="ext3" \
op start interval="0" timeout="60s" \
op stop interval="0" timeout="60s"
primitive myip ocf:heartbeat:IPaddr \
params ip="192.168.2.100"          #羣集的虛擬ip地址
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.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87" \
cluster-infrastructure="openais" \
expected-quorum-votes="2" \
stonith-enabled="false" \
no-quorum-policy="ignore"
rsc_defaults $id="rsc-options" \
resource-stickiness="100"
查看運行狀態
[root@node1 ~]# crm status
============
Last updated: Sat Apr 21 02:05:49 2012
Stack: openais
Current DC: node1.magedu.com - partition with quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
4 Resources configured.
============
Online: [ node1.magedu.com node2.magedu.com ]
Master/Slave Set: MS_mysqldrbd
     Masters: [ node1.a.com ]
     Slaves: [ node2.a.com ]
MysqlFS
(ocf::heartbeat:Filesystem): Started node1.a.com
myip
(ocf::heartbeat:IPaddr): Started node1.a.com
mysqlserver
(lsb:mysqld):
Started node1.a.com
可見,服務現在在node1上正常運行
在node1上的操作,查看mysql的運行狀態
[root@node1 ~]# service mysqld status
MySQL running (5345)                                      [  OK  ]
查看目錄:
[root@node1 ~]# ls /mysqldata/
data  lost+found
查看vip的狀態
[root@node1 corosync]# ifconfig
inet addr:192.168.2.100 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:67 Base address:0x2000
繼續測試:
在node1上操作,讓node1下線:
[root@node1 ~]# crm node standby
查看集羣運行的狀態:
[root@node1 ~]# crm status
============
Last updated: Sat Apr 21 02:07:40 2012
Stack: openais
Current DC: node1.a.com - partition with quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
4 Resources configured.
============
Node node1.a.com:standby
Online: [ node2.a.com ]
Master/Slave Set: MS_mysqldrbd
     Masters: [ node2.a.com ]
     Stopped: [ mysqldrbd:1 ]
MysqlFS
(ocf::heartbeat:Filesystem): Started node2.a.com
myip
(ocf::heartbeat:IPaddr): Started node2.a.com
mysqlserver
(lsb:mysqld):
Started node2.a.com
可見我們的資源已經都切換到了node2上
查看node2的運行狀態
[root@node1 ~]# service mysqld status
MySQL running (7585)                                       [  OK  ]
查看目錄:
[root@node1 ~]# ls /mysqldata
data  lost+found
到現在一切正常,我們可以驗證mysql服務是否能被正常訪問
首先,在node2上面建立一個test用戶,密碼:123456.
我們定義的是通過vip:192.168.2.100來訪問mysql服務,現在node2上建立一個可以讓某個網段主機能訪問的賬戶(這個內容會同步drbd設備同步到node1上)
mysql >; grant all on *.* to test@'192.168.%.%' identified by '123456';
授予test用戶對mysql的訪問權限。
Query OK, 0 rows affected (0.08 sec)
mysql>; flush privileges;
Query OK, 0 rows affected (0.00 sec)
然後我們通過另一臺主機進行訪問:
[root@node1 ~]# mysql –u test –h 192.168.2.100
Mysql>show databases;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章