linux高可用性數據庫服務器羣集之DRBD+MYSQL+Corosync

 

一,搭建實驗環境

 

Vmware8.0.11

node1.liuwei.com: eth0:192.168.101.100   host-only

  添加 sdb1 1G 心跳線: eth1:192.168.2.1       VMnet2

node2.liuwei.com:  eth0: 192.168.101.200   host-only

  添加 sdb1 1G 心跳線:eth1:192.168.2.2        VMnet2

Corosync 虛擬IP: 192.168.101.254  

yum   倉庫

在 /root/drbd 有    drbd83-8.3.8-1.el5.centos.i386.rpm 

                     kmod-drbd83-8.3.8-1.el5.centos.i686.rpm 

在 /root/corosync 有

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做豐富pacemake的內容使用 
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 開啓資源代理用的 

在 /root/mysql 有

mysql-5.5.15-linux2.6-i686.tar.gz mysql的綠色軟件             

 

二, 設置兩臺服務器的網卡信息、hosts、主機名,時鐘同步及sdb硬盤初始化並使相互ping通

注.1-7node1與node2同

1.setup 設置 ip 地址 並添加sdb 硬盤

2.vim /etc/hosts

127.0.0.1       localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
192.168.101.100 node1.liuwei.com
192.168.101.200 node2.liuwei.com
3.vim /etc/sysconfig/network

 

NETWORKING=yes

NETWORKING_IPV6=yes

HOSTNAME=node1.liuwei.com  (node2爲node2.liuwei.com)

4.service network restart

5. hwclock -s

6.fdisk  /dev/sdb

n  p   1 +1000M  w 

7. partprobe /dev/sdb

 

 三.配置DRBD

1.cd  /root/drbd

 

 rpm -ivh drbd83-8.3.8-1.el5.centos.i386.rpm 

 rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.i686.rpm 

2. cd /etc/drbd.d/
3. vim global_common.conf
 

 

 global {

        usage-count yes;

        # minor-count dialog-refresh disable-ip-verification

}

common {

        protocol C;

      startup {

                wfc-timeout 120;

                 degr-wfc-timeout 120;

        }

      disk {

                on-io-error  detach;

                fencing     resource-only; }

net {

cram-hmac-alg "sha1";

shared-secret "liuwei";

}

    syncer {

            rate 100M;

        }

}

4.  vim mysql.res

 resource mysql {

        on node1.liuwei.com {

           device    /dev/drbd0;

           disk     /dev/sdb1;

           address 192.168.101.100:7789;

           meta-disk   internal;

}

          on node2.liuwei.com {

          device    /dev/drbd0;

          disk     /dev/sdb1;

          address 192.168.101.200:7789;

          meta-disk   internal; }

}

5.   vim /etc/drbd.conf

    include "drbd.d/global_common.conf";

    include "drbd.d/*.res";

6. drbdadm  create-md mysql

7. service drbd start

8.創建文件系統(只可以在primary節點上進行) 
[root@node1 drbd.d]# mkfs -t ext3 /dev/drbd0 格式化 
[root@node1 drbd.d]# mkdir /mysql 創建掛載點 
[root@node1 drbd.d]# mount /dev/drbd0 /mysql/ 進行掛載 
[root@node1 drbd.d]#cd /mysql 
[root@node1 mysqldata]#touch f1 f2 創建2個文件 
[root@node1 ~]#umount /mysql 卸載drbd設備 
[root@node1 ~]# drbdadm secondary mysql 將node1設置爲secondary節點 
[root@node1 ~]# drbd-overview 
0:mysql Connected Secondary/Secondary UpToDate/UpToDate C r---- 
11:將node2設置爲primary節點 
[root@node2 ~]# drbdadm primary mysql 
[root@node2 ~]# drbd-overview 
0:mysql Connected Primary/Secondary UpToDate/UpToDate C r---- 
[root@node2 ~]#mkdir /mysql
[root@node2 ~]#mount /dev/drbd0 /mysql 
[root@node2 ~]# umount /mysql/ 卸載設備 
至此我們的drbd已經正常安裝完成!!! 
 

四.mysql的安裝和配置 

1:node1上的配置 
添加用戶和組: 
# groupadd -r mysql 
# useradd -g mysql -r mysql 
由於主設備才能讀寫,掛載,故我們還要設置node1爲主設備,node2爲從設備: 
node2上操作: 
# drbdadm secondary mysql 
node1上操作: 
# drbdadm primary mysql 
[root@node1 ~]# drbd-overview 
0:mysql Connected Primary/Secondary UpToDate/UpToDate C r---- 
掛載drbd設備: 
# mount /dev/drbd0 /mysql 
# mkdir /mysql/data 
data目錄要用存放mysql的數據,故改變其屬主屬組: 
# chown -R mysql.mysql /mysql/data/ 
查看: 
# ls /mysql/ 
data
mysql的安裝; 
# tar zxvf mysql-5.5.15-linux2.6-i686.tar.gz -C /usr/local 
# cd /usr/local/ 
# ln -sv mysql-5.5.15-linux2.6-i686  mysql 
# cd mysql 
# chown -R mysql:mysql  . 
初始化mysql數據庫: 
# scripts/mysql_install_db --user=mysql --datadir=/mysql/data 
# chown -R root  . 
爲mysql提供主配置文件: 
# cp support-files/my-large.cnf  /etc/my.cnf 
並修改此文件中thread_concurrency的值爲你的CPU個數乘以2,比如這裏使用如下行: 
# vim /etc/my.cnf 
thread_concurrency = 2 
另外還需要添加如下行指定mysql數據文件的存放位置: 
datadir = /mysql/data 
爲mysql提供sysv服務腳本,使其能使用service命令: 
# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld 
node2上的配置文件,sysv服務腳本和此相同,故直接複製過去: 
# scp /etc/my.cnf node2:/etc/ 
# scp /etc/rc.d/init.d/mysqld node2:/etc/rc.d/init.d 
添加至服務列表: 
# chkconfig --add mysqld 
確保開機不能自動啓動,我們要用CRM控制: 
# chkconfig mysqld off 
而後就可以啓動服務測試使用了: 
# service mysqld start 
測試之後關閉服務: 
# ls /mysql/data  查看其中是否有文件 
[root@node1 mysql]# ls /mysql/data/ 
# service mysqld stop 
爲了使用mysql的安裝符合系統使用規範,並將其開發組件導出給系統使用,這裏還需要進行如下步驟: 
輸出mysql的man手冊至man命令的查找路徑: 
# vim /etc/man.config 
添加如下行即可: 
MANPATH  /usr/local/mysql/man 
輸出mysql的頭文件至系統頭文件路徑/usr/include,這可以通過簡單的創建鏈接實現: 
# ln -sv /usr/local/mysql/include  /usr/include/mysql 
輸出mysql的庫文件給系統庫查找路徑:(文件只要是在/etc/ld.so.conf.d/下並且後綴是.conf就可以) 
# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf 
而後讓系統重新載入系統庫: 
# ldconfig 
修改PATH環境變量,讓系統所有用戶可以直接使用mysql的相關命令: 
#vim /etc/profile 
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 
卸載drbd設備: 
# umount /mysql 
2,node2上的配置: 
添加用戶和組: 
# groupadd -r mysql 
# useradd -g mysql -r mysql 
由於主設備才能讀寫,掛載,故我們還要設置node2爲主設備,node1爲從設備: 
node1上操作: 
# drbdadm secondary mysql 
node2上操作: 
# drbdadm primary mysql 
掛載drbd設備: 
# mount /dev/drbd0 /mysql 
查看: 
# ls /mysql/ 
data  lost+found 
mysql的安裝; 
# tar zxfv mysql-5.5.15-linux2.6-i686.tar.gz -C /usr/local 
# cd /usr/local/ 
# ln -sv mysql-5.5.15-linux2.6-i686  mysql 
# cd mysql 
一定不能對數據庫進行初始化,因爲我們在node1上已經初始化了: 
# chown -R root:mysql  . 
mysql主配置文件和sysc服務腳本已經從node1複製過來了,不用在添加。 
添加至服務列表: 
# chkconfig --add mysqld 
確保開機不能自動啓動,我們要用CRM控制: 
# chkconfig mysqld off 
而後就可以啓動服務測試使用了:(確保node1的mysql服務停止) 
# service mysqld start 
測試之後關閉服務: 
# ls /mysql/data  查看其中是否有文件 
[root@node2 mysql]# ls /mysql/data/ 
# service mysqld stop 

爲了使用mysql的安裝符合系統使用規範,並將其開發組件導出給系統使用,這裏還需要進行一些類似node1上的操作,由於方法完全相同,不再闡述! 
卸載設備: 
# umount /dev/drbd0 

 至此我們的mysql已經正常安裝完成!!!

五.corosync的安裝和配置

1.hwclock -s

2.ssh-keygen   -t rsa

3.ssh-copy-id  -i .ssh/id_rsa.pub  root@node2

4.cd  /root/corosyns/

yum localinstall *.rpm  --nogpgcheck

5.cd /etc/corosync/

6. cp corosync.conf.example  corosync.conf
7.vim   corosync.conf
8.compatibility: whitetank  (表示兼容corosync 0.86的版本,向後兼容,兼容老的版本,一些
                           新的功能可能無法實用)
 
(圖騰的意思  ,多個節點傳遞心跳時的相關協議的信息)
totem {
        version: 2  版本號
        secauth: off  是否代開安全認證
        threads: 0   多少個現成認證  0 無限制
        interface {
                ringnumber: 0   
                bindnetaddr: 192 168.1.1  通過哪個網絡地址進行通訊,可以給個主機地址(給成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  (手動創建目錄)
        debug: off  排除時可以起來
        timestamp: on 日誌中是否記錄時間
 
      一下是openais的東西,可以不用代開
        logger_subsys {
                subsys: AMF 
                debug: off 
        }   
}
 
amf {
        mode: disabled
}
補充一些東西,前面只是底層的東西,因爲要用pacemaker
 
 
service {
        ver: 0
        name: pacemaker
}
雖然用不到openais ,但是會用到一些子選項
 
aisexec {
        user: root
        group: root
}
9. mkdir /var/log/cluster
10.爲了便面其他主機加入該集羣,需要認證,生成一個authkey
 [root@node1 corosync]# corosync-keygen    (需要實用/etc/urandom,對於一個新的主機,可能會卡到哪裏)
11. 通過到node2上去  (使用 -p  以保留權限)
[root@node1 corosync]# scp -p authkey  corosync.conf node2:/etc/corosync/
authkey                                          100%  128     0.1KB/s   00:00    
corosync.conf                                    100%  513     0.5KB/s   00:00    
12.[root@node1 corosync]# ssh node2 'mkdir /var/log/cluster'
13.在node1上啓動服務
 
[root@node1 corosync]# service corosync start

11.驗證corosync引擎是否正常啓動了

  [root@node1 corosync]# grep -i  -e "corosync cluster engine" -e "configuration file" /var/log/messages  

12.查看初始化成員節點通知是否發出

   [root@node1 corosync]# grep -i totem /var/log/messages 

13.檢查過程中是否有錯誤產生

   grep -i error:  /var/log/messages  |grep -v unpack_resources  (便面stonith的錯誤)

14.檢查pacemaker時候已經啓動了

15 .前集羣的節點上啓動另外一個節點

  [root@node1 corosync]# ssh node2 '/etc/init.d/corosync start'

Starting Corosync Cluster Engine (corosync): [  OK  ]

16.將前面的驗證步驟在另外一個節點上再次驗證一次

17.在任何一個節點上  查看集羣的成員狀態

 

[root@node2 corosync]# crm status

 18.如何驗證該文件的語法錯誤

[root@node1 corosync]# crm_verify  -L

可以看到有stonith錯誤,在高可用的環境裏面,會禁止實用任何支援

可以禁用stonith 

 [root@node1 corosync]# crm

crm(live)# configure

crm(live)configure#  property stonith-enabled=false

crm(live)configure# commit 

crm(live)configure# show

19再次進行檢查

[root@node1 corosync]# crm_verify  -L

沒有錯誤了

系統上有專門的stonith命令

20.

現在用的資源

ip地址  http服務  共享存儲

用資源代理進行配置

ocf  lsb

使用list可以查看

crm(live)ra# classes 

heartbeat

lsb

ocf / heartbeat pacemaker

stonith

21,配置一個資源,可以在configuration 下面進行配置

 crm(live)configure#  primitive mysqlIP ocf:heartbeat:IPaddr  params ip=192.168.101.254

 crm(live)configure# show

 crm(live)configure# commit

 crm(live)configure#end

 crm(live)# status

22.

定義mysql的資源

 crm(live)configure# primitive mysqlserver lsb:mysqld

 crm(live)configure# show

 crm(live)configure# commit

 crm(live)configure#end

 crm(live)# status

23定義組

 crm(live)configure# group mysql mysqlIP  mysqlserver 

 crm(live)configure# show

 crm(live)configure# commit

 crm(live)configure#end

 crm(live)# status

三、  

    

    1.將節點corosync 服務停止 

      [root@node1 corosync]# service corosync stop

    2. 在節點2上進行觀察

     [root@node2 corosync]# crm  status

可以看到沒有票數

25.改變quorum

 crm(live)configure# property no-quorum-policy=ignore

 crm(live)configure# show

 crm(live)configure# commit

 crm(live)configure#end

 crm(live)# status

26.在節點2 上停止  corosync  服務  [root@node2 corosync]# service corosync stop

在節點1上查看   [root@node1 corosync]# crm  status

 

 

 

 

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