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
或者
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,如下图
这代表你的gcc版本过低,需要升级gcc(因为Redis是C语言写的)。
可以参考
CentOS 7升级gcc版本 - 姬无华 - 博客园 (cnblogs.com)
(49条消息) CentOS升级gcc到高版本(全部版本详细过程)_乞力马扎罗の黎明的博客-CSDN博客_centos 升级gcc
升级你的gcc版本,重新执行make指令编译,编译完成后大概如下图
安装
make PREFIX=/home/redis install
关键字PREFIX
的作用是编译的时候用于指定程序存放的路径。比如我们现在就是指定了redis必须存放在/home/redis
目录。假设不添加该关键字Linux会将可执行文件存放在/usr/local/bin目录。
==注:本文档以/home/redis来演示Redis的安装目录,实际用户可根据个人需求将redis的安装在任意目录。==
安装完成后,切换到/home/redis目录下,应该可以看到一个bin目录
里面都是Redis服务
2.4 拷贝配置文件,启动测试
将之前解压文件中的redis.conf
与sentinel.conf
配置文件拷贝到/home/redis下
此时/home/redis目录如下:
现在让我们启动单机版redis测试是否正常
cd /home/redis/bin
./redis-server
如果redis启动如下图所示则代表启动正常
我们可以启一个redis客户端测试是否能连接正常与正常使用
cd /home/redis/bin/
./redis-cli
上图指令若执行正常则代表单机版Redis部署成功
3. 主从
3.1 拷贝安装文件
可以直接将上述/home/redis
目录打包复制到其他两个服务器下,其他两从服务器的安装信息与主服务器相同。
3.2 修改配置文件
修改主节点配置文件,编辑/home/redis下的redis.conf
将
bind 127.0.0.1
改为
bind 0.0.0.0
修改两个从节点的配置文件,编辑/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
此时各个节点的打印日志均应该有一些主从复制的日志信息打印(主从节点打印的日志不同)
我们可以测试主从节点是否部署正常
192.168.4.18(主)
在主节点中使用redis-cli设置一个key
cd /home/redis/bin ./redis-cli
可以看到我们通过主节点设置了一个<k2,v2> 的一条信息
192.168.4.43(从)
在从节点中使用redis-cli获取刚才的key
cd /home/redis/bin ./redis-cli
可以看到我们可以通过从节点获得在主节点设置的k2的信息
192.168.4.34(从)
在从节点中使用redis-clii获取刚才的key
cd /home/redis/bin ./redis-cli
可以看到我们可以通过从节点获得在主节点设置的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
4.3 校验是否配置成功
由于当前主节点是192.168.4.18,因此我们关闭192.168.4.18上的Redis服务,注意是Redis服务,不是哨兵
此时其余两个服务器的redis服务从节点会频繁打印连接主节点失败的日志(注意当前日志是Redis从节点打印的,不是哨兵):
同时大概过一小会,Redis哨兵会打印如下日志:
可以看到哨兵监测到了主节点挂掉的现象,并做了选举与故障转移,现在192.168.4.34成了新的头节点。
我们使用redis客户端,测试是否真的如此
192.168.4.34
cd /home/redis/bin ./redis-cli
可以看到当前节点变为可写节点了,说明确实是头节点,并且我们设置了<K3,V3>一条记录
192.168.4.43
cd /home/redis/bin ./redis-cli
可以看到192.168.4.43目前已经slave of 192.168.4.34,故障转移正常
现在我们重新启动192.168.4.18上的redis服务
可以看到新起来的192.168.4.18也会成为192.168.4.34的从节点,并被sentinel监视。
使用redis-cli连接192.168.4.18的Redis服务
可以看到能正常得到k3的信息
因此就可以证明我们的redis哨兵部署成功。
5. 参考文档
Linux安装部署Redis(超级详细) - 长沙大鹏 - 博客园 (cnblogs.com)
springboot+redis的sentinel实现哨兵模式(超详细) - 知乎 (zhihu.com)
《Redis设计与实现》黄健宏