做网站所用的工具,.net网站开发实验报告,php彩票网站建设源码,沈阳招聘网官网#x1f680; 优质资源分享 #x1f680;
学习路线指引#xff08;点击解锁#xff09;知识定位人群定位#x1f9e1; Python实战微信订餐小程序 #x1f9e1;进阶级本课程是python flask微信小程序的完美结合#xff0c;从项目搭建到腾讯云部署上线#xff0c;打造一… 优质资源分享
学习路线指引点击解锁知识定位人群定位 Python实战微信订餐小程序 进阶级本课程是python flask微信小程序的完美结合从项目搭建到腾讯云部署上线打造一个全栈订餐系统。Python量化交易实战入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
这是悟空的第 157 篇原创文章
官网www.passjava.cn
你好我是悟空。
一、遇到的坑
一个月前我们在测试环境部署了一套 MySQL 高可用架构也就是 MySQL 双主 Keepalived 的模式。详情看这篇
实战 MySQL 高可用架构
在这一个月遇到了很多坑
因为两个 MySQL 节点都可以写入极其容易造成主键重复进而导致主从同步失败。同步失败后Slave_SQL_Thread 线程就停了除非解决了同步的错误才能继续进行同步。同步失败的错误不会只有一条记录有问题往往是一大片的同步问题。两个节点互相缺少对方的数据。主从的同步延迟切换到新主库后数据不是最新。当出现不一致时无法确定以哪个库为准。
造成上面问题的主要原因就是因为两个节点都支持写入 双主可以随时切换。
解决这种问题的方案有 改进自增主键的步长影响未评估使用 GTID 方案未验证。即使这样双主同步的风险还是有而且不同步后如何处理是个大难题。
那么回到我们最初的想法为什么会选择双主
最开始的目的就是为了高可用。双主就是说有一台 MySQL 节点挂了另外一台能够顶上对于用户来说是无感的给运维人员一定的缓冲时间来排查 MySQL 故障。另外老的主节点恢复后不用改配置就能立即成为从节点。
经过这一个月的 MySQL 双主模式的试运行最后我们还是决定切换到 MySQL 主 - 从模式。
双主模式就是两个节点即是主节点也是从节点那我们现在切换到一主一从模式就可以认为是降级。接下来我们聊聊双主换成主从的思路和步骤。
二、双主降为主从
双主模式
双主模式的原理图如下 两个主节点都安装了 KeepAlived 高可用组件对外提供了一个 VIP只有一个节点接管 VIP客户端访问的请求都是到这个 VIP另外一个节点处于待机状态。
主从模式
和双主不一样的地方如下从节点是只读的。 一主一从是主从模式中的一种具有以下特点
一个主节点一个从节点主节点提供给客户端访问从节点只通过主节点的 binlog 进行数据同步。从节点是只读的。从节点可以作为只读节点提供类似报表查询等耗时读操作。主节点宕机后从节点成为主节点也是高可用的一种方案。
相对于双主的高可用方案不同之处如下
主从切换需要用脚本将从库设置为可读可写。主从切换后需要将从库设置为不同步老主库。主从切换后老的主库恢复后需要人工设置为只读且开启同步新主库的功能。
这样来看主从模式在异常情况下多了些人工操作。
在异常情况下主从切换一般是这样处理的通过脚本监测主节点是否宕机如果主库宕机了则从库自动切换为新的主库待老主库恢复后就作为从库同步新主库数据新主库上的 Keepalived 接管 VIP。
目前改为主从模式有两种方式
简单方式人工切换模式主节点故障后需要人工切换主从。复杂方式高可用方式主节点故障后主从自动切换读写分离自动切换。
本篇只涉及简单方式复杂方式的原理和配置步骤放到下篇专门讲解。
三、改为主从的简单方式
简单方式的主从切换流程如下 和双主模式的主从切换的区别是从节点是只读的Keepalived 没有启动需要人工操作主从切换和启动 Keepalived。
修改配置的步骤如下
① 为了避免从节点上的 Keepalived 自动接管 VIP 的情况出现将从节点的 Keepalived 停止如果遇到主节点故障则需要人工干预来进行主从切换。从节点切换为主节点后重新启动从节点 Keepalived。
systemctl status keepalived
② 保留主节点的 Keepalived保证 MySQL 的连接信息都不需要变。
③ 主节点 node1 停用 MySQL 的同步线程。
STOP SLAVE
④ 从节点 node2 设置 MySQL 为只读模式。
# 修改 my.cnf 文件read\_only 1
⑤ 移除主节点 node1 同步 node2 MySQL 的权限。
⑥ 从节点 node1 的开机启动项中移除 keepalived 服务自启动。
# 修改启动项配置sudo vim /etc/rc.local# 移除以下脚本systemctl start keepalived
四、总结
双主高可用的坑确实比较多没有 MySQL 的硬核知识真的很难搞定。笔者在这一个月的实践中深刻体会到了双主同步的难点所在最后还是选择了一主一从的模式。
另外因为最开始的配置都是双主模式下的所以要修改一些配置来改为主从模式。因项目时间比较紧目前采取的是非高可用的主从模式。
对于高可用的主从模式因涉及的原理和步骤较多我会在下篇中进行讲解。各位卷王也请给我一点时间进行探索和实践~
下一篇实战 MySQL 主从高可用。
推荐阅读
一次 Keepalived 高可用的事故让我重学了一遍它
一次 MySQL 误操作导致的事故「高可用」都顶不住了
实战 MySQL 高可用架构
END -
关于我
8 年互联网开发经验擅长微服务、分布式、架构设计。目前在一家大型上市公司从事基础架构和性能优化工作。
InfoQ 签约作者、蓝桥签约作者、阿里云专家博主、51CTO 红人。