一、redis的主从配置
1.先在各个机器安装redis
2.主的机器配置,找到机器的安装目录redis.conf
# redis-6379.conf (主节点配置)
port 6379
bind 192.168.1.10 # 改为你的主节点内网IP
protected-mode no # 允许非本地访问(配合bind使用)
requirepass YourStrongPass # 强烈建议设置,从节点连接时需要
daemonize yes # 后台运行
pidfile /var/run/redis-6379.pid
logfile /var/log/redis-6379.log
dir /data/redis-6379 # 数据存储目录
3.从的机器配置,找到机器的安装目录redis.conf
# redis-6380.conf (从节点配置)
port 6380
bind 192.168.1.11 # 改为你的从节点内网IP
protected-mode no
# ----- 关键复制配置(必填)-----
replicaof 192.168.1.10 6379 # 指定主节点的IP和端口
masterauth YourStrongPass # 主节点的密码(必须与主节点的requirepass一致)
# ----- 其他配置 -----
daemonize yes
pidfile /var/run/redis-6380.pid
logfile /var/log/redis-6380.log
dir /data/redis-6380
注意:注意 :从节点默认是只读 的(
replica-read-only yes),这能防止数据意外写入从节点导致主从数据不一致,建议保持默认。
4.验证主从
redis-cli -h 192.168.1.10 -p 6379 -a YourStrongPass info replication
5.数据检测
主redis
redis-cli -h 192.168.1.10 -p 6379 -a YourStrongPass set testkey "hello"
从redis
redis-cli -h 192.168.1.11 -p 6380 -a YourStrongPass get testkey
二、哨兵(redis-sentinel)
1.查找哨兵,本身就是redis的一个组件(redis/src/)中
which redis-sentinel
usr/bin/which: no redis-sentinel in (/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin)
如果没有找到,将哨兵配置到环境变量修改用户级的 .bashrc
echo 'export PATH=/www/server/redis/src:$PATH' >> ~/.bashrc
source ~/.bashrc
验证是否配置成功
# 检查能否找到 redis-server
which redis-server
# 检查能否找到 redis-sentinel
which redis-sentinel
# 检查能否找到 redis-cli
which redis-cli
2.配置哨兵/etc/redis-sentinel/sentinel.conf 新建.三台都配置,只是绑定的Ip不一样bind
# ==================== 基础网络配置 ====================
port 26379
# ⚠️ 改成这台机器自己的内网IP
bind 170.11.12.03
protected-mode no
daemonize yes
pidfile /var/run/redis-sentinel.pid
logfile /data/app/redis/redis-sentinel/log/redis-sentinel.log
# 持久化目录,需要确保目录存在且有写权限
dir /data/app/redis/redis-sentinel/cache/redis-sentinel
# ==================== 核心监控配置 ====================
# 格式:sentinel monitor <主节点名称> <主节点IP> <主节点端口> <quorum>
sentinel monitor mymaster 170.11.12.01 6379 2
# 主节点密码(必须与 requirepass 一致)
sentinel auth-pass mymaster 123456
# 主节点密码(如果主从节点密码相同,用上面一条即可;如果不同,还需要配置下面这条)
# sentinel auth-user mymaster your-username # Redis 6.0+ ACL 用户认证时需要
# ==================== 故障检测与转移参数 ====================
# 主观下线时间(毫秒):超过此时间未收到PONG,哨兵认为该节点主观下线
sentinel down-after-milliseconds mymaster 30000
# 故障转移超时时间(毫秒)
sentinel failover-timeout mymaster 180000
# 故障转移时,同时进行同步的从节点数量(设为1可最大程度保证数据一致性)
sentinel parallel-syncs mymaster 1
# 通知脚本(可选,故障转移时执行,用于报警)
# sentinel notification-script mymaster /path/to/notification.sh
# 客户端重新配置脚本(可选,故障转移后执行,用于更新客户端配置)
# sentinel client-reconfig-script mymaster /path/to/reconfig.sh
| 参数 | 示例值 | 说明 |
|---|---|---|
bind |
170.11.12.03 |
必须改成每台机器的实际内网IP ,不能写 127.0.0.1,否则其他哨兵无法通信。 |
sentinel monitor |
mymaster 170.11.12.01 6379 2 |
mymaster 是主节点别名(三台机器必须一致),2 是 quorum(法定票数),表示至少2个哨兵认为主节点挂了才会触发故障转移。 |
sentinel auth-pass |
YourStrongPass |
必须填写 ,和你主节点的 requirepass 密码一致,否则哨兵无法操作Redis节点。 |
down-after-milliseconds |
30000 |
30秒无响应即判定为"主观下线"(SDOWN)。网络环境稳定可设小一点,反之设大一点防止误判。 |
failover-timeout |
180000 |
故障转移总超时3分钟。如果转移过程中出现问题,超过这个时间会中断本次转移。 |
parallel-syncs |
1 |
故障转移后,同时向新主节点同步的从节点数量。设为1可以逐个同步,减少对主节点的压力。 |
三台机器的配置文件只有 bind 这一行不一样,其余完全一致:
| 机器IP | bind 配置 |
|---|---|
170.11.12.01 |
bind 170.11.12.01 |
170.11.12.02 |
bind 170.11.12.02 |
170.11.12.03 |
bind 170.11.12.03 |
3.在每台机器上创建哨兵需要的目录:
mkdir -p /data/app/redis/redis-sentinel/cache/redis-sentinel
chown redis:redis /data/app/redis/redis-sentinel/cache/redis-sentinel # 如果 Redis 以 redis 用户运行
注意:
dir目录必须存在且有写权限,否则哨兵启动会报错。
4.启动哨兵时指定这个文件即可:
redis-sentinel /etc/redis-sentinel/sentinel.conf
5.验证
ps aux | grep sentinel
6.连接哨兵查看状态:
/www/server/redis/src/redis-cli -h 170.11.12.01 -p 26379 info sentinel