heartbeat+drbd+mysql:实现最廉价的高可用组合
1.什么是DRBD
DRBD(Distributed?Replicated?Block?Device),DRBD?號稱是?"網絡?RAID",開源軟件,由?LINBIT?公司開發。
2.DRBD的主要功能
DRBD實際上是一種塊設備的實現啦,主要被用于Linux平臺下的高可用(HA)方案之中。它是由內核模塊和相關程序而組成,通過網絡通信來同步鏡像整個設備,有點類似于一個網絡RAID的功能。也就是說當讀者你將數據寫入本地的DRBD設備上的文件系統時,數據會同時被發送到網絡中的另外一臺主機之上啦,并以完全相同的形式記錄在一個文件系統中(實際上文件系統的創建也是由DRBD的同步來實現的)。本地節點(主機)與遠程節點(主機)的數據可以保證實時的同步,并保證IO的一致性。所以當本地節點的主機出現故障時,遠程節點的主機上還會保留有一份完全相同的數據,可以繼續使用,以達到高可用的目的。
3.DRBD的主要應用
如果主服務器當掉啦,造成的損失是不可估量的。要保證主服務器不間斷服務,就需要對服務器實現冗余。在眾多的實現服務器冗余的解決方案中,heartbeat為我們提供了廉價的、可伸縮的高可用集群方案啦。我們通過heartbeat?+?drbd在Linux下創建一個高可用(HA)的集群服務器,在高可用(HA)解決方案中使用DRBD的功能,可以代替使用一個共享盤陣存儲設備。因為數據同時存在于本地主機和遠程主機上,在遇到需要切換的時候,遠程主機只需要使用它上面的那份備份數據,就可以繼續提供服務了。
4.DRBD于mysql的關系
MySQL?與?LINBIT?達成了合作關系,大張旗鼓的搞了這個?"12?天?Scale-Out"?活動,也是這個商業合作驅動的吧。DRBD?助力?MySQL,?號稱可以得到四個?9?的可靠性,這不低于任何一款商業數據庫軟件了。
DRBD?的出現的確對?MySQL?集群的可用性有很大提高。而且,有獨到的特點,非常適合面向互聯網的應用。因為是在存儲層的數據塊同步,很容易的做到應用層的?IO?負載均衡(備機承擔一定的讀壓力),不但支持數據庫失敗接管,還能做到?IP?失敗接管,接管時間小于?30?秒,真是窮人的絕佳集群解決方案。
heartbeat的安裝這里小編就不細講了,讀者可以看看的小編的博客http://wnqcmq.blog.51cto.com/5200614/1179525
以下的配置兩個節點都必須一致,為了減少工作量,小編這里在主節點上配置,然后使用scp傳輸到備份節點
5.hosts文件以及主機名的配置
[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
修改主機名
[root@primary?~]#?vim?/etc/sysconfig/network?
HOSTNAME=primary.zzdx.com?//備份節點的主機名是standby.zzdx.com
6.drbd的安裝
由于小編使用的是5.4的紅帽啦,內核(2.6.18)中不包含drbd(2.6.33的內核中已經有了),小編這里安裝相應的軟件包和內核模塊就是了
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?//修改成為下面的內容
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),那就作為塊設備吧
[root@primary?drbd.d]#?vim?mysql.res
resource?mysql{
on?primary.zzdx.com?{?#?每個主機的說明以”on”開頭,后面是主機名在{}內的是配置
device?/dev/drbd1;?#?今后生成使用的設備名;不用和實際分區號一樣.不過最好規范
disk?/dev/sdb;?#?該節點上用于存放數據的分區號
address?192.168.20.1:7898;?#?該節點的IP地址
meta-disk?internal;?#?meta?data信息存放方式“網絡”
}
?
on?standby.zzdx.com?{?#?每個主機的說明以”on”開頭,后面是主機名在{}內的是配置
device?/dev/drbd1;?#?今后生成使用的設備名;不用和實際分區號一樣.不過最好規范
disk?/dev/sdb;?#?該節點上用于存放數據的分區號
address?192.168.20.2:7898;?#?該節點的IP地址
meta-disk?internal;?#?meta?data信息存放方式“網絡”
}
}
將配置文件、全局配置文件以及資源文件傳輸到備份節點上
[root@primary?drbd.d]#?scp?global_common.conf?mysql.res?192.168.20.2:/etc/drbd.d/
9.創建drbd資源
[root@primary?drbd.d]#?drbdadm?create-md?mysql?//在備份節點上也要做
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.開啟兩個節點上的drbd服務
主節點上的狀態
[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)?].
備份節點上的狀態
[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狀態
[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當前的狀態.
ro:顯示兩臺主機的狀態.都是“備機/備機”.ds:是磁盤狀態.都是“不一致/不一致”
11.主節點搶占資源
[root@primary?drbd.d]#?drbdsetup?/dev/drbd1?primary?-o?//首次使用用這種方式
[root@primary?drbd.d]#?drbdadm?primary?all
[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: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:顯示兩臺主機的狀態.”主機/備機”?ds:是磁盤狀態.都是“upTodate/不一致”
可以看出[>....................]?sync'ed:?正在同步了已經進度37.4%
?
12.格式化/dev/drbd1的文件系統,建立相應的掛載點,以便后續使用
[root@primary?drbd.d]#?mkfs?-t?ext3?/dev/drbd1
[root@primary?~]#?mkdir?/mnt/mysql/?//主節點上建立mysql的掛載點
修改兩個節點mysql的配置文件,將數據目錄修改為/mnt/mysql(小編這里的mysql是使用linux?5.4自帶的)
[root@primary?~]#?vim?/etc/my.cnf
datadir=/mnt/mysql
13.heartbeat的配置
如果讀者你的heartbeat的安裝都是按照小編博客的步驟來的話,那么接下來的修改配置就很簡單啦
首先修改ha.cf文件,將兩個節點加進去(如果已經加過了就不用加了)
[root@primary?~]#?cd?/etc/ha.d/
[root@primary?ha.d]#?vim?ha.cf
node?primary.zzdx.com
node?standby.zzdx.com
創建新的資源腳本(這些資源腳本都放在/etc/ha.d/resource.d/目錄下啦),當然同樣的,兩端都服務器得有,作為資源讓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?#注意釋放權限的時候必須先卸載
/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服務
[root@primary?~]#?service?heartbeat?start
[root@standby?~]#?service?heartbeat?start
14.測試并查看狀態
在主節點上查看資源狀態
在主節點上使用mysql,創建數據庫文件,看看在當資源切換的時候是否能看見
[root@primary?~]#?mysqladmin?-u?root?password?123456?//初始化root密碼
主節點主動釋放資源,備份節點接管資源
[root@primary?~]#?/usr/lib/heartbeat/hb_standby?
2013/06/15_08:32:51?Going?standby?[all].
查看primary節點日志狀態
查看備份節點日志狀態
在備份節點上使用mysql試試能不能查看到在主節點創建的數據庫
看到了吧,成功了吧,呵呵
好了,到這里小編算是吧要想實現的東西整完了,讀者自己試試吧,正如前面所說的,目前使用drbd是為了最少的花錢,但是效率上可想而知啦,個人覺得IP-SAN是比較折中的方案啦
轉載于:https://blog.51cto.com/wnqcmq/1222297
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的heartbeat+drbd+mysql:实现最廉价的高可用组合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在Power 750上实现硬盘背板的
- 下一篇: .htaccess伪静态实例记录