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.mzph.cn/news/74706.shtml

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

相关文章

从零开始的PICO教程(4)--- UI界面绘制与响应事件

从零开始的PICO教程(4)— UI界面绘制与响应事件 文章目录 从零开始的PICO教程(4)--- UI界面绘制与响应事件一、前言1、大纲2、教程示例 二、具体步骤1、PICO VR环境配置2、XR的UI Canvas画布创建与调整(1)C…

用滑动条做调色板---cv2.getTrackbarPos(),cv2.creatTrackbar()

滑动轨迹栏作调色板 cv.createTrackbar(‘R’, ‘image’, 0, 255, nothing) 参数:哪个滑动轨迹栏,哪个窗口,最小值,最大值,回调函数 cv.getTrackbarPos(‘R’, ‘image’) 参数:轨迹栏名,窗口…

【Matlab】Matlab实现数据的动态显示方法

Matlab实现数据的动态显示方法 主要为大家详细介绍了Matlab使用Plot函数实现数据动态显示方法,具有一定的参考价值,感兴趣的小伙伴们可 以参考一下 对于真实系统或者仿真平台,数据是增量式的产生的。Matlab除了强大的矩阵运算外,还…

设计模式-单例模式(Singleton)

文章目录 前言一、单例模式的概念二、单例模式的实现三、单例模式的应用场景四、单例模式优缺点优点:缺点:总结 前言 单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一…

CSS 斜条纹进度条

效果&#xff1a; 代码&#xff1a; html: <div class"active-line flex"><!-- lineWidth&#xff1a;灰色背景 --><div class"bg-line"><div v-for"n in 30" class"gray"></div></div><div…

win10环境安装使用docker-maxwell

目的&#xff1a;maxwell可以监控mysql数据变化&#xff0c;并同步到kafka、mq或tcp等。 maxwell和canal区别&#xff1a; maxwell更轻量&#xff0c;canal把表结构也输出了 docker bootstrap可导出历史数据&#xff0c;canal不能 环境 &#xff1a;win10&#xff0c;mysql5…

PYTHON(一)——认识python、基础知识

一、为什么要学习python&#xff1f; Python 被认为是人工智能、机器学习的首选语言&#xff0c;可以说是全世界最流行通用范围最广的语言&#xff0c;几乎可以完成所有的任务&#xff0c;像设计游戏、建网站、造机器人甚至人工智能等都广泛使用Python。 二、输出&#xff08;…

pdf文件签名的问题解决

今天解决冲突的jar&#xff0c;结果出现下面的问题 java.lang.IllegalAccessError: tried to access method org.bouncycastle.asn1.DERNull.<init>()V from class com.itextpdf.text.pdf.security.PdfPKCS7at com.itextpdf.text.pdf.security.PdfPKCS7.getEncodedPKCS7…

机器学习——K最近邻算法(KNN)

机器学习——K最近邻算法&#xff08;KNN&#xff09; 文章目录 前言一、原理二、距离度量方法2.1. 欧氏距离2.2. 曼哈顿距离2.3. 闵可夫斯基距离2.4. 余弦相似度2.5. 切比雪夫距离2.6. 马哈拉诺比斯距离2.7. 汉明距离 三、在MD编辑器中输入数学公式&#xff08;额外&#xff0…

门面设计模式

github&#xff1a;GitHub - QiuliangLee/pattern: 设计模式 1 什么是门面设计模式 门面设计模式是一种软件设计模式&#xff0c;也被称为外观&#xff08;Facade&#xff09;模式。它提供了一个简单的接口&#xff0c;让客户端能够访问复杂系统中的一组接口。通过门面模式&a…

企业架构LNMP学习笔记15

客户端缓存&#xff1a; B/S架构里&#xff0c;Browser是浏览器&#xff0c;就是客户端。 客户端缓存告知浏览器获取服务段的信息是在某个区间时间段是有效的。 每次请求从服务器拿一遍数据&#xff0c;数据没有变化&#xff0c;影响带宽&#xff0c;影响时间。刷新又要去加载…

Java中快速排序的优化技巧:随机取样、三数取中和插入排序

目录 快速排序基础 优化1&#xff1a;随机取样 优化2&#xff1a;三数取中 优化3&#xff1a;插入排序 总结&#xff1a; 快速排序&#xff08;Quick Sort&#xff09;是一种高效的排序算法&#xff0c;它的平均时间复杂度为O(n log n)。然而&#xff0c;在某些情况下&…

rust中的reborrow和NLL

reborrow 我们看下面这段代码 fn main() {let mut num 123;let ref1 &mut num; // 可变引用add(ref1); // 传递给 add 函数println!("{}", ref1); // 再次使用ref1 }fn add(num: &mut i32) {println!("{}", *num); }我们…

机器学习——生成分类数据的坐标系边界需要用到的技术方法

0、前言&#xff1a; 如果遇到一种应用场景需要将x轴数据和y轴数据所有点映射到坐标系中&#xff0c;需要得到坐标系中x和y映射的坐标点&#xff0c;就要用到meshgrid把x和y映射到坐标系中&#xff0c;然后把得到的结果用ravel把结果转成一维的。用np.c_()把x数据和y数据堆叠在…

Python实现猎人猎物优化算法(HPO)优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 猎人猎物优化搜索算法(Hunter–prey optimizer, HPO)是由Naruei& Keynia于2022年提出的一种最新的…

spring boot-Resolved element must not contain multiple elements 警告

首先强调一下&#xff0c;此问题不影响程序运行。 报错信息&#xff1a; package org.springframework.util; ...public abstract class Assert ...public static void state(boolean expression, String message) {if (!expression) {throw new IllegalStateException(messa…

人工智能TensorFlow PyTorch物体分类和目标检测合集【持续更新】

1. 基于TensorFlow2.3.0的花卉识别 基于TensorFlow2.3.0的花卉识别Android APP设计_基于安卓的花卉识别_lilihewo的博客-CSDN博客 2. 基于TensorFlow2.3.0的垃圾分类 基于TensorFlow2.3.0的垃圾分类Android APP设计_def model_load(img_shape(224, 224, 3)_lilihewo的博客-CS…

flink 端到端一致性

背景 我们经常会混淆flink提供的状态一致性保证和数据端到端一致性保证的关系&#xff0c;总以为他们表达的是同一个意思&#xff0c;事实上&#xff0c;他们不是一个含义&#xff0c;flink只能保证其维护的内部状态的一致性&#xff0c;而数据端到端的一致性需要数据源&#…

数学建模:多目标优化算法

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 数学建模&#xff1a;多目标优化算法 多目标优化 分别求权重方法 算法流程&#xff1a; 两个目标权重求和&#xff0c;化为单目标函数&#xff0c;然后求解最优值 min ⁡ x ∑ i 1 m w i F i ( x ) s.…

I - Protecting the Flowers

Farmer John went to cut some wood and left N (2 ≤ N ≤ 100,000) cows eating the grass, as usual. When he returned, he found to his horror that the cluster of cows was in his garden eating his beautiful flowers. Wanting to minimize the subsequent damage, F…