【深入学习Redis丨第二篇】Redis集群部署详解

文章目录

  • Redis集群部署
  • Redis4 Cluster部署

在这里插入图片描述

Redis集群部署

1 Redis各节点部署

使用源码安装各节点,不过与非cluster方式不同的是,配置文件中需启动cluster相关的配置。

因本次为伪分布式部署,生产环境部署时建议至少3台机器部署(其中每台机器1主1从)



ipport
192.168.56.1017000
192.168.56.1017001
192.168.56.1017002
192.168.56.1017003
192.168.56.1017004
192.168.56.1017005

1.1 启动cluster各节点

创建数据目录

mkdir -p  /data/redis/cluster/{7000,7001,7002,7003,7004,7005}

配置文件中主要修改如下内容,其他的可按需调整,也可保持默认值,各节点中注意修改对应的端口号

bind 192.168.56.101
port 7000
daemonize yes
pidfile /data/redis/cluster/7000/redis_7000.pid
logfile "/data/redis/cluster/7000/redis_7000.log"
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
cluster-enabled yes
cluster-config-file nodes-7000.conf     #注意此文件自动生成,且初始化时不要有和此重名的文件
cluster-node-timeout 5000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes
cluster-slave-no-failover no

启动各节点,建议用redis用户启动

useradd redis
chown -R  redis:redis  /data/redis/
su - redis
cd /data/redis/cluster/7001
cp /data/redis/cluster/7000/redis.conf . 
sed -i "s#7000#7001#g" redis.conf
redis-server redis.conf

其他节点和7001类似启动,启动后进程中会标记redis节点以cluster模式启动

在这里插入图片描述

2. 按照依赖

因redis5之前版本前cluster安装依赖ruby,且版本要求比较苛刻,本次安装的版本redis4.0.14,依赖的ruby版本为>=ruby2.4,因此大家安装时可以安装高版本的ruby,本次使用的是ruby2.7.5版本

2.1 编译安装ruby

下载ruby,建议从官网下载源码进行编译安装
https://www.ruby-lang.org/en/downloads/

tar -zxvf  ruby-2.7.5.tar.gz
cd ruby-2.7.5 
./configure
make  
make install

安装完毕后,检查ruby以及gem版本

2.2 安装openssl-devel及zlib-devel

安装完ruby后,使用gem安装redis包,此时如果没有安装openssl 则回报如下错误

gem install  redis
ERROR:  Loading command: install (LoadError)
    cannot load such file -- openssl
ERROR:  While executing gem ... (NoMethodError)
    undefined method `invoke_with_build_args' for nil:NilClass

按照过程如下:

yum方式先安装openssl

 yum install openssl-devel -y

再进入ruby源码目录中的ext目录下,找到openssl目录,进入后进行安装

cd ruby-2.7.5/ext/openssl
ruby extconf.rb 
make
make install

zlib-devel包如报错,也可同上方式处理。

在执行make,若出现如下报错:

 make: *** 没有规则可以创建“ossl_asn1.o”需要的目标“/include/ruby.h” 停止。

可以在Makefile顶部中的增加 top_srcdir = …/…

再次执行 make && make install

2.3 gem安装redis

 gem install redis

3. 初始化redis集群

相关依赖安装完成后,即可初始化redis集群,命令及过程如下:

[redis@localhost redis-4.0.14]$ src/redis-trib.rb create --replicas 1 192.168.56.101:7000 192.168.56.101:7001 192.168.56.101:7002 192.168.56.101:7003 192.168.56.101:7004 192.168.56.101:7005
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.56.101:7000
192.168.56.101:7001
192.168.56.101:7002
Adding replica 192.168.56.101:7004 to 192.168.56.101:7000
Adding replica 192.168.56.101:7005 to 192.168.56.101:7001
Adding replica 192.168.56.101:7003 to 192.168.56.101:7002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: cd6663924f0c31e6b60b815dca9cb7ea863f5573 192.168.56.101:7000
   slots:0-5460 (5461 slots) master
M: abc1f43c9a4e8813e9da15433ac66cd185dc39fe 192.168.56.101:7001
   slots:5461-10922 (5462 slots) master
M: 43fa53cec1ae164f784e5d439aaf80ee2f7e35af 192.168.56.101:7002
   slots:10923-16383 (5461 slots) master
S: 6ffcd16f1d445b0091c6239bc0988fb8a77fac96 192.168.56.101:7003
   replicates cd6663924f0c31e6b60b815dca9cb7ea863f5573
S: c523846d491f8df0bc97033b025b0d24375a13f8 192.168.56.101:7004
   replicates abc1f43c9a4e8813e9da15433ac66cd185dc39fe
S: 905dc9de7e074c282aab44b4ed5680a2020bcf4c 192.168.56.101:7005
   replicates 43fa53cec1ae164f784e5d439aaf80ee2f7e35af
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join....
>>> Performing Cluster Check (using node 192.168.56.101:7000)
M: cd6663924f0c31e6b60b815dca9cb7ea863f5573 192.168.56.101:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 43fa53cec1ae164f784e5d439aaf80ee2f7e35af 192.168.56.101:7002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: c523846d491f8df0bc97033b025b0d24375a13f8 192.168.56.101:7004
   slots: (0 slots) slave
   replicates abc1f43c9a4e8813e9da15433ac66cd185dc39fe
S: 6ffcd16f1d445b0091c6239bc0988fb8a77fac96 192.168.56.101:7003
   slots: (0 slots) slave
   replicates cd6663924f0c31e6b60b815dca9cb7ea863f5573
M: abc1f43c9a4e8813e9da15433ac66cd185dc39fe 192.168.56.101:7001
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 905dc9de7e074c282aab44b4ed5680a2020bcf4c 192.168.56.101:7005
   slots: (0 slots) slave
   replicates 43fa53cec1ae164f784e5d439aaf80ee2f7e35af
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

至此,redis集群初始化完毕,各节点slot范围及角色也打印出来了

Redis4 Cluster部署

1、安装redis集群节点

因本次为伪分布式部署,生产环境部署时建议至少3台机器部署(其中每台机器1主1从),依旧和redis4.0.14的方式一样部署



**ip ****port **
192.168.56.1017000
192.168.56.1017001
192.168.56.1017002
192.168.56.1017003
192.168.56.1017004
192.168.56.1017005

1.1 启动cluster各节点

创建数据目录

mkdir -p  /data/redis/cluster/{7000,7001,7002,7003,7004,7005}

配置文件中主要修改如下内容,其他的可按需调整,也可保持默认值,各节点中注意修改对应的端口号

bind 192.168.56.103
port 7000
daemonize yes
pidfile /data/redis/cluster/7000/redis_7000.pid
logfile "/data/redis/cluster/7000/redis_7000.log"
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
cluster-enabled yes
cluster-config-file nodes-7000.conf     #注意此文件自动生成,且初始化时不要有和此重名的文件
cluster-node-timeout 5000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes
cluster-slave-no-failover no

启动各节点,建议用redis用户启动

useradd redis
chown -R  redis:redis  /data/redis/
su - redis
cd /data/redis/cluster/7001
cp /data/redis/cluster/7000/redis.conf . 
sed -i "s#7000#7001#g" redis.conf
redis-server redis.conf

其他节点和7001类似启动,启动后进程中会标记redis节点以cluster模式启动

在这里插入图片描述

2. 初始化集群

redis5.x之后的版本初始化集群相当便捷,命令及过程如下

redis-cli --cluster create --cluster-replicas 1 192.168.56.103:7000 192.168.56.103:7001 192.168.56.103:7002 192.168.56.103:7003 192.168.56.103:7004 192.168.56.103:7005
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.56.103:7004 to 192.168.56.103:7000
Adding replica 192.168.56.103:7005 to 192.168.56.103:7001
Adding replica 192.168.56.103:7003 to 192.168.56.103:7002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 84ea774c08450db01bf5a518e3b9e55fd26d4d34 192.168.56.103:7000
   slots:[0-5460] (5461 slots) master
M: eb98e53273fd348deb5eabcc6bfffc20484749b1 192.168.56.103:7001
   slots:[5461-10922] (5462 slots) master
M: e059d418c11401189558d0f33bd5658297c10939 192.168.56.103:7002
   slots:[10923-16383] (5461 slots) master
S: 23eed1c27ad11c685e5a226e2f82d5c0b6384c79 192.168.56.103:7003
   replicates e059d418c11401189558d0f33bd5658297c10939
S: cfa2549ea7782bb4f0ed6d45e9e3704a7d38d540 192.168.56.103:7004
   replicates 84ea774c08450db01bf5a518e3b9e55fd26d4d34
S: c3e14c4139bfa88af03ea97679715f051a122806 192.168.56.103:7005
   replicates eb98e53273fd348deb5eabcc6bfffc20484749b1
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 192.168.56.103:7000)
M: 84ea774c08450db01bf5a518e3b9e55fd26d4d34 192.168.56.103:7000
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 23eed1c27ad11c685e5a226e2f82d5c0b6384c79 192.168.56.103:7003
   slots: (0 slots) slave
   replicates e059d418c11401189558d0f33bd5658297c10939
M: eb98e53273fd348deb5eabcc6bfffc20484749b1 192.168.56.103:7001
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: c3e14c4139bfa88af03ea97679715f051a122806 192.168.56.103:7005
   slots: (0 slots) slave
   replicates eb98e53273fd348deb5eabcc6bfffc20484749b1
S: cfa2549ea7782bb4f0ed6d45e9e3704a7d38d540 192.168.56.103:7004
   slots: (0 slots) slave
   replicates 84ea774c08450db01bf5a518e3b9e55fd26d4d34
M: e059d418c11401189558d0f33bd5658297c10939 192.168.56.103:7002
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

看到如下结果,代表成功配置并分配slot完成

在这里插入图片描述

查看各节点信息也可以用如下命令

[redis@localhost 7005]$ redis-cli -h 192.168.56.103 -p 7000 cluster nodes
23eed1c27ad11c685e5a226e2f82d5c0b6384c79 192.168.56.103:7003@17003 slave e059d418c11401189558d0f33bd5658297c10939 0 1646118171000 4 connected
eb98e53273fd348deb5eabcc6bfffc20484749b1 192.168.56.103:7001@17001 master - 0 1646118171604 2 connected 5461-10922
c3e14c4139bfa88af03ea97679715f051a122806 192.168.56.103:7005@17005 slave eb98e53273fd348deb5eabcc6bfffc20484749b1 0 1646118171000 6 connected
cfa2549ea7782bb4f0ed6d45e9e3704a7d38d540 192.168.56.103:7004@17004 slave 84ea774c08450db01bf5a518e3b9e55fd26d4d34 0 1646118170000 5 connected
e059d418c11401189558d0f33bd5658297c10939 192.168.56.103:7002@17002 master - 0 1646118169590 3 connected 10923-16383
84ea774c08450db01bf5a518e3b9e55fd26d4d34 192.168.56.103:7000@17000 myself,master - 0 1646118171000 1 connected 0-5460

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决JSON.stringify 方法在序列化 BigInt 类型时的错误

今天学nest时&#xff0c;使用apifox发送请求获取数据&#xff0c;结果还一直报错&#xff0c;而且还是我从未见过的 Do not know how to serialize a BigInt at JSON.stringify (<anonymous>) at stringify&#xff0c; 我都是跟着人家敲的&#xff0c;我就纳闷了&…

Java——异常详解

异常五个主要关键字&#xff1a;throw、try、catch、finally、throws 1. 异常的概念与体系结构 1.1 异常的概念 在Java中&#xff0c;程序执行过程中发生的不正常行为被称为异常&#xff0c;如&#xff1a; 1. 算数异常 public static void main(String[] args) {System.ou…

数据结构队列(深入链表的应用)

目录 队列的概念及结构 队列的实现 结构的选择 从Pop来看&#xff1a; 队列的结构 &#xff1a; 分析&#xff1a; 头文件(queue.h) 实现队列功能&#xff1a; 队列的初始化(与链表类似) 队列的摧毁 队列的插入(链表尾插) 队头的删除 取队头队尾的数据(简单中藏陷阱…

Vue3中的常见组件通信之props和自定义事件

Vue3中的常见组件通信 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-model3. $refs4. 默认…

【TB作品】MSP430F5529,单片机,打地鼠游戏

功能 针对这块开发板做了一个打地鼠游戏&#xff1a; 1 给单片机上电后&#xff0c;初始化显示界面&#xff0c;显示出分数和等级。 2 游戏是一轮一轮进行的&#xff0c;每一轮会以50%几率点亮板子上的五个小灯&#xff0c;表示地鼠露头需要打了。 3 一轮游戏开始后&#xff…

STM32作业设计

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…

PKG系统安装包及IPSW固件下载(MacOS 11-14)11.7.10/12.7.1/13.6.

MacOS 14 Sonoma&#xff0c;为提高生产力和创造力带来了全新的功能&#xff0c;有了更多使用小部件和令人惊叹的新屏幕保护程序进行个性化设置的方法&#xff0c;对Safari浏览器和视频会议进行了重大更新&#xff0c;以及优化的游戏体验——Mac体验比以往任何时候都更好。 下载…

关于linux程序的查看、前台运行、后台运行、杀死的管理操作。

前言 在Linux中&#xff0c; 程序&#xff08;program&#xff09;是放在磁盘上的程序&#xff0c;是不会执行的。 进程&#xff08;process&#xff09;是程序被触发&#xff0c;从而加载到内存中的&#xff0c;会被CPU随机执行。 Linux中&#xff0c;有非常多的进程在实时运…

绿联 安装memcached容器 - 一个开源的高性能分布式内存对象缓存系统

绿联 安装memcached容器 - 一个开源的高性能分布式内存对象缓存系统 1、镜像 memcached:latest 2、安装 2.1、基础设置 重启策略&#xff1a;容器退出时总是重启容器。 2.2、网络 网络选择桥接(bridge)。 2.3、端口设置 容器端口11211固定不变&#xff0c;本地端口若未被…

STAT315 Week 8 广义线性混合模型(GLMMs)

正如我们使用 LMM 对具有相关观测值的正态数据进行建模一样&#xff0c;我们可以使用 GLMM 对非正态分布且具有相关观测值的数据进行建模。 响应变量通常是离散的或明显非正态的。 GLMM 允许响应数据来自指数族的任何其他分布&#xff0c;包括最常见的二项分布和泊松分布。因此…

第五维度【百度之星】/二分

第五维度 二分 思路&#xff1a;看到题目是尽可能晚的情况下最早就应该想到贪心。 #include<bits/stdc.h> using namespace std; typedef long long ll; ll a[100005],b[100005]; ll n,m; bool check(ll t) {ll res0,big0;for(ll i0;i<n;i) {if(a[i]>t) continue…

基于MingGW64 GCC编译Windows平台上的 libuvc

安装cmake 打开cmake官网 https://cmake.org/download/&#xff0c;下载安装包&#xff1a; 安装时选择将cmake加到系统环境变量里。安装完成后在新的CMD命令窗口执行cmake --version可看到输出&#xff1a; D:\>cmake --version cmake version 3.29.3 CMake suite mainta…

牛客网刷题 | BC108 反斜线形图案

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 KiKi学习了循环&am…

git远程仓库限额的解决方法——大文件瘦身

Git作为世界上最优秀的分布式版本控制工具&#xff0c;也是优秀的文件管理工具&#xff0c;它赋予了项目成员对项目进行远程协同开发能力&#xff0c;因此受到越来越多的行业从业人员的喜爱。很多优秀的项目管理平台&#xff0c;比如国内的Gitee&#xff0c;国外的Github&#…

列表和列表项

一、列表和列表项简介 列表是 FreeRTOS 中的一个数据结构&#xff0c;列表被用来跟踪 FreeRTOS中的任务&#xff08;任务当前的状态&#xff09;&#xff0c;列表项就是存放在列表中的项目 列表相当于链表&#xff0c;列表项相当于节点&#xff0c;FreeRTOS 中的列表是一个双向…

Qt各发布版本介绍与选择

一.Qt各个主要版本介绍 1.Qt4 Qt4的第一个版本是Qt 4.0&#xff0c;发布于2005年6月1日。 Qt 4的最后一个版本是Qt 4.8.7&#xff0c;发布时间是2015年6月10日。 2.Qt5 &#xff08;1&#xff09;Qt5的第一个版本是Qt 5.0&#xff0c;发布于2012年12月19日。 &#xff08;2&…

575. 分糖果

题目 Alice 有 n 枚糖&#xff0c;其中第 i 枚糖的类型为 candyType[i]。Alice 注意到她的体重正在增长&#xff0c;所以前去拜访了一位医生。 医生建议 Alice 要少摄入糖分&#xff0c;只吃掉她所有糖的 n / 2 即可&#xff08;n 是一个偶数&#xff09;。Alice 非常喜欢这些…

LabVIEW版本控制

LabVIEW作为一种流行的图形化编程环境&#xff0c;在软件开发中广泛应用。有效地管理版本控制对于确保软件的可靠性和可维护性至关重要。LabVIEW提供了多种方式来管理VI和应用程序的修订历史&#xff0c;以满足不同规模和复杂度的项目需求。 LabVIEW中的VI修订历史 LabVIEW内置…

低代码选型要注意什么问题?

低代码选型时&#xff0c;确实需要从多个角度综合考虑&#xff0c;以下是根据您给出的角度进行的分析和建议&#xff1a; 公司的人才资源&#xff1a; 评估团队中是否有具备编程能力的开发人员&#xff0c;以确保能够充分利用低代码平台的高级功能和进行必要的定制开发。考察实…

11.2.0.3RAC 备份集恢复为单实例11.2.0.4_法一:rman备份恢复

关键步骤&#xff1a; 1、移动硬盘格式化成Linux可以识别的文件系统&#xff0c;mount到备份目录&#xff0c;开始rman备份&#xff0c;备份完成后&#xff0c;插到目标服务器挂载&#xff0c; 2、恢复参数文件nomount库&#xff0c;恢复控制文件mount库&#xff0c;restore …