当前位置: 首页 > news >正文

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


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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • PL/SQL程序设计入门
  • 鸿蒙OS 线程间通信
  • 面经 | css
  • canvas练习画太阳花
  • 数据增强:提升机器学习模型性能的利器
  • 【Python百日进阶-Web开发-FastAPI】Day805 - FastAPI的请求体
  • Debian 12上安装google chrome
  • 2024年最新版Vue3学习笔记
  • 使用Renesas R7FA8D1BH (Cortex®-M85)实现多功能UI
  • Scrapy爬虫框架 Pipeline 数据传输管道
  • 在 CentOS 8 上安装和部署 OpenSearch 2.17 的实战指南20240924
  • 鼎曼白茶贡眉:贮留芳香记忆,书写老茶传奇
  • 基于量子通讯进行安全认证
  • IPsec-Vpn
  • Flink 与 Kubernetes (K8s)、YARN 和 Mesos集成对比
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • chrome扩展demo1-小时钟
  • Flannel解读
  • github从入门到放弃(1)
  • k个最大的数及变种小结
  • sessionStorage和localStorage
  • webpack+react项目初体验——记录我的webpack环境配置
  • Webpack入门之遇到的那些坑,系列示例Demo
  • WebSocket使用
  • 缓存与缓冲
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端相关框架总和
  • 如何进阶一名有竞争力的程序员?
  • 世界上最简单的无等待算法(getAndIncrement)
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 用jQuery怎么做到前后端分离
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • ​数据链路层——流量控制可靠传输机制 ​
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • $NOIp2018$劝退记
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (PADS学习)第二章:原理图绘制 第一部分
  • (SpringBoot)第七章:SpringBoot日志文件
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (六)c52学习之旅-独立按键
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (三)docker:Dockerfile构建容器运行jar包
  • (自用)网络编程
  • .“空心村”成因分析及解决对策122344
  • .NET 8.0 发布到 IIS
  • .Net core 6.0 升8.0
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET之C#编程:懒汉模式的终结,单例模式的正确打开方式
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • @Async注解的坑,小心
  • @SuppressLint(NewApi)和@TargetApi()的区别