Linux服务器开发之MySQL 集群方案( 三 )


另一台备选主上提供部分读服务 , 以加速在主主切换时刻备选主的预热 。
就各个集群方案来说 , 其优势为:
1. 自动的主主 Failover 切换 , 一般 3s 以内切换备机 。
2. 多个从节点读的负载均衡 。
其劣势为:
1. 无法完全保证数据的一致性 。如主 1 挂了 , MMM monitor 已经切换到主 2 上来了 , 而若
此时双主复制中 , 主 2 数据落后于主 1(即还未完全复制完毕) , 那么此时的主 2 已经成
为主节点 , 对外提供写服务 , 从而导致数据不一 。
2. 由于是使用虚拟 IP 浮动技术 , 类似 Keepalived , 故 RIP(真实 IP)要和 VIP(虚拟 IP)在
同一网段 。如果是在不同网段也可以 , 需要用到虚拟路由技术 。但是绝对要在同一个 IDC
机房 , 不可跨 IDC 机房组建集群 。
MHA
MHA(Master High Availability)是多主多从结构 , MHA 是在 MySQL Replication 的基础上 , 对
其进行优化 。这是日本 DeNA 公司的 youshimaton 开发 , 主要提供更多的主节点 , 但是缺少
VIP(虚拟 IP) , 需要配合 keepalived 等一起使用 。
要搭建 MHA , 要求一个复制集群中必须最少有三台数据库服务器 , 一主二从 , 即一台充当
master , 一台充当备用 master , 另外一台充当从库 。

Linux服务器开发之MySQL 集群方案

文章插图
 
就各个集群方案来说 , 其优势为:
1. 可以进行故障的自动检测和转移
2. 具备自动数据补偿能力 , 在主库异常崩溃时能够最大程度地保证数据的一致性 。
其劣势为:
1. MHA 架构实现读写分离 , 最佳实践是在应用开发设计时提前规划读写分离事宜 , 再使用
时设置两个连接池 , 即读连接池与写连接池 , 也可以选择这种方案即引入 SQL Proxy 。但
无论如何都需要改动代码;
2. 关于读负载均衡可以使用 F5、LVS、HAPROXY 或者 SQL Proxy 等工具 , 只要能实现负载均
衡、故障检查及备升级为主后的读写剥离功能即可 , 建议使用 LVS
Galera Cluster
Galera Cluster 是由 Codership 开发的 MySQL 多主结构集群 , 这些主节点互为其它节点的从节
点 。不同于 MySQL 原生的主从异步复制 , Galera 采用的是多主同步复制 , 并针对同步复制
过程中 , 会大概率出现的事务冲突和死锁进行优化 , 就是复制不基于官方 binlog 而是 Galera
复制插件 , 重写了 wsrep api 。异步复制中 , 主库将数据更新传播给从库后立即提交事务 , 而
不论从库是否成功读取或重放数据变化 。这种情况下 , 在主库事务提交后的短时间内 , 主从
库数据并不一致 。同步复制时 , 主库的单个更新事务需要在所有从库上同步 更新 。换句话
说 , 当主库提交事务时 , 集群中所有节点的数据保持一致 。
对于读操作 , 从每个节点读取到的数据都是相同的 。对于写操作 , 当数据写入某一节点后 , 
集群会将其同步到其它节点 。
Linux服务器开发之MySQL 集群方案

文章插图
 

Linux服务器开发之MySQL 集群方案

文章插图
 
就各个集群方案来说 , 其优势为:
1. 多主多活下 , 可对任一节点进行读写操作 , 就算某个节点挂了 , 也不影响其它的节点的
读写 , 都不需要做故障切换操作 , 也不会中断整个集群对外提供的服务 。
2. 拓展性优秀 , 新增节点会自动拉取在线节点的数据(当有新节点加入时 , 集群会选择出
一个 Donor Node 为新节点提供数据) , 最终集群所有节点数据一致 , 而不需要手动备份
恢复 。
其劣势为:
能做到数据的强一致性 , 毫无疑问 , 也是以牺牲性能为代价 。

【Linux服务器开发之MySQL 集群方案】


推荐阅读