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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 可视化报表开发_可视化数据报表

    可视化报表开发_可视化数据报表当今时代,传统的报表工具已经很难满足人们对于数据可视化的期望了,而大数据处理工具却可以为人们提供了更多的选择。微金时代的RDP报表工具操作简便,可直接上手使用,无需编码,就可以制作各种复杂、炫酷的报表。RDP报表工具表格式报表功能和亮点根据中国特色的报表需求,研发出的轻量级的企业级Web报表工具。仅需简单拖拽式配置,即可制作出各种复杂、炫酷的报表。支持中国式复杂报表的处理,例如:Excel清单报表、交叉报表、分组报表、多源分片式报表、分块报表、表单报表、图形报表、回写报表、假设分析报表、二次.

    2022年10月2日
    4
  • Eclipse乱码问题最全解决方案「建议收藏」

    Eclipse乱码问题最全解决方案「建议收藏」Windows>>Pereferences>>General>Editors>>Spelling>>Encoding选项下选择other,然后输入”UTF-8″随workspace编码改变,可以一个个选项设置,也可以直接设置workspace,但有的也默认是iso8859-1,仅仅设置workspace还不能解决问题将别人的项目或JAVA文件导入到自己的Eclipse中时,常常会出现JAVA文件的中文注释变成乱码的情况,主要原因就是别人的I…

    2022年5月26日
    35
  • Qt编写安防视频监控系统(界面很漂亮)「建议收藏」

    Qt编写安防视频监控系统(界面很漂亮)「建议收藏」一、前言视频监控系统在整个安防领域,已经做到了烂大街的程序,全国起码几百家公司做过类似的系统,当然这一方面的需求量也是非常旺盛的,各种定制化的需求越来越多,尤其是这几年借着人脸识别的东风,发展更加迅猛,人脸识别相关的技术和应用这几年处于风口浪尖,衍生了特别多的应用产品,各种人脸识别的产品遍地开花,刷脸门禁,车站机场人脸识别,刷脸取票等,但是其实大部分内行人士可能都比较绝望,外行感觉像看科幻片一样…

    2022年7月25日
    29
  • 股票模拟交易_股市v型反转

    股票模拟交易_股市v型反转给定一个长度为 N 的数组,数组中的第 i 个数字表示一个给定股票在第 i 天的价格。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。输入格式第一行包含整数 N,表示数组长度。第二行包含 N 个不超过 10000 的正整数,表示完整的数组。输出格式输出一个整数,表示最大利润。数据范围1≤N≤105输入样例:51

    2022年8月9日
    3
  • 项目开发中编写的文档

    软件开发中文档的编写是一个不可缺少的环节,常见的如《需求分析》、《概要分析》、《数据库设计》等。在“软件人”的阵营里向来存在两种观点,注重文档还是关心代码。一直争论多少年了,好像都没有一个真正的定乱。

    2021年12月21日
    38
  • php配合jquery实现增删操作建议收藏

    后台使用php,前台引用jquery,实现增删操作,代码如下:124748495051525354575861">删除626364

    2021年12月20日
    43

发表回复

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

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