【部署篇】Redis-04哨兵模式部署(源码方式安装)

发布于:2024-10-18 ⋅ 阅读:(8) ⋅ 点赞:(0)

 一、准备主机 

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 0

sentinel known-replica mymaster 192.168.128.32 6379

sentinel known-sentinel mymaster 192.168.128.31 26379 128b00eba59d102e298ae587c254b0a9bbe53ef1

7、停止服务

redis-cli shutdown

四、卸载redis

  1. 查找Redis安装路径‌:

    • 使用命令which redis-server查找Redis可执行文件的路径。
  2. 使用CMake卸载Redis‌:

    • 进入最初构建Redis的源代码目录。
    • 执行命令make uninstall进行卸载。
  3. 手动删除残余文件‌:

    • 使用命令find /usr/local/bin -name "redis*" -exec rm -rf {} \;找到并删除Redis相关的残余文件。
  4. 验证卸载是否成功‌:

    • 执行命令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哨兵模式部署(源码方式安装)