首页 > 编程知识 正文

redis集群数据分布,redis集群搭建

时间:2023-05-05 15:45:05 阅读:50018 作者:3801

redis集群是官方redis集群的实现,本文是集群构建的实践篇

一、手动构建

redis官方运行了redis-trib.rb命令来实现redis的构建。 但是,为了了解原理,首先手动构建不使用官方命令。 如果大家想快速制作的话,可以直接跳到2。

1、准备

我们的例子是单体导入集群,实际的工作状况由不同的机器构建。 另一方面,为了提高数据容量以确保高可用性,实际上是在不同的机器上构建的。

因此,这种模式为单个计算机提供6个配置文件,从6个不同的端口启动6个redis、3主3从站。

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

1 )创建测试目录和文件

在redis目录下测试群集目录:

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

将配置文件放置在conf目录中。 文件的内容稍后创建。

数据文件和redis持久化文件rdb文件位于data目录中,日志文件位于logs中,脚本文件位于他们自己编写的脚本文件中。 后述

2 )从conf文件、cd创建conf文件、vim redis-7000.conf

端口7000

daemonize是

dir '/opt/software/redis-4.0.9/cluster-test/data '

日志文件'/opt/software/redis-4.0.9/cluster-test/logs/7000.log '

# db文件名不能配置为路径

dbfilename 'dump-7000.rdb '

已启用集群是

群集配置文件节点- 7000.conf

#每个节点是否都必须可用才能使群集可用? 关闭

集群-请求-全覆盖否

也就是说:

毫无疑问,在独立的情况下构建集群时,端口启动的端口只能通过端口来区分

daemonize表示必须开始后台进程。 否则,客户端将关闭并关闭redis

dir、logfile是刚才说的数据文件和日志文件的配置,根据每个人的安装路径进行配置

dbfilename会自动在data目录下生成,必须写下文件名

集群启用是以集群方式启动

群集配置文件这是节点信息配置文件,它是自动生成的

为了最后看到评论,最好设定为no。

就是复制和修改文件

sed ' s/7000/7001/g ' redis-7000.conf redis-7001.conf

7002、7003、7004、7005等

2、启动集群

一旦用配置文件启动群集,我就像这样启动,因为我还在conf目录下

启动后查看进程(如果您不熟悉基本的linux命令,请查看此处)。

说明开始了

即使看到插槽信息,也没有一个是因为我们还没有分配插槽。 稍后分配

data目录中开始有文件:

这些文件的内容:

与您在此命令中看到的相似:

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

3、集群之间握手,一个集群中的机器meet其他机器,这个集群中的其他机器也可以感知到刚才meet的集群

使用以下命令:

././src/redis-CLI-p 7000集群meet 127.0.0.17001

在7000meet上使用了7001和7002。 7002没有meet7001,但他也感知到了7001。 用7000meet继续保留所有机器

所有计算机都感知到彼此的存在,群集中群集的数据增加到6。

4、设置复印件

为了确保高可用性,将7003设置为7000个从节点,将7004设置为7001个从节点,将7005设置为7002个从节点。

././src/redis-CLI-p 7003 clusterreplicatef 836 a 783 a1 ADF 21 f 93 b 16 e2EC 755 aefc 072 b 7a af

请注意,这里使用的是id

这样类推:

从节点设定成功。

5、分配slots

1 )说明

到目前为止,由于slots为空且未分配slots,因此群集不可用


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

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

2)编写脚本

vim ../scripts/addslots.sh 


3)分配槽


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

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

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

4)验证集群

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


并且集群处于可用状态


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



二、使用官方的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 badmf/ruby /usr/local/badmf

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

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


同理执行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,看到如下,成功


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

ERROR:  Loading command: install (LoadError)      cannot load such file -- zlib  ERROR:  While executing gem ... (NoMethodError)  undefined method `invoke_with_build_args' for nil:NilClass 解决办法看这里,或者应该预先安装好(我是回去再把/usr/local/badmf/ruby这个文件夹的文件删除了再安装依赖库,然后重复(2)、(3)步骤就可以了)


4)校验安装

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


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

./redis-trib.rb,如下:


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

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

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

1)创建测试目录和文件

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


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


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


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

也就是:


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/badmf/

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

方便以后使用


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


4、开启集群

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

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

输入redis-trib.rb


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

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-trib.rb还是比较高效和准确,由于是单机,所以会有一个警告,说是主从同一个机器,测试环境不用管。提示你是否接受配置,填入yes。看到如下


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


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

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





版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。