本篇文章介绍docker环境下搭建redis哨兵模式,并且使用springboot框架进行操作。
redis搭建
- 首先创建一个docker网络,保证redis主从和哨兵处于用一个局域网内。创建完成后如下图
- 创建两个redis,一个作为主数据库,一个作为从数据库。在home目录下新建两个目录分别用于存放两个数据库的配置文件和数据。
运行docker命令启动两个容器:docker run -d --name redis01 --net redis -p 6379:6379 -v /home/redis01/conf/redis.conf:/etc/redis/redis.conf -v /home/redis01/data:/data redis redis-server /etc/redis/redis.conf
- 使用docker-compose启动三个sentinel。
docker-compose.yml:
`version: ‘3’
services:
sentinel1:
image: redis
container_name: redis-sentinel-1
ports:- 26379:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes: - /home/redis-sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.conf
sentinel2:
image: redis
container_name: redis-sentinel-2
ports: - 26380:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:- /home/redis-sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.conf
sentinel3:
image: redis
container_name: redis-sentinel-3
ports: - 26381:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes: - /home/redis-sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.conf
networks:
default:
external:
name: redis
`
- /home/redis-sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.conf
- 26379:26379
sentinel.conf文件:
port 26379
dir /tmp
sentinel monitor mymaster 172.38.0.2 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
docker-compose启动。
运行docker netwokr inspect 检查下。
springboot集成
使用springboot-redis访问下服务器。
配置文件确认后,执行代码,提示连接超时
打断点调试发现访问redis使用的是内网172.17.0.2的ip,这个是内网ip,所以连接失败了。
解决方案:把sentinel配置文件中的ip从docker内网ip改成宿主机ip,并且redis配置文件中加上
slave-announce-ip 192.168.31.214
slave-announce-port 6379
slave-announce-ip和slave-announce-port填写当前redis的宿主机的ip和端口。