Redis 主从复制
为了解决 Redis 服务器 cpu 性能不足,以后可以启动多台 Redis 服务器,将请求分摊到每个节点上,相当于每个 Redis 服务器只处理之前的 1/N 的请求,为了保证多台 Redis 服务器中数据一致,需要搭建 Redis 的主从复制实现。
读写分离,性能扩展
主从同步的数据复制原理:
- 每次从机联通后,都会给主机发送sync(同步)指令
- 主机立刻进行存盘操作,发送RDB文件给从机
- 从机收到RDB文件后覆盖自己的RDB文件,进行全盘加载
- 之后每次主机的写操作,都会立刻发送给从机,从机执行相同的命令
一主二仆
简单理解就是一个老大带两个小弟
- 需要先删除redis之前的数据
- 编写主从的配置文件:
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
- 启动三个 redis 的服务
搭建主从:
- 通过
info replication
可以查看 主 / 从 状态
#默认每个都是老大[主机]
role:master
#老大[主机] 的小弟[从机] [默认为0个]
connected_slaves:0
2. 小弟[从机] 可以通过 slaveof
老大[主机] IP
端口号
可以搭建主从关系(就是认老大)
3. 老大 [主机] 可读可写, 小弟[从机]只可以读, 没有写的权限
主机写的所有数据都会同步给从机
- 从机宕机后,重启后,主从关系不在,需要重新搭建
- 主机shutdown后情况如何?从机是上位还是原地待命?[ 原地待命 ]
- 主机又回来了后,主机新增记录,从机还能否顺利复制?[ 可以复制 ]
- 其中一台从机down后情况如何?依照原有它能跟上大部队吗? [ 可以 ]
- 切入点问题?slave1、slave2是从头开始复制还是从切入点开始复制?比如从k4进来,那之前的k1,k2,k3是否也可以复制?[ 从头复制 ]
缺陷 : 主机压力太大 [ 中心化 ] 主机宕机, 不能执行写操作
薪火相传
简单理解就是上一个老大salve可以是下一个slave的老大master
- 6380 作为 6379 的小弟
slaveof 127.0.0.1 6379
- 6381作为6380的小弟
slaveof 127.0.0.1 6380
- 如下图
主可写可读,从只读
- 如果中间的slave宕机,主机和slave后的从还能否进行数据复制 ?
- 主机的数据不能传递给它后面的从机了
- 后面的从机会等待宕机的从机回来
- 如果宕机的从机回来 ?
- 它之间的主从关系不在,需要重新搭建
- 它之后的从机的主从关系还在
- 它和之前的主机搭建主从后,主机的数据可以通过给他和他的从机
- 主机宕机 ?
- 后面的从机不能写,仍然等待主机回归
优点 : 减小主机压力 [ 去除中心化 ]
缺陷 :
- 主机宕机, 不能执行写操作
- 中间的从机宕机后会导致后续从机不能和主机联通
反客为主
简单来说就是老大挂掉了,重新选举一个小弟当老大
- 在薪火相传的模式的基础上,主机宕机时,从机不能执行写指令,而是等待主机回归
- 我们可以选择让离主机最近的从机上位变为主机,就可以执行写指令
slaveof no one
- 如图:
哨兵模式
[新主登基、旧主俯首、群臣俯首][优先选择]
- 反客为主的自动版
- 首先将主从修改为一主二仆模式
6379(6380/6381)
- 如图
- 在自定义的/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,欢迎大家加入。