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

相关推荐
懂得节能嘛.4 小时前
【Java动态线程池】Redis监控+动态调参
java·开发语言·redis
凌寒115 小时前
Linux(Debain)安装Redis、数据迁移
linux·运维·服务器·redis
⑩-5 小时前
基于Redis Lua脚本的秒杀系统
java·redis
三翼鸟数字化技术团队7 小时前
基于redis的多资源分布式公平锁的设计与实践
redis·后端
h***34637 小时前
Redis安装教程(Windows版本)
数据库·windows·redis
3***g2057 小时前
如何使用Spring Boot框架整合Redis:超详细案例教程
spring boot·redis·后端
a***13148 小时前
redis存取list集合
windows·redis·list
toooooop88 小时前
CentOS 7 系统上安装 **Nginx + MySQL 5.7 + PHP 7.3 + Redis** 的完整步骤
redis·mysql·nginx·centos·php7
b***653213 小时前
【解决】RESP.app GUI for Redis 连接不上redis服务器
服务器·redis·github