做Redis集群的时候,可不可以将Master实例和Slave实例放在一个主机当中?

发布于 2022-09-03 00:27:25 字数 332 浏览 13 评论 0

线上的实际情况是总共有4台服务器。现在主要用的是memcache,并且目前只用了61M左右的内存空间。公司的需求是逐步把整个网站的缓存迁移到redis。

目前的想法是拿3台服务器拿来做集群,每台服务器配置一个Master实例。为了实现高可用,还需要给每台服务器配置一个Slave实例。我想问的是,可不可以将Master实例和Slave实例配置到一个主机当中,以及这样配置所带来的影响?

还有一种想法是,只用2台服务器,1台服务器运行3个Master实例,另一台服务器运行3个Slave实例。大家还有更好的解决方案吗?

还听他们说,集群的话至少要有3个主节点。用2个主节点不行吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

清欢 2022-09-10 00:27:25

如果把master和slave放在同一台机器上,会有问题:

  1. master和slave运行时都需要占用内存,机器的内存可能不够用

  2. 如果机器宕机,断电,或者网络断开,那么master和slave没有什么高可用可言了。

master和slave最好都要放在不同的机器。

至于为什么是3而不是2。这是集群选举的时候的最佳策略。redis3.0开始支持集群。

一般,集群要对某个公共状态达成共识,都需要集群中过半数的redis实例同意。
为什么要过半数呢,因为要考虑集群发生脑裂(split-brain)的情况,也就是网络隔离(network-partition),
过半数可以保证,无论网络怎么隔离,无论脑怎么裂,无论大集群被隔离成了多少个小集群,能够提供服务(意味着有过半数的实例)的那个小集群里,至少有一个实例是同步到最新的状态信息的。

在理解上面所说的过半数,然后才有背景来谈谈为什么是奇数的问题
偶数也可以有过半数,例如,4个实例的集群,3就是一个过半数。
但为什么还是奇数最好?
如果集群有5个实例,那么只能容忍2个实例的崩溃。
如果集群中有6个实例,同样也只能容忍2个实例的崩溃。
在相同的容忍度下,6个和5个有什么区别:

  • 由于集群间需要互相通信,实例越多,网络开销越大

  • 实例越多,5个实例的时候,发生3个实例崩溃的概率要小于6个实例的时候。

所以当然是奇数的性价比最高了。

杯别 2022-09-10 00:27:25

是可以的,设置不同端口就行了,至于影响,我感觉也没啥特别影响。

后来的我们 2022-09-10 00:27:25

有3台的话,各跑一个master, 然后各自的slave放在不同的机器做成环形备份,不把鸡蛋放在一个篮子里。
ip资源够的话,找个ha中间件把高可用也做上。

盗梦空间 2022-09-10 00:27:25

生产环境不建议放在同一台物理机上。集群3台master说的是3.0集群,奇数节点保证投票能够出确定结果

埖埖迣鎅 2022-09-10 00:27:25

恩,那还是把Slave放在其他地方。

看看这个设计怎么样?
redis%E9%9B%86%E7%BE%A4%E6%9E%B6%E6%9E%84.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文