Redis6.0.9配置redis集群

写在前面

最近在完成暑期大作业,期间要将项目部署在云服务器上,其中需要进行缓存的配置,决定使用Redis,为了使系统更加健壮,选择配置Redis-Cluster。由于服务器资源有限,在一台服务器上运行6个Redis Instance并分配不同的端口进行模拟,当有更多服务器资源时在进行真实的配置。

本文主要记录配置过程中遇到的一些问题,供日后复习参考。如果有错误,还请指正。


环境

Redis 6.0.9
Ubuntu 18.04


安装Redis

此处不再赘述,如有疑问请查找网络上相关文章进行安装。

配置Redis-Cluster

  1. /usr/local下创建redis-cluster目录

  2. 将已安装的Redis文件夹复制六次到redis-cluster目录下

    cp -r /usr/local/redis /usr/local/redis-cluster/redis01
    cp -r /usr/local/redis /usr/local/redis-cluster/redis02
    cp -r /usr/local/redis /usr/local/redis-cluster/redis03
    cp -r /usr/local/redis /usr/local/redis-cluster/redis04
    cp -r /usr/local/redis /usr/local/redis-cluster/redis05
    cp -r /usr/local/redis /usr/local/redis-cluster/redis06
    

    目录结构如下图,其中start-all.shstop-all.sh为启动脚本。

目录结构.png
  1. 修改redis01-redis06每个目录下的redis.conf文件.

    以redis01目录的redis.conf为例,其他类似,修改内容如下:

    bind 0.0.0.0 ::1                 # 接受来自所有ip地址的连接
    protected-mode no                # 关闭保护模式
    port 7001                        # 连接端口号,分别设置为7001-7006
    daemonize yes                    # 以守护进程运行
    pidfile /usr/local/redis-cluster/redis01/redis01.pid
    logfile /usr/local/redis-cluster/redis01/redis01.log
    dir /usr/local/redis-cluster/redis01/data/# 以上三行的序号为01-06,根据redis实例的标号命名
    appendonly yes
    appendfilename "appendonly.aof"
    cluster-enabled yes              # 开启集群
    cluster-config-file node01.conf  # node01-node06,文件名不能相同
    

    注意,修改完配置文件后需要在每个redis的文件夹下创建data目录,用于存放appendonly.aofnode0x.confdump.rdb文件。

  2. 分别以配置文件指定的配置启动六个redis-server

    在/usr/local/redis-cluster路径下运行如下命令以启动一个 redis-server 实例,其他类似

    redis01/src/redis-server redis01/redis.conf
    

    手动启动过于麻烦,可以编写脚本start-all.sh,内容如下

    redis01/src/redis-server redis01/redis.conf
    redis02/src/redis-server redis02/redis.conf
    redis03/src/redis-server redis03/redis.conf
    redis04/src/redis-server redis04/redis.conf
    redis05/src/redis-server redis05/redis.conf
    redis06/src/redis-server redis06/redis.conf
    

    更改权限

    chmod +x start-all.sh
    

    运行脚本即可启动六个redis-server实例

  3. 创建集群

    输入以下命令并运行:(redis 5.x以下的版本无法通过这种方式创建集群)

    redis01/src/redis-cli --cluster create x.x.x.x:7001 x.x.x.x:7002 x.x.x.x:7003 x.x.x.x:7004 x.x.x.x:7005 x.x.x.x:7006 --cluster-replicas 1
    

    其中x.x.x.x是redis实例所在服务器的公网ip,7001-1006是六个redis实例分别监听的端口号。

    出现如下提示,则说明redis集群已创建完成。

    >>> Creating cluster
    >>> Performing hash slots allocation on 6 nodes...
    Using 3 masters:
    x.x.x.x:7001
    x.x.x.x:7002
    x.x.x.x:7003
    Adding replica x.x.x.x:7004 to x.x.x.x:7001
    Adding replica x.x.x.x:7005 to x.x.x.x:7002
    Adding replica x.x.x.x:7006 to x.x.x.x:7003
    M: f4ee0a501f9aaf11351787a46ffb4659d45b7bd7 x.x.x.x:7001slots:0-5460 (5461 slots) master
    M: 671a0524a616da8b2f50f3d11a74aaf563578e41 x.x.x.x:7002slots:5461-10922 (5462 slots) master
    M: 18948dab5b07e3726afd1b6a42d5bf6e2f411ba1 x.x.x.x:7003slots:10923-16383 (5461 slots) master
    S: 34e322ca50a2842e9f3664442cb11c897defba06 x.x.x.x:7004replicates f4ee0a501f9aaf11351787a46ffb4659d45b7bd7
    S: 62a00566233fbff4467c4031345b1db13cf12b46 x.x.x.x:7005replicates 671a0524a616da8b2f50f3d11a74aaf563578e41
    S: 2cb649ad3584370c960e2036fb01db834a546114 x.x.x.x:7006replicates 18948dab5b07e3726afd1b6a42d5bf6e2f411ba1
    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 x.x.x.x:7001)
    M: f4ee0a501f9aaf11351787a46ffb4659d45b7bd7 x.x.x.x:7001slots:0-5460 (5461 slots) master1 additional replica(s)
    M: 671a0524a616da8b2f50f3d11a74aaf563578e41 x.x.x.x:7002slots:5461-10922 (5462 slots) master1 additional replica(s)
    S: 2cb649ad3584370c960e2036fb01db834a546114 x.x.x.x:7006slots: (0 slots) slavereplicates 18948dab5b07e3726afd1b6a42d5bf6e2f411ba1
    S: 34e322ca50a2842e9f3664442cb11c897defba06 x.x.x.x:7004slots: (0 slots) slavereplicates f4ee0a501f9aaf11351787a46ffb4659d45b7bd7
    M: 18948dab5b07e3726afd1b6a42d5bf6e2f411ba1 x.x.x.x:7003slots:10923-16383 (5461 slots) master1 additional replica(s)
    S: 62a00566233fbff4467c4031345b1db13cf12b46 x.x.x.x:7005slots: (0 slots) slavereplicates 671a0524a616da8b2f50f3d11a74aaf563578e41
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    
  4. 测试

    [root@localhost redis]# redis-cli -c -h x.x.x.x -p 7001
    x.x.x.x:7001> set test test
    -> Redirected to slot [5798] located at x.x.x.x:7002
    OK
    x.x.x.x:7002> get name
    "test"
    

    能够正常运行,redis-cluster配置完成!

  5. 在创建redis-cluster之后,若需要关闭集群,可运行命令:

    redis-cli -c -h x.x.x.x -p 7001 shutdown
    redis-cli -c -h x.x.x.x -p 7002 shutdown
    redis-cli -c -h x.x.x.x -p 7003 shutdown
    redis-cli -c -h x.x.x.x -p 7004 shutdown
    redis-cli -c -h x.x.x.x -p 7005 shutdown
    redis-cli -c -h x.x.x.x -p 7006 shutdown
    

    也可编写脚本进行批量处理。

  6. 如果需要启动已经创建的redis-cluster,仅仅需要运行第4步编写的 start-all.sh ,跳过第5步的操作

  7. 需要清空已经配置好的redis-cluster,首先停止所有redis-server实例,接着删除data目录下的 node.conf 文件即可,在redis-cluster目录下运行

    rm -f  */data/*.conf
    

常见问题

  1. ip地址需要时公网ip,否则远程访问重定向后无法访问到其他集群结点。

  2. 服务器需要开启防火墙,如果是云服务器需要配置相应的安全组入规则。

  3. 创建redis-cluster时如果卡在“Waiting for the cluster to join...”这一步

    (1) 停止所有redis-server实例,删除每个redis/data文件夹下所有文件

    (2) 检查防火墙或安全组规则,依照本文的配置,需要开启7001-7006端口,同时还要开启17001-17006端口(cluster-announce-bus-port)。

    (3) 若经过3.2操作后仍然卡住,则分别更改redis.conf文件

    cluster-announce-ip x.x.x.x           # 公网ip,为对外ip
    cluster-announce-port 7001            # 7001-7006
    cluster-announce-bus-port 17001       # 17001-17006,集群桥接端口
    
     以上三个参数使其他结点获得当前结点的信息,通过配置文件,集群桥接端口无需于命令端口恒定相差10000,在没有配置的情况下默认相差10000。此处为了简化仍设置为相差10000,保存后重新执行,即可成功创建redis-cluster。
    

TODO

访问权限、密码等安全问题尚未完成,亟待解决。

最后编辑于:2024-09-22 09:33:10


喜欢的朋友记得点赞、收藏、关注哦!!!

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

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

相关文章

docker desktop windows stop

服务docker改为启动 cmd下查看docker版本 {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://hub.atomgit.com/"]…

三目运算判断字母大小写-C语言

1.问题: 输入一个字符,判别它是否为大写字母,如果是,将它转换成小写,如果不是,不转换。然后输出最后得到的字符,要求使用三目运算符。 2.解答: 用条件表达式来处理,当字…

Go基础学习04-变量重声明;类型转换;类型断言;Unicode代码点;类型别名;潜在类型

目录 变量重声明 类型断言 类型转换 类型转换注意事项 Unicode代码点 类型别名、潜在类型 类型别名的意义 变量重声明 编写代码: package mainimport "fmt"var container []string{"Beijing", "Shanghai"}func main() {fmt.Pr…

快递物流短信API接口代码

官网:快递鸟 API参数 用户信息类 一.短信模版 1.接口说明 使用快递鸟短信功能时,预先设置好短信模板和对应的发送规则,快递鸟短信API将根据设置的好的模板和规则,进行短信的发送和反馈。 (1)仅支持Json格式。 (2)请求指令810…

数据结构-2.9.双链表

一.双链表与单链表的对比&#xff1a; 二.双链表的初始化(带头结点)&#xff1a; 1.图解&#xff1a; 2.代码演示&#xff1a; #include<stdio.h> #include<stdlib.h> ​ //定义双链表结构体 typedef struct DNode {int data;struct DNode *prior;//前驱指针即指…

软件测试基础面试题【最新-附带答案】

1、介绍一下你上一家公司的测试流程吧&#xff1f; 1、产品经理拿下项目 2、所有技术人员&#xff08;开发&#xff0c;测试&#xff0c;运维&#xff0c;UI&#xff09;召开需求分析会议 3、测试组内召开会议&#xff08;明确测试需求&#xff0c;分配人员任务&#xff09;…

Spring Boot 学习之路 -- Service 层

前言 最近因为业务需要&#xff0c;被拉去研究后端的项目&#xff0c;代码框架基于 Spring Boot&#xff0c;对我来说完全小白&#xff0c;需要重新学习研究…出于个人习惯&#xff0c;会以 Blog 文章的方式做一些记录&#xff0c;文章内容基本来源于「 Spring Boot 从入门到精…

(补充)3DMAX初级小白班第三课:创建物体+物体材质编辑

1.可以点这里来改变材质颜色&#xff08;但是通过材质编辑器给了材质以后就只能在这里改线框颜色&#xff09;。但一般就是用灰色材质和黑色线框 2.材质编辑器快捷键为m 右键可更改个数&#xff0c;最多24个 将材质指定选定对象 如何把材质编辑器面板改成旧版 按f10 改成扫描…

计算机毕设选题推荐-基于python的电子健康信息分析系统【源码+文档+调试】

精彩专栏推荐订阅&#xff1a;在下方主页&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设木哥&#x1f525; &#x1f496; 文章目录 一、电子健康信息…

【Linux】解锁管道通信和共享内存通信,探索进程间通信的海洋

目录 引言&#xff1a; 1、进程间通信基础介绍 1.1为什么需要在进程之间通信&#xff1f; 1.2进程间通信是什么&#xff1f; 1.3我们具体如何进行进程间的通信呢&#xff1f; a.一般规律&#xff1a; b.具体做法 2.管道 2.1什么是管道 2.2匿名管道&#xff1a; 创建…

行业展望:线缆行业发展

线缆行业作为国民经济中最大的配套行业之一&#xff0c;在我国机械工业的细分行业中占据举足轻重的地位&#xff0c;仅次于汽车整车制造和零部件及配件制造业。作为电气化、信息化、智能化社会中重要的基础性配套产业&#xff0c;电线电缆被誉为国民经济的"血管"与&q…

用户态缓存:链式缓冲区(Chain Buffer)

目录 链式缓冲区&#xff08;Chain Buffer&#xff09;简介 为什么选择链式缓冲区&#xff1f; 代码解析 1. 头文件与类型定义 2. 结构体定义 3. 宏定义与常量 4. 环形缓冲区的基本操作 5. 其他辅助函数 6. 数据读写操作的详细实现 7. 总结 8. 结合之前的内容 9. 具…

鸿蒙OpenHarmony【小型系统基础内核(进程管理任务)】子系统开发

任务 基本概念 从系统的角度看&#xff0c;任务Task是竞争系统资源的最小运行单元。任务可以使用或等待CPU、使用内存空间等系统资源&#xff0c;并独立于其它任务运行。 OpenHarmony 内核中使用一个任务表示一个线程。 OpenHarmony 内核中同优先级进程内的任务统一调度、运…

STM32 map 文件浅析

目录 一、概述二、Section Cross References三、Removing Unused input sections from the image四、Memory Map of the image1、Local Symbols2、全局符号&#xff08;Global Symbols&#xff09; 五、Image Symbol Table六、Image component sizes 一、概述 .map 文件是编译…

【质优价廉】GAP9 AI算力处理器赋能智能可听耳机,超低功耗畅享未来音频体验!

当今世界&#xff0c;智能可听设备已经成为了流行趋势。随后耳机市场的不断成长起来&#xff0c;消费者又对AI-ANC&#xff0c;AI-ENC&#xff08;环境噪音消除&#xff09;降噪的需求逐年增加&#xff0c;但是&#xff0c;用户对于产品体验的需求也从简单的需求&#xff0c;升…

半导体器件制造5G智能工厂数字孪生物联平台,推进制造业数字化转型

半导体器件制造行业作为高科技领域的核心驱动力&#xff0c;正积极探索和实践以5G智能工厂数字孪生平台为核心的新型制造模式。这一创新不仅极大地提升了生产效率与质量&#xff0c;更为制造业的未来发展绘制了一幅智能化、网络化的宏伟蓝图。 在半导体器件制造5G智能工厂中&a…

Java笔试面试题AI答之设计模式(1)

文章目录 1. 简述什么是设计模式 &#xff1f;2. 叙述常见Java设计模式分类 &#xff1f;3. Java 设计模式的六大原则 &#xff1f;4. 简述对 MVC 的理解&#xff0c; MVC 有什么优缺点&#xff1f;MVC 的三个核心部分&#xff1a;MVC 的优点&#xff1a;MVC 的缺点&#xff1a…

巨潮股票爬虫逆向

目标网站 aHR0cDovL3dlYmFwaS5jbmluZm8uY29tLmNuLyMvSVBPTGlzdD9tYXJrZXQ9c3o 一、抓包分析 请求头参数加密 二、逆向分析 下xhr断点 参数生成位置 发现是AES加密&#xff0c;不过是混淆的&#xff0c;但并不影响咱们扣代码 文章仅提供技术交流学习&#xff0c;不可对目标服…

LabVIEW提高开发效率技巧----合理使用数据流与内存管理

理使用数据流和内存管理是LabVIEW开发中提高性能和稳定性的关键&#xff0c;特别是在处理大数据或高频率信号时&#xff0c;优化可以避免内存消耗过大、程序卡顿甚至崩溃。 1. 使用 Shift Register 进行内存管理 Shift Register&#xff08;移位寄存器&#xff09; 是 LabVIE…

前缀和问题

洛谷题面 这个其实可以当模板了。 代码&#xff1a; #include<bits/stdc.h> using namespace std; const int N1e510; int sum[N]; int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n,m,x;cin>>n;for(int i1;i<n;i){cin>>x;sum[i]sum[i…