目前的想法是想做DB类服务的高可用(如redis):
原理:前端应用通过SLB VIP访问redis,SLB后端配置一个redis master和若干redis slave,SLB初始配置master权重100,所有slave的权重配置为0(即只有master提供读写服务)
在redis主挂掉后,将某个slave提升为master,此时通过SLB的API将新master的权重调整为100,并将原master的权重调整为0
但是这里存在一个问题:
如果应用使用长连接连接到redis,那么我们调整SLB的访问权重并不会对这些已有的链接造成影响(特别是master短时间内又恢复的场景),即可能导致一部分已有的链接还是连接在原来的master上,更致命的是,此时的SLB的健康检查是OK的(因为此时原master只是无法写入,但是是可以telnet通的),因此应用侧会报无法写入的错误,而SLB还是将请求转发到原master,
目前想到的解决办法就是:
在slave提升为master之后,直接将原master关闭,或者将原master上的所有连接都kill掉,强制让应用侧进行断线重连,但是貌似不够优雅
PS:不要说让我使用阿里云的RDS for redis之类的,目前我们都是自建的,暂时不会使用这个,所以,小伙伴们有什么好的解决方法吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。