Redis6.0.9配置redis集群

news2024/11/16 1:58:27

写在前面

最近在完成暑期大作业,期间要将项目部署在云服务器上,其中需要进行缓存的配置,决定使用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:7001
       slots:0-5460 (5461 slots) master
    M: 671a0524a616da8b2f50f3d11a74aaf563578e41 x.x.x.x:7002
       slots:5461-10922 (5462 slots) master
    M: 18948dab5b07e3726afd1b6a42d5bf6e2f411ba1 x.x.x.x:7003
       slots:10923-16383 (5461 slots) master
    S: 34e322ca50a2842e9f3664442cb11c897defba06 x.x.x.x:7004
       replicates f4ee0a501f9aaf11351787a46ffb4659d45b7bd7
    S: 62a00566233fbff4467c4031345b1db13cf12b46 x.x.x.x:7005
       replicates 671a0524a616da8b2f50f3d11a74aaf563578e41
    S: 2cb649ad3584370c960e2036fb01db834a546114 x.x.x.x:7006
       replicates 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:7001
       slots:0-5460 (5461 slots) master
       1 additional replica(s)
    M: 671a0524a616da8b2f50f3d11a74aaf563578e41 x.x.x.x:7002
       slots:5461-10922 (5462 slots) master
       1 additional replica(s)
    S: 2cb649ad3584370c960e2036fb01db834a546114 x.x.x.x:7006
       slots: (0 slots) slave
       replicates 18948dab5b07e3726afd1b6a42d5bf6e2f411ba1
    S: 34e322ca50a2842e9f3664442cb11c897defba06 x.x.x.x:7004
       slots: (0 slots) slave
       replicates f4ee0a501f9aaf11351787a46ffb4659d45b7bd7
    M: 18948dab5b07e3726afd1b6a42d5bf6e2f411ba1 x.x.x.x:7003
       slots:10923-16383 (5461 slots) master
       1 additional replica(s)
    S: 62a00566233fbff4467c4031345b1db13cf12b46 x.x.x.x:7005
       slots: (0 slots) slave
       replicates 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.coloradmin.cn/o/2161267.html

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

相关文章

Springboot-多数据源

文章目录 一、架构二、实现过程2.1 第一步:引入依赖pom2.2 第二步:创建application.yml配置2.3 第三步:创建架构的文件夹MybatisPlusConfigFirstDataSourceConfigSecondDataSourceConfig 实现功能,在不同的文件夹使用不同的库 一、…

【软件测试】金九银十,APP面试题经验分享

Web 端测试和 App 端测试有何不同? ① 系统架构方面 Web 项目,b/s架构,基于浏览器的;Web 测试只要更新了服务器端,客户端就会同步会更新; App 项目,c/s架构的,必须要有客户端;App…

基于Ambari搭建大数据分析平台(30分钟速成)全网最全最详细的Ambari搭建大数据分析平台:

全网最全最详细的Ambari搭建大数据分析平台: 方法一适合详细自己独立安装,方法二超级详细具体,是根据方法一搭建成功的,方法三是另外的方法,安装包有不同,实践也能安装成功。 方法一: 1.搭建安…

halcon单目相机标定

1.参考这边文章https://blog.csdn.net/weixin_60275604/article/details/139068423 2.代码 dev_close_window() dev_open_window(0, 0, 512, 512, black, WindowHandle) dev_set_draw(margin)***创建一个标定板参数 xNum,yNum标定板中行列标定点个数 MarkDist标定点中心距离 d…

Vue|插件

在 Vue.js 中,插件是用来扩展 Vue 功能的一种方式,能够帮助开发者扩展和复用功能。通过合理使用插件,可以提高代码的组织性和可维护性 目录 如何使用插件?插件的定义创建及使用插件插件的参数插件的扩展 总结 如何使用插件? 插件的定义 插…

洛汗2保姆级辅助教程攻略:VMOS云手机辅助升级打怪!

在《洛汗2》中,玩家将进入一个充满魔幻色彩的西方世界,体验多种族文明的兴衰与冒险。为了更好地享受这款由普雷威(Playwith)开发的角色扮演动作手游,使用VMOS云手机将是一个明智的选择。VMOS云手机专为游戏打造了定制版…

Gartner最新指南:如何通过开展红队演习提高网络弹性

由于事件和监管要求不断增加,安全和风险管理领导者努力建立网络弹性并有效管理网络威胁。本研究指导这些领导者制定红队计划以支持弹性及其关键组件。 主要发现 根据 2024 年 Gartner 设计和构建现代安全运营调查,73% 的组织认为红队角色对安全运营目标的…

【资源一号04A卫星(中巴地球资源卫星04A星)】

资源一号04A卫星(中巴地球资源卫星04A星) 资源一号04A卫星,全称为中巴地球资源卫星04A星(CBERS-04A),是中国与巴西两国合作研制的第六颗地球资源卫星。以下是对该卫星的详细介绍: 一、基本信…

解决Nodify框架因自带放大缩小、平移功能导致拖拽添加的控件无法准确在鼠标放下的位置显示控件

ViewModel中写具体关键的几段代码: var editor sender as NodifyEditor; Point p e.GetPosition(editor);//放大缩小比例double scale editor.ViewportZoom;//经过放大缩小、平移后获得坐标点位置p new Point(Math.Round((p.X - editor.ViewportT…

搜维尔科技:OptiTrack采集到的平衡数据,并对人形机器人进行编程,可以确保机器人的动作精度和准确性

OptiTrack具备高精度以及远追踪距离的双层特点,其捕捉范围最远可达91m,是大型场地(如体育馆、足球场、虚拟拍摄制作棚等)捕捉的最佳选择。 OptiTrack光学动作捕捉系统是目前全球市占率较高的全身动捕产品,可实现精度误…

第十六章 Javamail发送邮件

目录 一、邮件发送原理和流程图 二、Java发送邮件基本步骤 三、QQ邮箱授权码获取 四、示例代码 注:本章内容仅作为了解JavaMail邮件收发的基本原理,不建议作为实际项目使用,项目中建议通过SpringBoot项目加入mail的starter依赖来构建&am…

2.2 信道的极限容量

奈奎斯特定理 香农定理 🌏总结

怎么抠图把杂乱的人全部擦除?分享1个简单方法

前言 在图像编辑中,抠图是一项基本而重要的技能。它允许我们从一张图片中提取出想要的部分,或者去除不需要的元素。今天,我将分享一个简单而有效的方法来抠图,特别是如何擦除图片中杂乱的人物。 工具介绍 在众多的抠图工具中&a…

【近源攻击】badusb上线cs

❤️博客主页: iknow181 🔥系列专栏: 网络安全、 Python、JavaSE、JavaWeb、CCNP 🎉欢迎大家点赞👍收藏⭐评论✍ 0x01 实验前提 攻击设备:badusb cs服务器:公网部署了 cs 服务端 0x02 实验步骤 …

入耳式耳机戴久不舒服?真心劝你试试这五款骨传导耳机~

基于对运动耳机长时间的使用体验和细致研究,我有以下几点务实的建议想与大家交流:在做出购买决定之前,请多加思考,避免盲目追逐市场热点。有时候,那些突然风靡的网红耳机可能只是短暂的流行;同样&#xff0…

新学期月考成绩发布工具-易查分

老师们,新学期的第一次月考即将到来,是不是在想如何高效又安全地发布成绩呢?别担心,我来给你们介绍一个超实用的小工具——易查分小程序! 新学期,新挑战,但发布成绩这件事,可以变得…

# Windows环境下VSCode + Jupyter + Conda的AI学习环境配置指南

Windows环境下VSCode Jupyter Conda的AI学习环境配置指南 目录 Windows环境下VSCode Jupyter Conda的AI学习环境配置指南 优点 1. 安装Anaconda 2. 安装Visual Studio Code 3. 在VSCode中配置Python环境 4. 安装和配置Jupyter 5. 创建和管理虚拟环境 6. 安装常用的…

通信工程学习:什么是VNF虚拟网络功能

VNF:虚拟网络功能 VNF(Virtual Network Function)即虚拟网络功能,是网络功能虚拟化(NFV)架构中的一个核心概念。VNF允许通过软件化和虚拟化的方式,将传统的网络设备功能(如路由器、交…

CREO教程——2 绘制标准图纸

CREO教程——2 绘制标准图纸 说明:继承第一章设置好的配置文件,这一章进行学习分享如何定制自己的图纸图框,参考国家标准距,定制属于设计师或单位的通用图框。 1.设置工作目录 1.1设置工作目录 1.打开软件设置工作目录&#x…

MySQL按照经纬度排序 查询出商家信息

首先自己写公式算法,这个我们懒 就不写了,pass~ ST_Distance_Sphere用法和示例: 我们懒人使用MySQL自带的函数先看查询出的结果示例:示例代码(看代码直接跳这):注意事项 我们懒人使用MySQL自带的函数 ST_Distance_Sphe…