docker部署redis主從和哨兵
原文地址:https://www.jianshu.com/p/72ee9568c8ea
1主2從3哨兵
一、前期准備工作
1、電腦裝有docker
2、假設本地ip為192.168.2.139
3、各Redis的ip和端口如下:
主:ip:6379
從:ip:6380,ip:6381
sentinel:ip:26379,ip:26380,ip:26381
二、部署主從redis
docker run --name redis6379 --net=host -v $PWD/data6379:/data -d redis:3.2 redis-server --port 6379
docker run --name redis6380 --net=host -v $PWD/data6380:/data -d redis:3.2 redis-server --slaveof 192.168.2.139 6379 --port 6380
docker run --name redis6381 --net=host -v $PWD/data6381:/data -d redis:3.2 redis-server --slaveof 192.168.2.139 6379 --port 6381
執行命名查看redis 同步情況
docker logs redis6379
docker logs redis6380
docker logs redis6381
三、部署sentinel
新建文件 sentinel-26379.conf、sentinel-26380.conf、sentinel-26381.conf
protected-mode no
bind 0.0.0.0
port 26379
daemonize yes
sentinel monitor mymaster 192.168.2.139 6379 2
sentinel down-after-milliseconds master 5000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
logfile ""
protected-mode no
bind 0.0.0.0
port 26380
daemonize yes
sentinel monitor mymaster 192.168.2.139 6379 2
sentinel down-after-milliseconds master 5000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
logfile ""
protected-mode no
bind 0.0.0.0
port 26381
daemonize yes
sentinel monitor mymaster 192.168.2.139 6379 2
sentinel down-after-milliseconds master 5000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
logfile ""
執行命令啟動3台sentinel
docker run -it --name sentinel-26379 \
--net=host \
-v $PWD/sentinel-26379.conf:/usr/local/etc/redis/sentinel.conf \
-d redis:3.2 redis-sentinel /usr/local/etc/redis/sentinel.conf
docker run -it --name sentinel-26380 \
--net=host \
-v $PWD/sentinel-26380.conf:/usr/local/etc/redis/sentinel.conf \
-d redis:3.2 redis-sentinel /usr/local/etc/redis/sentinel.conf
docker run -it --name sentinel-26381 \
--net=host \
-v $PWD/sentinel-26381.conf:/usr/local/etc/redis/sentinel.conf \
-d redis:3.2 redis-sentinel /usr/local/etc/redis/sentinel.conf
執行docker logs sentinel-26379
查看啟動情況
sentenel會根據master的數據自動把其他salve和sentenel找出來寫到自己的配置文件
查看配置文件cat sentinel-26379.conf
發現配置文件多了東西
四、測試連接
新建一個boot工程,配置redis的pom和配置
application.properties
spring.redis.sentinel.master=mymaster
spring.redis.sentinel.nodes=192.168.2.139:26379,192.168.2.139:26380,192.168.2.139:26381
github地址:https://github.com/hd-eujian/redis.git
碼雲地址:https://gitee.com/guoeryyj/redis.git
執行單元測試用例
@SpringBootTest
class RedisApplicationTests {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
void contextLoads() {
stringRedisTemplate.opsForValue().set("a","123");
String o = stringRedisTemplate.opsForValue().get("a");
System.out.println(o);
}
}
把其中的master停掉(我的master是6380的redis)
執行docker stop redis6380
查看日志docker logs sentinel-26379
可以看到redis的mater轉為6381
再次運行redis代碼的單元測試。結果繼續有效