在mac系统中安装docker,并使用docker desktop 学习redis相关知识,在哨兵模块时,需要搭建哨兵集群,遇到相关问题在此记录。
在使用redis官方本身的镜像并不能很好的运行(使用图形化界面时只暴露了6379,使用命令时,挂载文件不能写入)。遇到了诸如“# Sentinel was not able to save the new configuration on disk!!!: Device or resource busy”的问题。寻找了大部分的办法,无果,换一个思路,去找现有的sentinel镜像。
1.下载运行镜像
在docker中配置 redis sentinel,首先,要下载镜像,我这里使用的是 bitnami/redis-sentinel:latest
然后使用docker命令启动。
docker run --name sentinel-26379 \
-e REDIS_MASTER_HOST=redis \
-v /Users/user/local/redis/sentinel/conf1:/bitnami \
-p 26379:26379 \
bitnami/redis-sentinel:latest
2.设置配置文件
此时运行后并不能使用,因为没有映射配置文件。我这里使用的是mac,所以挂载在了我的用户文件夹下。 具体的路径及文件为(这里可以修改短路径,或者映射直接映射到conf):
/Users/user/local/redis/sentinel/conf1/redis-sentinel/conf/sentinel.conf
配置文件内容如下:
protected-mode no
port 26379
daemonize no
pidfile "/opt/bitnami/redis-sentinel/tmp/redis-sentinel.pid"
loglevel notice
logfile ""
dir "/tmp"
sentinel monitor mymaster 172.19.0.2 6379 2
sentinel down-after-milliseconds mymaster 60000
acllog-max-len 128
sentinel deny-scripts-reconfig yes
sentinel resolve-hostnames yes
sentinel announce-hostnames no
bind 0.0.0.0 ::
这里需要注意的是"sentinel monitor mymaster 172.19.0.2 6379 2" 这里需要配置正确的redis地址,因为只有配置了正确的redis地址,才能正常启动。
3.进入sentinel控制台
使用命令,进入sentinel容器并打开redis客户端,进行查看 sentinel 信息docker exec -it sentinel-26379 redis-cli -p 26379
输入:info sentinel
输出:
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_tilt_since_seconds:-1
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=172.19.0.3:6379,slaves=2,sentinels=3
4.进行切主测试
-
sentinel选主前后
-
选主容器日志
亲测有效。
附:sentinel控制台命令
命令 | 解释 |
---|---|
sentinel masters | 展示所有被监控的主节点状态以及相关的统计信息 |
sentinel master <master name> | 展示指定<master name>的主节点状态以及相关的统计信息 |
sentinel slaves <master name> | 展示指定<master name>的从节点状态以及相关的统计信息 |
sentinel sentinels <master name> | 展示指定<master name>的Sentinel节点集合(不包含当前Sentinel节点) |
sentinel get-master-addr-by-name <master name> | 返回指定<master name>主节点的IP地址和端口 |
sentinel reset<pattern> | 当前Sentinel节点对符合<pattern>(通配符风格)主节点的配置进行重置,包含清除主节点的相关状态(例如故障转移),重新发现从节点和Sentinel节点 |
sentinel failover<master name> | 对指定<master name>主节点进行强制故障转移(没有和其他Sentinel节点“协商”),当故障转移完成后,其他Sentinel节点按照故障转移的结果更新自身配置 |
sentinel ckquorum <master name> | 检测当前可达的Sentinel节点总数是否达到<quorum>的个数 |
sentinel flushconfig | 将Sentinel节点的配置强制刷到磁盘上 |
sentinel remove <master name> | 取消当前Sentinel节点对于指定<master name>主节点的监控 |
sentinel monitor <master name> <ip> <port> <quorum> | 通过命令的形式来完成Sentinel节点对主节点的监控。 |
sentinel set <master name> | 动态修改Sentinel节点配置选项 |
sentinel is-master-down-by-addr | Sentinel节点之间用来交换对主节点是否下线的判断 |