开头

最近在项目中使用到redis哨兵,特此记录

部署环境CentOS7,Docker18.09.3,Redis:3.2

省去CentOS下安装docker和下拉Redis镜像步骤,可以参照:http://www.runoob.com/docker/docker-tutorial.html

进入正文

开始部署哨兵前需要先部署主从Redis

主从Redis部署

主Redis服务器配置

主Redis服务器无需额外的配置,按照项目的需求配置redis.conf即可

从服务器配置

从服务器的slaveof.conf中需要配置如下,主redis的ip和端口号

SpringBoot整合 Docker Redis哨兵部署在docker中启动:

docker run -p 6379:6379 --name redis01 -v /docker/redis/conf/slaveof.conf:/etc/redis/redis.conf -d redis:3.2 redis-server /etc/redis/redis.conf --appendonly yes

-p 	为端口号映射,前为主机端口,后为容器中端口
--name 	为redis镜像名
-v 	文件映射前为本地文件:后为镜像内路径 
-d 	后台启动
redis:3.2  	镜像版本
redis-server 	以server模式启动
/etc/redis/redis.conf  	按配置文件启动
--appendonly yes  	开启持久化

在docker中启动成功后输入命令

docker ps

即可看见容器运行的实例
接着进入redis容器中

docker exec -it redis01 /bin/bash
进入以后执行
redis-cli
info

SpringBoot整合 Docker Redis哨兵部署这样主从服务器就搭建成功了。

哨兵服务器配置

在/docker/redis/conf(路径自定义)中输入如下命令:

vi sentinel.conf

在文件中配置,保存

port 26379
sentinel monitor mymaster 192.168.12.131 6379 1

port为端口号
sentinel monitor mymaster配置主服务器的ip和端口号,最后的1表示切换主服务器需要多少个哨兵投票同意,目前只配置了一台所以设置成1。

执行如下docker命令创建哨兵容器

docker run -p 26379:26379 -v /docker/redis/conf/:/data --name sentinel01 -d redis:3.2 redis-sentinel sentinel.conf

创建成功后,在映射的路径下会生成一个sentinel日志文件。默认名为sentinel.log
SpringBoot整合 Docker Redis哨兵部署接着我们进入哨兵容器中

docker exec -it sentinel01 /bin/bash
redis-cli -p 26379
info

SpringBoot整合 Docker Redis哨兵部署从图中可以看出此时哨兵监控一台主redis服务器,该主服务器ip和下属的从服务器和哨兵数量。

至此哨兵就搭建完成了

SpringBoot整合

下图为单机redis配置
SpringBoot整合 Docker Redis哨兵部署加上哨兵和从服务器实现高可用只需要加上两行配置
SpringBoot整合 Docker Redis哨兵部署名称与哨兵配置中同名,node节点填写哨兵的ip和端口号,如有多个则逗号隔开。

功能测试

启动项目前,我先清空redis中的内容。

启动后主服务器中数据已经存入
SpringBoot整合 Docker Redis哨兵部署
从服务器中也同步了数据
SpringBoot整合 Docker Redis哨兵部署
此时主服务器更改数据会同步到从服务器,完成复制功能,同时从服务器时只读不可更改的,进行更改时会报出如下错误。
SpringBoot整合 Docker Redis哨兵部署现在我们停止主redis镜像,模拟服务器掉线。

docker stop redis01

此时idea控制台中已经报出redis断开连接日志
SpringBoot整合 Docker Redis哨兵部署观察日志可以发现,最后连接上了从服务器,期间的间隔为10s,正是哨兵的扫描周期(原理下一篇再介绍)。此时从服务器被哨兵升级为主服务器并拥有了写的功能。
查看哨兵的日志
SpringBoot整合 Docker Redis哨兵部署此时重新启动被停止的原主服务器,进入容器后会发现,已经降级为从服务器。

相关文章: