Redis 6.2.4 源码部署-哨兵模式集群 - 详解

test 1.png

1、准备服务器

  • 服务器数量
    准备3台服务器,配置要求一样,用于一主两从架构。

  • 操作系统
    选择使用Centos7.8版本Linux操作系统。

Redis支持Linux内核版本2.6.32及以上的主流发行版本。RHEL7+、CentOS7+、RHEL8+、CentOS8+、Ubuntu 18.04 LTS、Ubuntu 20.04 LTS、Ubuntu 22.04 LTS、Debian 9、Debian 10、Debian 11、Debian 12、SUSE Linux Enterprise Server (SLES) 12+ 等都可以。国产操作系统麒麟 V10也可以。

  • 挂载目录
    需要挂载的目录有根目录,redis目录(用于存储redis相关内容),SWAP。
目录存储大小
/50G
redis100G
swap8G(根据服务器实际内存大小设置,此处为测试环境大小)

swap:大于16G内存,设置为16G;大于8G、小于16G,设置成和内存一样大;小于8G,设置成内存的2倍。

  • 创建redis相关用户组
    使用redis用户管理redis相关内容,将redis用户提供给研发测试组,而不是使用root。
groupadd redis
useradd -g redis redis
echo Zqd@123 | passwd --stdin redis
  • 创建redis相关目录
    创建conf目录,用于存放redis配置文件、redis sentinel(哨兵)配置文件;创建data文件,用于存放redis持久化RDB文件;创建log文件,用于存放redis日志和哨兵日志;创建script目录,用于存放redis相关脚本。

这些不是官方要求的目录,是我本人认为这些目录可以更加规范的管理运维redis 。

mkdir -p /redis/conf
mkdir -p /redis/data
mkdir -p /redis/log
mkdir -p /redis/script
chown -R redis:redis /redis

2、下载源码包

2.1、下载

如果服务器可通外网,可以直接在服务器上下载对应版本的源码包。

wget http://download.redis.io/releases/redis-6.2.4.tar.gz

如果服务器不通外网,可以先在外网下载对应版本源码包后,再上传至服务器。

下载源码包.png

2.2、上传并解压

将源码包上传至3台服务器的 /redis 目录。
解压源码包:

tar -xzvf redis-6.2.4.tar.gz -C /redis/

2.3、编译源码包

进入解压后的 /redis/redis-6.2.4 目录,编译源码包。

cd /redis/redis-6.2.4
make #make命令是用于编译源码包

下面是 redis-6.2.4 目录中的内容:

安装软件目录.png

如果编译失败,大概率是因为服务器缺少依赖包,按照提示安装依赖即可。

3、修改配置文件

  • 修改 redis 配置文件
    在源码包解压后的 redis-6.2.4 目录中有 redis.conf 配置文件,但这个配置文件中的注释太多,不易于后期管理维护。可以在 /redis/conf 目录中创建 redis.conf 文件,并将下面的参数分别添加到三台服务器的 /redis/conf/redis.conf 文件中。

先对配置文件中的必要参数做简要说明。
bind:
需要手动修改。指定服务器监听的网络接口IP地址。为了安全起见,此处只填写服务器本机IP地址和127.0.0.1即可。
port:
不需要手动修改,redis服务端口,默认6379即可。
daemonize:
需要手动修改。daemonize 参数默认是 no ,与redis的守护进程相关,如果是 no 的话,那么systemctl无法正常管理它。
pidfile:
需要手动修改。指定pid文件名及路径,redis会在启动时将其写入指定位置,并在退出时将其删除。
loglevel:
不需要手动修改,默认为notice即可。redis 的 loglevel 有 debug 、verbose 、notice 、warning 、nothing。其中最常用的是notice。
logfile:
需要手动修改。指定日志文件名及路径。
dir:
需要手动修改。此处指定的是 redis 持久化文件 rdb 的路径,不指定文件名。
dbfilename:
不需要手动修改,默认dump.rdb即可。
requirepass:
需要手动修改。是主库密码,一般只需要给主节点配置即可。但经过数次主从切换实践,在三个节点的配置文件中都进行配置比较保险。
masterauth:
需要手动修改。是从库认证密码,一般只需要给从节点配置即可。但经过数次主从切换实践,在三个节点的配置文件中都进行配置比较保险。(masterauth必须与requirepass保持一致)
replicaof:
初次需要手动修改。此处代表的是主从关系,参数后面指定主库的IP地址和端口,初次只在两个从节点进行配置即可。在哨兵模式下进行自动主从切换时,redis会自动修改replicaof参数。
这些参数只是一部分,更多的redis参数有兴趣的可以去翻阅源码包解压后的 redis-6.2.4 目录中的 redis.conf 配置文件。其余参数不写即按照redis的默认值进行处理

(1)主节点

bind 127.0.0.1 192.168.59.156
port 6379
daemonize yes
pidfile "/redis/data/redis_6379.pid"
loglevel notice
logfile "/redis/log/redis_6379.log"
dir "/redis/data"
dbfilename dump.rdb
masterauth "zqd123"
requirepass "zqd123"

(2)从节点1

bind 127.0.0.1 192.168.59.157
port 6379
daemonize yes
pidfile "/redis/log/redis_6379.pid"
loglevel notice
logfile "/redis/log/redis_6379.log"
dir "/redis/data"
dbfilename dump.rdb
masterauth "zqd123"
requirepass "zqd123"
replicaof 192.168.59.156 6379

(2)从节点2

bind 127.0.0.1 192.168.59.158
port 6379
daemonize yes
pidfile "/redis/log/redis_6379.pid"
loglevel notice
logfile "/redis/log/redis_6379.log"
dir "/redis/data"
dbfilename dump.rdb
masterauth "zqd123"
requirepass "zqd123"
replicaof 192.168.59.156 6379
  • 修改 redis 哨兵配置文件
    在源码包解压后的 redis-6.2.4 目录中有 sentinel.conf 配置文件,但这个配置文件中的注释太多,不易于后期管理维护。可以在 /redis/conf 目录中创建 sentinel.conf 文件,并将下面的参数分别添加到三台服务器的 /redis/conf/sentinel.conf 文件中,三节点哨兵配置文件一致。

先对配置文件中的必要参数做简要说明。
sentinel monitor mymaster:
需要手动修改。此处是定义哨兵监控的主节点信息。在下面的配置文件示例中,sentinel monitor mymaster 参数末尾的 2 指的是需要多少个哨兵确认主节点下线后才会触发故障转移,3个哨兵就设置为2。
sentinel auth-pass mymaster:
需要手动修改。当主节点启用了requirepass密码时,此处设置相同的密码,用于哨兵与主节点通信的认证。
sentinel deny-scripts-reconfig:
默认为yes,不需要手动修改。参数意思为是否允许通过脚本动态修改主从关系。

port 26379
daemonize yes
pidfile "/redis/data/redis-sentinel.pid"
logfile "/redis/log/redis-sentinel.log"
dir "/redis/data"
sentinel monitor mymaster 192.168.59.156 6379 2
sentinel auth-pass mymaster zqd123
sentinel deny-scripts-reconfig yes

4、管理服务

4.1、配置环境变量

配置环境变量,这样redis-cli等命令就可以直接使用了。

#编辑 profile 文件
vim /etc/profile
#将 src 路径加入path
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/redis/redis-6.2.4/src/
#加载配置文件使其生效
source /etc/profile

4.2、启动/停止服务

切换到redis用户启动
具体用哪种方式进行启停要看实际要求,有的项目可能对shutdown等高危命令审查比较严格或者严格要求配置redis守护进程就适合用systemctl管理,不做要求的话就看个人习惯,但还是推荐使用systemctl管理。

  • 启动/停止 redis 服务
    在源码包解压后的 redis-6.2.4 目录中的 src 目录中,有 redis-server 文件,通过 redis-server 文件并指定reidis配置文件进行启动;而停止 redis 服务使用 redis-cli 命令行。

使用 redis-server 指定 redis.conf 启动 redis 服务。

/redis/redis-6.2.4/src/redis-server /redis/conf/redis.conf &

使用 redis-cli 停止 redis 服务。

redis-cli -a zqd123 -p 6379 shutdown
  • 启动/停止 哨兵 服务
    在源码包解压后的 redis-6.2.4 目录中的 src 目录中,有 redis-sentinel 文件,通过 redis-sentinel 文件并指定reidis哨兵配置文件进行启动。

使用 redis-sentinel 指定 sentinel.conf 启动 redis哨兵 服务。

/redis/redis-6.2.4/src/redis-sentinel /redis/conf/sentinel.conf &

使用 redis-cli 停止 redis哨兵 服务。

redis-cli -a zqd123 -p 26379 shutdown
  • systemctl 管理 redis 服务
    进入 /etc/systemd/system 目录,编辑 redis.service 文件;将下面的信息添加进 redis.service 文件。
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
Type=forking
ExecStart=/redis/redis-6.2.4/src/redis-server /redis/conf/redis.conf
ExecStop=/redis/redis-6.2.4/src/redis-cli -a zqd123 -p 6379 shutdown
Restart=always #当redis在意外中断后,保证自动重新启动;但是systemctl stop redis停止的不会重启。
User=redis
Group=redis
[Install]
WantedBy=multi-user.target

在完成 redis.service 的配置后,进行如下操作。

systemctl daemon-reload
systemctl start redis
systemctl enable redis #设置开机自启动
  • systemctl 管理 redis哨兵 服务
    进入 /etc/systemd/system 目录,编辑 redis-sentinel.service 文件;将下面的信息添加进 redis-sentinel.service 文件。
[Unit]
Description=Redis Sentinel
After=network.target redis.service
[Service]
ExecStart=/redis/redis-6.2.4/script/redis-sentinel /redis/conf/sentinel.conf
ExecStop=/redis/redis-6.2.4/src/redis-cli -a zqd123 -p 26379 shutdown
Restart=always#当哨兵在意外中断后,保证自动重新启动;但是systemctl stop redis停止的不会重启。
Type=forking
User=redis
Group=redis
[Install]
WantedBy=multi-user.target

在完成 redis-sentinel.service 的配置后,进行如下操作。

systemctl daemon-reload
systemctl start redis-sentinel
systemctl enable redis-sentinel #设置开机自启动

4.3、检查主从关系

执行如下命令

redis-cli -h 192.168.59.156 -a zqd123 -p 6379 INFO replication

此时可以观察到 192.168.59.156 是 master 主节点,192.168.59.157、192.168.59.158 是从节点,且都已建立连接。此时可以在主节点 set key value,然后去两个从节点 get key 观察是否正常同步。

主从信息156.png

4.4、验证主从切换

部署完 redis 哨兵,必须要验证其是否能自动进行故障转移。执行下面的步骤进行验证。

(1)关闭当前主节点

redis-cli -h 192.168.59.156 -a zqd123 -p 6379 shutdown
#如果配置了守护进程(Restart=always),上面的shutdown是无法关闭的;需要用systemctl。
systemctl stop redis

(2)观察主从信息

此时可以发现,主节点已经自动切换到 192.168.59.157,且和 192.168.59.158 节点正常建立连接。

故障转移.png

(3)启动手动关闭的节点

systemctl start redis
#或者
/redis/redis-6.2.4/src/redis-server /redis/conf/redis.conf &

(4)观察主从信息

此时可以发现,192.168.59.156 已经自动加入集群,成为从节点。

故障转移2.png

这说明哨兵模式集群部署是成功的。

posted @ 2025-08-18 14:51  yfceshi  阅读(9)  评论(0)    收藏  举报