drbd heartbeat mysql_Heartbeat+DRBD+MySQL Replication故障处理

不久前的一次机房网络故障,再一次对我们在Heartbeat+DRBD+MySQL数据库架构运维水平的一个考验,之前不止一次的测试与线上部署,还有之后大言不惭的关于该架构组件的所谓深入理解,在这一次不经意的意外面前又是“很囧”的收场,慌张呀!这次断网导致H-D-M全线异常,真是千载难逢,都让我们赶上啦lol: 下面就把这次的小幸运小幸福和大家分享下,以下是按照问题处理的先后顺序依次讲述。

- MySQL Replication同步异常

当发生网络故障一个小时后,从库io_thread和主库的连接被中断,抛出错误提示:[ERROR] Error reading packet from server: Client requested master to start replication from impossible position ( server_errno=1236),没想到竟遇到了一个古董级的Bug,有点喜出望外了(心想,我也能遇到bug)。最后解决办法,只能拿备份重新做一遍主从。后来,好奇想查查,究竟是怎么导致这个问题,竟发现,从库relay log中的记录比主库binlog中的记录多了2条insert和1条update(0_0!!!…不合逻辑呀?!!)。

- DRBD状态异常

处理完数据库同步问题后,当时并没有去查看DRBD的状态,直到周一才发现出问题了,简单地通过命令cat /proc/drbd就可以查看,DRBD的状态是否正常。查看/var/log/messages知道网络故障导致DRBD发生脑裂,彼此都认为对方已经死了,然后自己都将角色作为Primary,并积极获取资源,当时的两端的连接状态都为StandAlone,角色都为Primary。在发生脑裂不久后原active node被heartbeat强制将系统重启,最后,原active node角色变为Secondary/Unknown,原standby node角色依然是脑裂时的Primary/Unknown,两端的连接状态,分别为WFConnection和StandAlone。解决方法如下:

Step 1 - On New Secondary:

# service heartbeat stop

# service drbd stop

# drbdadm create-md r0

# service drbd start

# service heartbeat start

Step 2 – On New Primary:

# service drbd reload

之后就进入漫长数据同步阶段,重新将Primary上的数据块文件拷贝到Secondary上,最后完成同步。

- Heartbeat通信异常

通过查看/var/log/ha-dug日志,发现在出现网络故障后4分钟内,Heartbeat服务在active node与standby node间反复做资源释放与获取的操作,最后资源被之前的standby node获得,而之前的active node因为DRBD资源的问题,请求系统重启“CRIT: Resource STOP failure. Reboot required!”。系统重启后,Heartbeat服务并没有被开启,chkconfig里面没有把heartbeat设置为开机自启动,drbd是被设置开启自启的。其实,周日在处理问题时,没有考虑到heartbeat问题,理所当然的人为,资源是被正常切换,而认为heartbeat当时是正常(~脸红~:

# less /var/log/ha-dug      — 发现问题

On Active Node(之前的standby–>切换后active):

WARN: Gmain_timeout_dispatch: Dispatch function for retransmit request took too long to execute: 390 ms (> 10 ms)

ERROR: Message hist queue is filling up (500 messages in queue)

On Standby Node(之前的active–>切换后standby):

WARN: Rexmit of seq 17224382 requested. 41 is max.

在当前的active node上执行如下命令:

# top  — 注意有4个僵尸进程(zombie),同时会发现heartbeat的cpu使用达到100%左右

Tasks: 245 total,   2 running, 239 sleeping,   0 stopped,   4 zombie

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

2106 root      -2   0  422m 376m 4788 R 100.1  1.6   5002:17 heartbeat

# ps aux |grep defunct |grep -v grep   — 找出是哪4个僵尸进程

root     15678  0.0  0.0      0     0 ?        Z    10:57   0:00 [heartbeat]

root     17932  0.0  0.0      0     0 ?        Z    13:48   0:00 [heartbeat]

root     19176  0.0  0.0      0     0 ?        Z    Jul11   0:00 [status]

root     19626  0.0  0.0      0     0 ?        Z    Jul11   0:00 [heartbeat]

既然,heartbeat服务有问题,那么很自然的就想到重启该服务,重启heartbeat是也会释放掉所有的资源的,会影响到正常业务,所以,选择到晚上闲时操作。出于安全为了不让资源切换到standby node上(其实,当时的情况heartbeat以及不能工作),我先停掉了standby node上的heartbeat,接着去停止active node上的服务,但是过了几分钟都没有相应,事实上,heartbeat的主进程已经僵死了,最后我“鼓足勇气”—kill -9 heartbeat-PID,然后先重启active node,再重启standby node,最后,查看日志一切都恢复正常了。之前,在做kill操作后,active node上的资源并没有释放,依然正常运行。

– — – END — – –

即便这次飞不小的劲,看似把问题都依依解决了,但心里依然没谱,对于之后可能发生的问题还是没有十足的把握;事实上,还是对于Heartbeat和DRBD技术本身,理解的不够透彻,Heartbeat对于资源的切换、检测后的判断以及对于日志输出的理解都还有很多疑惑,DRBD发生脑裂时资源争夺,会对数据块有多大影响,等等,所以就像田老师的感慨说的,我们之前做的仅仅就是能够把这个架构简单的打起来而已,根本谈不上专业的运维。

觉得文章有用?立即:

和朋友一起 共学习 共进步!

猜您喜欢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Squid反向代理加速缓存+负载均衡实验架构

实验环境: 公司有两台web服务器,运行同一套网站,读取同一台mysql数据库。 两台web服务器的主机名如下: test1.com 192.168.1.119 test2.com 192.168.1.120 squid服务器ip:192.168.1.123 DNS: 192.168.9.254 实验思路&a…

levedb 导入 mysql_LevelDB-初始篇

简介:LevelDB是一个基于本地文件的存储引擎,非分布式存储引擎,原理基于BigTable(LSM文件树),无索引机制,存储条目为Key-value。适用于保存数据缓存、日志存储、高速缓存等应用,主要是避免RPC请求带来的延迟…

c#中的多义关键字

newnew用三种场景,最常用的实例化,泛型参数时的实例化约束,第三种是显式隐藏继承成员。using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using s…

当时我就震惊了:无穷带来的各种悖论

全世界有3.14 % 的人已经关注了数据与算法之美希尔伯特旅馆悖论(Hilberts paradox of Grand Hotel)希尔伯特旅馆有无限个房间,并且每个房间都住了客人。一天来了一个新客人,旅馆老板说:“虽然我们已经客满,…

重载运算符操作_学习

//A: 操作符重载实现为类成员函数 /* #include <iostream> class Person { private:int age; public:Person(int a){this->agea;}//inline bool operator(const Person &ps)const;inline bool operator(const Person *ps)const; }; //inline bool Person::operat…

砸了140亿的计算机视觉,未来到底如何?

指纹解锁、刷脸识别、语音转换文字、机器人看病、Alphago我们已经深刻的感受到&#xff0c;人工智能在改变我们的工作方式和认知。通过 SAS 针对企业人工自能就绪调研的报告可以看到&#xff0c;大部分企业认为人工智能还处于初期阶段&#xff0c;“目前&#xff0c;我们正在部…

记一次 .NET WPF布草管理系统 挂死分析

一&#xff1a;背景 1. 讲故事这几天看的 dump 有点多&#xff0c;有点伤神伤脑&#xff0c;晚上做梦都是dump&#xff0c;今天早上头晕晕的到公司就听到背后同事抱怨他负责的WPF程序挂死了&#xff0c;然后测试的小姑娘也跟着抱怨。。。嗨&#xff0c;也不知道是哪一个迭代改出…

轻量级HTTP服务器Nginx(安装篇)

一、下载与安装Nginx Nginx的官方网站是http://sysoev.ru/nginx/&#xff0c;英文主页为http://nginx.net&#xff0c;从这里可以获得Nginx的最新版本信息。Nginx有三个版本&#xff1a;稳定版、开发版和历史稳定版。开发版更新较快&#xff0c;包含最新的功能和bug的修复…

mysql视图实现的_mysql视图是什么?怎么实现?

mysql视图是什么&#xff1f;怎么实现&#xff1f;发布时间&#xff1a;2020-05-21 18:00:24来源&#xff1a;亿速云阅读&#xff1a;152作者&#xff1a;鸽子视图本身是一张虚拟表&#xff0c;不存放任何数据。在使用SQL语句访问视图的时候&#xff0c;获取的数据是MySQL从其它…

中国人的数学为什么好,为什么不好

全世界有3.14 % 的人已经关注了数据与算法之美世界人民已经懒得吐槽美国学生的数学水平了&#xff0c;正如他们已习惯于惊叹中国学生的天才。脱离计算器就不会四则运算&#xff0c;把sinx/n算成“six”&#xff0c;美国学生闹的笑话层出不穷&#xff0c;每隔一段时间&#xff0…

.NET Core 调用百度 PaddleOCR 识别图文

了解 PaddleOCR 之前&#xff0c;首先了解一下 PaddlePaddle。飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础&#xff0c;是中国首个开源开放、技术领先、功能完备的产业级深度学习平台&#xff0c;集深度学习核心训练和推理框架、基础模型库、端到端开发套…

SQL SERVER2000存储过程调试

sql server2000存储过程调试基础条件启用SQLDebugger 账户账户&#xff0c;这个一般都是开启的&#xff1b;mssqlserver服务要求使用指定用户(不是本地系统用户)&#xff0c;最好是administrator启动&#xff01;这个资料上这么说。但我用本地系统用户也是可以的&#xff1b;登…

华为机试支持python吗_4.10华为暑期实习生机试题目,python解答

第一题是给一个字符串&#xff0c;然后按照次数和ascii码的顺序&#xff0c;循环输出。比如输入eeefffggh&#xff0c;由于ascii的大小&#xff0c;e efgh efg ef efghefgef。字符串中可包含数字和大小写英文字母。 思路是先用dict统计个数&#xff0c;然后将所有可能…

大数据时代,数据科学都有些啥?

暑假咻地一下过完啦&#xff0c;前几天&#xff0c;小天介绍了关于数模课程的开学季限时优惠&#xff08;传送门&#xff09;&#xff0c;今天要介绍的是python课程。接下来&#xff0c;小天来详细说明一下&#xff01;19月17日~23日报名《python机器学习实战》即可享受限时330…

那些被.NET大厂拒绝的大佬们,究竟弱在哪里?

如火如荼的金三银四跳槽季迎来尾声&#xff0c;几家欢喜几家愁&#xff0c;既看到腾讯阿里百度的大厂offer&#xff0c;又羡慕30k、40k、50k的高薪&#xff0c;更多其实还是各种面试失蹄的故事。成功的案例五花八门&#xff0c;而失败的原因却千篇一律。据统计&#xff0c;约70…

在python中strip_python中strip()函数怎么用?

python中strip()函数怎么用&#xff1f;发布时间&#xff1a;2020-05-19 16:57:38来源&#xff1a;亿速云阅读&#xff1a;182作者&#xff1a;Leah今天小编为大家分享的是python中strip()函数的使用方法。代码详细容易理解&#xff0c;为此分享给大家做个参考。一起跟随小编过…

ObjectiveC 深浅拷贝学习

&#xff08;转自 http://woshao.com/article/f91898b24a1211e097d3000c2959fd2a/&#xff09; 在ObjC中&#xff0c;什么是深浅拷贝&#xff1f;深浅拷贝分别指深拷贝和浅拷贝&#xff0c;即mutableCopy和copy方法。copy复制一个不可变对象&#xff0c;而mutableCopy复制一个m…

SQL语言最佳实践

为单位制订的SQL规范&#xff0c;分享一下。首先说一下&#xff0c;这是公司用的一个规范&#xff0c;给到程序员做参考的。其实&#xff0c;这个规范是建立在对SQL有一定熟悉程序的基础上的&#xff0c;所以规范本身并不涉及SQL语法学习的相关内容。1. 绝对避免使用 SELECT *S…

有哪些经济学理论可以用在谈恋爱上?

全世界有3.14 % 的人已经关注了数据与算法之美大概两周前回加拿大的航班上&#xff0c;我在机舱尾部跟一位空姐聊了很久。大概两周前回加拿大的航班上&#xff0c;我在机舱尾部跟一位空姐聊了很久。看到浮标沉下去了&#xff0c;我却把鱼竿放回地上&#xff0c;难道我是素食主义…

python 局部变量 占内存吗_Python中全局变量和局部变量的理解与区别

前言学过编程的人应该对全局变量与局部变量这两个名词并不陌生&#xff0c;Python也同多数编程语言一样&#xff0c;也有全局变量与局部变量的概念但是与其他编程语言又有所不同全局变量与局部变量两者的本质区别就是在于作用域用通俗的话来理解的话&#xff0c;全局变量是在整…