根据官网示例配置完sentinel.conf,大致添加如下配置项:
port 26379
sentinel monitor mymaster 172.17.16.7 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 900000
sentinel parallel-syncs mymaster 1
随后启动sentinel
# ./redis-sentinel sentinel.conf
java程序中使用JedisSentinelPool建立redis连接池
Set sentinels = new HashSet();
sentinels.add("172.17.16.7:26379");
sentinels.add("172.17.16.8:26379");
sentinels.add("172.17.16.9:26379");
JedisSentinelPool sentinelPool = new JedisSentinelPool("mymaster", sentinels, "123456");
报错:
DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients.......
使用redis-cli -h 127.0.0.1 -p 26379连接sentinel可以执行命令,而使用redis-cli -h 172.17.16.7 -p 26379连接sentinel执行命令则会报同上的错误。
查遍了网上没有找到相关的问题分析和解决的案例,所以只能自己猜测和排查,初步怀疑是通过172.17.16.7访问sentinel时受限。
由于此错误和redis server的protect-mode为yes的访问错误颇为相似,官方在redis.conf的注释说明中有protected-mode这一配置项,但sentinel.conf的注释中完全没有提到过该配置项,我很疑惑,但还是尝试在sentinel.conf中加入
protected-mode no
之后保存并重新启动sentinel,之后用Java程序建立连接池,没有报错,且可以对redis server进行数据处理,问题解决。
本文原创,转载请注明出处!