Redis集群部署的过程详解

 更新时间:2024年06月03日 09:01:43   作者:陈橘又青  
Redis集群是Redis官方推出的分布式解决方案,它允许将数据分布在多个Redis节点中,从而提高Redis的性能和可扩展性,本文给大家介绍了Redis集群部署的过程步骤,需要的朋友可以参考下

Redis集群部署

1 Redis各节点部署

使用源码安装各节点,不过与非cluster方式不同的是,配置文件中需启动cluster相关的配置。

因本次为伪分布式部署,生产环境部署时建议至少3台机器部署(其中每台机器1主1从)

ipport
192.168.56.1017000
192.168.56.1017001
192.168.56.1017002
192.168.56.1017003
192.168.56.1017004
192.168.56.1017005

1.1 启动cluster各节点

创建数据目录

mkdir -p  /data/redis/cluster/{7000,7001,7002,7003,7004,7005}

配置文件中主要修改如下内容,其他的可按需调整,也可保持默认值,各节点中注意修改对应的端口号

bind 192.168.56.101
port 7000
daemonize yes
pidfile /data/redis/cluster/7000/redis_7000.pid
logfile "/data/redis/cluster/7000/redis_7000.log"
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
cluster-enabled yes
cluster-config-file nodes-7000.conf     #注意此文件自动生成,且初始化时不要有和此重名的文件
cluster-node-timeout 5000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes
cluster-slave-no-failover no

启动各节点,建议用redis用户启动

useradd redis
chown -R  redis:redis  /data/redis/
su - redis
cd /data/redis/cluster/7001
cp /data/redis/cluster/7000/redis.conf . 
sed -i "s#7000#7001#g" redis.conf
redis-server redis.conf

其他节点和7001类似启动,启动后进程中会标记redis节点以cluster模式启动

2. 按照依赖

因redis5之前版本前cluster安装依赖ruby,且版本要求比较苛刻,本次安装的版本redis4.0.14,依赖的ruby版本为>=ruby2.4,因此大家安装时可以安装高版本的ruby,本次使用的是ruby2.7.5版本

2.1 编译安装ruby

下载ruby,建议从官网下载源码进行编译安装https://www.ruby-lang.org/en/downloads/

tar -zxvf  ruby-2.7.5.tar.gz
cd ruby-2.7.5 
./configure
make  
make install

安装完毕后,检查ruby以及gem版本

2.2 安装openssl-devel及zlib-devel

安装完ruby后,使用gem安装redis包,此时如果没有安装openssl 则回报如下错误

gem install  redis
ERROR:  Loading command: install (LoadError)
    cannot load such file -- openssl
ERROR:  While executing gem ... (NoMethodError)
    undefined method `invoke_with_build_args' for nil:NilClass

按照过程如下:

yum方式先安装openssl

 yum install openssl-devel -y

再进入ruby源码目录中的ext目录下,找到openssl目录,进入后进行安装

cd ruby-2.7.5/ext/openssl
ruby extconf.rb 
make
make install

zlib-devel包如报错,也可同上方式处理。

在执行make,若出现如下报错:

 make: *** 没有规则可以创建“ossl_asn1.o”需要的目标“/include/ruby.h” 停止。

可以在Makefile顶部中的增加 top_srcdir = …/…

再次执行 make && make install

2.3 gem安装redis

 gem install redis

3. 初始化redis集群

相关依赖安装完成后,即可初始化redis集群,命令及过程如下:

[redis@localhost redis-4.0.14]$ src/redis-trib.rb create --replicas 1 192.168.56.101:7000 192.168.56.101:7001 192.168.56.101:7002 192.168.56.101:7003 192.168.56.101:7004 192.168.56.101:7005
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.56.101:7000
192.168.56.101:7001
192.168.56.101:7002
Adding replica 192.168.56.101:7004 to 192.168.56.101:7000
Adding replica 192.168.56.101:7005 to 192.168.56.101:7001
Adding replica 192.168.56.101:7003 to 192.168.56.101:7002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: cd6663924f0c31e6b60b815dca9cb7ea863f5573 192.168.56.101:7000
   slots:0-5460 (5461 slots) master
M: abc1f43c9a4e8813e9da15433ac66cd185dc39fe 192.168.56.101:7001
   slots:5461-10922 (5462 slots) master
M: 43fa53cec1ae164f784e5d439aaf80ee2f7e35af 192.168.56.101:7002
   slots:10923-16383 (5461 slots) master
S: 6ffcd16f1d445b0091c6239bc0988fb8a77fac96 192.168.56.101:7003
   replicates cd6663924f0c31e6b60b815dca9cb7ea863f5573
S: c523846d491f8df0bc97033b025b0d24375a13f8 192.168.56.101:7004
   replicates abc1f43c9a4e8813e9da15433ac66cd185dc39fe
S: 905dc9de7e074c282aab44b4ed5680a2020bcf4c 192.168.56.101:7005
   replicates 43fa53cec1ae164f784e5d439aaf80ee2f7e35af
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join....
>>> Performing Cluster Check (using node 192.168.56.101:7000)
M: cd6663924f0c31e6b60b815dca9cb7ea863f5573 192.168.56.101:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 43fa53cec1ae164f784e5d439aaf80ee2f7e35af 192.168.56.101:7002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: c523846d491f8df0bc97033b025b0d24375a13f8 192.168.56.101:7004
   slots: (0 slots) slave
   replicates abc1f43c9a4e8813e9da15433ac66cd185dc39fe
S: 6ffcd16f1d445b0091c6239bc0988fb8a77fac96 192.168.56.101:7003
   slots: (0 slots) slave
   replicates cd6663924f0c31e6b60b815dca9cb7ea863f5573
M: abc1f43c9a4e8813e9da15433ac66cd185dc39fe 192.168.56.101:7001
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 905dc9de7e074c282aab44b4ed5680a2020bcf4c 192.168.56.101:7005
   slots: (0 slots) slave
   replicates 43fa53cec1ae164f784e5d439aaf80ee2f7e35af
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

至此,redis集群初始化完毕,各节点slot范围及角色也打印出来了

Redis4 Cluster部署

1、安装redis集群节点

因本次为伪分布式部署,生产环境部署时建议至少3台机器部署(其中每台机器1主1从),依旧和redis4.0.14的方式一样部署

**ip ****port **
192.168.56.1017000
192.168.56.1017001
192.168.56.1017002
192.168.56.1017003
192.168.56.1017004
192.168.56.1017005

1.1 启动cluster各节点

创建数据目录

mkdir -p  /data/redis/cluster/{7000,7001,7002,7003,7004,7005}

配置文件中主要修改如下内容,其他的可按需调整,也可保持默认值,各节点中注意修改对应的端口号

bind 192.168.56.103
port 7000
daemonize yes
pidfile /data/redis/cluster/7000/redis_7000.pid
logfile "/data/redis/cluster/7000/redis_7000.log"
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
cluster-enabled yes
cluster-config-file nodes-7000.conf     #注意此文件自动生成,且初始化时不要有和此重名的文件
cluster-node-timeout 5000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes
cluster-slave-no-failover no

启动各节点,建议用redis用户启动

useradd redis
chown -R  redis:redis  /data/redis/
su - redis
cd /data/redis/cluster/7001
cp /data/redis/cluster/7000/redis.conf . 
sed -i "s#7000#7001#g" redis.conf
redis-server redis.conf

其他节点和7001类似启动,启动后进程中会标记redis节点以cluster模式启动

2. 初始化集群

redis5.x之后的版本初始化集群相当便捷,命令及过程如下

redis-cli --cluster create --cluster-replicas 1 192.168.56.103:7000 192.168.56.103:7001 192.168.56.103:7002 192.168.56.103:7003 192.168.56.103:7004 192.168.56.103:7005
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.56.103:7004 to 192.168.56.103:7000
Adding replica 192.168.56.103:7005 to 192.168.56.103:7001
Adding replica 192.168.56.103:7003 to 192.168.56.103:7002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 84ea774c08450db01bf5a518e3b9e55fd26d4d34 192.168.56.103:7000
   slots:[0-5460] (5461 slots) master
M: eb98e53273fd348deb5eabcc6bfffc20484749b1 192.168.56.103:7001
   slots:[5461-10922] (5462 slots) master
M: e059d418c11401189558d0f33bd5658297c10939 192.168.56.103:7002
   slots:[10923-16383] (5461 slots) master
S: 23eed1c27ad11c685e5a226e2f82d5c0b6384c79 192.168.56.103:7003
   replicates e059d418c11401189558d0f33bd5658297c10939
S: cfa2549ea7782bb4f0ed6d45e9e3704a7d38d540 192.168.56.103:7004
   replicates 84ea774c08450db01bf5a518e3b9e55fd26d4d34
S: c3e14c4139bfa88af03ea97679715f051a122806 192.168.56.103:7005
   replicates eb98e53273fd348deb5eabcc6bfffc20484749b1
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 192.168.56.103:7000)
M: 84ea774c08450db01bf5a518e3b9e55fd26d4d34 192.168.56.103:7000
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 23eed1c27ad11c685e5a226e2f82d5c0b6384c79 192.168.56.103:7003
   slots: (0 slots) slave
   replicates e059d418c11401189558d0f33bd5658297c10939
M: eb98e53273fd348deb5eabcc6bfffc20484749b1 192.168.56.103:7001
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: c3e14c4139bfa88af03ea97679715f051a122806 192.168.56.103:7005
   slots: (0 slots) slave
   replicates eb98e53273fd348deb5eabcc6bfffc20484749b1
S: cfa2549ea7782bb4f0ed6d45e9e3704a7d38d540 192.168.56.103:7004
   slots: (0 slots) slave
   replicates 84ea774c08450db01bf5a518e3b9e55fd26d4d34
M: e059d418c11401189558d0f33bd5658297c10939 192.168.56.103:7002
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

看到如下结果,代表成功配置并分配slot完成

查看各节点信息也可以用如下命令

[redis@localhost 7005]$ redis-cli -h 192.168.56.103 -p 7000 cluster nodes
23eed1c27ad11c685e5a226e2f82d5c0b6384c79 192.168.56.103:7003@17003 slave e059d418c11401189558d0f33bd5658297c10939 0 1646118171000 4 connected
eb98e53273fd348deb5eabcc6bfffc20484749b1 192.168.56.103:7001@17001 master - 0 1646118171604 2 connected 5461-10922
c3e14c4139bfa88af03ea97679715f051a122806 192.168.56.103:7005@17005 slave eb98e53273fd348deb5eabcc6bfffc20484749b1 0 1646118171000 6 connected
cfa2549ea7782bb4f0ed6d45e9e3704a7d38d540 192.168.56.103:7004@17004 slave 84ea774c08450db01bf5a518e3b9e55fd26d4d34 0 1646118170000 5 connected
e059d418c11401189558d0f33bd5658297c10939 192.168.56.103:7002@17002 master - 0 1646118169590 3 connected 10923-16383
84ea774c08450db01bf5a518e3b9e55fd26d4d34 192.168.56.103:7000@17000 myself,master - 0 1646118171000 1 connected 0-5460

以上就是Redis集群部署的过程详解的详细内容,更多关于Redis集群部署的资料请关注脚本之家其它相关文章!

相关文章

  • 使用Redis如何设置永久有效

    使用Redis如何设置永久有效

    这篇文章主要介绍了使用Redis如何设置永久有效,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Redis中Key过期时间的设置与应用方式

    Redis中Key过期时间的设置与应用方式

    文章主要介绍了Redis中设置和管理Key过期时间的多种命令,包括EXPIRE、PEXPIRE、EXPIREAT、PEXPIREAT、SET命令结合EX或PX参数、SETEX命令,以及获取剩余过期时间的TTL和PTTL命令,最后通过缓存、会话管理和分布式锁等应用场景展示了这些命令的实际应用
    2025-11-11
  • Redis常用命令集的使用

    Redis常用命令集的使用

    作为一名Redis开发者或管理员,熟练掌握Redis的常用命令是必不可少的,本文主要介绍了Redis常用命令集的使用,具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • redis执行lua脚本的实现方法

    redis执行lua脚本的实现方法

    redis在2.6推出了脚本功能,允许开发者使用Lua语言编写脚本传到redis中执行。本文就介绍了redis执行lua脚本的实现方法,感兴趣的可以了解一下
    2021-11-11
  • 防止redis内存溢出优化方法

    防止redis内存溢出优化方法

    本文主要介绍了防止redis内存溢出优化方法,包括使用maxmemory-policy选项、设置数据过期时间和配置Redis集群等,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • Windows安装Redis并添加本地自启动服务的实例详解

    Windows安装Redis并添加本地自启动服务的实例详解

    这篇文章主要介绍了Windows安装Redis并添加本地自启动服务的实例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Redis的数据存储及String类型的实现

    Redis的数据存储及String类型的实现

    这篇文章主要介绍了Redis的数据存储及String类型的实现,redis作为k-v数据存储,因查找和操作的时间复杂度都是O(1)和丰富的数据类型及数据结构的优化,了解了这些数据类型和结构更有利于我们平时对于redis的使用,需要的朋友可以参考下
    2022-10-10
  • Redis解决优惠券秒杀应用案例

    Redis解决优惠券秒杀应用案例

    这篇文章主要介绍了Redis解决优惠券秒杀应用案例,本文先讲了抢购问题,指出其中会出现的多线程问题,提出解决方案采用悲观锁和乐观锁两种方式进行实现,然后发现在抢购过程中容易出现一人多单现象,需要的朋友可以参考下
    2022-11-11
  • Redis缓存预热的概念及方法详解

    Redis缓存预热的概念及方法详解

    文章解释了什么是缓存预热,为什么逻辑过期必须预热,并提供了三种简单的方法来实现缓存预热,同时介绍了saveShop2Redis方法的作用和角色,感兴趣的朋友跟随小编一起看看吧
    2026-04-04
  • Redis的缓存使用技巧分享(商户查询缓存)

    Redis的缓存使用技巧分享(商户查询缓存)

    本文介绍了缓存的原理和常见问题及其解决方案,包括缓存更新策略、缓存穿透、缓存雪崩和缓存击穿等,通过实际案例和代码示例,展示了如何在后端开发中有效利用缓存提高性能和降低数据库压力
    2026-02-02

最新评论