Redis使用原生命令搭建集群

1.Redis版本及下载

找到安装的redis版本,redis3.0以上版本才支持集群

下载对应的版本

2.安装redis集群

解压上传编译
[hadoop@host152 opensource]$ tar -xvf redis-3.2.11.tar.gz
[hadoop@host152 opensource]$ cd redis-3.2.11/
[hadoop@host152 redis-3.2.11]$ make
cd src && make all
make[1]: 进入目录“/home/hadoop/opensource/redis-3.2.11/src”
    CC adlist.o
/bin/sh: cc: 未找到命令
make[1]: *** [adlist.o] 错误 127
make[1]: 离开目录“/home/hadoop/opensource/redis-3.2.11/src”
make: *** [all] 错误 2

编译报错,缺少gcc,使用root用户先安装gcc,若没有报错则跳过此步骤
[root@host152 redis-3.2.11]#  gcc -v
bash: gcc: 未找到命令...
[root@host152 redis-3.2.11]# yum -y install gcc
[root@host152 redis-3.2.11]# gcc -v
gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 

需要删除原来的安装目录,重新解压编译安装redis,因为包已经弄坏
[hadoop@host152 opensource]$ rm -rf redis-3.2.11
[hadoop@host152 opensource]$ tar -xvf redis-3.2.11.tar.gz
[hadoop@host152 opensource]$ cd redis-3.2.11/
[hadoop@host152 redis-3.2.11]$ make
[hadoop@host152 redis-3.2.11]$ pwd
/home/hadoop/opensource/redis-3.2.11
[hadoop@host152 redis-3.2.11]$ cd src
[hadoop@host152 src]$ make install PREFIX=/home/hadoop/opensource/redis-3.2.11

此时可以切换到上面PREFIX指定的安装路径,可以看到bin目录下面有redis服务端和客户端生成
[hadoop@host152 src]$ cd /home/hadoop/opensource/redis-3.2.11
[hadoop@host152 redis-3.2.11]$ cd bin
[hadoop@host152 bin]$ ll
总用量 15080
-rwxr-xr-x. 1 hadoop hadoop 2433104 9月  10 23:22 redis-benchmark
-rwxr-xr-x. 1 hadoop hadoop   25008 9月  10 23:22 redis-check-aof
-rwxr-xr-x. 1 hadoop hadoop 5190752 9月  10 23:22 redis-check-rdb
-rwxr-xr-x. 1 hadoop hadoop 2585952 9月  10 23:22 redis-cli
lrwxrwxrwx. 1 hadoop hadoop      12 9月  10 23:22 redis-sentinel -> redis-server
-rwxr-xr-x. 1 hadoop hadoop 5190752 9月  10 23:22 redis-server

直接创建文件6个节点,7001-7006放置redis集群配置文件的
[hadoop@host152 redis-3.2.11]$ mkdir 7001
[hadoop@host152 redis-3.2.11]$ mkdir 7002
[hadoop@host152 redis-3.2.11]$ mkdir 7003
[hadoop@host152 redis-3.2.11]$ mkdir 7004
[hadoop@host152 redis-3.2.11]$ mkdir 7005
[hadoop@host152 redis-3.2.11]$ mkdir 7006
[hadoop@host152 redis-3.2.11]$ cp redis.conf 7001
[hadoop@host152 redis-3.2.11]$ cp redis.conf 7002
[hadoop@host152 redis-3.2.11]$ cp redis.conf 7003
[hadoop@host152 redis-3.2.11]$ cp redis.conf 7004
[hadoop@host152 redis-3.2.11]$ cp redis.conf 7005
[hadoop@host152 redis-3.2.11]$ cp redis.conf 7006

分别进入7001-7006文件夹修改改各个节点对应的配置redis.conf
bind 192.168.72.152
port 7006
daemonize yes
dir /home/hadoop/opensource/redis-3.2.11/7006
logfile "/home/hadoop/opensource/redis-3.2.11/7006/redis.log"
dbfilename "dump-7006.rdb"
cluster-enabled yes
cluster-config-file nodes-7006.conf
##设置挂某个节点,不影响集群
cluster-require-full-coverage no 

启动所有节点,查看进程
[hadoop@host152 redis-3.2.11]$ ./bin/redis-server 7001/redis.conf
[hadoop@host152 redis-3.2.11]$ ./bin/redis-server 7002/redis.conf
[hadoop@host152 redis-3.2.11]$ ./bin/redis-server 7003/redis.conf
[hadoop@host152 redis-3.2.11]$ ./bin/redis-server 7004/redis.conf
[hadoop@host152 redis-3.2.11]$ ./bin/redis-server 7005/redis.conf
[hadoop@host152 redis-3.2.11]$ ./bin/redis-server 7006/redis.conf
[hadoop@host152 redis-3.2.11]$ ps -ef|grep redis
hadoop    66312      1  0 23:41 ?        00:00:00 ./bin/redis-server 192.168.72.152:7001 [cluster]
hadoop    66316      1  0 23:41 ?        00:00:00 ./bin/redis-server 192.168.72.152:7002 [cluster]
hadoop    66320      1  0 23:41 ?        00:00:00 ./bin/redis-server 192.168.72.152:7003 [cluster]
hadoop    66324      1  0 23:41 ?        00:00:00 ./bin/redis-server 192.168.72.152:7004 [cluster]
hadoop    66328      1  0 23:41 ?        00:00:00 ./bin/redis-server 192.168.72.152:7005 [cluster]
hadoop    66332      1  0 23:41 ?        00:00:00 ./bin/redis-server 192.168.72.152:7006 [cluster]

连接7001节点,使用cluster meet命令分别与7002-7006其他节点握手建立联系,显示OK即成功
[hadoop@host152 redis-3.2.11]$ ./bin/redis-cli -h 192.168.72.152 -p 7001
192.168.72.152:7001> cluster meet 192.168.72.152 7002
OK
192.168.72.152:7001> cluster meet 192.168.72.152 7003
OK
192.168.72.152:7001> cluster meet 192.168.72.152 7004
OK
192.168.72.152:7001> cluster meet 192.168.72.152 7005
OK
192.168.72.152:7001> cluster meet 192.168.72.152 7006
OK

查看各个节点是否已经和7001节点connected以及节点数量
192.168.72.152:7001> cluster nodes
236bca208b8ed0ba4a1f042d756bbaec56cac6e4 192.168.72.152:7003 master - 0 1694361465216 3 connected
88be3f0f135e582f93345078e6c32d9d66083755 192.168.72.152:7001 myself,master - 0 0 2 connected
a65395ca86e3a58b48da86b400b0ae16ee20da82 192.168.72.152:7006 master - 0 1694361469252 4 connected
018b58f800f2d23d1c712c039d5fda0e90c35426 192.168.72.152:7005 master - 0 1694361465216 5 connected
45063091c71eecef8b20af40322a9b33b806972a 192.168.72.152:7002 master - 0 1694361467237 1 connected
c3320213a8c90e6154aff53d8f84fd6a171407a3 192.168.72.152:7004 master - 0 1694361468245 0 connected
192.168.72.152:7001> cluster info
cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:0
cluster_current_epoch:5
cluster_my_epoch:2
cluster_stats_messages_sent:347
cluster_stats_messages_received:347

备注:或者也登陆客户端用CLUSTER NODES获取各个节点的UUID唯一编码,查看连接的节点
192.168.72.152:7001> CLUSTER NODES
88be3f0f135e582f93345078e6c32d9d66083755 :7001 myself,master - 0 0 0 connected

也可以通过cluster-config-file指定的配置.conf文件找到各个节点的编码
[hadoop@host152 redis-3.2.11]$ more 7001/nodes-7001.conf
88be3f0f135e582f93345078e6c32d9d66083755 :0 myself,master - 0 0 0 connected
vars currentEpoch 0 lastVoteEpoch 0
[hadoop@host152 redis-3.2.11]$ more 7002/nodes-7002.conf
45063091c71eecef8b20af40322a9b33b806972a :0 myself,master - 0 0 0 connected
vars currentEpoch 0 lastVoteEpoch 0
[hadoop@host152 redis-3.2.11]$ more 7003/nodes-7003.conf
236bca208b8ed0ba4a1f042d756bbaec56cac6e4 :0 myself,master - 0 0 0 connected
vars currentEpoch 0 lastVoteEpoch 0
[hadoop@host152 redis-3.2.11]$ more 7004/nodes-7004.conf
c3320213a8c90e6154aff53d8f84fd6a171407a3 :0 myself,master - 0 0 0 connected
vars currentEpoch 0 lastVoteEpoch 0
[hadoop@host152 redis-3.2.11]$ more 7005/nodes-7005.conf
018b58f800f2d23d1c712c039d5fda0e90c35426 :0 myself,master - 0 0 0 connected
vars currentEpoch 0 lastVoteEpoch 0
[hadoop@host152 redis-3.2.11]$ more 7006/nodes-7006.conf
a65395ca86e3a58b48da86b400b0ae16ee20da82 :0 myself,master - 0 0 0 connected
vars currentEpoch 0 lastVoteEpoch 0

分别登陆7004/7005/7006节点,用cluster replicate依次设置当前从节点跟随哪个主节点标识
设置7004为从节点,跟随7001
[hadoop@host152 redis-3.2.11]$ ./bin/redis-cli -h 192.168.72.152 -p 7004
192.168.72.152:7004> cluster replicate 88be3f0f135e582f93345078e6c32d9d66083755
OK
设置7005为从节点,跟随7002
[hadoop@host152 redis-3.2.11]$ ./bin/redis-cli -h 192.168.72.152 -p 7005
192.168.72.152:7005> cluster replicate 45063091c71eecef8b20af40322a9b33b806972a
OK
设置7006为从节点,跟随7003
[hadoop@host152 redis-3.2.11]$ ./bin/redis-cli -h 192.168.72.152 -p 7006
192.168.72.152:7006> cluster replicate 236bca208b8ed0ba4a1f042d756bbaec56cac6e4
OK

分配完成后查看主从节点关系master或者slave
192.168.72.152:7006> cluster nodes
a65395ca86e3a58b48da86b400b0ae16ee20da82 192.168.72.152:7006 myself,slave 236bca208b8ed0ba4a1f042d756bbaec56cac6e4 0 0 4 connected
88be3f0f135e582f93345078e6c32d9d66083755 192.168.72.152:7001 master - 0 1694362228496 2 connected
236bca208b8ed0ba4a1f042d756bbaec56cac6e4 192.168.72.152:7003 master - 0 1694362229004 3 connected
45063091c71eecef8b20af40322a9b33b806972a 192.168.72.152:7002 master - 0 1694362226980 1 connected
018b58f800f2d23d1c712c039d5fda0e90c35426 192.168.72.152:7005 slave 45063091c71eecef8b20af40322a9b33b806972a 0 1694362227992 5 connected
c3320213a8c90e6154aff53d8f84fd6a171407a3 192.168.72.152:7004 slave 88be3f0f135e582f93345078e6c32d9d66083755 0 1694362224957 2 connected

登陆主节点7001/7002/7003分配槽点,redis集群一共有16384个节点,范围在0-16383
[hadoop@host152 redis-3.2.11]$ ./bin/redis-cli -h 192.168.72.152 -p 7001
192.168.72.152:7001> cluster addslots {0..5461}
(error) ERR Invalid or out of range slot

上述分配报错原因及解决办法
原因:redis-cli的addslots 命令需要的是一个具体数组
        上述的{0..5461}中的{ }在bash中是 brace explansion(括号展开)的意思,在redis-cli客户端中并不认识{}这个命令,再看redis分配slot的命令:
CLUSTER ADDSLOTS slot [slot …]
        即需要的是一个数组,示例如下才是正确写法,但是总不可能从1写到5461吧,这就很扯了吧
CLUSTER ADDSLOTS 1 2 3

解决办法:用seq生成序列解决
查看下面命令

[hadoop@host152 redis-3.2.11]$ {0..10}
bash: 0: 未找到命令...
[hadoop@host152 redis-3.2.11]$ echo {0..10}
0 1 2 3 4 5 6 7 8 9 10

利用seq生成对应长度的槽点数组即可
[hadoop@host152 redis-3.2.11]$ ./bin/redis-cli -h 192.168.72.152 -p 7001 cluster addslots $(seq 0 5461)
OK
[hadoop@host152 redis-3.2.11]$ ./bin/redis-cli -h 192.168.72.152 -p 7002 cluster addslots $(seq 5462 10922 )
OK
[hadoop@host152 redis-3.2.11]$ ./bin/redis-cli -h 192.168.72.152 -p 7003 cluster addslots $(seq 10923 16383)
OK

查看slot分布情况,16384个 槽点是否分配完毕
192.168.72.152:7001> CLUSTER INFO
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:5
cluster_my_epoch:2
cluster_stats_messages_sent:5553
cluster_stats_messages_received:5553
192.168.72.152:7001> CLUSTER NODES
236bca208b8ed0ba4a1f042d756bbaec56cac6e4 192.168.72.152:7003 master - 0 1694363986484 3 connected 10923-16383
88be3f0f135e582f93345078e6c32d9d66083755 192.168.72.152:7001 myself,master - 0 0 2 connected 0-5461
a65395ca86e3a58b48da86b400b0ae16ee20da82 192.168.72.152:7006 slave 236bca208b8ed0ba4a1f042d756bbaec56cac6e4 0 1694363989507 4 connected
018b58f800f2d23d1c712c039d5fda0e90c35426 192.168.72.152:7005 slave 45063091c71eecef8b20af40322a9b33b806972a 0 1694363988499 5 connected
45063091c71eecef8b20af40322a9b33b806972a 192.168.72.152:7002 master - 0 1694363987996 1 connected 5462-10922
c3320213a8c90e6154aff53d8f84fd6a171407a3 192.168.72.152:7004 slave 88be3f0f135e582f93345078e6c32d9d66083755 0 1694363987492 2 connected

至此集群创建成功,测试集群是否可用

连接7001节点
[hadoop@host152 redis-3.2.11]$ ./bin/redis-cli -c -h 192.168.72.152 -p 7001
192.168.72.152:7001> set age 99
OK
192.168.72.152:7001> get age
"99"
连接7002节点
[hadoop@host152 redis-3.2.11]$ ./bin/redis-cli -c -h 192.168.72.152 -p 7002
192.168.72.152:7002> get age
-> Redirected to slot [741] located at 192.168.72.152:7001
"99"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/108335.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于 Resolution(分辨率、解析力)各单位的意义及相互之间的换算

1、问题背景 最近在调试的项目,有关于对解析力的要求,用 imatest 软件测试 MTF50 的值,如下图所示,可以看到他有不同的单位表示,LW/PH、Cycles/pixel 。另外关于解析力的单位还有LP/mm、L/mm、Cycles/mm、LP/PH&#…

Java8实战-总结27

Java8实战-总结27 用流收集数据分区分区的优势将数字按质数和非质数分区 用流收集数据 分区 分区是分组的特殊情况:由一个谓词(返回一个布尔值的函数)作为分类函数,它称分区函数。分区函数返回一个布尔值,这意味着得到的分组Map的键类型是B…

Springboot 集成 Ehcache操作数据库显示SQL语句设置

Springboot 集成 Ehcache操作数据库显示SQL语句设置 2023-09-13 23:33:35.030 INFO 6124 --- [ task-1] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2023-09-13 23:33:35.124 INFO 6124 --- [ …

linux安装nacos2.2.0

1、使用docker拉取镜像:docker pull nacos/nacos-server:v2.2.0 2、下载官方配置文件:https://github.com/alibaba/nacos/releases 3、修改配置文件的数据库连接信息,修改完成后将配置文件移至挂载目录/home/shixp/docker/nacos/conf&#xf…

PHP8中删除数组中的重复元素-PHP8知识详解

在 php 8 中,你可以使用array_unique()函数来删除数组中的重复元素。该函数将返回一个新的数组,其中包含原始数组中的唯一元素,而重复的元素只保留第一个出现的。 array_unique()函数返回具有唯一性元素的数组,语法格式如下&#…

Microsoft Excel 101 简介

什么是 Microsoft Excel? Microsoft Excel 是一个电子表格程序,用于记录和分析数值数据。 将电子表格想像成构成表格的列和行的集合。 字母通常分配给列,数字通常分配给行。 列和行相交的点称为像元。 单元格的地址由代表列的字母和代表行的…

Rsync远程同步inotify监控

Rsync 简介 rsync(Remote Sync,远程同步) 是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限 在远程同步任务中,负责发起rsync同步操作的客户机…

《向量数据库指南》——“插件版”向量数据库与Milvus Cloud原生向量数据库之间的区别?

我一直坚持一个观点,即并非所有基于向量的解决方案都应被统称为向量数据库,尽管它们的能力在某些方面可以与之匹敌。从我的观点来看,例如 pgvector 或 Elasticsearch,它们都是非常出色且成熟的产品,在特定场景下&#…

计算机网络的故事——确认访问用户身份的认证

确认访问用户身份的认证 HTTP使用的认证方式:BASIC认证(基本认证)、DIGEST(摘要认证)、SSL客户端认证、FormBase认证(基于表单认证)。 基于表单的认证:涉及到session管理以及cookie…

Redis——Java中的客户端和API

Java客户端 在大多数的业务实现中,我们还是使用编码去操作Redis,对于命令的学习只是知道这些数据库可以做什么操作,以及在后面学习到了Java的API之后知道什么方法对应什么命令即可。 官方推荐的Java的客户端网页链接如下: 爪哇…

2023/9/13 -- C++/QT

作业&#xff1a; 1> 将之前定义的栈类和队列类都实现成模板类 栈&#xff1a; #include <iostream> #define MAX 40 using namespace std;template <typename T> class Stack{ private:T *data;int top; public:Stack();~Stack();Stack(const Stack &ot…

uniapp 触底加载

方式一 onReachBottomDistance 缺点&#xff1a;需要整个页面滑动&#xff0c;局部滑动触发不了 { // pages.json // 路由下增加 onReachBottomDistance "path": "detailed/detailed","style": {"navigationBarTitleText": "收…