Redis实战(13) - 手把手搭建Redis集群环境 (3主3从)

作者: 修罗debug
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。



摘要:在微服务、分布式系统架构盛行的时代,我们几乎阔以在项目中见到缓存中间件Redis的身影,作为一款具有高性能、高可用、扩展性强的中间件,Redis可以说是出尽了风头!本文我们将介绍如何在本地Windows系统下搭建Redis的集群环境(采用Master-Slave的模式,即3主3从),并在文末提供如何基于Spring Boot2.0搭建的项目以集群的方式连接至Redis服务,进一步多掌握一项运维层面的硬技能!

内容:Redis集群的搭建,可以说是保证Redis对外提供服务“可靠性、高可用性”的保证,故而还是有必要学习学习如何搭建集群环境以及如何在项目中以集群的方式连接、使用Redis服务的!

在前文我们花了十几篇文章的篇幅介绍了Redis在Spring Boot2.0搭建的微服务项目下的应用,更多的是偏向于“开发层面”的技术与知识点的掌握,本文我们将介绍跟Redis相关的“运维层面”的技术与知识,即如何在Windows本地搭建“集群开发环境”!

一、准备工具

A.Windows 64位下的Redis服务~绿色简化安装版,如果是单机的话,双击redis-server.exe即可使用!

(下载地址:https://pan.baidu.com/s/1mHs91Jp5-TR-etNryIumyA 提取码:a67m)

B. Ruby Installer v2.3.3 x64(Windows 版,下载地址:https://rubyinstaller.org/downloads/

二、搭建集群环境

(1)将下载成功的Redis安装包直接找个磁盘目录解压下来即可(文件目录不要含有中文字符),在这里我是将其解压到D盘根目录,如下图所示:


同时安装好Ruby,在这里我直接将其安装到默认的安装目录即可,即C:\Ruby23-x64,如下图所示:


(2)安装完成之后,接下来我们进入Redis的集群部署环节,当然啦,在开始之前,有必要交代一下:Redis集群搭建的节点数量至少要6个,在这里我们就以6个节点为例,其中6个节点的角色为:3主3从,即3 Master ~ 3 Slave,如下所示:

主(Master

从(Slave

备注

7100             

7101

0结尾的为主,其它数字结尾的为从

7200             

7201

0结尾的为主,其它数字结尾的为从

7300             

7301

0结尾的为主,其它数字结尾的为从

在Redis的安装目录,即D:\Redis 下新建一个cluster文件夹,然后在其中新建6个子文件夹,以端口进行命名,如下所示:


接下来,在每个子文件夹内,新建一个后缀名为conf的配置文件,以端口7100为例,新建的文件为:redis.7100.conf 如下图所示:


其中,redis.7100.conf 配置文件的内容为:

port 7100

appendonly yes
appendfilename "appendonly.7100.aof"

maxmemory 200mb
maxmemory-policy allkeys-lru

cluster-enabled yes
cluster-config-file nodes-7100.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes

这些都是Redis最为基本的配置,主要是端口号、持久化aof配置、最大内存配置以及达到最大内存时的Key淘汰策略等(相关参数的含义自行百度即可!)

(3)其他子文件夹如7101、7200、7201、7300和7301则只需要仿照7100文件夹进行配置,并将 xx.conf 配置文件中的内容改为对应的端口即可!最终得到的6个配置文件如下图所示:


当然啦,有一些机灵的小伙伴会发现这6个配置文件的内容中有一些相同的配置项!没错,对于这些配置项其实是可以将其抽取出来放在一共用的配置文件中的,然后再在每个子文件夹下的配置文件的内容末加入include指令,如“include redis.cluster.conf”等等,在这里就不演示了,各位小伙伴可以自行尝试!

(4)紧接着,我们打开DOS命令行界面,进入Redis的安装目录,准备安装并启动这6个节点对应的Redis服务,下面两行命令为“安装与卸载Redis节点服务”:

//安装命令
redis-server --service-install cluster/7100/redis.7100.conf --service-name redis7100
// 卸载命令
redis-server --service-uninstall --service-name redis7100

下面,我们对7100端口对应的Redis节点服务进行安装与启动,如下图所示:


同样的道理,我们安装并启动剩下的端口对应的Redis节点服务,如下图所示:


按住ctrl+r,输入 services.msc并回车,可以看到安装并启动成功的各个Redis节点服务,如下图所示:


最终我们可以发现,在安装Redis的根目录下新增了几个节点配置文件与持久化相关的文件,如下图所示:


至此,6个节点的Redis服务已经全部安装并且启动完毕!

(5)接下来,我们需要借助Ruby命令(gem)安装Redis的相关组件。开启另一个DOS命令行界面,然后cd到Ruby的安装目录,执行如下的命令:

gem install redis

回车之后,需要稍等一会儿,如果可以见到如下图的返回结果,则表示安装成功:


访问https://github.com/microsoftarchive/redis/tree/3.2/src ,下载redis-trib.rb,我们将基于此创建Redis的集群,如下图所示:


下载成功后,将其放进Redis的安装目录下,如下图所示:


之后,我们仍然在DOS命令行界面进入Redis的安装目录,并输入以下命令实现Redis的主从主从部署(记住:主在前,从在后):

redis-trib.rb create --replicas 1 127.0.0.1:7100 127.0.0.1:7200 127.0.0.1:7300 127.0.0.1:7101 127.0.0.1:7201 127.0.0.1:7301

回车后,输入yes,再次回车,会看到如下图的结果:


在上图中出现的那一大串东西,如 2ffe5c338a97c4a98f88359368ce3f7784d45f9c ,这个正是该Redis节点服务的ID,在调整集群时,经常会用到!

(6)之后,我们输入 redis-cli -c -h 127.0.0.1 -p 7100 ,连接集群中的某个Redis节点服务,然后再输入cluster nodes ,即可看到目前已经搭建成功的Redis集群的情况,如下图所示:


当然啦,你也可以利用RedisDesktopManager登录进去查看其集群状况!下面是集群特有的命令,供诸位作参考:

如果想要移除某个服务节点(从节点),可以采用如下命令即可:  

redis-trib.rb del-node <ip>:<port> 'node_id'   //单引号内放置节点id

(如果是移除主节点Master,如果主节点上有从节点,则要将从节点删除或转移到其它主节点上去,该主节点才能被删除;如果主节点上有槽(Slot),则要将槽删除或转移到其它主节点上去,该主节点才能被删除)

(7)最后,我们基于前面篇章搭建的Spring Boot2.0整合Redis的项目中,采用集群配置的方式连接到“Redis服务”!事实上,我们只需要调整application.properties的配置即可,其他的一律不需要动,调整后的Redis配置如下所示:

#redis 单机配置
#spring.redis.host=127.0.0.1
#spring.redis.port=6379
#spring.redis.password=

spring.redis.jedis.pool.min-idle=100
spring.redis.jedis.pool.max-idle=300
spring.redis.jedis.pool.max-active=500

#集群配置
spring.redis.cluster.nodes=127.0.0.1:7100,127.0.0.1:7200,127.0.0.1:7300,127.0.0.1:7101,127.0.0.1:7201,127.0.0.1:7301

最终将项目启动起来,如果期间没有任何问题,你再用之前文章的案例简单测试一下(或者执行一下现有的Java单元测试亦可),如果没有任何异常并且可以得到返回结果,那么就足以说明我们搭建的Redis集群环境没啥问题!

好了,本篇文章我们就介绍到这里了,建议各位小伙伴一定要照着文章提供的样例代码撸一撸,只有撸过才能知道这玩意是咋用的,否则就成了“空谈者”!

对Redis相关技术栈以及实际应用场景实战感兴趣的小伙伴可以前往Debug搭建的技术社区的课程中心进行学习观看:https://www.fightjava.com/web/index/course/detail/12

其他相关的技术,感兴趣的小伙伴可以关注底部Debug的技术公众号,或者加Debug的微信,拉你进“微信版”的真正技术交流群!一起学习、共同成长!

补充:

1、本文涉及到的相关的源代码可以到此地址,check出来进行查看学习:

https://gitee.com/steadyjack/SpringBootRedis

2、目前Debug已将本文所涉及的内容整理录制成视频教程,感兴趣的小伙伴可以前往观看学习:https://www.fightjava.com/web/index/course/detail/12

3、关注一下Debug的技术微信公众号,最新的技术文章、课程以及技术专栏将会第一时间在公众号发布哦!