Redis主从复制与哨兵(搭建篇)
SpringBoot整合 Docker Redis哨兵部署
- 开头
- 主从Redis部署
- 主Redis服务器配置
- 从服务器配置
- 哨兵服务器配置
- SpringBoot整合
- 功能测试
开头
最近在项目中使用到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和端口号
在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
这样主从服务器就搭建成功了。
哨兵服务器配置
在/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接着我们进入哨兵容器中
docker exec -it sentinel01 /bin/bash
redis-cli -p 26379
info
从图中可以看出此时哨兵监控一台主redis服务器,该主服务器ip和下属的从服务器和哨兵数量。
至此哨兵就搭建完成了
SpringBoot整合
下图为单机redis配置加上哨兵和从服务器实现高可用只需要加上两行配置
名称与哨兵配置中同名,node节点填写哨兵的ip和端口号,如有多个则逗号隔开。
功能测试
启动项目前,我先清空redis中的内容。
启动后主服务器中数据已经存入
从服务器中也同步了数据
此时主服务器更改数据会同步到从服务器,完成复制功能,同时从服务器时只读不可更改的,进行更改时会报出如下错误。现在我们停止主redis镜像,模拟服务器掉线。
docker stop redis01
此时idea控制台中已经报出redis断开连接日志观察日志可以发现,最后连接上了从服务器,期间的间隔为10s,正是哨兵的扫描周期(原理下一篇再介绍)。此时从服务器被哨兵升级为主服务器并拥有了写的功能。
查看哨兵的日志此时重新启动被停止的原主服务器,进入容器后会发现,已经降级为从服务器。
还没有评论,来说两句吧...