一、主从复制
1、什么是主从复制
主从复制,就是主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。
2、主从复制的目的
用处:
(1)读写分离,性能扩展,减少读写压力;
(2)容灾快速恢复;
二、主从配置
1、原则
配从不配主(配置从服务器信息)
2、步骤
分别创建 6379/6380/6381三份配置文件,来创建不同的实例对象
(1)拷贝多个 redis.conf 文件,使用 include 包含有公共设置的redis的配置文件;
(2)开启 daemonize yes
(3)pid 文件名字 pidfile
(4)指定端口 port
(5)log 文件名字
(6)dump.rdb 名字 dbfilename
(7)Appendonly 关掉或者换名字
示例:
#--- 6379配置信息 ---
#使用 include 包含有公共设置的redis的配置文件
include /opt/myRedis/redis.conf
#开启 daemonize yes,在公共配置文件中已开启
#指定 pid 文件名字 pidfile
pidfile /var/run/redis6379.pid
#指定端口
port 7379
#指定 log 文件名字,这里没有指定
log ""
# RDB 的dbfilename
dbfilename dump6379.rdb
#在公共的配置中关掉了AOF:appendonly no
#--- 6380配置信息 ---
#使用 include 包含有公共设置的redis的配置文件
include /opt/myRedis/redis.conf
#开启 daemonize yes,在公共配置文件中已开启
#指定 pid 文件名字 pidfile
pidfile /var/run/redis6380.pid
#指定端口
port 7380
#指定 log 文件名字,这里没有指定
log ""
# RDB 的dbfilename
dbfilename dump6380.rdb
#在公共的配置中关掉了AOF:appendonly no
#--- 6381配置信息 ---
#使用 include 包含有公共设置的redis的配置文件
include /opt/myRedis/redis.conf
#开启 daemonize yes,在公共配置文件中已开启
#指定 pid 文件名字 pidfile
pidfile /var/run/redis6381.pid
#指定端口
port 6381
#指定 log 文件名字,这里没有指定
log ""
# RDB 的dbfilename
dbfilename dump6381.rdb
#在公共的配置中关掉了AOF:appendonly no
3、查看信息
info replication 打印主从复制的相关信息
4、配置从服务器
slaveof <ip> <port>
在从服务器输入命令,成为某个实例的从服务器
此命令可以设置从服务器要跟随的主服务器的信息。
如果在客户端使用命令,重启之后就失效了;可以配置到redis.conf 配置文件中,永久生效。
三、一主二从模式
1、一主二从模式
(1)根据上面的配置文件,启动三个不同的 redis 实例
redis-server /opt/myRedis/redis6379.conf
redis-server /opt/myRedis/redis6380.conf
redis-server /opt/myRedis/redis6381.conf
(2)使用客户端分别连接到三个实例(由于端口不同,需要指定端口来连接)
redis-cli -h 127.0.0.1 -p 6379
redis-cli -h 127.0.0.1 -p 6380
redis-cli -h 127.0.0.1 -p 6381
(3)使用命令查看信息
info replication 查看主从复制的相关信息
可以看到每一个实例的 role 都是 master,是一个单独的实例,三个实例之间没有任何关联关系;
(4)配置从服务器
在 6380/6381 的客户端中使用 slaveof 命令指定跟随的 master
slaveof <ip> <port>
slaveof 127.0.0.1 6379
这时 6379 的 role 就是 master,6380和6381的 role 就是 slave,并且 6379 下有两个 salve,就是 6380和 6381;
注意:这里是在客户端使用命令进行配置,服务重启后就需要重新配置,可以配置进配置文件中永久生效;
2、一主二从模式演示
3、复制原理
每次从机联通后,都会给主机发送sync指令;
主机立刻进行存盘操作,发送RDB文件,给从机;
从机收到RDB文件后,进行全盘加载;
之后每次主机的写操作,都会立刻发送给从机,从机执行相同的命令;
四、薪火相传模式
优点:去中心化降低风险;
缺点:中间某个 slave 宕机,后面的 slave 都没法备份;
五、反客为主模式(小弟上位)
当一个master宕机后,后面的 slave 可以立刻升为 master,其后面的slave不用做任何修改。
用 slaveof no one 将从机变为主机。
六、哨兵模式(推荐大哥)
1、哨兵模式(sentinel)
反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。
2、配置哨兵
(1)调整为一主二仆模式;
(2)自定义的/myredis目录下新建sentinel.conf文件;
(3)在配置文件中填写内容
sentinel monitor mymaster 127.0.0.1 6379 1
其中mymaster为监控对象起的服务器名称, 1 为 至少有多少个哨兵同意迁移的数量;
(4)启动哨兵
执行 redis-sentinel /myredis/seninel.conf
3、效果演示
(1)当主机 master 宕机后,哨兵会监控到,然后通过投票选择的方式在从服务器 slave 中选举出来新的 master;
(2)当原来的 master 再次上线后,会变成选择 master 的 slave;
七、故障恢复