Redis高可用方案之哨兵模式搭建

1 安装前准备

1.1 安装环境

1.1.1 安装说明

Redis Sentinel 在不使用Redis Cluster时为 Redis 提供高可用性。Redis Sentinel 还提供其他附带任务,例如监控、通知并充当客户端的配置提供程序。

1.1.2 操作系统

CentOS 7.5(64位)

1.1.3 主机规划

服务类型 IP地址 端口
Redis 192.168.140.11 6379
Redis 192.168.140.12 6379
Redis 192.168.140.13 6379
Sentinel 192.168.140.11 26379
Sentinel 192.168.140.12 26379
Sentinel 192.168.140.13 26379

1.1.4 系统配置说明

Redis服务和哨兵服务需要占用端口,请先按照上面主机规划设置防火墙开放端口

1.1.5 Redis版本号说明

Redis版本为5.0.5。

2 主从配置

Redis的安装步骤为:下载、解压、编译、配置、启动。

2.1 Redis服务安装

以下以11服务器安装为例,其他类似。

2.1.1 SSH登录Redis主机

shell 复制代码
ssh root@192.168.140.11

2.1.2 安装所需环境和工具

shell 复制代码
yum -y install wget vim tcl gcc make

2.1.3 下载Redis

shell 复制代码
cd /opt/itmrl/srclib/
wget http://download.redis.io/releases/redis-5.0.5.tar.gz

或者通过FTP将redis-5.0.5.tar.gz上传

2.1.4 解压

shell 复制代码
tar -zxvf redis-5.0.5.tar.gz

2.1.5 编译

shell 复制代码
cd redis-5.0.5/
make install PREFIX=/opt/itmrl/redis/redis-5.0.5

拷贝配置文件到Redis程序目录

shell 复制代码
cp redis.conf /opt/itmrl/redis/redis-5.0.5/bin
cp sentinel.conf /opt/itmrl/redis/redis-5.0.5/bin

redis.conf是Redis服务的配置文件;sentinel.conf是哨兵服务的配置文件。

2.1.6 配置内核参数

内核参数overcommit_memory

它是 内存分配策略

可选值:0,1,2。

复制代码
0,:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2: 表示内核允许分配超过所有物理内存和交换空间总和的内存。

配置 vm.overcommit_memory 为1,这可以避免数据被截断

编辑vim /etc/sysctl.conf ,修改如下:

shell 复制代码
vm.overcommit_memory=1
shell 复制代码
sysctl -p

2.1.7 修改配置文件

shell 复制代码
mkdir -p /opt/itmrl/redis/redis-5.0.5/run
mkdir -p /opt/itmrl/redis/redis-5.0.5/log
mkdir -p /opt/itmrl/redis/redis-5.0.5/working
vim /opt/itmrl/redis/redis-5.0.5/bin/redis.conf

通用配置

shell 复制代码
# 工作目录
dir /opt/itmrl/redis/redis-5.0.5/working
# 需要不同服务器的节点连通,就不能设置为 127.0.0.1
bind 0.0.0.0
# 需要不同服务器的节点连通,这个就要设置为 no
protected-mode no
# 设置后台运行redis
daemonize yes
# 端口
port 6379
# 密码
requirepass itmrl@123qwe
# PID文件
pidfile /opt/itmrl/redis/redis-5.0.5/run/redis_6379.pid
# LOG文件
logfile /opt/itmrl/redis/redis-5.0.5/log/redis.log
# RDB文件名
dbfilename dump.rdb
# 开启AOF
appendonly yes
# AOF文件名
appendfilename "appendonly.aof"
# 主节点认证,主从节点均需要配置
masterauth itmrl@123qwe

从节点配置

复制代码
replicaof 192.168.140.11 6379

2.1.9 启动服务

shell 复制代码
cd /opt/itmrl/redis/redis-5.0.5/bin
./redis-server redis.conf

使用 ps -ef|grep redis 查看是否都启动成功,IP和端口号都正确

使用info replication查看主从复制状态


2.1.11 防火墙开通端口号策略

必须开哨兵总线端口,哨兵总线端口=端口号+20000

例:6379的哨兵总线端口是26379。这个哨兵总线端口不开放,部署的时候外部服务器的节点添加不进来

复制代码
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --zone=public --add-port=26379/tcp --permanent
firewall-cmd --reload

3 哨兵配置

哨兵模式采用一主二从三哨兵模式。

3.1 修改配置

shell 复制代码
cd /opt/itmrl/redis/redis-5.0.5/bin
vi sentine.conf
shell 复制代码
# 保护模式默认关闭
protected-mode no
# 哨兵端口
port 26379
# 后台运行
daemonize yes
# pid
pidfile /opt/itmrl/redis/redis-5.0.5/run/redis-sentinel.pid
# log 
logfile /opt/itmrl/redis/redis-5.0.5/log/redis-sentinel.log
# 工作目录
dir /opt/itmrl/redis/redis-5.0.5/working
# 监控Redis主服务
sentinel monitor redis-master 192.168.140.11 6379 2
# 配置认证密码
sentinel auth-pass redis-master itmrl@123qwe
# S_DOWN时间
sentinel down-after-milliseconds redis-master 30000
# 设置在故障转移后可以重新配置以同时使用新主服务器的副本数
sentinel parallel-syncs redis-master 1
# 故障转移超时时间
sentinel failover-timeout redis-master 180000
3.2 启动
shell 复制代码
./redis-sentinel sentinel.conf

4 验证

4.1 查看信息

随意登录一台主机执行 info命令,下面以连接41机器为例。

复制代码
cd /opt/itmrl/redis/redis-5.0.5/bin
./redis-cli -p 26379 info

输出信息如下:

shell 复制代码
# Server
redis_version:5.0.5
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:dd4fc568347dd241
redis_mode:sentinel
os:Linux 3.10.0-957.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:4.8.5
process_id:60336
run_id:1ee2ed34a11d346c61f5d591bb82837da098496c
tcp_port:26379
uptime_in_seconds:839
uptime_in_days:0
hz:11
configured_hz:10
lru_clock:13438056
executable:/opt/itmrl/redis/redis-5.0.5/bin/./redis-sentinel
config_file:/opt/itmrl/redis/redis-5.0.5/bin/sentinel.conf

# Clients
connected_clients:3
client_recent_max_input_buffer:2
client_recent_max_output_buffer:0
blocked_clients:0

# CPU
used_cpu_sys:1.875286
used_cpu_user:0.071192
used_cpu_sys_children:0.000000
used_cpu_user_children:0.000000

# Stats
total_connections_received:10
total_commands_processed:2196
instantaneous_ops_per_sec:2
total_net_input_bytes:128865
total_net_output_bytes:24810
instantaneous_input_kbps:0.17
instantaneous_output_kbps:0.02
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
expired_stale_perc:0.00
expired_time_cap_reached_count:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0

# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=redis-master,status=ok,address=192.168.140.11:6379,slaves=2,sentinels=3

4.2 查看哨兵信息

随意登录一台主机执行 cluster info命令,下面以连接41机器为例。

复制代码
cd /opt/itmrl/redis/redis-5.0.5/bin
./redis-cli -p 26379 info Sentinel

输出信息如下:

shell 复制代码
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=redis-master,status=ok,address=192.168.140.11:6379,slaves=2,sentinels=3

4.3 停止Master服务,查看故障转移状态

4.3.1 删掉redis主服务进程
4.3.2 查看信息

可以看出13已经正为Master。

4.4 回复原Master服务,查看故障转移状态

4.4.1 启动服务
4.4.2 查看信息

当前是down的状态

查看sentinel日志,发现当前11节点没有启动成功。

经过排查发现主服务的配置文件没有配置认证

5 SpringBoot配置Redis哨兵模式

application.yml 添加Redis配置

yaml 复制代码
spring:
    redis: 
        database: 1
        password: itmrl@123qwe
        # 哨兵模式
        sentinel:
            master: redis-master
            nodes: 192.168.140.11:26379,192.168.140.12:26379,192.168.140.13:26379

6 参考资料

High availability with Redis Sentinel

相关推荐
qq_2651533726 分钟前
Redis在游戏服务器中怎么实现开合服数据同步?
服务器·redis·游戏·游戏服务器
ElevenS_it1884 小时前
Redis监控实战:内存使用+命中率+连接数三类核心指标接入Zabbix+分级告警完整配置方案
运维·网络·redis·mybatis·zabbix
雨辰AI6 小时前
完整版信创微服务国产化架构实战:Nacos+Seata+Redis + 人大金仓(生产可落地)
数据库·redis·微服务·架构·政务
Mr. zhihao7 小时前
Redis 内存管理深度解析:过期删除与内存淘汰策略
数据库·redis·缓存
Mr. zhihao7 小时前
Redis 持久化完全指南:从 RDB、AOF 到 MP-AOF
redis
難釋懷7 小时前
Redis内存回收-过期key处理
数据库·redis·缓存
鱼鳞_7 小时前
苍穹外卖-Day05(Redis)
java·redis
空中海8 小时前
Redis知识图谱和回顾
数据库·redis·知识图谱
洛水水10 小时前
Redis对象类型与底层数据结构
数据结构·数据库·redis
爱莉希雅&&&11 小时前
Redis哨兵模式和主从复制和集群模式搭建与扩容缩容
linux·redis·缓存·集群·哨兵·数据库同步