企业级Mysql数据库集群--Mysql半同步复制

半同步复制

一般情况下,异步复制就已经足够应付了,但由于是异步复制,备库极有可能是落后于主库,特别是极端情况下,我们无法保证主备数据是严格一致的(即使我们观察到Seconds Behind Master这个值为0)

比如,当用户发起commit命令时,Master并不关心slave的执行状态,执行成功后,立即返回给用户。试想下,若一个事务提交后,master成功返回给用户后crash,这个事务的binlog还没来得及传递到slave,那么slave相对于master而言就少了一个事务,此时主备就不一致了。对于要求强一致的业务是不可以接受的,半同步复制就是为了解决数据一致性而产生的

为什么叫半同步复制?我们来先说说同步复制,所谓同步复制就是一个事务在master和slave都执行后,才返回给用户执行成功。这里核心是说master和slave要么都执行,要么都不执行,涉及到2pc(2 phrase commit)。而MySQL只实现了本地redo-log和binlog的2PC,但并没有实现master和slave的2PC,所以不是严格意义上的同步复制。而MySQL半同步复制不要求slave执行,而仅仅是接收到日志后,就通知master可以返回了

这里关键点是slave 接受日志后是否执行,若执行后才通知master则是同步复制,若仅仅是接受日志成功,则是半同步复制

半同步复制:一主多从模式下,有一个从节点返回成功,即成功,不必等待多个节点全部返回

master做完一步等一步,需要等待至少一个slave节点完成复制之后才开始进行下一个操作

master做大事件的时候,需要进行半同步,master节点等待一个节点即可

当半同步出现问题的时候会自动切换为异步同步

银行数据库全同步,master节点等待集群中的所有全部节点

数据库要避免慢查询问题,会造成延迟,占用数据库的IO

优点:提高了数据完整性,数据至少会存在两个节点(master节点和一个slave节点)

加了消息确认ACK,不会造成数据丢失

出现问题会自动降低为异步复制

master

ip:172.25.30.1/24

server1

mysql -uroot -p*

install plugin rpl_semi_sync_master SONAME 'semisync_master.so';

安装半同步模块master

set global rpl_semi_sync_master_enabled = 1

激活插件

slave

ip:172.25.30.2/24

server2

mysql -uroot -p*

install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';

安装半同步模块slave

set global rpl_semi_sync_slave_enabled = 1
激活插件
STOP SLAVE IO_THREAD;

关闭

START SLAVE IO_THREAD;

开启

从库重启io进程,激活插件之后必须要重启io进程,否则不会生效,如果重启不了的话就说明两端的数据不同步

在这里插入图片描述

STOP SLAVE IO_THREAD;

关闭从库进行测试

master

use westos;

insert into usertb values ('user4','123');

等待10s,没有接收到slave的ack请求,自动转换为异步复制

insert into usertb values ('user5','123');

再次插入数据,速度变快,异步复制生效

slave

use westos;

select * from usertab;

没有user4和user5数据

START SLAVE IO_THREAD;

开启slave

select * from usertab;

数据全部同步完成

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值