heartbeat+drbd+mysql:实现最廉价的高可用组合
1.什么是DRBD
DRBD(Distributed?Replicated?Block?Device),DRBD?號稱是?"網(wǎng)絡(luò)?RAID",開源軟件,由?LINBIT?公司開發(fā)。
2.DRBD的主要功能
DRBD實(shí)際上是一種塊設(shè)備的實(shí)現(xiàn)啦,主要被用于Linux平臺下的高可用(HA)方案之中。它是由內(nèi)核模塊和相關(guān)程序而組成,通過網(wǎng)絡(luò)通信來同步鏡像整個設(shè)備,有點(diǎn)類似于一個網(wǎng)絡(luò)RAID的功能。也就是說當(dāng)讀者你將數(shù)據(jù)寫入本地的DRBD設(shè)備上的文件系統(tǒng)時,數(shù)據(jù)會同時被發(fā)送到網(wǎng)絡(luò)中的另外一臺主機(jī)之上啦,并以完全相同的形式記錄在一個文件系統(tǒng)中(實(shí)際上文件系統(tǒng)的創(chuàng)建也是由DRBD的同步來實(shí)現(xiàn)的)。本地節(jié)點(diǎn)(主機(jī))與遠(yuǎn)程節(jié)點(diǎn)(主機(jī))的數(shù)據(jù)可以保證實(shí)時的同步,并保證IO的一致性。所以當(dāng)本地節(jié)點(diǎn)的主機(jī)出現(xiàn)故障時,遠(yuǎn)程節(jié)點(diǎn)的主機(jī)上還會保留有一份完全相同的數(shù)據(jù),可以繼續(xù)使用,以達(dá)到高可用的目的。
3.DRBD的主要應(yīng)用
如果主服務(wù)器當(dāng)?shù)衾?#xff0c;造成的損失是不可估量的。要保證主服務(wù)器不間斷服務(wù),就需要對服務(wù)器實(shí)現(xiàn)冗余。在眾多的實(shí)現(xiàn)服務(wù)器冗余的解決方案中,heartbeat為我們提供了廉價(jià)的、可伸縮的高可用集群方案啦。我們通過heartbeat?+?drbd在Linux下創(chuàng)建一個高可用(HA)的集群服務(wù)器,在高可用(HA)解決方案中使用DRBD的功能,可以代替使用一個共享盤陣存儲設(shè)備。因?yàn)閿?shù)據(jù)同時存在于本地主機(jī)和遠(yuǎn)程主機(jī)上,在遇到需要切換的時候,遠(yuǎn)程主機(jī)只需要使用它上面的那份備份數(shù)據(jù),就可以繼續(xù)提供服務(wù)了。
4.DRBD于mysql的關(guān)系
MySQL?與?LINBIT?達(dá)成了合作關(guān)系,大張旗鼓的搞了這個?"12?天?Scale-Out"?活動,也是這個商業(yè)合作驅(qū)動的吧。DRBD?助力?MySQL,?號稱可以得到四個?9?的可靠性,這不低于任何一款商業(yè)數(shù)據(jù)庫軟件了。
DRBD?的出現(xiàn)的確對?MySQL?集群的可用性有很大提高。而且,有獨(dú)到的特點(diǎn),非常適合面向互聯(lián)網(wǎng)的應(yīng)用。因?yàn)槭窃诖鎯拥臄?shù)據(jù)塊同步,很容易的做到應(yīng)用層的?IO?負(fù)載均衡(備機(jī)承擔(dān)一定的讀壓力),不但支持?jǐn)?shù)據(jù)庫失敗接管,還能做到?IP?失敗接管,接管時間小于?30?秒,真是窮人的絕佳集群解決方案。
heartbeat的安裝這里小編就不細(xì)講了,讀者可以看看的小編的博客http://wnqcmq.blog.51cto.com/5200614/1179525
以下的配置兩個節(jié)點(diǎn)都必須一致,為了減少工作量,小編這里在主節(jié)點(diǎn)上配置,然后使用scp傳輸?shù)絺浞莨?jié)點(diǎn)
5.hosts文件以及主機(jī)名的配置
[root@primary?~]#?vim?/etc/hosts
192.168.110.6?primary.zzdx.com
192.168.110.7?standby.zzdx.com
[root@primary?~]#?scp?/etc/hosts?192.168.20.2:/etc
修改主機(jī)名
[root@primary?~]#?vim?/etc/sysconfig/network?
HOSTNAME=primary.zzdx.com?//備份節(jié)點(diǎn)的主機(jī)名是standby.zzdx.com
6.drbd的安裝
由于小編使用的是5.4的紅帽啦,內(nèi)核(2.6.18)中不包含drbd(2.6.33的內(nèi)核中已經(jīng)有了),小編這里安裝相應(yīng)的軟件包和內(nèi)核模塊就是了
kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
drbd83-8.3.8-1.el5.centos.i386.rpm
使用rpm?-ivh?安裝就是了
drbd83安裝后包含的文件
[root@primary?~]#?rpm?-ql?drbd83
7.drbd配置
[root@primary?~]#?cp?/usr/share/doc/drbd83-8.3.8/drbd.conf?/etc/
[root@primary?~]#?cd?/etc/drbd.d/
[root@primary?drbd.d]#?cp?global_common.conf?global_common.conf.bak
[root@primary?drbd.d]#?vim?global_common.conf?//修改成為下面的內(nèi)容
global?{
usage-count?no;
#?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?"mydrbdlab";
}
syncer?{
rate?100M;
}
?
}
8.定義資源
小編這里有一塊2G的磁盤(/dev/sdb),那就作為塊設(shè)備吧
[root@primary?drbd.d]#?vim?mysql.res
resource?mysql{
on?primary.zzdx.com?{?#?每個主機(jī)的說明以”on”開頭,后面是主機(jī)名在{}內(nèi)的是配置
device?/dev/drbd1;?#?今后生成使用的設(shè)備名;不用和實(shí)際分區(qū)號一樣.不過最好規(guī)范
disk?/dev/sdb;?#?該節(jié)點(diǎn)上用于存放數(shù)據(jù)的分區(qū)號
address?192.168.20.1:7898;?#?該節(jié)點(diǎn)的IP地址
meta-disk?internal;?#?meta?data信息存放方式“網(wǎng)絡(luò)”
}
?
on?standby.zzdx.com?{?#?每個主機(jī)的說明以”on”開頭,后面是主機(jī)名在{}內(nèi)的是配置
device?/dev/drbd1;?#?今后生成使用的設(shè)備名;不用和實(shí)際分區(qū)號一樣.不過最好規(guī)范
disk?/dev/sdb;?#?該節(jié)點(diǎn)上用于存放數(shù)據(jù)的分區(qū)號
address?192.168.20.2:7898;?#?該節(jié)點(diǎn)的IP地址
meta-disk?internal;?#?meta?data信息存放方式“網(wǎng)絡(luò)”
}
}
將配置文件、全局配置文件以及資源文件傳輸?shù)絺浞莨?jié)點(diǎn)上
[root@primary?drbd.d]#?scp?global_common.conf?mysql.res?192.168.20.2:/etc/drbd.d/
9.創(chuàng)建drbd資源
[root@primary?drbd.d]#?drbdadm?create-md?mysql?//在備份節(jié)點(diǎn)上也要做
Writing?meta?data...
initializing?activity?log
NOT?initialized?bitmap
New?drbd?meta?data?block?successfully?created.
[root@standby?drbd.d]#?drbdadm?create-md?mysql
Writing?meta?data...
initializing?activity?log
NOT?initialized?bitmap
New?drbd?meta?data?block?successfully?created.
10.開啟兩個節(jié)點(diǎn)上的drbd服務(wù)
主節(jié)點(diǎn)上的狀態(tài)
[root@primary?~]#?service?drbd?start
Starting?DRBD?resources:?[?
mysql
Found?valid?meta?data?in?the?expected?location,?2147479552?bytes?into?/dev/sdb.
d(mysql)?s(mysql)?n(mysql)?].
備份節(jié)點(diǎn)上的狀態(tài)
[root@standby?drbd.d]#?service?drbd?start
Starting?DRBD?resources:?[?
mysql
Found?valid?meta?data?in?the?expected?location,?2147479552?bytes?into?/dev/sdb.
d(mysql)?s(mysql)?n(mysql)?].
查看drbd狀態(tài)
[root@primary?drbd.d]#?cat?/proc/drbd
version:?8.3.8?(api:88/proto:86-94)
GIT-hash:?d78846e52224fd00562f7c225bcc25b2d422321d?build?by?mockbuild@builder10.centos.org,?2010-06-04?08:04:16
?
1:?cs:Connected?ro:Secondary/Secondary?ds:Inconsistent/Inconsistent?C?r----
ns:0?nr:0?dw:0?dr:0?al:0?bm:0?lo:0?pe:0?ua:0?ap:0?ep:1?wo:b?oos:2097052
/proc/drbd/中顯示了DRBD當(dāng)前的狀態(tài).
ro:顯示兩臺主機(jī)的狀態(tài).都是“備機(jī)/備機(jī)”.ds:是磁盤狀態(tài).都是“不一致/不一致”
11.主節(jié)點(diǎn)搶占資源
[root@primary?drbd.d]#?drbdsetup?/dev/drbd1?primary?-o?//首次使用用這種方式
[root@primary?drbd.d]#?drbdadm?primary?all
[root@primary?drbd.d]#?cat?/proc/drbd?//這時候會同步更新數(shù)據(jù)的
version:?8.3.8?(api:88/proto:86-94)
GIT-hash:?d78846e52224fd00562f7c225bcc25b2d422321d?build?by?mockbuild@builder10.centos.org,?2010-06-04?08:04:16
?
1:?cs:SyncSource?ro:Primary/Secondary?ds:UpToDate/Inconsistent?C?r----
ns:780040?nr:0?dw:0?dr:788224?al:0?bm:47?lo:1?pe:2?ua:256?ap:0?ep:1?wo:b?oos:1317052
[======>.............]?sync'ed:?37.4%?(1317052/2097052)K?delay_probe:?47
finish:?0:00:23?speed:?55,672?(55,712)?K/sec
ro:顯示兩臺主機(jī)的狀態(tài).”主機(jī)/備機(jī)”?ds:是磁盤狀態(tài).都是“upTodate/不一致”
可以看出[>....................]?sync'ed:?正在同步了已經(jīng)進(jìn)度37.4%
?
12.格式化/dev/drbd1的文件系統(tǒng),建立相應(yīng)的掛載點(diǎn),以便后續(xù)使用
[root@primary?drbd.d]#?mkfs?-t?ext3?/dev/drbd1
[root@primary?~]#?mkdir?/mnt/mysql/?//主節(jié)點(diǎn)上建立mysql的掛載點(diǎn)
修改兩個節(jié)點(diǎn)mysql的配置文件,將數(shù)據(jù)目錄修改為/mnt/mysql(小編這里的mysql是使用linux?5.4自帶的)
[root@primary?~]#?vim?/etc/my.cnf
datadir=/mnt/mysql
13.heartbeat的配置
如果讀者你的heartbeat的安裝都是按照小編博客的步驟來的話,那么接下來的修改配置就很簡單啦
首先修改ha.cf文件,將兩個節(jié)點(diǎn)加進(jìn)去(如果已經(jīng)加過了就不用加了)
[root@primary?~]#?cd?/etc/ha.d/
[root@primary?ha.d]#?vim?ha.cf
node?primary.zzdx.com
node?standby.zzdx.com
創(chuàng)建新的資源腳本(這些資源腳本都放在/etc/ha.d/resource.d/目錄下啦),當(dāng)然同樣的,兩端都服務(wù)器得有,作為資源讓heartbeat控制
[root@primary?~]#?cd?/etc/ha.d/resource.d/
[root@primary?resource.d]#?vim?usemysql
#!/bin/bash
unset?LC_ALL?;?export?LC_ALL
unset?LANGUAGE?;?export?LANGUAGE
prefix=/usr
exec_prefix=/usr
.?/etc/ha.d/shellfuncs
?
function?start(){
/sbin/drbdadm?primary?all?#提升為primary
/bin/mount?/dev/drbd1?/mnt/mysql?#掛載
service?mysqld?start
}
?
function?stop(){
service?mysqld?stop
/bin/umount?/mnt/mysql?#注意釋放權(quán)限的時候必須先卸載
/sbin/drbdadm?secondary?all?#降為secondary
}
case?$1?in
start)
start
;;
?
stop)
stop
;;
?
*)
echo?“Usage:?$0?{?start?|?stop?}”
;;
?
esac
exit?0
[root@primary?resource.d]#?chmod?a+x?usemysql
[root@primary?resource.d]#?scp?usemysql?192.168.20.2:/etc/ha.d/resource.d/
添加資源控制到配置文件
[root@primary?resource.d]#?cd?..
[root@primary?ha.d]#?vim?haresources
primary.zzdx.com?IPaddr::192.168.110.1/28/eth0/192.168.110.15?usemysql
[root@primary?~]#?scp?/etc/ha.d/haresources?192.168.20.2:/etc/ha.d/
啟動heartbeat服務(wù)
[root@primary?~]#?service?heartbeat?start
[root@standby?~]#?service?heartbeat?start
14.測試并查看狀態(tài)
在主節(jié)點(diǎn)上查看資源狀態(tài)
在主節(jié)點(diǎn)上使用mysql,創(chuàng)建數(shù)據(jù)庫文件,看看在當(dāng)資源切換的時候是否能看見
[root@primary?~]#?mysqladmin?-u?root?password?123456?//初始化root密碼
主節(jié)點(diǎn)主動釋放資源,備份節(jié)點(diǎn)接管資源
[root@primary?~]#?/usr/lib/heartbeat/hb_standby?
2013/06/15_08:32:51?Going?standby?[all].
查看primary節(jié)點(diǎn)日志狀態(tài)
查看備份節(jié)點(diǎn)日志狀態(tài)
在備份節(jié)點(diǎn)上使用mysql試試能不能查看到在主節(jié)點(diǎn)創(chuàng)建的數(shù)據(jù)庫
看到了吧,成功了吧,呵呵
好了,到這里小編算是吧要想實(shí)現(xiàn)的東西整完了,讀者自己試試吧,正如前面所說的,目前使用drbd是為了最少的花錢,但是效率上可想而知啦,個人覺得IP-SAN是比較折中的方案啦
轉(zhuǎn)載于:https://blog.51cto.com/wnqcmq/1222297
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的heartbeat+drbd+mysql:实现最廉价的高可用组合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在Power 750上实现硬盘背板的
- 下一篇: 向大家推荐几本数据库入门的书