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

相关推荐
知我Deja_Vu2 天前
redisCommonHelper.generateCode(“GROUP“),Redis 生成码方法
数据库·redis·缓存
Charlie_lll2 天前
Redis脑裂问题处理——基于min-replicas-to-write配置
redis·后端
奇点爆破XC2 天前
Redis迁移
数据库·redis·bootstrap
断手当码农2 天前
Redis 实现分布式锁的三种方式
数据库·redis·分布式
菜鸟小九3 天前
redis原理篇(基本数据结构)
数据结构·数据库·redis
没有bug.的程序员3 天前
电商秒杀系统深度进阶:高并发流量建模、库存零超卖内核与 Redis+MQ 闭环
数据库·redis·缓存·高并发·电商秒杀·流量建模·库存零超卖
菜鸟小九3 天前
redis原理篇(五种数据结构)
数据结构·数据库·redis
初次攀爬者3 天前
Redis分布式锁实现的三种方式-基于setnx,lua脚本和Redisson
redis·分布式·后端
June`3 天前
Redis缓存深度解析:20%数据应对80%请求
数据库·redis
m0_738120723 天前
应急响应——Solar月赛emergency靶场溯源过程(内含靶机下载以及流量分析)
java·开发语言·网络·redis·web安全·系统安全