Linux部署Redis哨兵模式

Redis版本:6.0.6

服务器版本:CentOS 7.6

1. 服务器资源及分配

三台服务器,IP分别为:

  • 192.168.4.18
  • 192.168.4.43
  • 192.168.4.34

采用一主两从三哨兵的部署模式,即6个Redis服务节点。

其中初始时192.168.4.18作为Redis主节点,192.168.4.43与192.168.4.34作为从节点,三个哨兵平均分配在每个服务器上。因此最终服务器资源分配情况如下:

  • 192.168.4.18 一个master节点与一个sentinel
  • 192.168.4.43 一个slave节点与一个sentinel
  • 192.168.4.34 一个slave节点与一个sentinel

2. 单机

部署会从单机->主从->哨兵一步步的验证。本篇先来说下单机Redis的部署。

2.1 下载Redis

从Redis官网下载Redis

Download | Redis

或者

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

2.2 解压

解压刚才下载的Redis安装包

tar -zvxf redis-6.0.6.tar.gz

2.3 编译安装

进入刚才的解压路径

cd redis-6.0.6

编译

make

如果编译过程报了error,如下图

image-20220522113544304

这代表你的gcc版本过低,需要升级gcc(因为Redis是C语言写的)。

可以参考

CentOS 7升级gcc版本 - 姬无华 - 博客园 (cnblogs.com)

(49条消息) CentOS升级gcc到高版本(全部版本详细过程)_乞力马扎罗の黎明的博客-CSDN博客_centos 升级gcc

升级你的gcc版本,重新执行make指令编译,编译完成后大概如下图

image-20220522114103112

安装

make PREFIX=/home/redis install

关键字PREFIX的作用是编译的时候用于指定程序存放的路径。比如我们现在就是指定了redis必须存放在/home/redis目录。假设不添加该关键字Linux会将可执行文件存放在/usr/local/bin目录。

==注:本文档以/home/redis来演示Redis的安装目录,实际用户可根据个人需求将redis的安装在任意目录。==

安装完成后,切换到/home/redis目录下,应该可以看到一个bin目录

image-20220522114501772

里面都是Redis服务

image-20220522114532185

2.4 拷贝配置文件,启动测试

将之前解压文件中的redis.confsentinel.conf配置文件拷贝到/home/redis下

image-20220522114839237

此时/home/redis目录如下:

image-20220522114942950

现在让我们启动单机版redis测试是否正常

cd /home/redis/bin
./redis-server

如果redis启动如下图所示则代表启动正常

image-20220522115405117

我们可以启一个redis客户端测试是否能连接正常与正常使用

cd /home/redis/bin/
./redis-cli

image-20220522115655000

上图指令若执行正常则代表单机版Redis部署成功

3. 主从

3.1 拷贝安装文件

可以直接将上述/home/redis目录打包复制到其他两个服务器下,其他两从服务器的安装信息与主服务器相同。

3.2 修改配置文件

修改主节点配置文件,编辑/home/redis下的redis.conf

bind 127.0.0.1

改为

bind 0.0.0.0

image-20220522120807967

修改两个从节点的配置文件,编辑/home/redis下的redis.conf

与主节点一样,将

bind 127.0.0.1

改为

bind 0.0.0.0

除此以外,从节点需要在配置文件最后加上

slaveof 192.168.4.18 6379

3.3 启动主从并验证

修改完成后,按顺序重新启动三个Redis服务

  • 192.168.4.18(主)

    cd /home/redis
    ./bin/redis-server redis.conf
  • 192.168.4.43(从)

    cd /home/redis
    ./bin/redis-server redis.conf
  • 192.168.4.34(从)

    cd /home/redis
    ./bin/redis-server redis.conf

此时各个节点的打印日志均应该有一些主从复制的日志信息打印(主从节点打印的日志不同)

image-20220522123732425

image-20220522123802369

我们可以测试主从节点是否部署正常

  • 192.168.4.18(主)

    在主节点中使用redis-cli设置一个key

    cd /home/redis/bin
    ./redis-cli

    image-20220522124033298

    可以看到我们通过主节点设置了一个<k2,v2> 的一条信息

  • 192.168.4.43(从)

    在从节点中使用redis-cli获取刚才的key

    cd /home/redis/bin
    ./redis-cli

    image-20220522124211354

    可以看到我们可以通过从节点获得在主节点设置的k2的信息

  • 192.168.4.34(从)

    在从节点中使用redis-clii获取刚才的key

    cd /home/redis/bin
    ./redis-cli

    image-20220522124211354

    可以看到我们可以通过从节点获得在主节点设置的k2的信息

上述情况即证明redis主从部署成功

4. 哨兵

4.1 配置文件修改

修改三个服务器的/home/redis下的sentinel.conf

sentinel monitor mymaster 127.0.0.1 6379 2

改为

sentinel monitor mymaster 192.168.4.18 6379 1

注意,==三个服务器节点下的sentinel.conf均需要改==,因为三个服务器均是Redis sentinel服务节点。

这里最后的参数1或者2是判断节点是否为客观下线所需要的支持投票数,本文档设为1,用户可根据自己需求更改。

4.2 启动哨兵

三个服务器均执行:

cd /home/redis
./bin/redis-sentinel sentinel.conf

image-20220522131611315

4.3 校验是否配置成功

由于当前主节点是192.168.4.18,因此我们关闭192.168.4.18上的Redis服务,注意是Redis服务,不是哨兵

此时其余两个服务器的redis服务从节点会频繁打印连接主节点失败的日志(注意当前日志是Redis从节点打印的,不是哨兵):

image-20220522132210544

同时大概过一小会,Redis哨兵会打印如下日志:

image-20220522132348115

可以看到哨兵监测到了主节点挂掉的现象,并做了选举与故障转移,现在192.168.4.34成了新的头节点。

我们使用redis客户端,测试是否真的如此

  • 192.168.4.34

    cd /home/redis/bin
    ./redis-cli

    image-20220522132633673

    可以看到当前节点变为可写节点了,说明确实是头节点,并且我们设置了<K3,V3>一条记录

  • 192.168.4.43

    cd /home/redis/bin
    ./redis-cli

    image-20220522132815311

    可以看到192.168.4.43目前已经slave of 192.168.4.34,故障转移正常

现在我们重新启动192.168.4.18上的redis服务

image-20220522133233310

可以看到新起来的192.168.4.18也会成为192.168.4.34的从节点,并被sentinel监视。

使用redis-cli连接192.168.4.18的Redis服务

image-20220522133326368

可以看到能正常得到k3的信息

因此就可以证明我们的redis哨兵部署成功。

5. 参考文档

Linux安装部署Redis(超级详细) - 长沙大鹏 - 博客园 (cnblogs.com)

springboot+redis的sentinel实现哨兵模式(超详细) - 知乎 (zhihu.com)

《Redis设计与实现》黄健宏

最后修改:2022 年 06 月 21 日
如果觉得我的文章对你有用,请随意赞赏