主备一致
master和slave有一个专门的长连接处理数据同步
具体步骤
1.slave设置change master,设置主库的连接信息 用户名密码 日志开始同步位置和偏移量
2.slave上设置start slave,启动两个线程sql_thread和io_thread(负责于主库建立连接)
3.master验证完用户名 密码,就把slave传来的日志位置和偏移量 在本地读取后送给slave
4.slave把binlog日志接受 转化成中间日志(relay log)存在本地
5.sql_thread解析日志,执行命令
备库延迟
正常的慢
master库的事务文件,同步到slave库,slave库再解析执行
非正常的慢
1.非对称部署,slave机器的性能差(比如更多的slave库在slave机器节点上)
2.大量读服务都是通过slave库,slave库的读压力大(一主多从会好些)
3.主库执行一个大事务(N分钟)
4.备库的并行复制能力差(只支持单线程复制)
主备切换
可靠性优先
1.识别slave库的sbm是否小于5秒,不行的化不停的重试
2.把master切成readonly
3.等待slave的sbm=0
4.把slave切成可读可写(readonly=false)
5.流量切到slave库
《SBM=slave behind msater,上面步骤可以看出来 会出现短暂的无法写入》
可用性优先
不用等待sbm=0直接操作,数据会出现不一致
一主多从
A和A‘互为主备,A和BCD就是主备
切换过程
A‘变成新主库,BCD指向A’