MySql 集群/主从

集群(高可用)

集群是使用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的主从复制,对事务进行分组 + 二阶段提交,

  • 其核心思想:

    1. master服务器上是怎么并行执行的,那么slave上就怎样进行并行回放
    2. 组复制(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 开始支持了多主一从的复制方式,也就是多源复制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xyc1211

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值