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集群节点伸缩。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • idea2021.5.5激活码[在线序列号]

    idea2021.5.5激活码[在线序列号],https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • Centos 7 DNS服务器配置

    Centos 7 DNS服务器配置实验三、DNS的管理配置与应用1实验目的(1)了解DNS(域名系统)的工作原理。(2)掌握Linux操作系统中DNS组件安装。(3)掌握Linux操作系统中DNS服务的配置方法。2实验内容(1)在LinuxCentos7.6操作系统中安装DNS组件并配置DNS服务。3实验原理计算机在网络上进行通讯时只能识别如“203.51.0.73”之类的IP地址,而互联网上的网站无穷多,我们很难记住各网站枯燥的IP地址号,这就产生了方便人们记忆的域名管理系统DNS:DomainNam

  • Python之matplotlib库建议收藏

    知识结构pyplot.plot()流程1._axes.py中plot()函数说明a.调用说明plot([x],y,[fmt],data=None,**kwargs)plot([x

    2021年12月19日
  • Python使用pip安装/卸载包「建议收藏」

    Python使用pip安装/卸载包「建议收藏」不一定需要专业编辑器,原生Python也能安装包,使用pip就可以了。1、首先确认电脑上已安装的Python有无pip程序。打开Python文件所在的位置,“Scripts”文件夹,查看。2、若无pip,则到官方下载最新版Python安装包,运行安装包,Python会自动升级,升级完毕后再次查看,pip程序已经存在了。Python官方下载地址进入某一个版本的下载页面,根据自己的需要下载…

    2022年10月16日
  • 【JavaScript】想在JS中使用换行符,我该怎么操作呢?

    【JavaScript】想在JS中使用换行符,我该怎么操作呢?使用’\n’换行,而不是’\n’注意前后空格实战demo:$(‘#text’).val(‘hello’+’\n’+’world’);

  • Adapter的notifyDataSetChanged()

    Adapter的notifyDataSetChanged()notifyDataSetInvalidated(),会重绘控件(还原到初始状态)notifyDataSetChanged(),重绘当前可见区域publicvoidnotifyDataSetChanged():该方法内部实现了在每个观察者上面调用onChanged事件。每当发现数据集有改变的情况,或者读取到数据的新状态时,就会调用此方法。 publicvoidnoti

发表回复

您的电子邮箱地址不会被公开。

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