Mysql+Heartbeat+Drbd生产环境高可用部署若干问题解惑

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介:

Mysql+Heartbeat+Drbd生产环境高可用部署若干问题解惑:
############################################################
#
# 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 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 提示的很清楚了。
###############################################################################
最后,很感谢感谢老男孩师傅的帮助,让我的郁闷的心情烟消云散啊,呵呵。
===========================================================
(本文完)










本文转自 妙曼  51CTO博客,原文链接:http://blog.51cto.com/yanruohan/1897238,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
4月前
|
运维 监控 关系型数据库
MySQL高可用方案:MHA与Galera Cluster对比
本文深入对比了MySQL高可用方案MHA与Galera Cluster的架构原理及适用场景。MHA适用于读写分离、集中写入的场景,具备高效写性能与简单运维优势;而Galera Cluster提供强一致性与多主写入能力,适合对数据一致性要求严格的业务。通过架构对比、性能分析及运维复杂度评估,帮助读者根据自身业务需求选择最合适的高可用方案。
|
4月前
|
SQL 监控 关系型数据库
MySQL主从复制:构建高可用架构
本文深入解析MySQL主从复制原理与实战配置,涵盖复制架构、监控管理、高可用设计及性能优化,助你构建企业级数据库高可用方案。
|
3月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
631 6
|
5月前
|
关系型数据库 MySQL 数据库
为什么 MySQL 不推荐用 Docker 部署?
本文探讨了MySQL是否适合容器化的问题,分析了Docker容器在数据安全、性能瓶颈、状态管理及资源隔离等方面的挑战,并指出目前主流分布式数据库如TDSQL和OceanBase仍倾向于部署在物理机或KVM上。
299 0
|
8月前
|
Java 关系型数据库 MySQL
在Linux平台上进行JDK、Tomcat、MySQL的安装并部署后端项目
现在,你可以通过访问http://Your_IP:Tomcat_Port/Your_Project访问你的项目了。如果一切顺利,你将看到那绚烂的胜利之光照耀在你的项目之上!
444 41
|
8月前
|
开发框架 Java 关系型数据库
在Linux系统中安装JDK、Tomcat、MySQL以及部署J2EE后端接口
校验时,浏览器输入:http://[your_server_IP]:8080/myapp。如果你看到你的应用的欢迎页面,恭喜你,一切都已就绪。
561 17
|
8月前
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
179 18
|
8月前
|
开发框架 关系型数据库 Java
Linux操作系统中JDK、Tomcat、MySQL的完整安装流程以及J2EE后端接口的部署
然后Tomcat会自动将其解压成一个名为ROOT的文件夹。重启Tomcat,让新“植物”适应新环境。访问http://localhost:8080/yourproject看到你的项目页面,说明“植物”种植成功。
252 10
|
12月前
|
存储 关系型数据库 MySQL
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
10月前
|
SQL 关系型数据库 MySQL
MySQL生产环境迁移至YashanDB数据库深度体验
这篇文章是作者将 MySQL 生产环境迁移至 YashanDB 数据库的深度体验。介绍了 YashanDB 迁移平台 YMP 的产品相关信息、安装步骤、迁移中遇到的各种兼容问题及解决方案,最后总结了迁移体验,包括工具部署和操作特点,也指出功能有优化空间及暂不支持的部分,期待其不断优化。

推荐镜像

更多