半同步复制
------------恢复内容开始------------
调度器(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) 编辑 收藏 举报