redis集群搭建之官方redis cluster 搭建实践「建议收藏」

rediscluster是官方的redis集群实现,本篇文章为搭建集群实践篇一、手动搭建redis官方已经redis-trib.rb命令来给我们实现redis搭建了。但是为了了解原理,首先我们来手动搭建不使用官方的命令。如果大家想快速搭建,可以直接跳到二。1、准备我们这个例子是在单机上部署集群,实际的工作情况会在不同的机器上搭建,一方面为了保证高可用也是为了扩大数据的容量所以实际中会在不同的机器…

大家好,又见面了,我是你们的朋友全栈君。

redis cluster是官方的redis集群实现,本篇文章为搭建集群实践篇

一、手动搭建

redis官方已经redis-trib.rb命令来给我们实现redis搭建了。但是为了了解原理,首先我们来手动搭建不使用官方的命令。如果大家想快速搭建,可以直接跳到二。

1、准备

我们这个例子是在单机上部署集群,实际的工作情况会在不同的机器上搭建,一方面为了保证高可用也是为了扩大数据的容量所以实际中会在不同的机器上搭建。

所以在单机器上准备6个配置文件,通过6个不同的端口启动六个redis,3主3从的模式。

端口7000 的从节点是7003,端口7001的从节点是7004,端口7002的从节点是7005。

1)创建测试目录和文件

在redis的目录下测试cluster的目录:

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

在cluster-test目录下面创建以下目录:

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

conf目录放置一下配置文件(文件内容待会会教大家创建):

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

data 目录会放置数据文件和redis持久化文件rdb文件,logs放置日志文件,scripts里面放置我们自己写的脚本文件,后面也会介绍

2)创建conf文件,cd到conf文件,vim redis-7000.conf

port 7000

daemonize yes

dir “/opt/software/redis-4.0.9/cluster-test/data”

logfile “/opt/software/redis-4.0.9/cluster-test/logs/7000.log”

#dbfilename不能配置为路径

dbfilename “dump-7000.rdb”

cluster-enabled yes

cluster-config-file nodes-7000.conf

#是否需要每个节点都可用,集群才算可用,关闭

cluster-require-full-coverage no

也就是:

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

port启动的端口,不用说,单机下面搭建集群只能以端口区分

daemonize表示需要以后台进程启动个,否则客户端关闭redis就关闭了

dir,logfile就是刚刚说的数据文件和日志文件的配置,根据每个人安装路径的不同去配置

dbfilename 到时候会自动生成到data目录下面,需要写一个文件名

cluster-enabled yes以集群方式启动

cluster-cluster-config-file 这个是nodes信息配置文件,也是自动生成的

最后一个看注释,最好设置为no。

然后就是把文件都复制一份并修改

sed “s/7000/7001/g” redis-7000.conf >redis-7001.conf

7002,7003,7004,7005以此类推

2、启动集群

一次通过配置文件启动集群,我还在conf目录下,所以这样启动

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

启动了之后查看进程(如果对基本的linux命令不熟悉,可以看这里

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

说明都启动起来了

查看槽信息,都没有,是因为我们还没有分配槽,稍后分配

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

查看data目录已经开始有文件了:

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

这些文件的内容:

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

和用这个指令查看的类似:

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

查看集群信息,集群处于失败状态,并且只感应到自己一个在集群里面,slots也没有分配:

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

3、集群之间相互握手,只要一个在集群里面的机器meet了其他机器,这个集群里的其他机器也能感知到刚刚meet的集群

使用如下命令:

../../src/redis-cli -p 7000 cluster meet 127.0.0.1 7001

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

用了7000meet了7001和7002,虽然7002没有meet7001,但是他也感知了7001。继续用7000meet剩下所有的机器

所有的机器都感知彼此的存在了,并且集群里面集群的数据增加到了6:

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

4、设置副本

为了保证高可用,把7003设置为7000的从节点,把7004设置为7001的从节点,把7005设置为7002的从节点。

../../src/redis-cli -p 7003 cluster replicate f836a783a1adf21f93b16e2ec755aefc072b7aaf

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

需要注意的是这里使用的是id

以此类推:

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

从节点设置成功。

5、分配slots

1)说明

到目前为止,slots还是空的,并且集群处于不可用状态,因为没有分配slots:

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

redis cluster一共有16383个槽,现在分配到三个

7000的槽0~5461,7001的槽5462~10922,7002的槽10923~16383

2)编写脚本

vim ../scripts/addslots.sh 

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

3)分配槽

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

即sh ../scripts/addslots.sh 0 5461 7000以此类推

sh ../scripts/addslots.sh 5462 10922 7001

sh ../scripts/addslots.sh 10923 16383 7002

4)验证集群

槽已经根据集群和主从分配了

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

并且集群处于可用状态

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

自此,手动搭建集群成功。关闭之后下次启动还可以是集群状态,因为信息已经持久化到dump文件里面,也就是data目录下存放的dump文件:

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

二、使用官方的redis-trib.rb搭建集群

使用官方的redis-trib.rb搭建集群更加简单,而请更加高效、准确,建议生产环境下使用,步骤如下

1、搭建ruby环境

redis-trib.rb这个命令后面是rb的,所以一看就是需要有ruby环境

1)安装ruby前置库

yum install zlib-devel

yum install zlib-devel

如果不安装,后面会遇到这个问题:

ERROR:  While executing gem … (NoMethodError)     undefined method `invoke_with_build_args’ for nil:NilClass

2)安装ruby

下载:wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.7.tar.gz

解压到特定目录:tar -zxvf ruby-2.3.7.tar.gz -C /opt/software

进入目录:cd /opt/software/ruby-2.3.7

配置:./configure –prefix=/usr/local/ruby(把解压的源文件放在/usr/local/ruby)

编译:make

安装:make install

进入目录:cd /usr/local/ruby

让ruby添加到用户的访问变量中:cp bin/ruby /usr/local/bin

让gem添加到用户的访问变量中 : cp /usr/local/ruby/bin/gem /usr/local/bin

输入ruby -v,看到如下信息说明成功:

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

同理执行gem -v

3)安装ruby的redis的客户端

查看redis客户端的所有版本https://rubygems.org/gems/redis/versions

找到redis,点进去,“下载”在右下角,点击复制链接地址

下载:wget https://rubygems.org/downloads/redis-4.0.1.gem

安装:gem install -l redis-4.0.1.gem,看到如下,成功

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

ps:如果前面安装ruby没有安装zlib-devel 和 openssl-devel,会出现下面的错误

  1. ERROR:  Loading command: install (LoadError)  
  2.     cannot load such file — zlib  
  3. ERROR:  While executing gem … (NoMethodError)  
  4. undefined method `invoke_with_build_args’ for nil:NilClass 

解决办法看
这里,或者应该预先安装好(我是回去再把/usr/local/bin/ruby这个文件夹的文件删除了再安装依赖库,然后重复(2)、(3)步骤就可以了)

4)校验安装

gem list — check redis gem,(注意“–”之后有一个空格),看到如下信息,说明成功!

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

再来到redis-trib.rb这个命令这里

./redis-trib.rb,如下:

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

2、准备redis目录和配置文件(同一的第1步类似,不需要scripts目录,如果在一中手动实现过,把data和logs目录下的文件删除)

在单机器上准备6个配置文件,通过6个不同的端口启动六个redis,3主3从的模式。

端口7000 的从节点是7003,端口7001的从节点是7004,端口7002的从节点是7005。

1)创建测试目录和文件

在redis的目录下测试cluster的目录:

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

在cluster-test目录下面创建以下目录:

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

conf目录放置一下配置文件(文件内容待会会教大家创建):

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

data 目录会放置数据文件和redis持久化文件rdb文件,logs放置日志文件

2)创建conf文件,cd到conf文件,vim redis-7000.conf

port 7000

daemonize yes

dir “/opt/software/redis-4.0.9/cluster-test-trib/data”

logfile “/opt/software/redis-4.0.9/cluster-test-trib/logs/7000.log”

#dbfilename不能配置为路径

dbfilename “dump-7000.rdb”

cluster-enabled yes

cluster-config-file nodes-7000.conf

#是否需要每个节点都可用,集群才算可用,关闭

cluster-require-full-coverage no

也就是:

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

port启动的端口,不用说,单机下面搭建集群只能以端口区分

daemonize表示需要以后台进程启动个,否则客户端关闭redis就关闭了

dir,logfile就是刚刚说的数据文件和日志文件的配置,根据每个人安装路径的不同去配置

dbfilename 到时候会自动生成到data目录下面,需要写一个文件名

cluster-enabled yes以集群方式启动

cluster-cluster-config-file 这个是nodes信息配置文件,也是自动生成的

最后一个看注释,最好设置为no。

然后就是把文件都复制一份并修改

sed “s/7000/7001/g” redis-7000.conf >redis-7001.conf

7002,7003,7004,7005以此类推

3、依次启动redis

先把redis-cli 和redis-server 复制到命令搜索地方

cp ../../src/redis-cli /usr/local/bin/

cp ../../src/redis-server /usr/local/bin/

方便以后使用

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

查看redis-server情况,还是为启动的状态

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

4、开启集群

我先把redis-trib.rb 拷贝到bin目录下

cp ./redis-trib.rb /usr/local/bin/,以后就随地可以使用redis-trib.rb命令了

输入redis-trib.rb

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

我们要创建集群,一键的那种

redis-trib.rb create –replicas 1 127.0.0.1:7000  127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 

127.0.0.1:7004 127.0.0.1:7005 

(replicas 1表示每个节点有一个从节点,redis-trib.rb会自动分配,如果参数不符合,会报错)

出现下面:

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

可以看到自动分配了从节点,并且试图优化,说明官方的redis-trib.rb还是比较高效和准确,由于是单机,所以会有一个警告,说是主从同一个机器,测试环境不用管。提示你是否接受配置,填入yes。看到如下

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

提示槽位已经自动添加了,我们查看一下

redis集群搭建之官方redis cluster 搭建实践「建议收藏」

说明节点已经添加,并且槽位已经分配好了,集群也处于可用的状态。

redis cluster 启动成功之后,还会有很多问题,例如节点伸缩这个很重要的运维问题,后面我会用另外一篇文章介绍redis集群节点伸缩。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126982.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月17日 上午9:40
下一篇 2022年4月17日 上午10:00


相关推荐

  • 【BIM入门实战】最新《建筑制图与识图》复习题带参考答案(一)

    【BIM入门实战】最新《建筑制图与识图》复习题带参考答案(一)文章目录一 单选题二 填空题三 简答题四 绘图题五 阅读总平面图 完成问题一 单选题 1 在图纸右下角用以说明设计单位 图名 设计负责人等内容的表格为 B A 会签栏 B 图标 C 图框 D 图纸目录 2 正面投影与侧面投影应保持 B 的关系 A 长度相等且对正 B 宽度相等 C 高度相等且平齐 D 长 宽 高都相等 3 定位轴线采用 A 线型 A 细点划线 B 虚线 C 实线 D 波浪线 4 画局部剖面图时 投影部分与剖切部分的分界线为 A A 波

    2026年3月19日
    2
  • Linux:无法删除文件,不允许操作

    Linux:无法删除文件,不允许操作文章目录问题描述解决问题命令详解 lsattr 命令 chattr 命令问题描述我的是 centos8 0 系统 今天在删除文件时 删除失败 提示无法删除 不允许操作 如下首先查看文件权限发现文件没有执行权限 添加权限 如下失败 不允许操作解决问题查看文件是否被禁止操作 如下所示简单解释以下 ia 参数 后面附上命令详解 a AppendOnly 系统只允许在这个文件之后追加数据 不允许任何进程覆盖或截断这个文件 如果目录具有这个属性 系统将只允许在这个目录下建立和修改文件 而不允许

    2025年10月18日
    8
  • maven 配置阿里云仓库与公司私服

    maven 配置阿里云仓库与公司私服简述 maven 公司私服与阿里云的配置 profiles profile id maven release id repositories 公司私服 repositories profile profile id maven snapshot id profile profiles

    2026年3月18日
    2
  • AI解锁Midjourney高级指令全攻略

    AI解锁Midjourney高级指令全攻略

    2026年3月15日
    5
  • VSCode Cline Claude 4.0集成指南:2025最全教程

    VSCode Cline Claude 4.0集成指南:2025最全教程

    2026年3月15日
    2
  • 画廊效果的ViewPager实现(附带无限自动轮播)[通俗易懂]

    画廊效果的ViewPager实现(附带无限自动轮播)[通俗易懂]废话不多说,先上效果图根据效果所示,第一步实现适配器,完成无限循环首先做数据上的处理publicstaticclassLoopViewPagerAdapterextendsPagerAdapter{ …..LoopViewPagerAdapter(Contextcontext,ArrayList<Integer>imgIds){…

    2022年6月12日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号