mysql读写分离+高可用实现原理

假设我们有一台服务器Mysql作为主库,另外一台作为从库

主库设置为只可写入

从库设置为只读

假设此时主库宕机:从库必须顶上去,那么这是怎么实现的呢?

首先在Mysql前面有两台nginx负载均衡服务器,互相监控

nginx会有一个VIP(虚拟IP),DNS上绑定的域名一定是DNS的VIP虚拟IP,而不是真实IP

VIP的作用是,当一台机器挂了,另外一台nginx检测到宕机事件,那么就会把自己的IP变成虚拟IP,这个过程叫做 < 高可用 >

那么在Mysql 中,实现的原理和nginx类似,它把一个从库提升为主库,其他的从库指向这个被提升主库的mysql数据库,它用到的一个叫做MHA的软件。

在这里插入图片描述

MYSQL的主从原理
主库和从库都开启server_id ,主库和从库不能相同,从库和从库之间可以相同
创建一个主从复制用户,并且开启binlog
从库通过change master to命令确认主库的hostuserlogfilelog_position等信息,并且执行start slave,开启主从复制。
此时从库会开启两个线程io线程和sql线程,io线程的作用是连接主库的dump线程去取数据,把从log_pos取得的数据返回给IO线程,通常情况下slave 从库位置的master.info要比master主库的要落后。IO线程拿到数据,先放到TCP/IP缓存里,因为主从复制是异步的,master.info是记录上一次获取的数据区间,TCP缓存会把位置点数据放到relay-log中继日志里面,sql语句会根据relay-log执行sql语句,并且把已经执行的序号记录到relay-log里面,因为TCIP缓存会不停得向relay-log存数据,所以需要这样一个relay-log记录日志。
在这里插入图片描述
当主库宕机的时候,主库的binlog会被保存,对比从库的数据量,找到数据最新的从库(通过对比relay-log)对比那个slave最接近主库。因为数据库有一定的命中率,考虑到效率问题,通过slave上的slave-log将其他从库数据补全至salve01一样,然后将slave01提升为主库,再将保存下来的binlog数据恢复到slave01上,其他从库开启主从复制,MHA切换一般10s - 30s.

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值