一、准备主机
Redis的哨兵模式是生产环境中常用的部署模式之一,解决数据容灾和单点故障问题,实现主从自动切换;生产环境中建议让sentinel(哨兵)单独部署,如果资源有限可以和数据节点部署在同一主机。
主机IP | 角色说明 |
---|---|
192.168.128.31 | master+sentinel,主节点可读写。 |
192.168.128.32 | slave+sentinel,从节点只读,同步主节点数据。 |
192.168.128.33 | slave+sentinel,从节点只读,同步主节点数据。 |
二、下载Redis
进入官网找到下载地址 Downloads - Redis
wget https://download.redis.io/releases/redis-7.0.15.tar.gz
三、Linux源码部署
1、安装依赖
# 安装redis编译依赖,所有主机都执行
yum install -y gcc tcl
2、安装Redis
## 以下为安装redis服务,所有主机都执行# 解压
tar -zxvf redis-7.0.15.tar.gz# 移动redis目录
mv redis-7.0.15 /usr/local/redis# 编译
cd /usr/local/redis
make# 安装
make install
3、修改配置
1)、配置master节点
# 修改配置文件以符合你的需求(更多参数可参考Redis-01介绍)# 启用守护进程
sed -i 's/^daemonize no/daemonize yes/' /usr/local/redis/redis.conf# 绑定所有本机IP地址
sed -i 's/^bind .*/bind 0.0.0.0/' /usr/local/redis/redis.conf# 设置认证密码
sed -i 's/# requirepass .*/requirepass 123456/' /usr/local/redis/redis.conf
2)、配置slave节点
默认配置replica-read-only yes及从机为只读,不用修改;这里是新版本的参数配置,老版本对应的是slaveof 和slave-read-only yes。
# 修改配置文件以符合你的需求(更多参数可参考Redis-01介绍)# 启用守护进程
sed -i 's/^daemonize no/daemonize yes/' /usr/local/redis/redis.conf# 绑定所有本机IP地址
sed -i 's/^bind .*/bind 0.0.0.0/' /usr/local/redis/redis.conf# 设置认证密码
sed -i 's/# requirepass .*/requirepass 123456/' /usr/local/redis/redis.conf# 配置主节点IP和端口
echo "replicaof 192.168.128.31 6379" >> /usr/local/redis/redis.conf# 配置主节点认证密码
echo "masterauth 123456" >> /usr/local/redis/redis.conf
3)、配置哨兵配置文件
#是否已后台daemon方式启动
sed -i 's/^daemonize no/daemonize yes/' /usr/local/redis/sentinel.conf#设置要监控的master服务器,quorum表示最少有几个哨兵认可客观下线,同意故障迁移的法定票数
sed -i 's/^sentinel monitor .*/sentinel monitor mymaster 192.168.128.31 6379 2/' /usr/local/redis/sentinel.conf#master设置了密码,连接master服务的密码
echo "sentinel auth-pass mymaster 123456" >> /usr/local/redis/sentinel.conf
其他哨兵配置(默认及可)
#安全保护模式
protected-mode no#哨兵端口
port 26379#pid文件路径
pidfile /var/run/redis-sentine.pid#工作目录
dir /tmp#指定多少毫秒之后,主节点没有应答哨兵,此时哨兵主观上认为主节点下线
sentinel down-after-milliseconds <master-name> <milliseconds>:#表示允许并行同步的slave个数,当Master挂了后,哨兵会选出新的Master,此时,剩余的slave会向新的master发起同步数据
sentinel parallel-syncs <master-name> <nums>:#故障转移的超时时间,进行故障转移时,如果超过设置的毫秒,表示故障转移失败
sentinel failover-timeout <master-name> <milliseconds>:#配置当某一事件发生时所需要执行的脚本
sentinel notification-script <master-name> <script-path> :#客户端重新配置主节点参数脚本
sentinel client-reconfig-script <master-name> <script-path>:
4、启动服务
# 主从服务器都执行以下命令启动Redis服务
redis-server /usr/local/redis/redis.conf# 所有节点运行以下命令启动哨兵服务
redis-server /usr/local/redis/sentinel.conf --sentinel
5、关闭防火墙
## 这里直接关闭防火墙,也可以在防火墙中放天6379端口 # 关闭防火墙
systemctl stop firewalld
6、主从状态
1)、查看主节点主从状态
role:master,表示当前节点为主节点,connected_slaves:1表是有一个从节点在线。
# 连接到主节点
redis-cli -h 192.168.128.31# 密码认证
> auth 123456# 查看主从同步状态
> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.128.32,port=6379,state=online,offset=42,lag=0
master_failover_state:no-failover
master_replid:835b68d4267a5b50be60493529b9c052d430e83e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:42
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:42
2)、查看从节点主从状态
role:slave,表示当前节点为从节点,master_failover_state:no-failover表示主从同步状态无错误,状态正常。
redis-cli
127.0.0.1:6379> info replication
NOAUTH Authentication required.
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.128.31
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_read_repl_offset:252
slave_repl_offset:252
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:835b68d4267a5b50be60493529b9c052d430e83e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:252
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:252
3)、查看哨兵状态
哨兵运行成功后,会在配置文件的尾首生成如下信息。
# 查看哨兵运行信息,在文件尾首
cat /usr/local/redis/sentinel.conf# Generated by CONFIG REWRITE
latency-tracking-info-percentiles 50 99 99.9
user default on nopass ~* &* +@all
sentinel myid ee369693cdcda3b20c693d2818d3d4fa9f369a0c
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel current-epoch 0sentinel known-replica mymaster 192.168.128.32 6379sentinel known-sentinel mymaster 192.168.128.31 26379 128b00eba59d102e298ae587c254b0a9bbe53ef1
7、停止服务
redis-cli shutdown
四、卸载redis
-
查找Redis安装路径:
- 使用命令
which redis-server
查找Redis可执行文件的路径。
- 使用命令
-
使用CMake卸载Redis:
- 进入最初构建Redis的源代码目录。
- 执行命令
make uninstall
进行卸载。
-
手动删除残余文件:
- 使用命令
find /usr/local/bin -name "redis*" -exec rm -rf {} \;
找到并删除Redis相关的残余文件。
- 使用命令
-
验证卸载是否成功:
- 执行命令
redis-server --version
,若卸载成功,终端应显示“command not found”或类似信息。
- 执行命令
五、安装常见问题
1、编译环境错误
在未安装gcc、tcl前进行了make,编译报如下错误;安装后,再次make还是报如下错误,这时需要先进行清理再进行编译:make distclean && make。
In file included from adlist.c:34:0:
zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory#include <jemalloc/jemalloc.h>^
compilation terminated.
六、更多Redis文章跟篇
【部署篇】Redis-01介绍
【部署篇】Redis-02单机模式部署(源码方式安装)
【部署篇】Redis-03主从模式部署(源码方式安装)
【部署篇】Redis-04哨兵模式部署(源码方式安装)