redis-cluster集群配置和主从

Posted zhuxineli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis-cluster集群配置和主从相关的知识,希望对你有一定的参考价值。

写在前面的问题:
1 集群中的副本是不是只有在主服务器出问题的时候才会提供服务,那这样是不是会太浪费了,我试了一下设置为副本之后是无法在设置为slave的,如果是我说的这样,那配置集群的时候直接不设置副本,而直接将副本设置成主从的从服务器岂不是更好,那问题又来了,如果保证主服务器在出问题之后,从服务器能顶上去呢?以为集群中可以直接切换,但设置成主从模式之后没找到方法,因为主从是为了负载均衡而集群才是为了高可用!!
最近公司业务进行调整,想把memcache服务器替换成redis集群,听起来是不是高大上,老大定了一个基本架构,用redis-cluster搭建,3主3从的配置,但经过分析之后发现我们现在的业务根本用不着分区,所有数据放到1个实例中就可以,这样配一个1主1从就可以,为了高可用,最多配个1主2从就够了,那么问题来了,主从和集群是一回事吗?有什么关系呢?
刚好,今天我一同学问了我一个非常经典的问题,什么是集群。我们用过mysql集群,用过redis集群,早些时候还用过memcache集群,那有没有仔细分析过什么是集群呢?这个名词,一听都知道,但仔细分析起来可能并不是那么简单吧!!!
首先,明确几个名词
<1>实例:即一个redis服务,一台机器上可以装1个或多个实例,相当于程序开发中类的实例
<2>节点:一个或多个实例组成一个节点。一个节点可以包含0-100%的项目的数据,比如集群中有3个节点,则平均每个节点包含项目的33%的数据,而每个节点加入包括10个实例,每个实例占用一台服务器那就是10个服务器,我们可以做成1主9从,也可以做成5主5从。
<3>集群:由很多节点组成的,为了解决数据量太大而分区的技术。
这么说吧,有两种业务逻辑,第一:项目数据量不大,但访问量很大,一个redis实例就能存放所有的缓存数据,这时候我们就不需要用到集群,只需要配置主从即可。第二:项目数据库很大,一个redis实例无法存放所有的缓存数据,这时候我们就需要用到实例,将数据平均分配到不同的分区中去,在联合主从完成负载均衡。也就是说集群和主从不是一回事,主从是为了负载均衡,集群是为了高可用。但他两个一般是配合使用的,就像你数据量大的时候不可能访问量不大,如果访问量不大,那我们放到redis中干什么?直接穿透到数据库不就可以吗!!!

下面说一下redis-cluster的配置过程、注意事项以及在实际开发过程中可能会遇到的问题
配置集群网上有很多很多的教程,这个过程是比较简单的,没有什么特别注意的地方,安装完成之后,用客户端访问的时候是通过
<1>./redis-cli -p 7000 访问的,这时候如果想要访问到集群用加一个参数-c,也就是redis-cli -p 7000 -c,如果不加-c的话进去的是单个redis实例
<2>redis集群的常用命令,进去到客户端之后,
<2.1>cluster nodes:列出集群中所有节点,及这些节点的相关信息,比如那些几点是主节点,那些是从节点,以及比较重要的每个节点占用的槽的起止点
<2.2>cluster info打印集群信息,貌似没什么重要的
<2.3>
redis复制的命令
<1>配置基本的复制功能非常简单,一种方法两种变体;其一:在配置文件中设置slaveof masterip masterport;设置slaveof参数后面跟主服务器的ip和端口;第二:使用slaveof命令,在从服务器中设置手动指定也是这种方法slaveof masterip masterport
首先不懂的问题:这里我们选择要搭建的集群为6台机器
<1>因为集群和主从完全是两回事,一般我们会联合使用,所以,我们设置了集群之后,一般会在给集群设置主从,从理想化的角度上讲,集群和主从至少需要6台机器是吗?高可用主从的最低配置是一主二从的三台机器,主服务器挂了之后可以立即启用一台从服务器做当做主服务器。那结合到集群的概念,最少两个分区(即整个项目的数据分两份)那就是2个一主二从,6台机器。集群里也有自己的备份机制,即如果现在有6台机器,设置一个副本数的参数,如果设置为1,那么有一个副本,即分区为3台机器,另外3台机器做备份,但注意:这里的3台备份用的机器是不对外提供服务的,只有当主机器出现问题时备份的机器才会提供服务,那么多浪费啊,应该和主从一样有效的利用起来啊!!!那集群和主从怎么结合呢??
<2>这里明确一个问题,搭建集群的意义,保证数据的正常访问,高可用性,如果现在有一台机器挂了怎么办?如果现在机器不够用,需要新添加一台服务器怎么办?
<3>现有6台机器,设置副本数为1,端口号分别为7000-7005,7000-7002为主服务器,7003-7005为副本,那分别是如何对应的呢?也就是说7000这个主服务器的备份是那一台机器?

以上是关于redis-cluster集群配置和主从的主要内容,如果未能解决你的问题,请参考以下文章

Redis-Cluster 5.0.4 集群部署

Docker实战之Redis-Cluster集群

Docker实战之Redis-Cluster集群

Docker实战之Redis-Cluster集群

redis-cluster集群

docker-compose搭建redis-cluster集群