标签:数据 研发 通过 说明 状态 架构师 erro redis主从 stat
图灵学院 java架构师学习路线
概述
哨兵机制的简介
有了主从复制的实现以后,如果想对主服务器进行监控,那么在redis2.6以后提供了一个"哨兵"的机制。顾名思义,哨兵的含义就是监控Redis系统的运行状态。可以启动多个哨兵,去监控Redis数据库的运行状态。其主要功能有两点:
1、监控主数据库和从数据库是否正常运行。
2、主数据库出现故障时,可以自动将从数据库转换为主数据库,实现自动切换。
一、架构图
一丶下载
首页地址:http://redis.io/
最新稳定版下载地址:http://download.redis.io/releases/redis-3.2.9.tar.gz
二、命令
三、配置
四、启动
五、查看
六、Sentinel(哨兵)配置
vi sentinel.conf
启动前:
port 26379
dir "/var/lib/redis/tmp" ###定义目录存放
sentinel auth-passmymaster vhreal ##密码
sentinel monitor mymaster 192.168.65.128 6379 2 ###监控mymaster(可自定义-但只能包括A-z 0-9和”._-”)
sentinel down-after-milliseconds mymaster 30000 ###mymaster多久不响应认为SDOWN
sentinel parallel-syncs mymaster 1 ###指定最大同时同步新maser配置的salve数量
sentinel failover-timeout mymaster 180000 ###2次failover切换时间
启动后(redis.con配置文件完全由sentinel控制,请不要再随意手动改动):
port 26379
dir "/var/lib/redis/tmp"
sentinel monitor mymaster 192.168.65.128 6379 2
sentinel config-epoch mymaster 18 ###确认mymater SDOWN时长
sentinel leader-epoch mymaster 18 ###同时一时间最多18个slave可同时更新配置,建议数字不要太大,以免影响正常对外提供服务
sentinel known-slave mymaster 192.168.65.129 6379 ###已知的slave
sentinel known-slave mymaster 192.168.65.130 6379 ###已知的slave
sentinel known-sentinel mymaster 192.168.65.130 26379 be964e6330ee1eaa9a6b5a97417e866448c0ae40 ###已知slave的唯一id
sentinel known-sentinel mymaster 192.168.65.129 26379 3e468037d5dda0bbd86adc3e47b29c04f2afe9e6 ###已知slave的唯一id
sentinel current-epoch 18 ####当前可同时同步的salve数最大同步阀值
开启sentinel
开启sentinel后会后redis.conf会由sentinel进行管理
# redis-server /etc/redis/sentinel.conf --sentinel &> /var/log/redis/sentinel.log &
七、常用命令
redis-cli
redis-server
auth
set key value
get key
八、问题解决
1、Redis主从配置异常解决:Error condition on socket for SYNC: Connection refused
Redis主从集群时,从服务器上的redis日志报错:
32677:S08Feb16:14:38.947*ConnectingtoMASTER172.168.10.70:637932677:S08Feb16:14:38.948*MASTER
解决方案:
在redis主服务器上的redis.conf中修改bind字段,将
bind 127.0.0.1
修改为
bind 0.0.0.0
又或者直接注释掉bind字段
# bind 127.0.0.1
原因:
如果redis主服务器绑定了127.0.0.1,那么跨服务器IP的访问就会失败,从服务器用IP和端口访问主的时候,主服务器发现本机6379端口绑在了127.0.0.1上,也就是只能本机才能访问,外部请求会被过滤,这是Linux的网络安全策略管理的。如果bind的IP地址是172.168.10.70,那么本机通过localhost和127.0.0.1、或者直接输入命令redis-cli登录本机redis也就会失败了。只能加上本机ip才能访问到。
所以,在研发、测试环境可以考虑bind 0.0.0.0,线上生产环境建议绑定IP地址。
2、(DENIED Redis is running in protected mode)
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进行数据处理,问题解决。
尽管Java架构师学习路线已经分享给大家,但有多少学员能认真的去践行,这个就难说了。互联网寒冬已经到来,作为程序员,更应在此时提高自己,有着更高远的追求。
篇幅有限,如果需要更详细的java架构师学习路线资料可加博主qq:1993712276,或者去图灵官网查看
标签:数据 研发 通过 说明 状态 架构师 erro redis主从 stat
原文地址:https://www.cnblogs.com/tulingxueyuan/p/13307696.html