1、redis主从复制(Master/Slave)

a、集群结构

RedisConfiguration集群版_客户端

三个节点:一个主节点,二个从节点

b、准备实例和配置

在虚拟机开启3个redis 实例,来模拟主从集群模式,信息如下:

ip

post

角色

192.168.150.101

7001

master

192.168.150.101

7002

slave

192.168.150.101

7003

slave

1,在redis 目录下建三个文件夹:

RedisConfiguration集群版_linux_02

 

2,把redis.conf 分别复制到三个文件夹中:

cp /redis/redis-6.0.6/redis.conf /redis/7001
 cp /redis/redis-6.0.6/redis.conf /redis/7002
 cp /redis/redis-6.0.6/redis.conf /redis/7003

RedisConfiguration集群版_linux_03

3,修改文件中端口,RDB文件存放位子,redis实例声明的IP

例如7001实例:

RedisConfiguration集群版_数据库_04

RedisConfiguration集群版_redis_05

RedisConfiguration集群版_版本信息_06

dir ../../7001
port 7001
replica-announce-ip 192.168.150.101 

4,启动三个服务进入src 目录下

例如启动7001实例:

./redis-server ../../7001/redis.conf 

 

RedisConfiguration集群版_客户端_07

对应7002 7003重复以上操作

5,连接redis客户端

例如连接7001实例:

./redis-cli -p 7001 

c、开启主从关系

通过命令建立主从关系:

例如连接7002客户端,执行命令,便是7002 是7001的从节点

SLAVEOF 127.0.0.1 7001

主从同步原理

RedisConfiguration集群版_数据库_08

 

原理:从节点第一次发送请求带上自己的replid 和offset ,主节点判断和自己的replid 是否一致,传给从节点replid 和offset,从节点保存版本信息,主节点执行bgsave 生成RDB 文件,并同步给从节点,从节点加载RDB文件实现数据同步,这时如果主节点发生修改操作,会生成一个repl-baklog 日志。

创建主从关系之后,进入7001可通过info replication查看

RedisConfiguration集群版_版本信息_09

RedisConfiguration集群版_redis_10

然后可以通过7001 set 放入数据,然后7002 和 7003 都可以共享查询

RedisConfiguration集群版_数据库_11

 

2、哨兵模式(sentinel)

万一主节点宕机了怎么办?

监控:sentinel不断的检查您的master和slave 是否按预期执行

自动故障恢复:如果master故障,sentinel会将一个slave提升为master,当故障实例恢复后也已新的新的master为主

通知:sentinel充当redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给redis客户端

sentinel服务状态检测,每隔一秒向集群每个实例发送ping 命令

主观下线:如果某个sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线

客观下线:若超过执行数量(quornum)的sentinel都认为该实例下线,则该实例客观下线,(quornum数最好超过实例总数一半)

ip

post

角色

127.0.0.1

27001

master

127.0.0.1

27002

slave

127.0.0.1

27003

slave

 1,在redis 目录下建三个文件夹:

RedisConfiguration集群版_数据库_12

2,新建文件sentinel.conf

以27001为例:

port 27001
sentinel monitor mymaster 127.0.0.1 7001 2
sentinel down-after-milliseconds mymaster 50000
sentinel failover-timeout mymaster 180000
dir "/testapp/s1"

RedisConfiguration集群版_客户端_13

 3,启动,进入src 目录

 redis-sentinel ../../s1/sentinel.conf

RedisConfiguration集群版_客户端_14

 

RedisConfiguration集群版_数据库_15

启动哨兵成功,s2和s3同样操作