在微服务、分布式系统架构盛行的时代,我们几乎阔以在项目中见到缓存中间件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 版,下载地址: )

二、搭建集群环境

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




windows 免安装redis redis免安装版_redis免安装版windows


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


windows 免安装redis redis免安装版_redis集群配置_02


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


windows 免安装redis redis免安装版_Redis_03


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


windows 免安装redis redis免安装版_redis_04


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


windows 免安装redis redis免安装版_windows 免安装redis_05


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

port 7100appendonly yesappendfilename "appendonly.7100.aof"maxmemory 200mbmaxmemory-policy allkeys-lrucluster-enabled yescluster-config-file nodes-7100.confcluster-node-timeout 15000cluster-slave-validity-factor 10cluster-migration-barrier 1cluster-require-full-coverage yes

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

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


windows 免安装redis redis免安装版_redis免安装版windows_06


当然啦,有一些机灵的小伙伴会发现这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节点服务进行安装与启动,如下图所示:


windows 免安装redis redis免安装版_redis_07


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


windows 免安装redis redis免安装版_Redis_08


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


windows 免安装redis redis免安装版_redis_09


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


windows 免安装redis redis免安装版_redis集群配置_10


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

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

gem install redis

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


windows 免安装redis redis免安装版_windows 免安装redis_11


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


windows 免安装redis redis免安装版_redis免安装版windows_12


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


windows 免安装redis redis免安装版_windows 免安装redis_13


之后,我们仍然在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,再次回车,会看到如下图的结果:


windows 免安装redis redis免安装版_windows 免安装redis_14


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

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


windows 免安装redis redis免安装版_redis_15


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

cluster info     //集群总揽cluster nodes   //列出集群当前已知的所有节点(node),以及这些节点的相关信息cluster meet       //将指定的节点(ip:port)添加到集群中,让它成为集群的一员cluster forget       //从集群中移除 node_id 节点cluster replicate    //将当前节点设置为 node_id 节点的从节点cluster saveconfig           //将节点的配置文件保存到硬盘里面cluster addslots  [slot ...]   //将一个或多个槽(slot)指派(assign)给当前节点cluster delslots  [slot ...]    //移除当前节点的一个或多个槽cluster flushslots   //移除当前节点的所有槽(删除集群内的最后一个主节点时,可用到)cluster setslot  node    //将槽 slot 指派给 node_id 节点。如果槽已经指派给另一个节点,那么先让另一个节点删除该槽,再进行指派cluster setslot  migrating    //将本节点的槽 slot 迁移到 node_id 节点中去cluster setslot  importing    //从 node_id 节点中导入槽 slot 到本节点来cluster setslot  stable   //取消对槽 slot 的导入(import)或者迁移(migrate)cluster keyslot  //计算键 key 应该被放置在哪个槽上cluster countkeysinslot  //返回槽 slot 目前包含的键值对数量cluster getkeysinslot  //返回 count 个 slot 槽中的键

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

redis-trib.rb del-node : '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=100spring.redis.jedis.pool.max-idle=300spring.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集群环境没啥问题!

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