和我一起迎接明天的太阳吧

klaus08

焦虑源于行动的匮乏

7-主从复制

分类:

​ - 全量复制

​ - 增量复制

作用:

​ - 读写分离,提高性能

​ - 容灾快速恢复

单机实现方法

配置多个redis.conf且分配不同端口并启动( 从服务器要加上masterauth 密码配置);

启动后分别登录,使用 SLAVESOF IP PORT将本机变成从服务器。

复制原理

  1. Slave 启动成功连接到 Master 后会发送一个 sync 命令

  2. Master接到命令,把主服务器数据持久化,得到 RDB文件。然后将RDB文件发送给从文件,从服务器获得RDB文件后读取,完成一次完全同步

  3. 全量复制:slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。

  4. 增量复制:Master 继续将新的所有收集到的修改命令依次传给slave,完成同步

  5. 只要是重新连接master,一次完全同步(全量复制)将被自动执行


常见模式

1.一主二仆

Q:从机是否可以写?set可否?

A:都不允许。

Q:主机shutdown后情况如何?从机是上位还是原地待命?

A:主机shutdown后,从机显示主机的状态位“down”,也就是从机知道主机down掉了;从机不会上位变成主机。

Q:主机又回来了后,主机新增记录,从机还能否顺利复制?

A:可以。

Q:其中一台从机down后情况如何?依照原有它能跟上大部队吗?

A:可以,从机down后重启,重新作为主机的Slave时,会从主机得到所有信息。

2.薪火相传

上一个 Slave 可以是下一个 Slave 的Master,Slave同样可以接收其他 slaves的连接和同步请求,那么该slave作为了链条中下一个的master, 可以有效减轻master的写压力,去中心化降低风险。

缺点是这样更新会很慢,一旦某个slave宕机,以该服务器为 master 的 slave 都没法同步。

3.反客为主

当一个 master 宕机后,后面的 slave 可以立刻升为 master,其后面的slave不用做任何修改。

需要通过slave no one手动实现。

4.哨兵模式

反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库,主库如果恢复的话,变成新主库的从库。

实现:

  1. 新建 sentinel.conf文件

  2. 配置哨兵,sentinel monitor mymaster 127.0.0.1 6379 1。

    mymaster 是为监控对象起的别名;1 为至少有多少个哨兵同意迁移的数量。

  3. 启动哨兵,redis-sentinel sentinel.conf

Q:哪个从机会被选举为主机呢?

A:根据优先级别:slave-priority ,值越小优先级越高

posted @ 2021-09-22 22:45  klaus08  阅读(33)  评论(0编辑  收藏  举报