天天看点

MySQL Scale Out

简介

MySQL复制中较常见的复制架构有“一主一从”、“一主多从”、“双主”、“多级复制”和“多主环形机构”等,见下图;

MySQL Scale Out

最常用,也最灵活的就要数“一主多从”复制架构了,其能满足多种需求,如:

为不同的角色使用不同的备库(例如添加不同的索引或使用不同的存储引擎);

把一台备库当做待用的主库,除了复制没有其它数据传输;

将一台备库放在远程数据中心,用作灾难恢复;

延迟一个或多个备库,以备灾难恢复;

使用其中一个备库,作为备份、培训、开发或者测试使用服务器;

而“双主”复制架构则用于特殊的场景下,如两个处于不同地理位置的办公室,且都需要一份可写的数据拷贝;

这种架构最大的问题是如何解决数据冲突和不一致,尤其当两台服务器同时修改同一行记录,或同时在两台服务器上向一个包含auto_increment列的表里插入数据时;

而通过将一台服务器设置为只读的被动服务器,则可以很好的避免数据写入冲突的问题,这种主动-被动模式下的主-主复制架构使得反复切换主动和被动服务器非常方便,可以实现在不关闭服务器的情况下执行维护、优化表、升级操作系统或其他任务;

配置主动-被动模式的主-主复制架构的一般流程:

确保两台服务器上有相同的数据;

启用二进制日志,选择唯一的服务器ID,并创建复制账号;

启用备库更新的日志记录,这是故障转移和故障恢复的关键;

把被动服务器配置成只读,防止可能与主动服务器上的更新产生冲突;

启动每个服务器的MySQL实例;

将每个主库设置为对方的备库,使用新创建的二进制日志开始工作;

同时为了消除不同地理位置的站点单点故障问题,可以为每个主库增加冗余,即为每一个主库增加一个从库;

而MMM(=Master-Master Replication Manager for MySQL)则是一套脚本集合,用以监控、管理双主复制架构,通过设置一个可写的VIP和多个只读的VIP,完成故障自动转移、读负载分摊等功能;

架构设计

MySQL Scale Out

服务器规划

MySQL Scale Out

虚IP规划

MySQL Scale Out

配置部署

双主复制架构部署

利用mysqld_multi在一台主机上启动多个mysqld实例

数据库初始化

数据库配置

启动数据库实例

登录数据库

创建所需账户(在Master1实例上)

配置数据同步

查看同步状态

MMM安装部署

Host1主机上:部署agent和monitor

Host2主机上:只需部署agent

服务启动

测试验证

查看双主复制架构中基于MMM实现的状态信息:

手动进行各节点的健康监测

补充说明

在本篇的演示案例中,前端程序若要与MySQL通信,则写库需连接192.168.0.11:3406,读库可连接192.168.0.12-15中的一个或多个,端口可能是3406或3506;

在只读VIP漂移时,会导致前端程序连接的mysqld端口发生变化,所以生产环境下还是统一使用3306端口为宜;

利用MMM实现了双主复制架构中的故障自动转移后,mysql并非直接与前端程序通信,还需配合使用读写分离器(如Ameoba),以统一对外的连接地址,由读写分离器负责读写的向下分配;