Mysql+Heartbeat+Drbd生产环境高可用部署若干问题解惑
Mysql+Heartbeat+Drbd生產(chǎn)環(huán)境高可用部署若干問題解惑:
############################################################
#
# Purpose: Mysql+Heartbeat+drbd高可用部署中學(xué)生的幾個(gè)疑惑解答
#
# USER????????? YYYY-MM-DD – ACTION?
# Oldboy??????? 2011-3-14 – Created
# QQ:31333741?? 老男孩?????? mail:31333741@qq.com
# 網(wǎng)站運(yùn)維QQ群:37081784 (進(jìn)群務(wù)必先看公告,更改群名片)
############################################################
??? 平時(shí)發(fā)現(xiàn)大家在使用Mysql+Heartbeat+Drbd高可用應(yīng)用時(shí) 或多或少的遇到了一些麻煩,這里老男孩針對(duì)大家
的問題挑有意義的一一解答如下。本人的水平有限,解答難免有錯(cuò)誤或偏頗的地方,請(qǐng)大家及時(shí)批評(píng)指正。讓我們共同
進(jìn)步,一起提高技能水平。
===========================================================
學(xué)生問題1.貌似虛擬機(jī)重啟,必須手動(dòng)執(zhí)行modprobe drbd 才能正常加載,不知道實(shí)體機(jī)是不是也會(huì)這樣?
老男孩解答:
?這個(gè)是可以設(shè)置的,如在rc.local里加入modprobe drbd,但我不推薦這樣做。
?主庫(kù)故障后,恢復(fù)后,DRBD應(yīng)該保留人工介入啟動(dòng),而不應(yīng)該自動(dòng)modprobe drbd && drbdadm up all.
?涉及到數(shù)據(jù)的操作還是謹(jǐn)慎為好。第一次 能正確切到備用機(jī)就算完成了高可用的任務(wù)了。
?此時(shí)修復(fù)故障機(jī)是正常應(yīng)該人工做的。
===========================================================
學(xué)生問題2:mcast eth1 225.0.0.1 694 1 0 -----當(dāng)同一IDC有多個(gè)這樣的情況,應(yīng)該使用單播.
老男孩解答:
即使是多個(gè)HEARTBEAT服務(wù)同時(shí)開,多播也沒有問題,多播地址不同即可(可選多播地址段224.0.0.0 - 239.255.255.255),一般路由器、交換機(jī)等等應(yīng)該都是多播的形式。
===========================================================
學(xué)生問題3:
master故障,slave自動(dòng)切換沒有問題,此時(shí)所有的數(shù)據(jù)都通過slave寫入,當(dāng)master恢復(fù)的時(shí)候,此時(shí),還能按照之前的操作來進(jìn)行嗎? 數(shù)據(jù)會(huì)自動(dòng)同步過去嗎??做了試驗(yàn),按照以上的操作恢復(fù)主從關(guān)系時(shí)候,數(shù)據(jù)被master上的數(shù)據(jù)覆蓋,slave上新增的數(shù)據(jù)丟失。
此時(shí)是不是我還有哪些地方?jīng)]有考慮到???希望師傅能指點(diǎn)一下,當(dāng)slave寫入數(shù)據(jù),在master回來時(shí)候,怎么保證數(shù)據(jù)的完整性。
老男孩解答:
A、大前提, 配置了auto_failback on參數(shù)。
方法:
1.原主庫(kù)故障恢復(fù)后,先不要起HEARTBEAT
2.先加載DRBD到內(nèi)核并起動(dòng)drbd資源, 確保當(dāng)前提供服務(wù)的庫(kù)和故障恢復(fù)的庫(kù)數(shù)據(jù)一致,可以cat /proc/drbd 看drbd狀態(tài)。
3.如果兩邊不一致,需要把數(shù)據(jù)推回故障恢復(fù)的庫(kù),確保兩邊保持同步。
4.然后在起HEARTBEAT完成自動(dòng)切換。
B、大前提,auto_failback off或者未配置此參數(shù)。
方法:
1.原主庫(kù)故障恢復(fù)后,將drbd加載到內(nèi)核,此時(shí)可以起HEARTBEAT,此時(shí)正常情況下DRBD狀態(tài)應(yīng)該是同步狀態(tài)或正在同步狀態(tài).
2.如果確實(shí)未同步,可先起drbd 資源, 確保當(dāng)前提供服務(wù)的庫(kù)和故障恢復(fù)的庫(kù)數(shù)據(jù)一致,可以cat /proc/drbd 看drbd狀態(tài)。
3..然后在當(dāng)前提供服務(wù)的庫(kù) 執(zhí)行/usr/lib64/heartbeat/hb_standby 完成db的切換。
另外:
有關(guān)heartbeat工作具體思路流程,請(qǐng)大家仔細(xì)研究haresource里的如下腳本:
抽空我給大家逐句的詳細(xì)解讀heartbeat啟動(dòng)時(shí)執(zhí)行的腳本:
/etc/ha.d/resource.d/IPaddr 10.0.0.149/24/eth0 start
/etc/ha.d/resource.d/drbddisk data start
/etc/ha.d/resource.d/Filesystem /dev/drbd0 /data ext3 start
===========================================================
學(xué)生問題4:drbd腦裂問題的解決總結(jié)(準(zhǔn)備上生產(chǎn)環(huán)境的實(shí)際部署)
老男孩說明:以下為經(jīng)過老男孩的指導(dǎo),某學(xué)生的一次故障恢復(fù)解決過程。
系統(tǒng)環(huán)境
db-1-1主master
[root@db-1-1 ~]# uname -a
Linux db-1-1 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:14 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
[root@db-1-1 ~]# cat /etc/redhat-release?
CentOS release 5.5 (Final)
db-1-2從slave
Linux db-1-2 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:14 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
[root@db-1-2 ~]# cat /etc/redhat-release?
CentOS release 5.5 (Final)
故障重現(xiàn)
機(jī)房電源電壓不夠用,需要對(duì)服務(wù)器進(jìn)行停機(jī),調(diào)整電源.
所以把兩臺(tái)數(shù)據(jù)庫(kù)服務(wù)器都關(guān)機(jī);
注意:不要把drbd設(shè)置成自啟動(dòng);<這次造成裂腦原因可能是自己忘記了把drbd自啟動(dòng)關(guān)了>
[root@db-1-1 ~]# chkconfig --list|grep 3:on
[root@db-1-1 ~]# chkconfig drbd off
[root@db-1-2 ~]# chkconfig --list|grep 3:on
[root@db-1-2 ~]# chkconfig drbd off
###############################################################################
[root@db-1-1 ~]# /etc/rc.d/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by?mockbuild@builder10.centos.org, 2010-06-04 08:04:09
m:res?? cs????????? ro???????????????? ds???????????????? p????? mounted? fstype
0:data? StandAlone? Secondary/Unknown? UpToDate/DUnknown? r----
[root@db-1-1 ~]# 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:09
?0: cs:StandAlone ro:Secondary/Unknown ds:UpToDate/DUnknown?? 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:164
[root@db-1-1 ~]# netstat -ltuanp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address?????????????? Foreign Address???????????? State?????? PID/Program name???
tcp??????? 0????? 0 :::22?????????????????????? :::*??????????????????????? LISTEN????? 2885/sshd???????????
tcp??????? 0??? 148 ::ffff:10.1.71.2:22???????? ::ffff:10.1.71.50:49282???? ESTABLISHED 2988/0??????????????
[root@db-1-1 ~]#?
###############################################################################
###############################################################################
[root@db-1-2 ~]# /etc/rc.d/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by?mockbuild@builder10.centos.org, 2010-06-04 08:04:09
m:res?? cs????????? ro???????????????? ds???????????????? p????? mounted? fstype
0:data? StandAlone? Secondary/Unknown? UpToDate/DUnknown? r----
[root@db-1-2 ~]# 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:09
?0: cs:StandAlone ro:Secondary/Unknown ds:UpToDate/DUnknown?? 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:1836
[root@db-1-2 ~]# netstat -ltluanp????????????
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address?????????????? Foreign Address???????????? State?????? PID/Program name???
tcp??????? 0????? 0 :::22?????????????????????? :::*??????????????????????? LISTEN????? 2895/sshd???????????
tcp??????? 0????? 0 ::ffff:10.1.71.3:22???????? ::ffff:10.1.71.50:49283???? ESTABLISHED 2999/0??????????????
###############################################################################
###############################################################################
日志報(bào)告
Mar 11 18:51:55 db-1-2 kernel: block drbd0: Starting asender thread (from drbd0_receiver [2958])
Mar 11 18:51:55 db-1-2 kernel: block drbd0: data-integrity-alg: <not-used>
Mar 11 18:51:55 db-1-2 kernel: block drbd0: drbd_sync_handshake:
Mar 11 18:51:55 db-1-2 kernel: block drbd0: self 8750305FE84E8C5E:588570FE8E41445A:5849B8D4E0A36374:0000000000000004 bits:459 flags
:0
Mar 11 18:51:55 db-1-2 kernel: block drbd0: peer ECD9B1A40CC33F6A:588570FE8E41445B:5849B8D4E0A36374:0000000000000004 bits:41 flags:
0
Mar 11 18:51:55 db-1-2 kernel: block drbd0: uuid_compare()=100 by rule 90
Mar 11 18:51:55 db-1-2 kernel: block drbd0: helper command: /sbin/drbdadm initial-split-brain minor-0
Mar 11 18:51:55 db-1-2 kernel: block drbd0: helper command: /sbin/drbdadm initial-split-brain minor-0 exit code 0 (0x0)
Mar 11 18:51:55 db-1-2 kernel: block drbd0: Split-Brain detected but unresolved, dropping connection!
Mar 11 18:51:55 db-1-2 kernel: block drbd0: helper command: /sbin/drbdadm split-brain minor-0
Mar 11 18:51:55 db-1-2 kernel: block drbd0: helper command: /sbin/drbdadm split-brain minor-0 exit code 0 (0x0)
Mar 11 18:51:55 db-1-2 kernel: block drbd0: conn( WFReportParams -> Disconnecting )
Mar 11 18:51:55 db-1-2 kernel: block drbd0: error receiving ReportState, l: 4!
Mar 11 18:51:55 db-1-2 kernel: block drbd0: asender terminated
Mar 11 18:51:55 db-1-2 kernel: block drbd0: Terminating asender thread
Mar 11 18:51:55 db-1-2 kernel: block drbd0: Connection closed
Mar 11 18:51:55 db-1-2 kernel: block drbd0: conn( Disconnecting -> StandAlone )
Mar 11 18:51:55 db-1-2 kernel: block drbd0: receiver terminated
Mar 11 18:51:55 db-1-2 kernel: block drbd0: Terminating receiver thread
###############################################################################
解決方法:
db-1-2操作
首先,在從節(jié)點(diǎn)如下操作:
drbdadm secondary data
drbdadm -- --discard-my-data connect data
如果你做的是單主從模式可以
drbdadm secondary all
drbdadm -- --discard-my-data connect all
db-1-1操作
在主節(jié)點(diǎn)master上,執(zhí)行cat /proc/drbd查看狀態(tài),如不是WFConnection狀態(tài),需執(zhí)行下面命令手動(dòng)連接:
drbdadm connect data
如你你做的是單主從模式可以
drbdadm connect all
cat /proc/drbd ?查看兩端狀態(tài)
netstat -ltuanp?查看端口狀態(tài)
drbdadm -- --overwrite-data-of-peer primary data?設(shè)置drbd主<由于啟動(dòng)的時(shí)候兩邊的狀態(tài)都是Secondary/Secondary>
與老男孩對(duì)話記錄^,^!?
###############################################################################
解決辦法
老男孩 23:30:47?
首先,在從節(jié)點(diǎn)(slave)如下操作:
drbdadm secondary data
drbdadm -- --discard-my-data connect data
?
老男孩 23:31:35?
b.在主節(jié)點(diǎn)(master)上,通過cat /proc/drbd查看狀態(tài),狀態(tài)不正常,可執(zhí)行如下命令手動(dòng)動(dòng)連接:
drbdadm connect data
老男孩 23:45:04?
/etc/message中的錯(cuò)誤/sbin/drbdadm initial-split-brain minor-0 提示的很清楚了。
###############################################################################
最后,很感謝感謝老男孩師傅的幫助,讓我的郁悶的心情煙消云散啊,呵呵。
===========================================================
(本文完)
本文出自 “老男孩linux運(yùn)維” 博客,請(qǐng)務(wù)必保留此出處http://oldboy.blog.51cto.com/2561410/515345
轉(zhuǎn)載于:https://blog.51cto.com/ghostxyj/1702208
總結(jié)
以上是生活随笔為你收集整理的Mysql+Heartbeat+Drbd生产环境高可用部署若干问题解惑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HttpHandler与HttpModu
- 下一篇: 连接postgresql