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)
blank

相关推荐

  • PLSQLDeveloper安装与配置

    PLSQLDeveloper安装与配置1,首先要有oracle数据库或者有oracle服务器,才可以实现使用PLSQLDeveloper工具连接到oracle数据库进行开发.2,下载PLSQLDeveloper并解压3,配置环境变量1)变量名:ORACLE_HOME变量值:E:\tool_01\PLSQLDeveloper\instantclient_11_22)变量名:TNS_ADMIN变量值:E:\tool_01…

  • 我的世界服务器作弊指令大全_我的世界服务器称号指令

    我的世界服务器作弊指令大全_我的世界服务器称号指令原标题:我的世界指令代码大全一、我的世界指令代码大全单机指令(部分多人也适用)/gamemode0是生存(极限)模式/gamemode1是创造模式/gamemode2是冒险模式(必须用特定的武器才能消除方块)/gamemode3是生存(极限)模式/give你的名字1371能得到命令方块,在里面输死亡不掉落:/gamerulekeepInventorytrue防爆:/game…

  • wireshark捕获arp包_安卓tcp协议抓包分析教程

    wireshark捕获arp包_安卓tcp协议抓包分析教程使用Wireshark工具抓取ARP协议的数据包,分析ARP协议的地址解析过程、自主学习逻辑以及初次访问和多次访问的区别。

    2022年10月24日
  • Python不使用int()函数把字符串转换为数字「建议收藏」

    Python不使用int()函数把字符串转换为数字「建议收藏」Python不使用int()函数把字符串转换为数字2018年05月21日14:18:45边缘ob边缘ob阅读数:1035https://blog.csdn.net/qq_33192555/a

  • 字符串匹配算法_字符串模式匹配算法

    字符串匹配算法_字符串模式匹配算法目录Brute-Force算法Knuth-Morris-Pratt算法确定有限状态自动机部分匹配表Boyer-Moore算法Rabin-Karp算法总结网络信息中充满大量的字符串,对信息的搜寻至关重要,因此子字符串查找(即字符串匹配)是使用频率非常高的操作:给定一段长度为N的文本和长度为M的模式字符串(N≥M),在文本中找到一个和模式串相匹配的子串。由这个问题可以延…

  • checkbox选中和不选中 jqu_jquery checkbox 选中不选中「建议收藏」

    checkbox选中和不选中 jqu_jquery checkbox 选中不选中「建议收藏」展开全部$(function(){//动态绑定默认状态//$(“#ck”).attr(“checked”,true)//选中//$(“#ck”).attr(“checked”,false)//未选中//点击判断选中还是未选中$(“#ck”).click(function(){if($(this).is(“:checked”)){alert(“选中”);}else{alert…

发表回复

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

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