Mysql+Heartbeat+Drbd生產環境高可用部署若干問題解惑

Mysql+Heartbeat+Drbd生產環境高可用部署若干問題解惑:
############################################################
#
# Purpose: Mysql+Heartbeat+drbd高可用部署中學生的幾個疑惑解答
#
# USER          YYYY-MM-DD – ACTION 
# Oldboy        2011-3-14 – Created
# QQ:31333741   老男孩       mail:[email protected]
# 網站運維QQ羣:37081784 (進羣務必先看公告,更改羣名片)
############################################################
    平時發現大家在使用Mysql+Heartbeat+Drbd高可用應用時 或多或少的遇到了一些麻煩,這裏老男孩針對大家
的問題挑有意義的一一解答如下。本人的水平有限,解答難免有錯誤或偏頗的地方,請大家及時批評指正。讓我們共同
進步,一起提高技能水平。

===========================================================
學生問題1.貌似虛擬機重啓,必須手動執行modprobe drbd 才能正常加載,不知道實體機是不是也會這樣?
老男孩解答:
 這個是可以設置的,如在rc.local里加入modprobe drbd,但我不推薦這樣做。
 主庫故障後,恢復後,DRBD應該保留人工介入啓動,而不應該自動modprobe drbd && drbdadm up all.
 涉及到數據的操作還是謹慎爲好。第一次 能正確切到備用機就算完成了高可用的任務了。
 此時修復故障機是正常應該人工做的。
===========================================================
學生問題2:mcast eth1 225.0.0.1 694 1 0 -----當同一IDC有多個這樣的情況,應該使用單播.
老男孩解答:
即使是多個HEARTBEAT服務同時開,多播也沒有問題,多播地址不同即可(可選多播地址段224.0.0.0 - 239.255.255.255),一般路由器、交換機等等應該都是多播的形式。
===========================================================
學生問題3:
master故障,slave自動切換沒有問題,此時所有的數據都通過slave寫入,當master恢復的時候,此時,還能按照之前的操作來進行嗎? 數據會自動同步過去嗎??做了試驗,按照以上的操作恢復主從關係時候,數據被master上的數據覆蓋,slave上新增的數據丟失。
此時是不是我還有哪些地方沒有考慮到???希望師傅能指點一下,當slave寫入數據,在master回來時候,怎麼保證數據的完整性。
老男孩解答:
A、大前提, 配置了auto_failback on參數。
方法:
1.原主庫故障恢復後,先不要起HEARTBEAT
2.先加載DRBD到內核並起動drbd資源, 確保當前提供服務的庫和故障恢復的庫數據一致,可以cat /proc/drbd 看drbd狀態。
3.如果兩邊不一致,需要把數據推回故障恢復的庫,確保兩邊保持同步。
4.然後在起HEARTBEAT完成自動切換。

B、大前提,auto_failback off或者未配置此參數。
方法:
1.原主庫故障恢復後,將drbd加載到內核,此時可以起HEARTBEAT,此時正常情況下DRBD狀態應該是同步狀態或正在同步狀態.
2.如果確實未同步,可先起drbd 資源, 確保當前提供服務的庫和故障恢復的庫數據一致,可以cat /proc/drbd 看drbd狀態。
3..然後在當前提供服務的庫 執行/usr/lib64/heartbeat/hb_standby 完成db的切換。
另外:
有關heartbeat工作具體思路流程,請大家仔細研究haresource裏的如下腳本:
抽空我給大家逐句的詳細解讀heartbeat啓動時執行的腳本:
/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
===========================================================
學生問題4:drbd腦裂問題的解決總結(準備上生產環境的實際部署)
老男孩說明:以下爲經過老男孩的指導,某學生的一次故障恢復解決過程。

系統環境
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)

故障重現
機房電源電壓不夠用,需要對服務器進行停機,調整電源.
所以把兩臺數據庫服務器都關機;

注意:不要把drbd設置成自啓動;<這次造成裂腦原因可能是自己忘記了把drbd自啓動關了>
[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 [email protected], 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 [email protected], 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 [email protected], 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 [email protected], 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              
###############################################################################

###############################################################################
日誌報告
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操作
首先,在從節點如下操作:
drbdadm secondary data
drbdadm -- --discard-my-data connect data
如果你做的是單主從模式可以
drbdadm secondary all
drbdadm -- --discard-my-data connect all

db-1-1操作
在主節點master上,執行cat /proc/drbd查看狀態,如不是WFConnection狀態,需執行下面命令手動連接:
drbdadm connect data
如你你做的是單主從模式可以
drbdadm connect all
cat /proc/drbd  查看兩端狀態
netstat -ltuanp 查看端口狀態
drbdadm -- --overwrite-data-of-peer primary data 設置drbd主<由於啓動的時候兩邊的狀態都是Secondary/Secondary>

與老男孩對話記錄^,^! 
###############################################################################
解決辦法
老男孩 23:30:47 
首先,在從節點(slave)如下操作:
drbdadm secondary data
drbdadm -- --discard-my-data connect data
 
老男孩 23:31:35 
b.在主節點(master)上,通過cat /proc/drbd查看狀態,狀態不正常,可執行如下命令手動動連接:
drbdadm connect data

老男孩 23:45:04 
/etc/message中的錯誤/sbin/drbdadm initial-split-brain minor-0 提示的很清楚了。
###############################################################################
最後,很感謝感謝老男孩師傅的幫助,讓我的鬱悶的心情煙消雲散啊,呵呵。
===========================================================
(本文完)

本文出自 “老男孩linux運維” 博客,請務必保留此出處http://oldboy.blog.51cto.com/2561410/515345


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