由于高并发和分布式的兴起,使得MySQL数据库单节点已经不能满足生产日常的要求了。所以就有了MySQL集群的搭建。
针对于常用的MySQL集群,主要有PXC和RP两种模式。本篇主要以理论为主。
PXC
全写Percona XtraDB Cluster。通过MySQL自带的一种集群技术——Galera将不同的MySQL连接起来,形成多主集群。
其事务的执行时序图为:
以上是以3节点为例,具体步骤:
- 客户端写入到数据库DB1,返回结果,但此时并未持久化;
- 客户端提交事务到DB1;
- DB1将数据复制给PXC,然后由PXC分别复制给DB2,DB3;
- 由PXC生成GTID,在DB2,DB3分别执行GTID并返回执行结果;
- 4返回无问题,在DB1中执行GTID,返回最终事务结果。4有问题直接返回事务失败结果。
ps:
- 在PXC中,生成的ID有可能是不连续的,如果期望连续就需要将ID生成策略提高一级,比如放在数据切分中间件中,如mycat等。或者在程序中执行ID的赋予问题。
在赋予ID时需要考虑到后期可能迁徙数据库的问题。 - PXC集群数量建议为奇数,防止脑裂。
RP
RP即Replication,主从复制。即只能从主到从进行同步。采用主写副读,只有主节点有事务。(从节点即副节点)
ps:RP方式,如果主节点没有同步到从节点,会出现数据不一致性。
PXC和RP比较
PXC | RP | |
---|---|---|
同步方式 | 同步 | 异步 |
主节点数量 | 全部都是 | 只有1个 |
同步方向 | 互相同步 | 只能主到从 |
读写关系 | 全部读写 | 主写副读 |
是否有事务 | 所有节点都有 | 主节点有 |
强一致性 | 是 | 否 |
执行效率 | 低 | 高 |
适用场景 | 订单、红包等贵重功能 | 通知、日志等次要功能 |
HAproxy高可用方案
HAproxy是可以支持TCP/IP协议的负载均衡方案。程序接入到HA数据源,由HAproxy来分发任务。