Redis 主从复制
1、主从复制
简述:主从复制就是主机数据更新后根据配置和策略,自动同步到备份机的 master/slave 机制,mater 以写为主,而 slave 以读为主。主要用于读写分离,分离读写压力,容灾快速恢复。
一主二仆配置例子:以下例子为在一台机器开三个 redis server,多台机器其实也是相似的配置,配置是配从不配主,配置文件需要改动的地方如下
1)首先保留原始的 redis.conf
2)新建 redis6379.conf、redis6380.conf、redis6381.conf
3) 文件内容如下,只展示其中一个这,里没有配 log 是因为用不到 log,如果有需求则自己配(注意三个文件的区别只是端口号不同,include 的内容是原始配置文件的路径)
4)分别使用三个配置文件 redis-server <xxx.conf> 开启三个不同的 redis 服务端
5)开三个终端窗口分别使用 redis-cli -p <port> 命令来开启三个服务端对应的客户端
6)使用命令 info replication 查看当前服务器主从状态,当然现在没有设置主从之前都会是 master
7) 使用命令 slaveof <ip> <port> 来配置当前服务器为某个服务器的从服务器,在当前例子中,我们将 6380 和 6381 作为 6379 的从服务器。然后查看主机状态如下
上述的主从配置有如下特点:
- 如果 master 本身就有数据,那么 slave 在接入后会继承原本 master 的数据,并且同步复制主服务器的状态,使得主从状态一致
- slave 机器不能执行写操作,例如 set 操作
- 主机 shutdown 之后,slave处于原地待命状态,而非上位
- 如果 slave 挂了之后,重启之后是不能恢复到原来的主从状态的,除非在从服务器的配置文件中已经写明了 slaveof 的配置信息
复制的原理:
2、链条模式
注意:无论你怎么拆怎么接,所有从都会与当前的 master 数据状态一致,例如你先拆开上图的第一条链,然后将第二台主机反客为主执行 slaveof no one,这个时候执行一些新的写操作,然后再将第二台机执行 slaveof 变为第一台机的从,那么刚刚那些新的写操作都会无效,反正状态都和主一致,可以自己实验一下。
3、哨兵模式
哨兵配置例子:
1)首先将当前所有服务器调整为一主多仆的形式(此例子为上面一主二仆的状态)
2)在配置文件放置的文件夹下创建哨兵的配置文件夹 sentinel.conf 内容为
sentinel monitor <name> <host> <port> <number>
name 为为监控对象起的服务器名称,这个名字随便起都可以
host、port 为被监视服务器的地址和端口
number 为当前被监视对象被多少个哨兵同意为 down 掉才能进行真正的迁移
例子的话配置就如下了
3)执行启动哨兵命令为 redis-sentinel <xxx.conf>
4)此时把 master 主机 shutdown 掉,等待一阵子(这个会有缓冲时间)查看哨兵窗口,可以看到已经切换了 master
故障切换规则: