Redis主从复制
Redis主从复制
主从实现
1、创建/myredis文件夹并复制redis.conf配置文件到文件夹中
2、配置一主两从,创建三个配置文件并在三个配置文件写入内容
3、启动三个redis服务
4、查看当前主机运行状况
5、在从机上执行 slaveof 主机ip 端口号
测试
主机上进行写操作
从机上只读不写
主机挂掉,重启如初!
复制原理
薪火相传
反客为主
哨兵模式
调整为一主二仆模式
配置哨兵
启动哨兵
主机数据更新后根据配置和策略, 自动同步到备机的 master/slaver 机制,Master 以写为主,Slave 以读为主,主从复制节点间数据是全量的。

主从实现
1、创建/myredis文件夹并复制redis.conf配置文件到文件夹中

Appendonly 关掉或者换名字
![]()
2、配置一主两从,创建三个配置文件并在三个配置文件写入内容
拷贝多个 redis.conf文件 include(写绝对路径)
Pid 文件名字 pidfile
指定端口 port
dump.rdb 名字dbfilename


3、启动三个redis服务

4、查看当前主机运行状况
info replication
打印主从复制的相关信息


5、在从机上执行 slaveof 主机ip 端口号

返回6379查看发现它下面多了两台从机

测试
主机上进行写操作

从机上只读不写

将6380挂掉后重连得到如下界面


主机挂掉,重启如初!

复制原理
1、当从连接上主服务器之后,从服务器 向主服务发送进行数据同步消息
2、主服务器接到从服务器发送过来同步消息,把主服务器数据进行持久化rdb文件,把rdb文件发送从服务器,从服务器拿到rdb进行读取
3、每次主服务器进行写操作之后,和从服务器进行数据同步
薪火相传
上一个 Slave,可以是下一个 slave的 Master,slave 同样可以接收其他 slaves 的连接和同步请求,那么该 slave作为了链条中下一个的 master,可以有效减轻 master 的写压力,去中心化降低风险。
用 slaveof <ip><port>
中途变更转向:会清除之前的数据,重新建立拷贝最新的
风险是一旦某个 slave 宕机,后面的 slave 都没法备份
主机挂了,从机还是从机,无法写数据了


反客为主
当一个 master 宕机后,后面的 slave 可以立刻升为 master,其后面的 slave不用做任何修改。
用 slaveof no one 将从机变为主机
这里以及提前将6379挂掉

哨兵模式
哨兵模式是反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。
调整为一主二仆模式
6379带着6380、6381

配置哨兵
自定义的myredis 目录下新建sentnel.conf 文件,名字不能错
填写内容

其中 mymaster 为监控对象起的服务器名称,1为至少有多少个哨兵同意迁移的数量。
启动哨兵
执行redis-sentinel /myredis/sentinel.conf

执行后只要主机挂掉了他的从机会自动变为主机
如果再次启动原来的主机会变为新主机的从机
当主机挂掉,从机选举产生新的主机
哪个从机会被选举为主机呢?根据优先级别:slave-priority ,新版本变为了replica-priority。
原主机重启后会变为从机。
1、选择优先级靠前的之
2、选择偏移量最大的
3、选择runid最小的从服务
优先级:在 redis.conf 中默认 slave-priority 100,值越小优先级越高。
偏移量:指获得原主机数据最全的概率。
runid:每个 redis 实例启动后都会随机生成一个 40 位的 runid。
