heartbeat v1(CRM)+DRBD實現數據庫服務器高可用集羣搭建

. 方案簡介


本方案採用Heartbeat雙機熱備軟件來保證數據庫的高穩定性和連續性,數據的一致性由DRBD這個工具來保證。默認情況下只有一臺mysql在工作,當主mysql服務器出現問題後,系統將自動切換到備機上繼續提供服務,當主數據庫修復完畢,又將服務切回繼續由主mysql提供服務。

 

. 方案優缺點

優點:安全性高、穩定性高、可用性高,出現故障自動切換,

缺點:只有一臺服務器提供服務,成本相對較高。不方便擴展。可能會發生腦裂。

 

. 方案架構圖

wKioL1So0PfB1zd5AAJL2hXekwc553.jpg

方案適用場景

本方案適用於數據庫訪問量不太大,短期內訪問量增長不會太快,對數據庫可用性要求非常高的場景。

 

配置HA集羣前提:

1、節點之間時間必須同步;

建議使用ntp協議進行;

2、節點之間必須要通過主機名互相通信;

建議使用hosts文件;

通信中使用的名字必須與其節點爲上“uname -n”命令展示出的名字保持一致;

3、如果是2個節點,需要仲裁設備;

4、節點之間彼此root用戶能基於ssh密鑰方式進行通信;

注意:定義爲集羣服務中的任意資源都不能開機自動啓動,因爲它們將由CRM啓動;

具體設置參考前文:http://sohudrgon.blog.51cto.com/3088108/1598704


. 方案實現

 

1. 實驗環境介紹

    wKiom1So0HWTy6n6AACLlNGO440828.jpg

2.DRBD的安裝

DRBD介紹

官方站點:http://www.drbd.org/

 

DRBD(DistributedReplicatedBlockDevice)是一個基於塊設備級別在遠程服務器直接同步和鏡像數據的軟件,用軟件實現的、無共享的、服務器之間鏡像塊設備內容的存儲複製解決方案。它可以實現在網絡中兩臺服務器之間基於塊設備級別的實時鏡像或同步複製(兩臺服務器都寫入成功)/異步複製(本地服務器寫入成功),相當於網絡的RAID1,由於是基於塊設備(磁盤,LVM邏輯卷),在文件系統的底層,所以數據複製要比cp命令更快。DRBD已經被MySQL官方寫入文檔手冊作爲推薦的高可用的方案之一.

 

獲取DRBD軟件程序,CentOS 6.6的內核版本是2.6.32-504

[root@node1 ~]# uname -r

2.6.32-504.el6.x86_64

 

DRBD已經合併到linux kernel2.6.33及以後內核版本中,這裏直接安裝管理工具即可,若內核版本低於2.6.33時請額外安裝DRBD內核模塊,且與管理工具版本保持一致。

kmod-drbd84-8.4.5-504.1.el6.x86_64.rpm

drbd84-utils-8.9.1-1.el6.elrepo.x86_64.rpm

# rpm -ivhdrbd84-utils-8.9.1-1.el6.elrepo.x86_64.rpmkmod-drbd84-8.4.5-504.1.el6.x86_64.rpm

 

3.DRBD的配置

可以參考我的前一篇文章:http://sohudrgon.blog.51cto.com/3088108/1598767

我這裏就只帖配置了!

配置之前需要先使用fdisk/dev/sdb進行分區。

# echo -n -e"n\np\n3\n\n+1G\nw\n" |fdisk /dev/sda
# partx -a /dev/sda

 

配置文件的內容如下(node1node2的配置一樣)

[root@node1 drbd.d]# cat global_common.conf
# DRBD is the result of over a decade ofdevelopment by LINBIT.
# In case you need professional servicesfor DRBD or have
# feature requests visithttp://www.linbit.com
 
global {
       usage-count no;
       # minor-count dialog-refresh disable-ip-verification
}
 
common {
       handlers {
                # These are EXAMPLE handlersonly.
                # They may have severeimplications,
                # like hard resetting the nodeunder certain circumstances.
                # Be careful when chosing yourpoison.
 
                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/lib/drbd/crm-fence-peer.sh";
                # split-brain"/usr/lib/drbd/notify-split-brain.sh root";
                # out-of-sync"/usr/lib/drbd/notify-out-of-sync.sh root";
                # before-resync-target"/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
                # after-resync-target/usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
       }
 
       startup {
                # wfc-timeout degr-wfc-timeoutoutdated-wfc-timeout wait-after-sb
       }
 
       options {
                # cpu-maskon-no-data-accessible
       }
 
       disk {
                on-io-error detach;
                # size on-io-error fencingdisk-barrier disk-flushes
                # disk-drain md-flushesresync-rate resync-after al-extents
                # c-plan-ahead c-delay-targetc-fill-target c-max-rate
                # c-min-rate disk-timeout
       }
 
       net {
                protocol C;
                cram-hmac-alg "sha1";
                shared-secret"password";
                # protocol timeoutmax-epoch-size max-buffers unplug-watermark
                # connect-int ping-intsndbuf-size rcvbuf-size ko-count
                # allow-two-primariescram-hmac-alg shared-secret after-sb-0pri
                # after-sb-1pri after-sb-2prialways-asbp rr-conflict
                # ping-timeoutdata-integrity-alg tcp-cork on-congestion
                # congestion-fillcongestion-extents csums-alg verify-alg
                # use-rle
       }
 
       syncer  {
                rate 1000M;
       }
}

 

資源配置文件:

[root@node1 drbd.d]# cat mystore.res
resource mystore {
       on node1.stu31.com {
                device /dev/drbd0;
                disk /dev/sda3;
                address 172.16.31.10:7789;
                meta-disk internal;
       }
 
       on node2.stu31.com {
                device /dev/drbd0;
                disk /dev/sda3;
                address 172.16.31.11:7789;
                meta-disk internal;
       }
}

 

複製一份到node2

[root@node1 drbd.d]# scp *node2:/etc/drbd.d/

 

4. DRBD的管理維護

創建DRBD資源

配置好drbd以後,就需要使用命令在node1node2上創建配置的drbd資源,使用如下命令:

[root@node1 drbd.d]# drbdadm create-mdmystore  # mystore爲配置文件中定義的資源名
[root@node2 drbd.d]# drbdadm create-mdmystore

 

DRBD的啓動和停止

#/etc/rc.d/init.d/drbd start    #啓動drbd

#/etc/rc.d/init.d/drbd stop     #停止drbd

#/etc/rc.d/init.d/drbd restart  #重啓drbd

 

查看DRBD狀態

#watch -n 1 'cat /proc/drbd'

#/etc/init.d/drbd status

以上兩種方式都可以查看drbd的狀態

 

5.  設置當前節點爲主節點,並進行格式化和掛載

由於默認沒有主次節點之分,因而需要設置兩個主機的主次節點,選擇需要設置爲主節點的主機,然後執行如下

node1爲主節點

#強制設置主節點

[root@node1 ~]# drbdadm primary --force mystore
[root@node1 ~]# drbd-overview
 0:mystore/0 SyncSource Primary/Secondary UpToDate/Inconsistent
       [====>...............] sync'ed: 29.0% (754064/1059216)K

完成後查看節點狀態:

[root@node1 ~]# cat /proc/drbd
version: 8.4.5 (api:1/proto:86-101)
GIT-hash:1d360bde0e095d495786eaeb2a1ac76888e4db96 build by [email protected],2015-01-02 12:06:20
 0:cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
   ns:1059216 nr:0 dw:0 dr:1059888 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:foos:0

 

6.格式化存儲

[root@node1 ~]# mke2fs -t ext4 /dev/drbd0

 

掛載到一個目錄:

[root@node1 ~]# mount /dev/drbd0 /mnt

複製一個文件到mnt

[root@node1 ~]# cp /etc/issue /mnt

卸載存儲:

[root@node1 ~]# umount /mnt

 

7.切換主節點爲備節點,將node2提升爲主節點

節點1設置爲備節點:

[root@node1 ~]# drbdadm secondary mystore
[root@node1 ~]# drbd-overview
 0:mystore/0 Connected Secondary/Secondary UpToDate/UpToDate

提升節點2爲主節點:

[root@node2 ~]# drbdadm primary mystore
[root@node2 ~]# drbd-overview
 0:mystore/0 Connected Primary/Secondary UpToDate/UpToDate

掛載文件系統,查看文件是否存在:

[root@node2 ~]# mount /dev/drbd0 /mnt
[root@node2 ~]# ls /mnt
issue lost+found

卸載存儲:

[root@node2 ~]# umount /mnt

 

 

注意:

1mount drbd設備以前必須把設備切換到primary狀態。

2)兩個節點中,同一時刻只能有一臺處於primary狀態,另一臺處於secondary狀態。

3)處於secondary狀態的服務器上不能加載drbd設備。

4)主備服務器同步的兩個分區大小最好相同,這樣不至於浪費磁盤空間,因爲drbd磁盤鏡像相當於網絡raid 1

 

8.初始化安裝mariadb/mysql數據庫

我們將drbd設備作爲數據庫的數據存儲目錄,我們在本地創建文件夾,將drbd0掛載到此文件夾。

[root@node1 ~]# mkdir /mydata
[root@node1 ~]# drbdadm primary all
[root@node1 ~]# drbd-overview      
 0:mystore/0 Connected Primary/Secondary UpToDate/UpToDate
[root@node1 ~]# mount /dev/drbd0 /mydata
[root@node1 ~]# ls /mydata/
issue lost+found

掛載成功!

 

初始化安裝mariadb必須在主節點進行:

創建用戶mysql管理數據庫及配置數據存儲目錄權限爲mysql,兩個節點都需要創建用戶

# groupadd -r -g 306 mysql
# useradd -r -g 306 -u 306 mysql

創建數據存放目錄:

[root@node1 ~]# mkdir /mydata/data
[root@node1 ~]# chown -R mysql:mysql/mydata/data/

 

獲取mariadb數據庫的二進制安裝包:

mariadb-5.5.40-linux-x86_64.tar.gz

 

解壓安裝包到/usr/local:

[root@node1 ~]# tar xfmariadb-5.5.40-linux-x86_64.tar.gz -C /usr/local/

 

創建軟鏈接:

[root@node1 ~]# cd /usr/local
[root@node1 local]# ln -svmariadb-5.5.40-linux-x86_64/ mysql
`mysql' -> `mariadb-5.5.40-linux-x86_64/'

 

進入安裝目錄:

[root@node1 local]# cd mysql
[root@node1 mysql]# pwd
/usr/local/mysql
[root@node1 mysql]# chown -R root:mysql ./*

初始化安裝mariadb

[root@node1 mysql]#scripts/mysql_install_db --user=mysql --datadir=/mydata/data

安裝完成後查看數據目錄:

[root@node1 mysql]# ls /mydata/data/
aria_log.00000001  aria_log_control  mysql performance_schema  test

 

安裝成功!

 

mariadb配置文件的存放,如果我們希望一個節點的配置文件更改後,備節點同步更新,那麼配置文件需要存放在drbd存儲上是最合適的!

[root@node1 mysql]# cp support-files/my-large.cnf /mydata/data/my.cnf
[root@node1 mysql]# vim /mydata/data/my.cnf
[mysqld]
port            = 3306
datadir         = /mydata/data
socket          = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
# Try number of CPU's*2 forthread_concurrency
thread_concurrency = 8
innodb_file_per_table = on
skip_name_resolve = on

 

在本地創建軟鏈接指向配置文件目錄:

系統默認存在一個,不需要就刪除:

[root@node1 mysql]# ls /etc/my.cnf
/etc/my.cnf
[root@node1 mysql]# rm -rf /etc/my.cnf
[root@node1 mysql]# ln -sv/mydata/data/my.cnf /etc/my.cnf
`/etc/my.cnf' -> `/mydata/data/my.cnf'

 

服務腳本的創建:關閉開機自啓動

[root@node1 mysql]# cp support-files/mysql.server/etc/init.d/mysqld
[root@node1 mysql]# chkconfig --add mysqld
[root@node1 mysql]# chkconfig mysqld off

 

啓動服務測試:

[root@node1 mysql]# service mysqld start
Starting MySQL.                                           [  OK  ]

登錄mysql創建數據庫:

[root@node1 mysql]#/usr/local/mysql/bin/mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.40-MariaDB-log MariaDBServer
 
Copyright (c) 2000, 2014, Oracle, MontyProgram Ab and others.
 
Type 'help;' or '\h' for help. Type '\c' toclear the current input statement.
 
MariaDB [(none)]> create databasetestdb;
Query OK, 1 row affected (0.00 sec)
 
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| testdb             |
+--------------------+
5 rows in set (0.00 sec)
 
MariaDB [(none)]> \q
Bye

 

停止數據庫服務:

[root@node1 mysql]# service mysqld stop
Shutting down MySQL.                                       [  OK  ]

 

現在開始到節點2配置mariadb數據庫:

先降級節點1爲從節點:

卸載存儲:

[root@node1 mysql]# umount /mydata

降級:

[root@node1 mysql]# drbdadm secondarymystore
[root@node1 mysql]# drbd-overview
 0:mystore/0 Connected Secondary/Secondary UpToDate/UpToDate

將節點2升級爲主節點:

[root@node2 ~]# drbdadm primary mystore
[root@node2 ~]# drbd-overview
 0:mystore/0 Connected Primary/Secondary UpToDate/UpToDate

創建drbd設備掛載目錄:

[root@node2 ~]# mkdir /mydata
[root@node2 ~]# chown -R mysql:mysql/mydata

 

掛載drbd設備:

[root@node2 ~]# mount /dev/drbd0 /mydata
[root@node2 ~]# ls /mydata/
data issue  lost+found
[root@node2 ~]# ls /mydata/data/
aria_log.00000001  ib_logfile0 mysql            node1.stu31.com.err  testdb
aria_log_control   ib_logfile1 mysql-bin.000001 performance_schema
ibdata1            my.cnf       mysql-bin.index   test

 

數據是同步了的!

 

解壓二進制程序安裝包:

[root@node2 ~]# tar xfmariadb-5.5.40-linux-x86_64.tar.gz -C /usr/local

 

創建軟鏈接:

[root@node2 ~]# cd /usr/local
[root@node2 local]# ln -svmariadb-5.5.40-linux-x86_64/ mysql
`mysql' ->`mariadb-5.5.40-linux-x86_64/'
[root@node2 local]# cd mysql
[root@node2 mysql]# chown -R root:mysql ./*

 

創建服務腳本:只需要服務腳本了,其它都已經在node1上配好了。

[root@node2 mysql]# cp support-files/mysql.server/etc/init.d/mysqld
[root@node2 mysql]# chkconfig --add mysqld

 

配置文件需要軟鏈接至/etc目錄下:

[root@node2 mysql]# rm /etc/my.cnf
rm: remove regular file `/etc/my.cnf'? y
[root@node2 mysql]# ln -sv/mydata/data/my.cnf /etc/my.cnf
`/etc/my.cnf' -> `/mydata/data/my.cnf'

 

啓動mysqld服務:

[root@node2 mysql]# service mysqld start
Starting MySQL...                                         [  OK  ]

 

查看在節點1上建立的數據庫testdb是否存在:

[root@node2 mysql]#/usr/local/mysql/bin/mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.40-MariaDB-log MariaDBServer
 
Copyright (c) 2000, 2014, Oracle, MontyProgram Ab and others.
 
Type 'help;' or '\h' for help. Type '\c' toclear the current input statement.
 
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| testdb             |
+--------------------+
5 rows in set (0.09 sec)
#授權遠程用戶登錄
MariaDB [(none)]> grant all on *.* to'root'@'172.16.%.%' identified by 'oracle';
Query OK, 0 rows affected (0.03 sec)
 
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
 
MariaDB [(none)]> \q
Bye

 

安裝成功!

 

停止mysqld服務:

[root@node2 mysql]# service mysqld stop
Shutting down MySQL..                                      [  OK  ]

卸載DRBD設備:

[root@node2 mysql]# umount /dev/drbd0

關閉DRBD服務:

[root@node1 mysql]# service drbd stop
Stopping all DRBD resources: .
[root@node2 mysql]# service drbd stop
Stopping all DRBD resources: .

 

關閉數據庫服務的自啓動:兩個節點都需要設置

# chkconfig mysqld off

 

下面就可以進行heartbeat的安裝了!

 

###########################################################################################

9. 遷移mysql的數據到drdb(假設你的mysql已經在該服務器上安裝好了)

DRBD已經安裝並且能正常同步了,那麼我們接下來要做的就是將本機的已安裝的mysql的數據遷移到drbd,具體的數據遷移步驟如下:

a) 關閉node1node2mysql/etc/rc.d/init.d/mysqld stop

b) node1上創建存放數據庫數據的目錄:mkdir -pv /mydata/data

c) node1將配置文件放到drbd目錄中:

#mv /etc/my.cnf /mydata/data

 

刪除node1上的/etc/my.cnfrm -f /etc/my.cnf

 

node1node2上執行如下命令創建軟鏈接。

#ln -s /mydata/data/my.cnf /etc/my.cnf

d)  修改/etc/my.cnf的數據目錄指向/mydata/data/

e)  將原來的mysql數據文件移動到/mydata/data/

f)  執行chown -R mysql.mysql /mydata/data/

g)  啓動mysql

 

 

10. 手工切換DRBD

在沒有安裝配置drbd之前,drbd是不能自動切換的,我們可以寫出過程來加深對drbd的理解,也更能明白heartbeat的工作流程,下面是手工切換的步驟:

a)  node1上停止mysql/etc/rc.d/init.d/mysqld stop

b)  node1上執行umount  /dev/drbd0

c)  node1上執行drbdadm secondary all切換到從模式。當兩個節點都是secondary模式的時候纔可以將node2設置成primary

d)  node2上執行drbdadm  primary all,將node2提升爲主模式,並觀察/proc/drbd是否正常。

e)  node2上執行mount /dev/drbd0 /mydata掛在文件系統。

f)  啓動node2mysql/etc/rc.d/init.d/mysqld start

注意:node1node2上的mysql用戶的uidgid要一樣。不然切換後會導致mysql數據目錄的屬主不正確而啓動失敗。

 

11. 主從切換

主切換成從,需要先卸載文件系統,再執行降級爲從的命令:

#umount /dev/drbd0
#drbdadm secondary all

 

從切換成主,要先執行升級成主的命令然後掛在文件系統:

#drbdadm primary all   #如果不成功drbdsetup/dev/drbd0 primary -o
#mount /dev/drbd0 /drbd/

 

12. DRBD腦裂後的處理

DRBD出現腦裂後,會導致drbd兩邊的磁盤不一致,處理方法如下:

在確定要作爲從的節點上切換成secondary,並放棄該資源的數據:

#drbdadm secondary mystore
#drbdadm -- --discard-my-data connect mystore

在要作爲primary的節點重新連接secondary(如果這個節點當前的連接狀態爲WFConnection的話,可以省略),使用如下命令連接:

#drbdadm connect mystore

###########################################################################################

 

13. heartbeat的安裝

DRBD調試沒有問題之後,就可以開始安裝和配置heartbeat了。需要確認DRBD和數據庫服務都是關閉的。

 

Heartbeat介紹

官方站點:http://linux-ha.org/wiki/Main_Page

 

heartbeat可以資源(VIP地址及程序服務)從一臺有故障的服務器快速的轉移到另一臺正常的服務器提供服務,heartbeatkeepalived相似,heartbeat可以實現failover功能,但不能實現對後端的健康檢查.

 

獲取heartbeat程序組:

[root@node1 heartbeat2]# ls
heartbeat-2.1.4-12.el6.x86_64.rpm
heartbeat-gui-2.1.4-12.el6.x86_64.rpm
heartbeat-ldirectord-2.1.4-12.el6.x86_64.rpm
heartbeat-pils-2.1.4-12.el6.x86_64.rpm
heartbeat-stonith-2.1.4-12.el6.x86_64.rpm

 

安裝程序包組:

node1node2都需要安裝;

前提條件需要安裝如下依賴包:

[root@node1 heartbeat2]# yum install -ynet-snmp-libs libnet PyXML

安裝heartbeat套件程序:

[root@node1 heartbeat2]# rpm -ivhheartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpmheartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-gui-
2.1.4-12.el6.x86_64.rpm
Preparing...               ########################################### [100%]
  1:heartbeat-pils        ########################################### [ 25%]
  2:heartbeat-stonith     ########################################### [ 50%]
  3:heartbeat             ########################################### [ 75%]
  4:heartbeat-gui         ########################################### [100%]

 

 

14. Heartbeat的配置

Hearbeat的配置主要包括三個配置文件,authkeysha.cfharesources的配置,下面就分別來看!

複製配置文件模版到/etc/ha.d目錄下:

[root@node1 ~]# cd/usr/share/doc/heartbeat-2.1.4/
[root@node1 heartbeat-2.1.4]# cp authkeysha.cf haresources /etc/ha.d/

 

Authkerys的配置

這個文件用來配置密碼認證方式,支持3種認證方式,crcmd5sha1,從左到右安全性越來越高,消耗的資源也越多。因此如果heartbeat運行在安全的網路之上,比如私網,那麼可以將驗


證方式設置成crcmasterbackupauthkeys配置一樣。我的authkeys文件配置如下:

[root@node1 ~]# vim /etc/ha.d/authkeys
auth 2
2    sha1   password123

 

ha.cf的配置

需要先設置一下rsyslog

配置rsyslog記錄heartbeat的日誌

[root@node1 ~]# vim /etc/rsyslog.conf
local0.*                                               /var/log/heartbeat.log
[root@node1 ~]# scp /etc/rsyslog.confnode2:/etc/rsyslog.conf
rsyslog.conf                                   100%3203     3.1KB/s   00:00

 

ha.cf的配置文件:

[root@node1 ha.d]# cat /etc/ha.d/ha.cf|grep -v ^#
#定義heartbeat的日誌記錄
logfacility     local0
#設定心跳(檢測)時間爲2秒
keepalive 2
#設置死亡時間爲15秒
deadtime 30
warntime 10
initdead 120
#採用組播的方式傳遞信息
mcast eth0 225.135.121.21 694 1 0
#當Primary機器發生故障切換到Secondary機器後Primary恢復後是否進行切回操作
auto_failback on
node   node1.stu31.com
node   node2.stu31.com
ping   172.16.0.1

 

 

haresources的配置

haresources用來設置master的主機名、虛擬IP、服務以及磁盤掛載等,node1node2的配置是一樣的,下面的mysqld需要做成服務,放在/etc/rc.d/init.d/目錄下,配置配置如下:

[root@node1 ha.d]# cat/etc/ha.d/haresources |grep -v ^#
node1.stu31.com   IPaddr::172.16.31.180/24/eth0/172.16.31.255drbddisk::mystore Filesystem::/dev/drbd0::/mydata::ext4  mysqld

 

注:該文件內IPaddr,Filesystem等腳本存放路徑在/etc/ha.d/resource.d/,也可在該目錄下存放服務啓動腳本(例如:mysqld,將相同腳本名稱添到/etc/ha.d/haresources內容中,從而跟隨heartbeat啓動而啓動該腳本。

#cp /etc/init.d/mysqld  /etc/ha.d/resource.d/

IPaddr::172.16.31.180/24/eth0:用IPaddr腳本配置浮動VIP

drbddisk::mystore:用drbddisk腳本實現DRBD主從節點資源組的掛載和卸載

Filesystem::/dev/drbd0::/mydata::ext4:用Filesystem腳本實現磁盤掛載和卸載

 

 

設置完成後,將authkeys文件的權限改爲400600,再複製配置文件到節點2

[root@node1 ha.d]# chmod 400 authkeys
[root@node1 ha.d]# scp authkeys ha.cfharesources  node2:/etc/ha.d/
authkeys                                                                                                                         100%  678    0.7KB/s   00:00   
ha.cf                                                                                                                            100%   10KB  10.3KB/s  00:00   
haresources                                                                                                                       100%6011     5.9KB/s   00:00

 

先啓動drbd服務:

兩個節點都啓動drbd服務:

#service drbd start

#設置主節點爲node1

[root@node1 ha.d]# drbd-overview

 0:mystore/0 Connected Primary/Secondary UpToDate/UpToDate

不用掛載。

 

啓動heartbeat服務:

[root@node1 ha.d]# service heartbeat start;ssh node2 'service heartbeat start'
logd is already running
Starting High-Availability services:
2015/01/04_10:38:05 INFO:  Resource is stopped
Done.
 
logd is already running
Starting High-Availability services:
2015/01/04_10:38:05 INFO:  Resource is stopped
Done.

需要注意的問題:

(1).在啓動Heartbeat服務之前,一定要先啓動drbd服務。

(2).chkconfig mysqld off關閉mysqld服務自啓動,這個服務的啓動與關閉應由heartbeat負責執行。

 

查看掛載:

[root@node1 ha.d]# mount
/dev/mapper/vg0-root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts(rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/mapper/vg0-usr on /usr type ext4 (rw)
/dev/mapper/vg0-var on /var type ext4 (rw)
none on /proc/sys/fs/binfmt_misc typebinfmt_misc (rw)
/dev/drbd0 on /mydata type ext4 (rw)
[root@node1 ha.d]# ls /mydata
data issue  lost+found

 

查看監聽端口是否啓動:

[root@node1 ha.d]# ss -tunl |grep 3306
tcp   LISTEN     0      50                     *:3306                  *:*

 

 

查看drbd狀態:

[root@node1 ha.d]# drbd-overview
 0:mystore/0 Connected Primary/Secondary UpToDate/UpToDate /mydata ext4 987M 31M 904M4%

 

查看heartbeat的日誌文件:

[root@node1 ha.d]# tail/var/log/heartbeat.log
Jan 4 12:09:20 node1 Filesystem[4905]: INFO: Resource is stopped
Jan 4 12:09:20 node1 ResourceManager[4659]: info: Running/etc/ha.d/resource.d/Filesystem /dev/drbd0 /mydata ext4 start
Jan 4 12:09:20 node1 ResourceManager[4659]: debug: Starting/etc/ha.d/resource.d/Filesystem /dev/drbd0 /mydata ext4 start
Jan 4 12:09:20 node1 Filesystem[4986]: INFO: Running start for /dev/drbd0 on/mydata
Jan 4 12:09:20 node1 Filesystem[4986]: INFO: Starting filesystem check on/dev/drbd0
Jan 4 12:09:20 node1 Filesystem[4975]: INFO: Success
Jan 4 12:09:20 node1 ResourceManager[4659]: debug:/etc/ha.d/resource.d/Filesystem /dev/drbd0 /mydata ext4 start done. RC=0
Jan 4 12:09:20 node1 ResourceManager[4659]: info: Running/etc/ha.d/resource.d/mysqld  start
Jan 4 12:09:20 node1 ResourceManager[4659]: debug: Starting/etc/ha.d/resource.d/mysqld  start
Jan 4 12:09:22 node1 ResourceManager[4659]: debug:/etc/ha.d/resource.d/mysqld  start done.RC=0

 

客戶端連接數據庫服務器進行測試:

[root@nfs ~]# mysql -h 172.16.31.180 -uroot-poracle
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.40-MariaDB-log MariaDBServer
 
Copyright (c) 2000, 2013, Oracle and/or itsaffiliates. All rights reserved.
 
Oracle is a registered trademark of OracleCorporation and/or its
affiliates. Other names may be trademarksof their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' toclear the current input statement.
 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| testdb             |
+--------------------+
5 rows in set (0.08 sec)
 
mysql> \q
Bye

 

15.Heartbeat+DRBD測試

環境搭建好以後,就需要進行周密的測試,看是否實現了預期的功能:

停掉masterheartheat看看是否能正常切換。

停掉master的網絡或者直接將master系統shutdown,看看能否正常切換。

啓動masterheartbeat看看是否能正常切換回來。

重新啓動master看看能否切換過程是否OK

注意:這裏說的切換是指是否已經將mysql停掉、是否卸載了文件系統等等。

 

我們將節點1heartbeat服務關閉:

[root@node1 ha.d]# service heartbeat stop
Stopping High-Availability services:
Done.

 

查看DRBD狀態:成了備節點

[root@node1 ha.d]# drbd-overview        
 0:mystore/0 Connected Secondary/Primary UpToDate/UpToDate

 

mysql服務關閉:查看mysqld服務監聽端口:

[root@node1 ha.d]# ss -tunl |grep 3306

 

 

node2查看:

heartbeat服務狀態:

[root@node2 ~]# service heartbeat status
heartbeat OK [pid 4296 et al] is running onnode2.stu31.com [node2.stu31.com]...

 

DRDB服務狀態:

[root@node2 ~]# drbd-overview
 0:mystore/0 Connected Primary/Secondary UpToDate/UpToDate /mydata ext4 987M 31M 904M4%

 

mysqld服務監聽端口啓動:

[root@node2 ~]# ss -tunl |grep 3306
tcp   LISTEN     0      50                     *:3306                  *:*

文件系統掛載成功:  

[root@node2 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg0-root   20G 507M   19G   3% /
tmpfs                 499M     0 499M   0% /dev/shm
/dev/sda1             190M   28M 153M  16% /boot
/dev/mapper/vg0-usr   9.8G 3.0G  6.4G  32% /usr
/dev/mapper/vg0-var    20G 255M   19G   2% /var
/dev/drbd0            987M   31M 904M   4% /mydata

 

 

再次進行遠程連接:

[root@nfs ~]# mysql -h 172.16.31.180 -uroot-poracle
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.40-MariaDB-log MariaDBServer
 
Copyright (c) 2000, 2013, Oracle and/or itsaffiliates. All rights reserved.
 
Oracle is a registered trademark of OracleCorporation and/or its
affiliates. Other names may be trademarksof their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' toclear the current input statement.
 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| testdb             |
+--------------------+
5 rows in set (0.07 sec)
 
mysql> \q
Bye

在node1上再次啓動heartbeat服務:

[root@node1 ha.d]# service heartbeat start
Starting High-Availability services: 
2015/01/04_13:33:07 INFO:  Resource is stopped
Done.
[root@node1 ha.d]# drbd-overview          
 0:mystore/0  Connected Secondary/Secondary UpToDate/UpToDate 
[root@node1 ha.d]# drbd-overview
 0:mystore/0  Connected Primary/Secondary UpToDate/UpToDate /mydata ext4 987M 31M 904M 4% 
[root@node1 ha.d]# ss -tunl |grep 3306    
tcp    LISTEN     0      50                     *:3306                  *:*


節點1恢復後會自動成爲主節點。

 

測試成功。

至此,一個heartbeat+DRBD+mysql構成的高可用集羣就完成了!

 

 

 


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