在ECS上自建MySQL手工容灾环境

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
网络型负载均衡 NLB,每月750个小时 15LCU
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 1.环境介绍 很多云上的客户因为数据库规模小,可能最开始只购买了ECS,而他们也需要数据库服务器,很可能会采用自建MySQL来实现。阿里云RDS已经提供了完全的数据库运维服务,包括监控、优化、主备高可用等。而对小白用户来说,为了自己业务连续性和学习的需要,也是很有必要了解如何自建MySQL主备的。

1.环境介绍
很多云上的客户因为数据库规模小,可能最开始只购买了ECS,而他们也需要数据库服务器,很可能会采用自建MySQL来实现。阿里云RDS已经提供了完全的数据库运维服务,包括监控、优化、主备高可用等。而对小白用户来说,为了自己业务连续性和学习的需要,也是很有必要了解如何自建MySQL主备以及主备切换流程的。在主从复制实施前,单机单实例缺乏实时数据复制方案来保证实例出现故障时提供另一个完好且独立的实例迅速切换,短时间内恢复客户业务。

2.数据库主从复制实施
2.1.主从复制原理
MySQL提供简单可靠的主从复制机制供用户使用,基本原理如下图所示,分三个步骤:
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继日志(relay log);
(3) slave重做中继日志中的事件,将改变反映它自己的数据。
mysql复制.jpg
2.2.主从复制规划
MySQL提供了主从复制组件,但是并不提供HA的自动监控切换。阿里集团内部有自研工具可以实现HA功能,开源组件keepalived + lvs也提供类似功能。这里我们提一个带SLB的方案,自动HA的实现留给读者去研究。假设我们有2个MySQL实例,一个实例为A,一个为B,我们考虑使用主从双向复制,即MM(Master-Master)的方案进行部署,前端挂给SLB,在同一个时刻,SLB只设置一个主用的实例权重为100,另一个备用实例权重为0,且将该实例的read_only参数打开。在发生故障时,将备用实例的权重设成100,主用实例设成0,这样通过SLB来实现手工的HA处理。对应用来说,将出现短时间(1-2分钟)的不可用,当SLB的切换完成后,应用通过连接池的重连机制,能重新恢复业务。
2.3.主从复制实施
(1) 生产实例在一个已经存在的ECS上已经准备好,申请一个新的ECS,保证该ECS不与生产实例的ECS在同一个物理机NC。如果生产实例的MySQL是安装在系统盘,可以从系统盘创建快照后打镜像,新ECS依旧该自定义镜像进行创建,这样可以省略步骤
(2) 在新的ECS上安装配置MySQL,尽可能保证配置与生产实例完全一致;
(3) 编辑生产实例的的/etc/my.cnf文件,加入如下内容:
log-bin=/home/mysql/log/mysql-bin
server_id=1241823306
binlog_cache_size=32K
max_binlog_cache_size=2G
max_binlog_size=500M
binlog-format=ROW
sync_binlog=1
log-slave-updates=1
expire_logs_days=0
以上内容重点配置binlog,除server_id需要修改成IP地址后两位+端口号以外,其他直接复制。比如示例中的3017441834的含义就是该mysql所在服务器IP地址为:*.*.124.182,mysql占用的端口是3306。
同时,需要保证/home/mysql/log目录存在,mysql的起停用户必须拥有对该目录的权限。
(4) 快速重启MySQL生产实例,然后登录mysql查看配置是否生效。
mysql数据库都支持下面语句来停止实例:
mysqladmin -h127.0.0.1 -uroot -P3306 shutdown
查看配置生效与否采用类似下列的语句进行检查:
show variables like ’ log-bin%’
(5) 如果配置在生产实例生效,同样的操作请在备用实例也操作一遍;
(6) 执行flush tables with read lock锁定生产实例;
(7) 将生产实例的数据同步到备用实例,至少有两种方案:对于生产实例与备用实例部署完全一样的,可以直接将datadir目录下所有文件和目录远程复制到备用实例。对于生产实例和备用实例部署并不相同的,可以采用mysqldump将生产实例数据按DB导出,然后再导入到备用实例中。整个过程生产实例不能解锁;
(8) 解锁生产实例:unlock tables;
(9) 查询生产实例的master状态,记录下来binlog日志文件名以及对应的position编号;
(10) 在备用实例执行以下语句:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET GLOBAL rpl_semi_sync_master_timeout = 10000;
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
grant replication slave,replication client on . to repuser@'%'identified by 'repuser';
这里,默认repuser的密码也是repuser,但是mysql5.7版本的强制要求,密码复杂度必须比较高,所以密码需要设置成复杂密码。
change master to master_host='生产实例IP',master_port=3306(生产实例端口),master_user='repuser',master_password='repuser', master_log_file=’步骤9记录下的binlog文件名’, master_log_pos=’步骤9记录下的binlog position编号’;
(11) 启动备用实例slave,从生产实例复制数据。执行:start slave
(12) 检查备用实例slave状态:show slave status \G;重点看两个参数:
Slave_IO_Running和Slave_SQL_Running,如果这两个参数值都为yes。则配置正确,已经开始复制;
(13) 接下来配置从备用实例到生产实例的反向数据复制,在备用实例检查master状态:show master status;同样记录下binlog文件名和位点信息;
(14) 在生产实例重复步骤10-12完成反向复制配置。
(15) 结合SLB进行业务测试,观察生产实例的数据是否实时同步到备用实例;
(16) 最后需要向所有实例的/etc/my.cnf文件添加以下内容:
rpl_semi_sync_master_enabled=ON
rpl_semi_sync_slave_enabled=ON
同时,我们将备用实例设成只读状态:
set global read_only=1
3.灾备切换流程
灾备切换流程.jpg
流程图里A实例代表生产实例,实例B代表备用实例。
(1) 当A实例发生故障时,首先考虑重启或者修复A,如果在短时间(30分钟内)实例A能正常启动,且启动日志和业务侧检查没有问题,那么证明业务恢复正常,紧急处理成功;
(2) 如果实例A紧急重启成功,但是发现日志中有报错,请分析日志报错,判断问题的影响范围和大小,以决定忽略报错或者修复报错。如果在30分钟内完成,依然可以认为业务成功恢复;
(3) 如果紧急重启实例A成功,日志中的报错无法在30分钟内修复,那么我们启动切换流程。即:
将备用实例可读可写打开:set global read_only=0
在SLB将A实例的权重从100调成0,将B实例的权重从0调成100。保证业务先恢复起来;
(4) 实例B升成主实例对外提供服务时,我们在后台尽快想办法修复A实例,如果A实例修复成功,检查BA两个实例之间的复制关系是否正常,如果复制恢复正常,我们的紧急处理结束;
(5) 如果实例B生成主实例对外提供服务时,尽管我们修复了实例A。但是两个实例间的复制关系无法再恢复正常,请根据2.3节中的步骤重新配置主从复制;
(6) 如果实例A在发生故障时完全无法恢复,比如ECS已经不能启动。那么直接进入切换流程,将实例B升级成主实例。然后在后台紧急处理和恢复原来的A实例。

4.MySQL同步失败修复
4.1.同步初始化失败
在从库上面执行:show slave status\G;
正常情况:
复制情况.png
错误情况:有NO出现。
修复方式:
在主库上面执行:
Reset master;
在从库上面执行:
Stop slave;
Reset slave;
Change master to master_host='10.101.3.10',master_port=3301,master_user='repuser',master_password='repuser',master_auto_position=1;
4.2.同步了部分数据中断
在从库上面执行 show slave status\G;
例如:
复制出错.png
对于Slave_SQL_Running: No 的情况可以做如下处理:
在从库上面执行:
slave stop;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
slave start;
然后通过show slave status\G; 检查是否有两个YES。

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
存储 缓存 监控
MySQL服务器配置优化:my.cnf参数调优指南
本文深入解析了MySQL核心配置参数及性能优化技巧,涵盖内存结构、调优原则、存储引擎优化、查询性能优化等内容,通过实战案例帮助读者构建高性能MySQL服务器配置,解决常见的性能瓶颈问题。
|
3月前
|
人工智能 缓存 监控
构建高效MCP客户端:应对多服务器环境的完整指南
本文深入探讨了在多服务器环境下构建高效、可靠的Model Context Protocol(MCP)客户端的关键技术与最佳实践。内容涵盖MCP基础架构、连接管理、请求路由、容错机制、会话管理、性能监控及安全认证等核心设计,提供了完整的实现类与部署配置示例,助力开发者构建高性能MCP客户端,提升AI模型与工具集成的效率与稳定性。
|
4月前
|
弹性计算 关系型数据库 Nacos
低配阿里云 ECS 如何 docker 环境部署 NACOS : 单机版模式
NACOS 单机版 Docker 安装指南。使用指定端口和 custom.env 配置文件启动 Nacos 服务,适用于 2.X 版本,包含 gRPC 支持及 MySQL 数据源配置。 -e MODE=standalone \
401 5
|
4月前
|
安全 关系型数据库 网络安全
安全加固:启动PostgreSQL 14服务器SSL加密的方法指南在CentOS 7环境中
通过上述步骤,你可以为PostgreSQL数据库服务器设置SSL加密,从而增加数据在传输中的安全性。确保维持证书的有效性,并且定期更新和管理密钥,以防止未授权访问。
221 0
|
6月前
|
人工智能 安全 Shell
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
443 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
|
6月前
|
关系型数据库 MySQL Java
安装和配置JDK、Tomcat、MySQL环境,以及如何在Linux下更改后端端口。
遵循这些步骤,你可以顺利完成JDK、Tomcat、MySQL环境的安装和配置,并在Linux下更改后端端口。祝你顺利!
456 11
|
7月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
346 28
|
7月前
|
监控 应用服务中间件 Apache
不同服务器环境301重定向具体实施步骤
本文详细介绍301重定向配置方法,涵盖Apache、Nginx、IIS服务器环境及WordPress、Cloudflare等平台工具的实现方式。提供具体规则示例与操作步骤,包括单页、整站和批量路径重定向。同时,强调验证与监控的重要性,列出测试清单及搜索引擎通知方法,并针对常见问题如重定向循环、参数丢失等提供解决方案。最后总结最佳实践原则,确保SEO权重传递与用户体验优化。
438 17
|
弹性计算 Ubuntu Shell
用1C1G ECS搭建《阿里云大模型高级工程师ACP认证》学习环境
阿里云推出了《[阿里云大模型高级工程师ACP认证》,配套的学习资料较系统性的梳理了提示词、RAG、Agent插件、微调等系列LLM相关知识。推荐大家学习。 该学习课程需要搭建学习环境,可以直接在ECS上构建该环境即可,所需的资源很少,1C1G20G系统盘最低配置即可,本文介绍了详细搭建过程。

推荐镜像

更多