您的位置:首页技术文章
文章详情页

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

【字号: 日期:2024-07-10 09:51:19浏览:45作者:猪猪

问题描述

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

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

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

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

问题解答

回答1:

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

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

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

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

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

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

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

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

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

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

回答2:

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

回答3:

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

回答4:

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

回答5:

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

看看这个设计怎么样?做Redis集群的时候,可不可以将Master实例和Slave实例放在一个主机当中?