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

相关推荐
難釋懷2 分钟前
Redis分片集群手动故障转移
数据库·redis·缓存
用什么都重名3 小时前
Redis 入门与实践:从基础到 Stream 消息队列
数据库·redis·缓存
苦瓜小生3 小时前
【黑马点评学习笔记 | 实战篇 】| 7-达人探店
redis·笔记·后端·学习
大树学长3 小时前
【QT开发】Redis通信相关(一)
redis·qt
知识分享小能手3 小时前
Redis入门学习教程,从入门到精通,Redis进阶编程知识点详解(5)
数据库·redis·学习
6+h4 小时前
【Redis】数据结构讲解
数据结构·数据库·redis
WmStack4 小时前
‘秒杀’功能实现
redis
无籽西瓜a5 小时前
Docker 环境下 Redis Lua 脚本部署与执行
redis·docker·lua
疯狂成瘾者5 小时前
Redis 实用学习清单
redis·学习