zl程序教程

您现在的位置是:首页 >  其他

当前栏目

redis-cluster集群搭建

2023-04-18 12:32:25 时间

今天简单介绍一下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安装即可。

单机安装 可参考:https://blog.csdn.net/lsqingfeng/article/details/107359076

由于每台机器上需要启动两个实例,所以我们用不同端口号区分,六个实例分别是: 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

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

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

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有一个备份节点。

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

集群搭建成功后,可以使用springboot集成redis的集群,实现缓存,分布式锁等功能。