Redis主从复制

2021年4月6日 14点热度 0条评论 来源: 蓝 山

简介

为了解决 Redis 服务器 cpu 性能不足,以后可以启动多台 Redis 服务器,将请求分摊到每个节点上,相当于每个 Redis 服务器只处理之前的 1/N 的请求,为了保证多台 Redis 服务器中数据一致,需要搭建 Redis 的主从复制实现。

读写分离,性能扩展

主从同步的数据复制原理:

  1. 每次从机联通后,都会给主机发送sync(同步)指令
  2. 主机立刻进行存盘操作,发送RDB文件给从机
  3. 从机收到RDB文件后覆盖自己的RDB文件,进行全盘加载
  4. 之后每次主机的写操作,都会立刻发送给从机,从机执行相同的命令

一主二仆


简单理解就是一个老大带两个小弟

  1. 需要先删除redis之前的数据
  2. 编写主从的配置文件:redis-6379(主) / redis-6380/redis-6381

vim /myredis/redis-6379.conf

#引入 redis 默认的配置文件
include /myredis/redis.conf
#保存当前redis进程的id的文件
pidfile /var/run/redis_6379.pid
#端口号
port 6379
#rdb保存的文件
dbfilename dump-6379.rdb
#关闭 aof持久化
appendonly no
#不保存日志
logfile ""

复制redis6379的配置文件创建6380和6381的配置文件

[root@centos myredis]# cp redis-6379.conf redis-6380.conf
[root@centos myredis]# cp redis-6379.conf redis-6381.conf

打开复制的 6380/6381 配置文件 批量修改端口号

:%s/6379/6380/g
:%s/6379/6381/g

  1. 启动三个 redis 的服务
搭建主从:
  1. 通过 info replication 可以查看 主 / 从 状态
#默认每个都是老大[主机]
role:master  
#老大[主机] 的小弟[从机] [默认为0]
connected_slaves:0 


2. 小弟[从机] 可以通过 slaveof 老大[主机] IP 端口号 可以搭建主从关系(就是认老大)

3. 老大 [主机] 可读可写, 小弟[从机]只可以读, 没有写的权限

主机写的所有数据都会同步给从机

  • 从机宕机后,重启后,主从关系不在,需要重新搭建
  • 主机shutdown后情况如何?从机是上位还是原地待命?[ 原地待命 ]
  • 主机又回来了后,主机新增记录,从机还能否顺利复制?[ 可以复制 ]
  • 其中一台从机down后情况如何?依照原有它能跟上大部队吗? [ 可以 ]
  • 切入点问题?slave1、slave2是从头开始复制还是从切入点开始复制?比如从k4进来,那之前的k1,k2,k3是否也可以复制?[ 从头复制 ]

缺陷 : 主机压力太大 [ 中心化 ] 主机宕机, 不能执行写操作

薪火相传


简单理解就是上一个老大salve可以是下一个slave的老大master

  1. 6380 作为 6379 的小弟

slaveof 127.0.0.1 6379

  1. 6381作为6380的小弟

slaveof 127.0.0.1 6380

  1. 如下图

主可写可读,从只读

  • 如果中间的slave宕机,主机和slave后的从还能否进行数据复制 ?
  • 主机的数据不能传递给它后面的从机了
  • 后面的从机会等待宕机的从机回来
  • 如果宕机的从机回来 ?
  • 它之间的主从关系不在,需要重新搭建
  • 它之后的从机的主从关系还在
  • 它和之前的主机搭建主从后,主机的数据可以通过给他和他的从机
  • 主机宕机 ?
  • 后面的从机不能写,仍然等待主机回归

优点 : 减小主机压力 [ 去除中心化 ]
缺陷 :

  • 主机宕机, 不能执行写操作
  • 中间的从机宕机后会导致后续从机不能和主机联通

反客为主

简单来说就是老大挂掉了,重新选举一个小弟当老大

  1. 在薪火相传的模式的基础上,主机宕机时,从机不能执行写指令,而是等待主机回归
  2. 我们可以选择让离主机最近的从机上位变为主机,就可以执行写指令

slaveof no one

  1. 如图:

哨兵模式

[新主登基、旧主俯首、群臣俯首][优先选择]

  1. 反客为主的自动版
  2. 首先将主从修改为一主二仆模式

6379(6380/6381)

  1. 如图
  2. 在自定义的/myredis目录下新建 sentinel.conf 哨兵配置文件文件,名字绝不能错, 里面插入一下内容:

vim /myredis/sentinel.conf

sentinel monitor mymaster 127.0.0.1 6379 1

其中 mymaster为监控对象起的服务器名称,1 为至少有多少个哨兵同意迁移的数量。

写完后保存退出 !
5. 启动哨兵

redis-sentinel /myredis/sentinel.conf


shutdown主机 ,

  • 后大概10秒左右可以看到哨兵窗口日志,切换了新的主机
  • 哨兵程序会发起投票选举新的主机
  • 所有的从机都会作为新的主机的从机
  • 以前的宕机的主机也作为新主机的从机

    可以看到主机已经自动切换到新的主机

选举新主机的规则 :

  • 哪个从机会被选举为主机呢?根据优先级别:slave-priority

redis.conf配置文件中设置了 slave-priority 优先级

  • 如图 :
  • 如果每个从机都配置了 slave-priority 优先级, 值越小优先级越高
  • 如果没有设置slave-priority, 哨兵会按照数据偏移量判断哪个从机上位
  • 如果所有的redis从机数据量都一样,哨兵会按照启动redis时创建的runid判断,挑选值小的当主机

以上就是对 Redis 的主从复制做了一个简单的叙述!

感谢阅读, 如果文章对你有帮助记得点赞 收藏 + 关注哦 ! 各种疑难杂症QQ交流群:1101584918,欢迎大家加入。

    原文作者:蓝 山
    原文地址: https://blog.csdn.net/Lance_welcome/article/details/106432042
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。