天天看點

heartbeat v1(CRM)+DRBD實作資料庫伺服器高可用叢集搭建

一. 方案簡介

本方案采用Heartbeat雙機熱備軟體來保證資料庫的高穩定性和連續性,資料的一緻性由DRBD這個工具來保證。預設情況下隻有一台mysql在工作,當主mysql伺服器出現問題後,系統将自動切換到備機上繼續提供服務,當主資料庫修複完畢,又将服務切回繼續由主mysql提供服務。

二. 方案優缺點

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

缺點:隻有一台伺服器提供服務,成本相對較高。不友善擴充。可能會發生腦裂。

三. 方案架構圖

<a href="http://s3.51cto.com/wyfs02/M00/58/0A/wKioL1So0PfB1zd5AAJL2hXekwc553.jpg" target="_blank"></a>

四.  方案适用場景

本方案适用于資料庫通路量不太大,短期内通路量增長不會太快,對資料庫可用性要求非常高的場景。

配置HA叢集前提:

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

建議使用ntp協定進行;

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

建議使用hosts檔案;

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

3、如果是2個節點,需要仲裁裝置;

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

注意:定義為叢集服務中的任意資源都不能開機自動啟動,因為它們将由CRM啟動;

具體設定參考前文:http://dengaosky.blog.51cto.com/9215128/1964550

五. 方案實作

實驗環境介紹

<a href="http://s3.51cto.com/wyfs02/M00/58/0D/wKiom1So0HWTy6n6AACLlNGO440828.jpg" target="_blank"></a>

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://dengaosky.blog.51cto.com/9215128/1964590

我這裡就隻帖配置了!

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

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

# partx -a /dev/sda

BLKPG: Device or resource busy

error adding partition 1

error adding partition 2

error adding partition 3

配置檔案的内容如下(node1和node2的配置一樣):

[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 &gt; /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 &gt; /proc/sysrq-trigger ;reboot -f";

                local-io-error"/usr/lib/drbd/notify-io-error.sh;/usr/lib/drbd/notify-emergency-shutdown.sh; echo o &gt; /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 {

                address 172.16.31.11:7789;

複制一份到node2:

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

4. DRBD的管理維護

建立DRBD資源

配置好drbd以後,就需要使用指令在node1和node2上建立配置的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

       [====&gt;...............] 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

 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

注意:

(1)mount 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      

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

[root@node1 ~]# ls /mydata/

挂載成功!

初始化安裝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 xf mariadb-5.5.40-linux-x86_64.tar.gz -C /usr/local/

建立軟連結:

[root@node1 ~]# cd /usr/local

[root@node1 local]# ln -sv mariadb-5.5.40-linux-x86_64/ mysql

`mysql' -&gt; `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' -&gt; `/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)]&gt; create databasetestdb;

Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]&gt; show databases;

+--------------------+

| Database           |

| information_schema |

| mysql              |

| performance_schema |

| test               |

| testdb             |

5 rows in set (0.00 sec)

MariaDB [(none)]&gt; \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

将節點2更新為主節點:

建立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 xf mariadb-5.5.40-linux-x86_64.tar.gz -C /usr/local

[root@node2 ~]# cd /usr/local

[root@node2 local]# ln -sv mariadb-5.5.40-linux-x86_64/ mysql

`mysql' -&gt;`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

啟動mysqld服務:

[root@node2 mysql]# service mysqld start

Starting MySQL...                                         [  OK  ]

檢視在節點1上建立的資料庫testdb是否存在:

[root@node2 mysql]#/usr/local/mysql/bin/mysql

5 rows in set (0.09 sec)

#授權遠端使用者登入

MariaDB [(none)]&gt; grant all on *.* to'root'@'172.16.%.%' identified by 'oracle';

Query OK, 0 rows affected (0.03 sec)

MariaDB [(none)]&gt; flush privileges;

Query OK, 0 rows affected (0.00 sec)

停止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

關閉資料庫服務的自啟動:兩個節點都需要設定

# chkconfig mysqld off

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

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

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

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

a) 關閉node1和node2的mysql,/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.cnf,rm -f /etc/my.cnf

在node1和node2上執行如下指令建立軟連結。

#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)  啟動node2的mysql,/etc/rc.d/init.d/mysqld start。

注意:node1和node2上的mysql使用者的uid和gid要一樣。不然切換後會導緻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位址及程式服務)從一台有故障的伺服器快速的轉移到另一台正常的伺服器提供服務,heartbeat和keepalived相似,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

安裝程式包組:

node1和node2都需要安裝;

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

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

安裝heartbeat套件程式:

[root@node1 heartbeat2]# rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm heartbeat-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的配置主要包括三個配置檔案,authkeys,ha.cf和haresources的配置,下面就分别來看!

複制配置檔案模版到/etc/ha.d目錄下:

[root@node1 ~]# cd /usr/share/doc/heartbeat-2.1.4/

[root@node1 heartbeat-2.1.4]# cp auth keysha.cf haresources /etc/ha.d/

Authkerys的配置

這個檔案用來配置密碼認證方式,支援3種認證方式,crc,md5和sha1,從左到右安全性越來越高,消耗的資源也越多。是以如果heartbeat運作在安全的網路之上,比如私網,那麼可以将驗

證方式設定成crc,master和backup的authkeys配置一樣。我的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.conf node2:/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、服務以及磁盤挂載等,node1和node2的配置是一樣的,下面的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.255

drbddisk::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檔案的權限改為400或600,再複制配置檔案到節點2:

[root@node1 ha.d]# chmod 400 authkeys

[root@node1 ha.d]# scp authkeys ha.cf haresources  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

不用挂載。

啟動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.

需要注意的問題:

(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

檢視監聽端口是否啟動:

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

tcp   LISTEN     0      50                     *:3306                  *:*

檢視drbd狀态:

 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

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.

mysql&gt; show databases;

5 rows in set (0.08 sec)

mysql&gt; \q

15.Heartbeat+DRBD測試

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

停掉master的heartheat看看是否能正常切換。

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

啟動master的heartbeat看看是否能正常切換回來。

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

注意:這裡說的切換是指是否已經将mysql停掉、是否解除安裝了檔案系統等等。

我們将節點1的heartbeat服務關閉:

[root@node1 ha.d]# service heartbeat stop

Stopping High-Availability services:

檢視DRBD狀态:成了備節點

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

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

mysql服務關閉:檢視mysqld服務監聽端口:

到node2檢視:

heartbeat服務狀态:

[root@node2 ~]# service heartbeat status

heartbeat OK [pid 4296 et al] is running onnode2.stu31.com [node2.stu31.com]...

DRDB服務狀态:

mysqld服務監聽端口啟動:

[root@node2 ~]# ss -tunl |grep 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

再次進行遠端連接配接:

5 rows in set (0.07 sec)

在node1上再次啟動heartbeat服務:

[root@node1 ha.d]# service heartbeat start

Starting High-Availability services: 

2015/01/04_13:33:07 INFO:  Resource is stopped

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

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

 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構成的高可用叢集就完成了!

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