Heartbeat+DRBD+mysql高可用方案

www.521voip.com  專注雲計算

Heartbeat+DRBD+mysql高可用方案           

 

  1. 1.1方案簡介

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

  1. 1.2方案優缺點

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

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

  1. 1.3方案架構圖

  1. 1.4方案適用場景

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

  1. 1.5方案實戰

  2. 1.5.1實戰環境介紹

主機名

Ip

系統

DRBD磁盤

Heartbeat版本

dbserver1

10.1.1.113

Centos 5.5 64bit

/dev/sdb1

2.1.3

dbserver2

10.1.1.108

Centos 5.5 64bit

/dev/sdb1

2.1.3

 

  1. 1.5.2DRBD的安裝

官網的說法,如果系統內核(linux)版本低於2.6.33,在安裝軟件之前需要加載DRBD模塊,我的內核版本是2.6.18的,安裝後會自動加載drbd模塊。安裝命令如下:

yum install -y drbd83 kmod-drbd83

安裝後使用lsmod | grep drbd命令查看是否加載drbd模塊,如果沒有加載需要手動運行命令加載,命令如下:

insmod drbd/drbd.ko 或者 modprobe drbd

  1. 1.5.3DRBD的配置

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

對於DRBD的配置,只需要配置/etc/drbd.conf和hosts文件即可,dbserver1和dbserver2的hosts添加的內容如下:

10.1.1.113 dbserver1

10.1.1.108 dbserver2

我的/etc/drbd.conf文件的內容如下(dbserver1和dbserver2的配置一樣):

global { usage-count yes; }

common { syncer { rate 10M; } }

resource r0 {

protocol C;

startup {

}

disk {

on-io-error detach;

#size 1G;

}

net {

}

on dbserver1 {

device /dev/drbd0;

disk /dev/sdb1;

address 10.1.1.113:7888;

meta-disk internal;

}

on dbserver2 {

device /dev/drbd0;

disk /dev/sdb1;

address 10.1.1.108:7888;

meta-disk internal;

}

}

  1. 1.5.4DRBD的管理維護

  2. 創建DRBD資源

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

drbdadm create-md r0# r0爲配置文件中定義的資源名

  • 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的狀態

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

drbdadm -- --overwrite-data-of-peer primary all

mkfs.ext3 /dev/drbd0

mkdir /drbd

mount /dev/drbd0 /drbd

掛在後可以往/drbd目錄寫入一些測試數據,看看是否能同步到從節點上。

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

DRBD已經安裝並且能正常同步了,那麼我們接下來要做的就是將本機的已安裝的mysql的數據遷移到drbd上,這裏爲了簡單就不考慮新安裝數據庫的情形了,因爲新安裝的時候只需要將數據目錄指定到drbd中並將my.cnf配置文件放到drbd中即可。具體的數據遷移步驟如下:

  1. a)關閉dbserver1和dbserver2的mysql,/etc/rc.d/init.d/mysqld stop

  2. b)在dbserver1上創建存放數據庫數據的目錄:mkdir /drbd/dbdata

  3. c)在dbserver1將配置文件放到drbd目錄中:

mv /etc/my.cnf /drbd/dbdata/

刪除dbserver2上的/etc/my.cnf,rm -f /etc/my.cnf

在dbserver1和dbserver2上執行如下命令創建軟鏈接。

ln -s /drbd/dbdata/my.cnf /etc/my.cnf

  1. d)修改/etc/my.cnf的數據目錄指向/drbd/dbdata

  2. e)將原來的mysql數據文件移動到/drbd/dbdata

  3. f)執行chown -R mysql.mysql /drbd/dbdata

  4. g)啓動mysql

 

  • 手工切換DRBD

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

  1. a)在dbserver1上停止mysql,/etc/rc.d/init.d/mysqld stop。

  2. b)在dbserver1上執行umount /dev/drbd0。

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

  4. d)在dbserver2上執行drbdadmprimary all,將dbserver2提升爲主模式,並觀察/proc/drbd是否正常。

  5. e)在dbserver2上執行mount /dev/drbd0 /drbd掛在文件系統。

  6. f)啓動dbserver2的mysql,/etc/rc.d/init.d/mysqld start。

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

  • 主從切換

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

umount /dev/drbd0

drbdadm secondary all

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

drbdadmprimary all 如果不成功drbdsetup /dev/drbd0 primary -o

mount /dev/drbd0 /drbd/

  • DRBD腦裂後的處理

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

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

drbdadm secondary r0

drbdadm -- --discard-my-data connect r0

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

drbdadm connect r0

 

  1. 1.5.5Heartbeat的安裝

在DRBD調試沒有問題之後,就可以開始安裝和配置heartbeat了,Master和backup服務器都需要安裝heardheat軟件。下面兩種安裝方式任選其一。

  • Rpm包的安裝方式

yum -y install heartbeat-*

  • 源代碼編譯安裝方式

wget http://www.ultramonkey.org/download/heartbeat/2.1.3/heartbeat-2.1.3.tar.gz

tar xzvf heartbeat-2.1.3.tar.gz

cd heartbeat-2.1.3

./configure

Make

make install

  1. 1.5.6Heartbeat的配置

Hearbeat的配置主要包括三個配置文件,authkeys,ha.cf和haresources的配置,下面就分別來看!

  • Hosts文件的配置

需要在hosts文件中添加master和backup主機,加快節點間的通信

Master和backup的hosts節點添加的內容一樣,我的配置添加如下內容:

vim /etc/hosts

# dbserver1和dbserver2是我的master和backup的主機名

10.1.1.113 dbserver1

  1. 10.1.1.108 dbserver2

  2. Authkerys的配置

這個文件用來配置密碼認證方式,支持3種認證方式,crc,md5和sha1,從左到右安全性越來越高,消耗的資源也越多。因此如果heartbeat運行在安全的網路之上,比如私網,那麼可以將驗證方式設置成crc,master和backup的authkeys配置一樣。我的authkeys文件配置如下:

vim /etc/ha.d/authkeys

auth 1

1 crc

  • ha.cf的配置

master(dbserver1)的ha.cf的配置

vim /etc/ha.d/ha.cf

logfile /var/log/ha-log

logfacilitylocal0

keepalive 2

deadtime 30

warntime 10

initdead 60

udpport 694

ucast eth0 10.1.1.108

auto_failback on

nodedbserver1

nodedbserver2

ping 10.1.1.1

respawn hacluster /usr/lib64/heartbeat/ipfail

backup(dbserver2)的ha.cf的配置

vim /etc/ha.d/ha.cf

logfile /var/log/ha-log

logfacilitylocal0

keepalive 2

deadtime 30

warntime 10

initdead 60

udpport 694

ucast eth0 10.1.1.113

auto_failback on

nodedbserver1

nodedbserver2

ping 10.1.1.1

respawn hacluster /usr/lib64/heartbeat/ipfail

  • haresources的配置

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

vim /etc/ha.d/haresources

dbserver1 IPaddr::10.1.1.176/24/eth0:1 drbddisk::r0 Filesystem::/dev/drbd0::/drbd::ext3 mysqld

  1. 1.5.7Heartbeat的管理

配置好heartbeat之後,需要將mysql從自啓動服務器中去掉,因爲主heartbeat啓動的時候會掛載drdb文件系統以及啓動mysql,切換的時候會將主上的mysql停止並卸載文件系統,從上會掛載文件系統,並啓動mysql。因此需要做如下操作:

chkconfig mysqld off

chkconfig --add heartbeat

chkconfig heartbeat on

或者將heartbeat的啓動命令你寫到/etc/rc.local啓動文件中去。

  1. 1.5.8Heartbeat+DRBD測試

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

  • 停掉master上的mysqld,看看是否切換(因爲heartheat不檢查服務的可用性,因此需要你通過而外的腳本來實現,方法前面已經描述)。

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

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

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

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

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

  1. 1.5.9Heartbeat+DRBD監控

由於heartbeat不能監控mysql的可用性,因此需要通過其他的方式來實現,對於mysql可用性的監控是必須的,如果發生切換,需要第一時間


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