半同步复制

------------恢复内容开始------------



调度器(lvs或haproxy或nginx):调度器可设置mysql的读写分离,假设 master1负责"写" master2负责"读"
图为主主复制架构

异步复制:
1)用户向调度器发送对数据库的"写"请求,通过调度器将请求送往master1
2)master1完成数据更新后将结果通过调度器反馈给用户
3)master1将生成的二进制日志通过"主从复制"复制给master2进行数据更新。
优点:性能强,反馈速度快
缺点:第2步完成后master1突然崩溃而master2还未能完全接收来自master1的二进制日志就会造成数据丢失。

同步复制:
1)用户向调度器发送对数据库的"写"请求,通过调度器将请求送往master1

2)master1完成数据更新后生成二进制日志文件通过"主从复制"复制给master2 
3)待master2将二进制日志接收完后再将数据更新的结果通过调度器发送用户
优点:因为是等到master2完全接收master1的二进制日志后才将结果反馈给用户,因此不担心数据丢失的情况。
缺点:倘若有多个slave那么需要全部接受完二进制日志master1才会反馈结果给用户,如果用户对master1操作量十分巨大,那么这个"主从复制"时间相应延长、其结果的反馈时间也会相应延长。

半同步复制:
1)用户向调度器发送对数据库的"写"请求,通过调度器将请求送往master1

2)完成数据更新后生成二进制日志文件通过"主从复制"复制给slave1 slave2 
3)只要slave1或slave2其中一个接收完二进制日志,那么master1就会将数据更新的结果通过调度器反馈给用户。

优点:倘若master1复制过来的二进制日志非常庞大,那么也可以设置一个时间阈值,甚至于不用等到其中一个slave完全复制完毕,只要超过这个时间阈值master1就向用户反馈结果。

半同步复制(master配置):
1)查看是否拥有 rpl_semi_sync_master 插件

show plugins;

 2)安装rpl_semi_sync_master 半同步插件

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

 3)安装master半同步插件后在配置文件中开启。
rpl_semi_sync_master_enabled=ON    #将安装semisync_master.so的插件"开启"后,重启mysqld,否则无法启动>

rpl_semi_sync_master_timeout=3000  #设置slave接收master二进制日志的时间阈值(单位毫秒),超过这个阈值master则向用户反馈数据更新的结果>

4)查看该插件所提供的全局变量

SHOW GLOBAL VARIABLES LIKE '%semi%';

 <可以看到master 半同步插件已经为ON >

 5)查看半同步状态

SHOW GLOBAL STATUS LIKE '%semi%';

 <显示半同步状态中没有客户端即没有slave>

6)master确保二进制日志已开启

show master logs;

7)创建并授权一个用于连接master数据库复制数据的账号。

1.>创建账号slave
2.>将 replication slave 权限授予slave账号。
8)将master进行完全备份并远程拷贝到slave

mysqldump -uroot -p'123456' -A -F -E -R --triggers --single-transaction --master-data=1 --default-character-set=utf8mb4 --hex-blob --flush-privileges >/data/all_`date +%F`.sql
scp /data/all_2021-06-20.sql 10.0.0.20:/data/

 

半同步复制(slave1和2配置):
1)查看是否拥有 rpl_semi_sync_slave 半同步slave插件,如果没有则安装。

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

2)将slave半同步插件开启。

rpl_semi_sync_slave_enabled=ON    #将安装semisync_slave.so的插件"开启"后,重启mysqld,否则无法启动>

3)将完全备份中的 change master to (添加master信息)进行完善。
<完善后>

4)对完全备份进行还原,随后开启主从复制功能。

source /data/all_2021-06-20.sql
statr slave;

5)回到master中查看处于半同步状态的客户端数量

SHOW GLOBAL STATUS LIKE '%semi%';

posted on 2021-06-20 18:01  1251618589  阅读(2)  评论(0编辑  收藏  举报

导航