Mysql+Heartbeat+Drbd生产环境高可用部署若干问题解惑
3328 点击·0 回帖
![]() | ![]() | |
![]() | ############################################################ # # Purpose: Mysql+Heartbeat+drbd高可用部署中学生的几个疑惑解答 # # USER YYYY-MM-DD – ACTION # Oldboy 2011-3-14 – Created # qq:31333741 老男孩 mail:31333741@qq.com # 网站运维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 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 ############################################################################### ############################################################################### 日志报告 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 comm and: /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 提示的很清楚了。 ############################################################################### 最后,很感谢感谢老男孩师傅的帮助,让我的郁闷的心情烟消云散啊,呵呵。 =========================================================== (本文完) | |
![]() | ![]() |