欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

redis-cluster集群搭建

程序员文章站 2022-05-22 08:22:48
...

今天简单介绍一下redis-cluster集群搭建。 redis 最开始的时候,为了实现高可用,使用的主从模式,主从的模式的缺点是,一旦主挂了,没有办法自动的将“从 ”切换为“ 主”,这一过程需要人工干预,所以使用起来很不方便。后面有出现了哨兵模式,所谓哨兵,就相当于新增加一个哨兵角色,用来监视主从,当主挂了的时候,哨兵可以将“从” 自动的设置为 “主”。

redis从3的版本加入了cluster集群模式,redis-cluter是一个无中心化的集群方式,各个节点之间相互连接。客户端只需要连接其中的一个节点,就可以获取到整个集群中的数据。更多的原理就不说了,想了解的同学可以去查看一下资料。

好了,开始介绍集群的搭建,先说明一下,我们这里搭建集群所使用到的redis版本为redis5, redis5搭建集群的时候,比较简单,直接使用redis-cli 命令即可,相当于使用一条命令就能够完成集群的搭建,不需要安装ruby, 需要安装ruby的都是5以前的版本,需要使用(redis-trib.rb)  安装,所以如果你用的是redis5就不需要安装ruby了,这里说清楚,避免很多同学走弯路。

redis5的cluter集群,要求最少有3个master节点,并且,每个节点至少要有一个备份节点。所以搭建这个集群至少需要6个redis实例(注意,这里说的是实例,相当于你需要启动至少6个redis服务,而不一定是6台机器,因为你可以在一台机器上启动多个实例,只需要保证他们的端口号不一样就行了);好的,我们以三台机器为例,由于需要6个实例,所以,我的三台机器上,每台机器需要启动两个实例,那么我们使用不同的端口号进行区分。当然你也可以使用6台机器来实现,这样,每台机器上只需要启动一个实例即可。

我的三台机器ip分别是: 192.168.1.11, 192.168.1.13,192.168.1.14; 三台机器都需要安装redis,我使用的版本是redis-5.0.4. 安装的过程,这里这不说了,很简单,直接下载包,解压,make install安装即可。

由于每台机器上需要启动两个实例,所以我们用不同端口号区分,六个实例分别是: 192.168.1.11:6379,192.168.1.11:6380,192.168.1.13:6379,192.168.1.13:6380,192.168.1.14:6379,192.168.1.14:6380

通过实例已经看得很明显了,每台机器两个实例,端口号分别是6379,6380,那么接下来我们来修改配置文件.在redis的主目录下有一个redis.conf,我们来修改一下,为了防止出现问题,先备份一下  cp redis.conf redis.conf.bak (希望大家能养成这个好习惯)

接下来编辑redis.conf, 需要修改几个地方:

# 打开aof备份方式,不清楚aof自行百度,面试经常问rdb和aof区别
appendonly yes

# 大概800多行,将这个值改为true, 代表支持集群
cluster-enabled yes

#后台启动,否则ctrl+c redis直接退出了
daemonize yes

# 关闭保护模式
protected-mode no

#指定数据目录
dir /usr/local/redis-cluster/6379/

别的也可以改,比如日志文件地址,工作目录等,但是不改也行,这两个必须改。

这个是6379实例的配置文件,但是由于我们还需要一个6380的实例,所以拷贝一个

cp redis.conf redis-slave.conf

redis-slave.conf作为8380实例的配置文件,所以有一个地方必须要改的就是端口号。编辑redis-slave.conf,将端口号改为6380:

# 大概是30多行,基本位于最前面的位置。

port  6380

dir /usr/local/redis-cluster/6380/

接下来启动这两个实例:

redis-server redis.conf
redis-server redis-slave.conf

执行完毕后,查看一下两个服务有没有都起来:   ps -ef | grep redis

如果出现如下,代表启动成功

redis-cluster集群搭建

我在执行的时候,出现了一个这个报错,(不是所有机器都出现,有的机器出现)

Sorry, the cluster configuration file nodes.conf is already used by a different Redis Cluster node. Please make sure that different nodes use different cluster configuration files

如果出现了这个,什么意思呢,就说不同的几点要使用不通的配置文件,而一个配置文件已经被使用了。很明确,一般是在第一个实例已经启动,启动第二个实例的时候出现。 怎么解决呢,说明占用了同一个文件,那么我们拷贝一份即可。拷贝哪个文件呢,报错的时候也已经给了,就是nodes.conf, 就是说两个实例不能使用同一个nodes.conf ,好的,那好办,我们复制一个nodes.conf , 让第二个实例指定副本即可 ;  cp nodes.conf nodes-slave.conf。复制完了以后,要让第二个节点使用这个文件,需要修改redis-slave.conf  , 将里面的 cluster-config-file nodes-slave.conf  指向为nodes-slave.conf即可解决了。

同理,将另外两台机器,也按照上面的方式,进行配置并启动,保证每台机器上都有6379和6380两个服务启动。

都启动后,开始搭建集群,搭建集群的时候,我们只需要任意一个节点上执行即可,不要每个节点执行一遍,总共就执行一遍。命令如下: 

redis-cli --cluster create 192.168.1.11:6379 192.168.1.11:6380 192.168.1.13:6379 192.168.1.13:6380 192.168.1.14:6379 192.168.1.14:6380 --cluster-replicas 1

最后一个   --cluster-replicas 1 代表每个master有一个备份节点。

redis-cluster集群搭建

点击yes即可,这样整个集群就搭建完成了。 然后可以使用redis-cli 验证一下  cluster info  和 cluster nodes命令。

redis-cluster集群搭建

redis-cluster集群搭建

集群搭建成功后,可以使用springboot集成redis的集群,实现缓存,分布式锁等功能。有兴趣的同学可以关注我的github,上面有相关案例: https://github.com/lsqingfeng/action