重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要讲解了“sentinel构建高可用redis集群的注意事项有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“sentinel构建高可用redis集群的注意事项有哪些”吧!
坚守“ 做人真诚 · 做事靠谱 · 口碑至上 · 高效敬业 ”的价值观,专业网站建设服务10余年为成都航空箱小微创业公司专业提供企业网站设计营销网站建设商城网站建设手机网站建设小程序网站建设网站改版,从内容策划、视觉设计、底层架构、网页布局、功能开发迭代于一体的高端网站建设服务。
部署redis高可用集群时,通常会用到redis官方的sentinel。sentinel监控master状况,master宕机时进行集群master的故障转移。部署时方法网上很多,这里列出了一些需要注意的事项。
为了安全,有时候会对redis和sentinel设置密码,由于集群可能会切换,所以redis集群的密码最好相同,对于将slave-priority设置为0的节点,由于不会成为master,所以密码可以单独设置,不与其他机器相同,只要masterauth设置为master的密码即可。
sentinel在redis5以后的版本支持设置密码,由于sentinel之间需要相互通信,所以整个sentinel集群内密码必须相同。当然不需要与redis节点的密码相同
redis配置文件的bind指令可以绑定多个IP, 默认绑定了127.0.0.1。如果sentinel不在本机,需要redis绑定外网IP,这时bind绑定的第一个IP必须可以对外访问。
redis的主从复制需要slave和master通信,而redis对外建立TCP连接时,会使用bind绑定的第一个IP作为本地IP,如配置了bind 127.0.0.1 1.1.1.1
,slave访问master时,会绑定127.0.0.1,master如果不是本机,会连接失败。
dir指令改变后面指令的相对路径,如果配置中有其他依赖相对文件路径的指令,如pidfile
、logfile
,要把这些指令放在dir
指令后面。
redis的CONFIG
指令会修改本地文件,导致安全风险,而在配置文件中加入rename-command CONFIG ""
,可以禁用CONFIG
指令。
sentinel检测到master宕机进行故障切换时,会向slave发送一个事务指令(MULTI
), 包含有SLAVEOF
和CONFIG
两个指令,SLAVEOF
指令指示slave更换master,CONFIG
指令将slaveof更新到配置文件里。如果禁用了CONFIG
指令会导致事务失败,相应的slave无法切换master。
redis和sentinel都支持announce-ip
和announce-port
声明ip和端口,如果对外提供服务的IP与对外访问的出口不一致时需要指定这个配置,尤其现在很多云主机都是只有内网IP,通过slb对外访问的。
sentinel之间的相互发现是靠master来实现的,sentienl向master的__sentinel__:hello"
的channel广播自己的IP地址,其他sentinel根据这个消息发现其他的sentinel。如果sentienl的机器是内网的,而sentinel之间需要外网访问,就需要在配置文件里,将announce-ip
配置为外网可以访问的IP。而redis之间,地址通过TCP连接的对端地址获取,不存在这个问题。
sentinel通过读取配置文件获取master信息,同时运行中的sentinel也可以通过指令配置。
在通过sentinel monitor
可以增加监控的集群时,如果集群带有密码,通过sentinel set 集群名 auth-pass password
来设置。设置后需要通过sentinel reset 集群名
,让sentinel重新与集群master建立TCP连接才能真正生效。
sentinel会监控集群中节点的状态,如果对redis集群内的机器手动执行slaveof执行,sentinel发现后会重新发送slaveof指令,保证集群的正常运行。
如果节点是slave,先将节点宕机,然后向所有监控这个集群的sentinel,发送sentinel reset 集群名
重置集群节点信息,将节点从集群彻底移除,保证所有的sentinel都执行了这个指令,否则sentinel会重新发送slaveof
指令将节点加入集群。
如果节点是master,需要切换master,后照slave的情况进行。
移除sentinel节点,与移除slave方法相同。
redis主从复制支持多层级,如果使用了sentinel,集群的管理可能出现混乱。
如node1有两个从节点node2和node3,node2有一个从节点node4。如果node1宕机,sentinel将集群的master切换到了node2,那么node3和node4就变成了同一个层级的,这时sentinel该如果处理?不过并没有实际进行验证,不确定的情况下最好避免这种情形。
sentinel发现master宕机时,改为每一秒向所有的slave发送INFO
指令,以及时获取slave状态。之后需要选择一个slave提升为集群master。
在选择slave时,将连接正常,且slave-priority
不为0的slave组成一个数组,按照节点的slave-priority
从小到大排序,对于slave-priority
值相同的节点,依照节点的slave_repl_offset
值从大到小排序(slave_repl_offset
为主从复制的偏移,值越大说明节点的数据越接近master)。排序完成后,选择数组中最前面的节点,提升为集群master。
redis主从复制并没有提供强一致性,所以从slave读到的数据与master可能有延迟。且master故障切换时数据可能会丢失。
senetinel并不关注redis主从复制的状态与延迟,选择sentinel时也不会保证将拥有最新数据的slave提升为master。
新部署的slave,同master连接后,master生成一个rdb文件传输给slave,slave加载其中的数据。在这个过程中,slave是可以对外访问的,导致这个期间请求获取的结果都是不存在的。只有在slave收到rdb文件,加载的过程中,redis无法对外服务。
感谢各位的阅读,以上就是“sentinel构建高可用redis集群的注意事项有哪些”的内容了,经过本文的学习后,相信大家对sentinel构建高可用redis集群的注意事项有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!