我已经将 redis 镜像进行了 docker 化(在使用自定义 redis.conf 时,请遵循官方 dockerhub 指南) 和自定义图像 (根据高山图像请参见: https://pastebin.com/9WsMk1JC) 的 sentinel(也带有自定义的 sentinel.conf)。
在 redis.conf 中,添加了这三个参数(其余保留为默认配置文件):
masterauth password
masteruser default
requirepass password
在 sentinel.conf 中由于 redis 实例(其他容器)和 sentinel 的分离,设置为在 localhost 上启动不存在的 master。我添加了参数以在 master 上执行身份验证。因此配置文件有两个附加参数(其余保留为默认配置文件):
sentinel auth-pass mymaster password
sentinel auth-user mymaster default
在 redis 容器启动并准备好连接后,我启动了 sentinel 镜像,完成后我连接到 sentinel 端口上的 redis CLI 并手动切换主服务器:
redis-cli -p 26379 sentinel remove mymaster && redis-cli -p 26379 sentinel monitor mymaster <redis container ip> 6379 2
sentinel 的 CLI 两次返回 OK,但过了一会儿,它打印出 master 已关闭。并且它永远保持这种状态。
通过 telnet 和 ping 测试容器之间的连通性——正常。
我的猜测是,redis sentinel 无法连接到 master — — 因为密码。
为什么?
- redis 容器的副本 - 制作几个正在运行的镜像副本,并通过 CLI 将它们加入到 MASTER-SLAVE 中,效果非常好。容器可以使用 redis.conf 中的密码相互通信。
- 在向 redis 容器引入密码之前,哨兵可以连接并执行成功的故障转移。
- 无需设置密码即可在 Openshift 上工作。