注意:在早先的redis.conf中控制主从结构的是slaveof,在如今该命令改名为replicaof
搭建主从复制结构需要用到redis.conf。本地拉取的docker镜像默认没有该conf文件,需要自行去下载对应版本的redis.conf。或者没有必要下载,因为针对redis.conf文件的改动很小。
查看docker hub官网,发现有两种使用本地redis.conf启动服务的方法:
这里就用第二种。
在Docker下首先创建网络环境,命令如下:
docker network create redis-network
首先创建好目录结构,每个目录中都只用放置.conf文件:
其中master下的redis1.conf文件内容如下:
启动master节点命令如下:
docker run -v /Users/yuhao/redis_test/master/redis1.conf:/usr/local/etc/redis/redis.conf --network redis-network -p 6379:6379 --name master redis:alpine redis-server /usr/local/etc/redis/redis.conf
在启动了master节点后,就可以去查看master节点对应的网络ip了。
docker network inspect redis-network
slaver1下的redis1.conf文件内容如下:
启动slave1节点的命令如下:
docker run -v /Users/yuhao/redis_test/slave1/redis1.conf:/usr/local/etc/redis/redis.conf --network redis-network -p 6380:6380 --name slave1 redis:alpine redis-server /usr/local/etc/redis/redis.conf
启动成功后master节点日志输出:
同理,slave2配置文件内容如下:
启动命令:
docker run -v /Users/yuhao/redis_test/slave2/redis.conf:/usr/local/etc/redis/redis.conf --network redis-network -p 6381:6381--name slave2 redis:alpine redis-server /usr/local/etc/redis/redis.conf
测试主从结构是否工作:
可见主从结构已经开始工作
搭建哨兵模式:
新建哨兵配置文件”sentinel.conf ",在其中添加:
sentinel monitor 名字 ip port 哨兵数量
# 例如
sentinel monitor mysentinel 172.18.0.2 6379 1
之后执行下述命令运行哨兵服务:
docker run -v /Users/yuhao/redis_test/master/sentinel.conf:/usr/local/etc/redis/sentinel.conf --network redis-network -p 26379:26379 --name sentinel redis:alpine redis-sentinel /usr/local/etc/redis/sentinel.conf
哨兵启动后可以看到:
为了验证哨兵工作是否正常,断开主节点master之后,哨兵服务日志如下:
从上图中的红框中可以看到,此时主节点master已经由172.18.0.2:6379更换为了172.18.0.4:6381,并且6380和6379都作为了6381的从节点