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主机

ssh [email protected]

2.1.2 安装所需环境和工具

yum -y install wget vim tcl gcc make

2.1.3 下载Redis

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 解压

tar -zxvf redis-5.0.5.tar.gz

2.1.5 编译

cd redis-5.0.5/
make install PREFIX=/opt/itmrl/redis/redis-5.0.5

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

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 ,修改如下:

vm.overcommit_memory=1
sysctl -p

2.1.7 修改配置文件

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

通用配置

# 工作目录
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 启动服务

cd /opt/itmrl/redis/redis-5.0.5/bin
./redis-server redis.conf

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

在这里插入图片描述
使用info replication查看主从复制状态

Redis高可用方案之哨兵模式搭建_第1张图片
Redis高可用方案之哨兵模式搭建_第2张图片

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 修改配置

cd /opt/itmrl/redis/redis-5.0.5/bin
vi sentine.conf
# 保护模式默认关闭
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 启动

./redis-sentinel sentinel.conf

Redis高可用方案之哨兵模式搭建_第3张图片

4 验证

4.1 查看信息

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

cd /opt/itmrl/redis/redis-5.0.5/bin
./redis-cli -p 26379 info

输出信息如下:

# 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

输出信息如下:

# 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主服务进程

Redis高可用方案之哨兵模式搭建_第4张图片

4.3.2 查看信息

Redis高可用方案之哨兵模式搭建_第5张图片

Redis高可用方案之哨兵模式搭建_第6张图片

可以看出13已经正为Master。

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

4.4.1 启动服务

Redis高可用方案之哨兵模式搭建_第7张图片

4.4.2 查看信息

Redis高可用方案之哨兵模式搭建_第8张图片

当前是down的状态

Redis高可用方案之哨兵模式搭建_第9张图片

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

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

Redis高可用方案之哨兵模式搭建_第10张图片

5 SpringBoot配置Redis哨兵模式

application.yml 添加Redis配置

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

你可能感兴趣的:(中间件,redis)