1、redis主从复制(Master/Slave)
a、集群结构
三个节点:一个主节点,二个从节点
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 目录下建三个文件夹:
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
3,修改文件中端口,RDB文件存放位子,redis实例声明的IP
例如7001实例:
dir ../../7001
port 7001
replica-announce-ip 192.168.150.101
4,启动三个服务进入src 目录下
例如启动7001实例:
./redis-server ../../7001/redis.conf
对应7002 7003重复以上操作
5,连接redis客户端
例如连接7001实例:
./redis-cli -p 7001
c、开启主从关系
通过命令建立主从关系:
例如连接7002客户端,执行命令,便是7002 是7001的从节点
SLAVEOF 127.0.0.1 7001
主从同步原理
原理:从节点第一次发送请求带上自己的replid 和offset ,主节点判断和自己的replid 是否一致,传给从节点replid 和offset,从节点保存版本信息,主节点执行bgsave 生成RDB 文件,并同步给从节点,从节点加载RDB文件实现数据同步,这时如果主节点发生修改操作,会生成一个repl-baklog 日志。
创建主从关系之后,进入7001可通过info replication查看
然后可以通过7001 set 放入数据,然后7002 和 7003 都可以共享查询
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 目录下建三个文件夹:
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"
3,启动,进入src 目录
redis-sentinel ../../s1/sentinel.conf
启动哨兵成功,s2和s3同样操作