文章目录
集群(高可用)
集群是使用PXC-mysql(Percona XtraDB Cluster),多节点的数据实时同步(读写)
需要用到mysql cluster安装包,要求运行在千兆以上的局域网内,节点可以采用双网卡,节点组之间采用直连方式。
优点就是数据实时同步,高可用,每个节点的数据都是同步一致的,任何一个节点宕机都不会影响业务。
缺点就是性能,写的性能,每次写操作,都会在所有节点之间进行同步
原理
数据节点之间采用的是 同步复制 来保证各节点之间的数据一致性,一般通过两阶段提交协议来实现
管理节点(一个),SQL节点(多个)和数据节点(多个)
2PC同步复制一共需要4次消息传递
主从(高性能)
mysql community(普通版)就可以
读写分离:主写从读 保证高性能
主从之间是通过mysql的复制来保证数据的一致性。相对mysql 集群的数据同步方式来讲是异步的。
但是主从也有缺点,一个是不满足高可用,master宕机,需要手动切换才行,业务会中断不允许的,
原理
- 主从复制
主节点要开启binlog,设置一个唯一的服务器id(局域网内唯一);从节点设置服务器id,binlog记录了主节点上的所有的DDL和DML操作操作,会被复制到从节点的relaylog并在从节点上回放。
配置
启动前:配置文件my.ini
- master
server-id = 唯一id
binlog-do-db = 要复制的数据库
# 开启二进制日志文件
log-bin = mysql-bin
- salve
server-id = 唯一id
binlog-do-db = 要同步的数据库,与master上的配置保持一致
# 开启二进制日志文件
log-bin = mysql-bin
- 启动slave线程
-- 存库 启动I/O 线程和SQL线程
mysql> start slave
主库挂掉,从库需要手动设置新的主库
对比选择Relay_Master_Log_File,Exec_Master_Log_Pos最大的作为新的主库
--停止同步线程
mysql> stop slave io_thread;
--查看正在执行的线程
mysql> show processlist;
-- 表示从库更新都执行完毕
Slave has read all relay log; waitingfor more updates
--停止I/O 线程和SQL线程
mysql> stop slave;
--重启存库变为主库
--删除所有的binglog日志文件,并将日志索引文件清空,重新生成二进制日志
mysql> reset master;
-- 其他存库地址执行新的主库
mysql> change master to master_user='RepUser',master_password='beijing',master_host='192.168.80.134',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=154;
最后,程序里调用主库的IP也要变,或者将从库IP地址改为主库IP地址,测试应用连接是否正常。
复制
I/O线程:从主库读取bin log,并存储到relay log中继日志文件中。
SQL线程:读取中继日志,解析后,在从库重放。
1. 同步复制:
集群同步复制
指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。
2. 异步复制
Mysql5.5之前的 主从复制 是异步的
- 存在问题:
- 主从延迟可能导致数据丢失:主库宕机造成主库上的事务binlog丢失
3. 半同步复制:
解决数据丢失的问题
主库要等待从库反馈同步成功(不需要等待所有从库给主库反馈。而是等待至少一个从库反馈)。
当出现超时,主数据库将会自动转为异步复制模式,
直到至少有一台从服务器接受到主数据库的binlog,并且反馈给主数据库。这时主数据库才会切换回半同步复制模式。
- MySQL5.5开始,MySQL以插件的形式支持半同步复制
3. 并行复制 MTS multi-threaded slave
解决复制延迟问题
-
5.6 基于库,多库并行复制
多库才有用,基本无人问津 -
5.7 是基于组提交的并行复制,官方称为enhanced multi-threaded slave(简称MTS)
基于GTID的主从复制,对事务进行分组 + 二阶段提交, -
其核心思想:
- master服务器上是怎么并行执行的,那么slave上就怎样进行并行回放
- 组复制(group commit):通过对事务进行分组,一个组提交的事务都是可以并行
-
组复制原理
事务有冲突就不会进入prepare阶段,同时处于prepare阶段的事务就无冲突,那它们就不会共享任何锁,那么这些事务都是可以并行执行。这些事务就能分在一组
mysql的并行复制的具体实现落地 https://blog.youkuaiyun.com/Lockey23/article/details/78122111?locationNum=9&fps=1
多源复制(Multi-Source Replication)
MySQL 5.7之前只能实现一主一从、一主多从或者多主多从的复制。
MySQL 5.7 开始支持了多主一从的复制方式,也就是多源复制