一、主从复制
- 主从复制是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者是主服务器,后者是从服务器。
- 一主多从:只能存在一个主服务器;可以有多个从服务器。主服务器负责写操作,从服务器负责读操作
- 复制是单向的,只能由主服务器复制到从服务器
二、主从复制的作用
- 读写分离:主服务器负责写操作,从服务器负责读操作。可以分担服务器压力,提高并发量
- 高可用:主服务器出现故障时,从服务器可以升级为主服务器,迅速恢复服务
三、主从复制搭建
1、创建一个文件夹:
mkdir /myredis
2、将redis.conf 复制到myredis
cp /etc/redis.conf /myredis/redis.conf
3、在 myredis 中创建三个文件:
redis6379.conf、redis6380.conf、redis6381.conf
vi redis6379.conf
vi redis6380.conf
vi redis6381.conf
redis6379.conf :
include /myredis/redis.conf
port 6379
pidfile /var/run/redis_6379.pid
dbfilename dump6379.rdb
logfile “/var/log/redis/redis6379.log”
redis6380.conf :
include /myredis/redis.conf
port 6380
pidfile /var/run/redis_6380.pid
dbfilename dump6380.rdb
logfile “/var/log/redis/redis6380.log”
redis6381.conf :
include /myredis/redis.conf
port 6381
pidfile /var/run/redis_6381.pid
dbfilename dump6381.rdb
logfile “/var/log/redis/redis6381.log”
4、启动三个redis服务
redis-server /myredis/redis6379.conf
redis-server /myredis/redis6380.conf
redis-server /myredis/redis6381.conf
5、配置主从关系
6379作为主服务器,6380 、6381 为从服务器
进入redis 80 服务,执行 slaveof IP port 命令
redis-cli -p 6380
127.0.0.1:6380> slaveof 127.0.0.1 6379
进入redis 81 服务,执行 slaveof IP port 命令
redis-cli -p 6380
127.0.0.1:6381> slaveof 127.0.0.1 6379
6、查看当前服务的主从复制信息
info replication
三、主从复制原理
- 当从服务器连接上主服务器器后,就会向主服务器发送一个数据同步的请求
- 主服务器收到请求后,将所有尚未执行的修改命令通过后台执行完毕之后,将 dump.rdb 文件传送给从服务器
- 从服务器接受到数据后将数据存到内存并进行持久化(全量复制)
- 此后每当主服务器执行修改命令,都会依次传送给从服务器进行同步(增量复制)
当主服务器宕机后,与从服务器依旧存在主从关系
当从服务器宕机后,就不在与主服务器有主从关系,需要重新确立关系
四、薪火相传
将 6381 变为 6380 的从服务器
127.0.0.1:6381> slaveof 127.0.0.1 6380
这样就形成了6379 是 6380 的主服务器,而 6380 是 6381 的主服务器。那么 每次 6379 同步数据时只需要同步到 6380 服务器中就行了。后面的交给6380 同步给它的其他从服务器
但这种方式存在一个缺点,如果 6380 宕机,就会影响其他的服务器的数据同步
五、反客为主
当主服务器出现故障时,可以在从服务器中选择一台作为主服务器
假如 6379 宕机,将 6380 作为主服务器
127.0.0.1:6380> slaveof no one
此种方式可以将 6380 变为主服务器,但 6381 依旧是 6379 的从服务器,即使 6379 已经宕机
哨兵模式
反客为主的自动版,能够后台监控主服务器是否故障;如果故障了,在从服务器中选举出新的主服务器
1、在 myredis 文件夹下创建 sentinel.conf 文件
sentinel.conf
sentinel monitor mymaster 127.0.0.1 6379 1
其中 mymaster 为 监控对象起的别名 ; 1 表示至少有一个哨兵确认主服务器出故障,然后才会对从服务器进行选举
2、启动哨兵
redis-sentinel /myredis/sentinel.conf
3、选举流程
当确认主服务器器故障时
1、在从服务器中选一个作为主服务器
选举条件为:
a、选择优先级高的服务器(replica-priority 100 :数值越小优先级越高)
b、选偏移量大的服务器(与主服务器的同步越多偏移量越大,数据越完整)
c、选runid最小的服务器(redis每次启动会随机生成40位的runid)
2、挑选出新的主服务器之后,sentinel 向剩余的从服务器 发送 slaveof 命令,从服务器变为新主服务器的 slave
3、当旧主服务器重新上线时,sentinel 会向其它从服务器发送 slaveof 命令 ,让其成为新主服务器的 slaveof