Redis的哨兵模式本质上也是主从复制,当主节点上发生写操作时,从节点会同步更新。主从节点的数据保持一致。主节点负责写,从节点只负责读(其他操作均被禁止)。
如果节点挂了,然后重新启动后,那么数据依然会同步。
主节点挂了以后,重新启动后,不会立即重新成为主节点,会加入之后的选举中。
mkdir -p /app/redis/server/config
mkdir -p /app/redis/server/data
mkdir -p /app/redis/sentinel/config
mkdir -p /app/redis/sentinel/data
Master:
vi /app/redis/server/config/redis.conf
文件内容:
port 6379
appendonly yes
masterauth 123456
requirepass 123456
# master通告自己的固定端口
slave-announce-port 6379
# master通告自己的固定ip
slave-announce-ip <master的IP>
Slave1:
vi /app/redis/server/config/redis.conf
文件内容:
port 6379
appendonly yes
masterauth 123456
requirepass 123456
# slave向master通告自己的固定端口
slave-announce-port 6379
# slave向master通告自己的固定ip
slave-announce-ip 192.168.1.2
# master的IP加端口
slaveof <master的IP> <master的端口>
Slave2:
vi /app/redis/server/config/redis.conf
文件内容:
port 6379
appendonly yes
masterauth 123456
requirepass 123456
# slave向master通告自己的固定端口
slave-announce-port 6379
# slave向master通告自己的固定ip
slave-announce-ip 192.168.1.3
# master的IP加端口
slaveof <master的IP> <master的端口>
docker run -d --name redis-node -u root \
?-p 6379:6379??\
?-v /app/redis/server/config:/etc/redis/config \
?-v /app/redis/server/data:/data \
?-e TZ=Asia/Shanghai \
?redis:6.2 redis-server /etc/redis/config/redis.conf
-u root 我们这里设置使用超管账号进行redis操作
3台主机上创建配置文件路径:/app/redis/sentinel/config/sentinel.conf?内容如下:
# 绑定所有可用的网络接口,用于接受来自其他 Sentinel 数据通讯请求
bind 0.0.0.0
# 设置Sentinel的端口号
port 26379
# 访问并监视 Redis 主节点,设置主节点的名称为mymaster
# 2表示至少有两个Sentinel认为主节点不可用时才能进行故障转移重新选择主节点
sentinel monitor mymaster 192.168.1.1 6379 2
# 5000毫秒未收到主节点响应则判定主节点不可用
sentinel down-after-milliseconds mymaster 5000
# 故障转移超时时间
# 表示在指定的10000毫秒数内,如果Sentinel实例未完成故障转移则会放弃转移
sentinel failover-timeout mymaster 10000
# 配置 Sentinel 实例在执行故障转移操作时可以同时同步的从节点数量
sentinel parallel-syncs mymaster 1
# 主节点身份验证密码
sentinel auth-pass mymaster 123456
# ###Sentinel之间依赖于hello消息进行判定高可用性,hello消息中包含ip地址和端口
# ###容器化部署的Sentinel 如果不声明对外的ip端口则会使用容器内网ip和端口
# 用于配置 Sentinel 实例宣布给其他 Sentinel 实例和 Redis 客户端的 IP 地址
sentinel announce-ip ?${本服务器的IP地址}
# 用于配置 Sentinel 实例宣布给其他 Sentinel 实例和 Redis 客户端的端口号
sentinel announce-port 26379
记得修改 sentinel announce-ip 本服务器的IP地址 填写本物理主机IP地址
3台主机上运行docker命令:
docker run -d --name redis-sentinel -u root \
?-p 26379:26379 ?\
?-v /app/redis/sentinel/config:/etc/redis/config \
?-v /app/redis/sentinel/data:/data \
?-e TZ=Asia/Shanghai \
?redis:6.2 redis-sentinel /etc/redis/config/sentinel.conf
进入容器或者其他电脑上的redis客户端
docker exec -it redis-sentinel /bin/bash
进入后输入命令
redis-cli ?-h 任一Sentinel服务器IP ??-p 26379
输入:ping
输出为 PONG,则连接成功。
输入:info sentinel 查看配置情况