mysql 高可用架构
2021-03-18 19:48:10 6 举报
mysql 高可用架构
作者其他创作
大纲/内容
slave1
半同步复制:收到一个ACK后返回
mysql提供了Group Replication 插件• 维护分布式执行内容• 侦测和处理冲突(多主模式下)• 处理分布集群的恢复 侦测成员的变化 在必要时作为贡献者提供数据 在必要时收集状态• 推送事务给其他的组员• 接收其它成员的事务并处理• 决定事务最终的结果,• commit 或 rollback
mysql-s
commit
ACK Request Queue
两种方案:1.AFTER_COMMIT:主库先commit事务,再等ack,等ack以后,再返回给客户端2.AFTER_SYNC:MYSQL5.7推出的无损复制,为默认选项,myql等到ACK以后,再提交事务,保证数据的一致性
内部结构
replay
client
ACK
异步或者半同步复制
binlog的三种模式:1.statement:使用DML sql语句记录。优点:日志量少 缺点: 服务器环境不一致,导致数据不一致,例如 select now(),服务器时间不一致。2.Row :记录修改的数据。 优点:无服务器不一致问题。 缺点: 日志量大,IO大3.Mixed:混合模式 。 两种模式切换,有两者的优点,建议使用。
read
事物结束返回客户端
excute
5.Mysql innoDB cluster
apply_cd
slave3
可以在单独的从库进行后端统计计算等。
1.M-S架构优缺点:优点:架构简单、读写分离、建立快速缺点:只有master节点可写、高并发写会导致数据延迟注意事项:1.主库避免大并发事务; 2 禁止大批量delete操作;总结:规模不大情况下,建议使用
Client
mysqlprimary node
commit_cb
read/write
primaryR/W
目前mysql官方无分片策略。只能用mycat或者sharding-proxy代替。
apply
slave最新slave
secondaryinstanceRead Only
write
relay log
data changes
discard(丢弃该节点)
mysql-shell
验证
不通过
consensus
mysql-route
node1
send eventwithout ACK request
从库
Node3
master
update t1 set a=3 where id=1(commit later)
返回
MYSQL
IO thread
2.M-M架构优缺点:优点:同时写入多个节点,充分利用机器性能;配置比较简单; 缺点:可能产生脑裂;高并发DML可能会产生延迟; 注意事项:1.主库避免大并发事务; 2 禁止大批量delete操作;3.采用半同步保证数据一致性。总结:不建议使用
certify
GROUP
push
主库的事务线程在提交时会被阻塞并等待,结果有两种可能,要么至少一个从库节点通知它已经收到了所有这个事务的Binlog事件,要么一直等待直到超过配置的某一个时间点为止,而此时,半同步复制将自动关闭,转换为异步复制。
write set
mysql 5.5之前
binlog
C
GCS API
fail
slave2
返回给客户端
committing
mysql MGR 1
slave
sharding-proxy
wait
发送transaction_msg
6.Mysql分库分表高可用架构
3.MHA架构优缺点:优点:健壮性高,可靠性好。 缺点:只能一个节点写入;span style=\
1.在异步复制的基础上,增加了从库ACK的机制master的dumper线程通知slave后,增加了一个ack(消息确认),也就是dumper线程除了发送t1到slave,还承担了接收slave的ack工作。如果出现异常,没有收到ack,那么将自动降级为普通的复制,直到异常修复后又会自动变为半同步复制。
4.PXC架构优缺点:优点:1.实现了MySQL集群的高可用性和数据的强一致性;2.完成了真正的多节点读写的集群方案;3.改善了主从复制延迟问题,基本上达到了实时同步; 4.新加入的节点可以自动部署,无需提交手动备份,维护方便; 5.由于是多节点写入,所以DB故障切换很容易。缺点:1.任何更新的事务都需要全局验证通过,才会在其他节点上执行,集群性能受限于性能最差的节点。2.因为需要保证数据的一致性,PXC采用的实时基于存储引擎层来实现同步复制,所以在多节点并发写入时,锁冲突问题比较严重。3.存在写扩大的问题。所有节点上都会发生写操作,对于写负载过大的场景,不推荐使用PXC。
Node2
利用paxos协议,使数据达到一致性
Lastest ACK
node2
异步复制原理:
通过MHA的VIP访问
主库
1.mysql主库开启binlog,mysql在写入数据时,会将数据变更记录到binlog(三种模式)2.slave会在一定时间间隔内对master二进制日志进行探测其是否发生改变,若改变,则开启I/O线程向master请求数据,同时master节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件。3.IO 线程读取到主的binlog以后,并将得到的binlog日志写到relay log(中继日志) 文件中;4.SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;
log dumpthread
MHA-manager
Replication plugin
多主模式下存在写冲突的问题,当两条更新的语句到达不同的主节点时,只有一个事务可以提交,以先提交事务的为准,后面的事务都回滚。
读取
管理节点:会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。
sql
X
主从异步/半同步/组复制(全同步)/复制原理
secondaryR/O
多主模式-一般不采用
提交
SQL thread
1.在事务提交时,具体在MYSQL_BIN_LOG::prepare之后但是在MYSQL_BIN_LOG::ordered_commit之前,即事务相关的BINLOG Event还在BINLOG CACHE没有写入到BINLOG FILE前,将BINLOG CACHE中和Rpl_transaction_write_set_ctx中的数据进行处理并写入到transaction_msg中,由gcs_module负责发送transaction_msg到各个节点,等待各节点进行事务认证。2.由于transaction_msg中包含BINLOG信息,并在事务认证期间发送给MGR各节点,因此无需等待主节点的BINLOG落盘后再发送给备用节点。3.每个MGR群集中的节点上,都存在IO线程和SQL线程,IO线程会解析transaction_msg获取到BINLOG EVENT并保存到RELAY LOG中,再由SQL线程执行重放到辅助节点上。
primaryinstanceR/W
plugin API
1.首先客户端先发起一个事务,该事务先在本地执行,执行完成之后就要发起对事务的提交操作了。2.在提交之前需要将产生的数据写集(write set)广播出去,然后获取到一个全局的事务ID号,一并传送到另外的节点上面。3.通过合并数据之后,发现没有冲突数据,执行apply_cd和commit_cb动作,如果发现冲突就需要取消此次事务的操作。4.而当前server节点通过验证之后,执行提交操作,并返回OK,如果验证没通过,则执行回滚。5.当然在生产中至少要有3个节点的集群环境,如果其中一个节点没有验证通过,出现了数据冲突,那么此时采取的方式就是将出现不一致的节点踢出集群环境,而且它自己会执行shutdown命令,自动关机。
1. 从宕机崩溃的master保存二进制日志事件(binlog events);2. 识别含有最新更新的slave;3. 应用差异的中继日志(relay log)到其他slave;4. 应用从master保存的二进制日志事件(binlog events);5. 提升一个slave为新master;6. 使用其他的slave连接新的master进行复制。
VIP
master宕机后操作
update t1 set a=5 where id=1 (commit frist)
组复制原理:MGR 基于GTID
Mysql Group Replication由若干个节点共同组成一个复制组,一个事务的提交,必须经过组内大多数节点(N / 2 + 1)决议并通过,才能得以提交。1.高一致性、采用paxos协议。保证数据一致性;2.高容错性:自动检测机制,只要不是大多数节点都宕机就可以继续工作,内置防脑裂保护机制;(类似zk)3.高扩展性:节点的增加与移除会自动更新组成员信息,新节点加入后,自动从其他节点同步增量数据。4.高灵活性:提供单主模式和多主模式,单主模式在主库宕机后能够自动选主,所有写入都在主节点进行,多主模式支持多节点写入。
LVS请求转发
主节点宕机,集群可以利用paxos协议,选取主节点
异步复制
主失败
MGR复制:在多主情况下,执行DML,需要先进行校验
node3
可以使用sharding-proxy或者mycat,解决分库分表问题
通过
用于解决mysql高可用,使用mysql-route,可以实现主从自动切换和读写分离。
半同步复制原理:mysql5.5新增
4.Mysql innoDB cluster 架构优缺点:优点:支持单主和多主模式;配置比较简单;mysql官方版本。能保证数据一致性与可用性。缺点:多主模式下会导致数据出错注意事项:1.主库避免大并发事务; 2 禁止大批量delete操作;总结:建议使用
Node1
在binlog落盘之前,将transaction_msg发送给其他节点,
收藏
0 条评论
下一页