zoukankan      html  css  js  c++  java
  • Redis 快速集群环境搭建

    环境

    • Linux :centos 7

    • redis:redis-5.0.9

    Redis 集群环境搭建步骤

    早期 redis 版本集群环境搭建需要安装 ruby 运行环境,搭建步骤比较繁琐; redis 5.x 版本集群搭建已不需要我们安装 ruby 就可以搭建成功,并且 redis 给我们提供了快速搭建集群脚本

    步骤一:找到快速搭建 create-cluster 脚本
    [root@dtinone create-cluster]# cd /opt/redis-5.0.9/utils/create-cluster
    

    进入 create-cluster 目录后查看如下:

    [root@dtinone create-cluster]# ll
    总用量 8
    -rwxrwxr-x. 1 root root 2344 4月  17 2020 create-cluster #这就是快速搭建集群脚本
    -rw-rw-r--. 1 root root 1317 4月  17 2020 README
    

    create-cluster 脚本提供以下几个命令:

    • start :创建redis集群实例
    • create :搭建redis集群
    • stop :停止redis集群实例
    • watch :查看集群节点
    • clean :删除生成的日志,配置,数据文件
    • clean-logs :只删除日志
    步骤二:运行 create-cluste 脚本快速搭建集群环境
    • 运行 ./create-cluster start 命令脚本将自动为我们创建 6 个redis 进程实例(集群环境至少 6 个 redis 实例,3 master / 3 slave),而且自动为我们分配端口(30001-30006)
    [root@dtinone create-cluster]# ./create-cluster start
    Starting 30001
    Starting 30002
    Starting 30003
    Starting 30004
    Starting 30005
    Starting 30006
    
    • 运行 ./create-cluster create 命令脚本将自动搭建集群环境(分配 6 个 slot 并配置好 6 个 redis 实例的主从关系)

      redis 集群支持16384 个 slots,即最大支持 16384 个 redis 实例组成的集群环境)

      遇到以下提示信息,是询问你是否可以使用分配的配置,输入yes 回车即可

      Can I set the above configuration? (type 'yes' to accept): yes # 输入 yes 回车即可

    [root@dtinone create-cluster]# ./create-cluster create
    >>> Performing hash slots allocation on 6 nodes...
    # 分配集群槽位
    Master[0] -> Slots 0 - 5460
    Master[1] -> Slots 5461 - 10922
    Master[2] -> Slots 10923 - 16383
    
    # 分配主从关系
    Adding replica 127.0.0.1:30005 to 127.0.0.1:30001
    Adding replica 127.0.0.1:30006 to 127.0.0.1:30002
    Adding replica 127.0.0.1:30004 to 127.0.0.1:30003
    >>> Trying to optimize slaves allocation for anti-affinity
    [WARNING] Some slaves are in the same host as their master
    
    # 显示槽位和主从关系
    M: 68472ec54dba34b08cd6d4f987f8b97e5de00411 127.0.0.1:30001
       slots:[0-5460] (5461 slots) master
    M: a05be1b0ee3f33d0fdba1c4624484659df71ba9c 127.0.0.1:30002
       slots:[5461-10922] (5462 slots) master
    M: 4ebf676146947b59063b7474f3bf706e4319cc01 127.0.0.1:30003
       slots:[10923-16383] (5461 slots) master
    S: 3cb2dae684fb9fa7393cf7a7b8c6ee401db80f05 127.0.0.1:30004
       replicates 68472ec54dba34b08cd6d4f987f8b97e5de00411
    S: 41c6962bf0f80dcd3ccd07ec758a949b55938248 127.0.0.1:30005
       replicates a05be1b0ee3f33d0fdba1c4624484659df71ba9c
    S: bef3b70608bbae26f20b0de5915e7c2f521f18c3 127.0.0.1:30006
       replicates 4ebf676146947b59063b7474f3bf706e4319cc01
    Can I set the above configuration? (type 'yes' to accept): yes  #输入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 127.0.0.1:30001)
    M: 68472ec54dba34b08cd6d4f987f8b97e5de00411 127.0.0.1:30001
       slots:[0-5460] (5461 slots) master
       1 additional replica(s)
    S: bef3b70608bbae26f20b0de5915e7c2f521f18c3 127.0.0.1:30006
       slots: (0 slots) slave
       replicates 4ebf676146947b59063b7474f3bf706e4319cc01
    M: a05be1b0ee3f33d0fdba1c4624484659df71ba9c 127.0.0.1:30002
       slots:[5461-10922] (5462 slots) master
       1 additional replica(s)
    M: 4ebf676146947b59063b7474f3bf706e4319cc01 127.0.0.1:30003
       slots:[10923-16383] (5461 slots) master
       1 additional replica(s)
    S: 41c6962bf0f80dcd3ccd07ec758a949b55938248 127.0.0.1:30005
       slots: (0 slots) slave
       replicates a05be1b0ee3f33d0fdba1c4624484659df71ba9c
    S: 3cb2dae684fb9fa7393cf7a7b8c6ee401db80f05 127.0.0.1:30004
       slots: (0 slots) slave
       replicates 68472ec54dba34b08cd6d4f987f8b97e5de00411
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    
    主节点端口 槽位 从节点端口
    30001 0-5460 30005
    30002 5461-10922 30006
    30003 10923 - 16383 30004
    步骤三:查看进程
    [root@dtinone create-cluster]# ps -ef | grep redis
    [root@node-01 create-cluster]# ps -ef | grep redis
    root       2392      1  0 17:14 ?        00:00:00 ../../src/redis-server *:30001 [cluster]
    root       2394      1  0 17:14 ?        00:00:00 ../../src/redis-server *:30002 [cluster]
    root       2402      1  0 17:14 ?        00:00:00 ../../src/redis-server *:30003 [cluster]
    root       2404      1  0 17:14 ?        00:00:00 ../../src/redis-server *:30004 [cluster]
    root       2409      1  0 17:14 ?        00:00:00 ../../src/redis-server *:30005 [cluster]
    root       2417      1  0 17:14 ?        00:00:00 ../../src/redis-server *:30006 [cluster]
    root       2431   1495  0 17:18 pts/0    00:00:00 grep --color=auto redis                            
    

    说明已经创建了 6 个 redis 进程实例,端口号分别是 30001- 30006

    步骤四:查看集群环境
    [root@node-01 redis-5.0.9]# src/redis-cli -c -p 30001  # -c:表示连接的集群环境
    127.0.0.1:30001> cluster nodes # 查看集群节点信息
    127.0.0.1:30003@40003 master - 0 1615540917054 3 connected 10923-16383
    127.0.0.1:30005@40005 slave  0 1615540917054 5 connected
    127.0.0.1:30006@40006 slave  0 1615540917254 6 connected
    127.0.0.1:30002@40002 master - 0 1615540917153 2 connected 5461-10922
    127.0.0.1:30004@40004 slave  0 1615540916449 4 connected
    127.0.0.1:30001@40001 myself,master - 0 1615540916000 1 connected 0-5460
    

    集群中确实是 3 个主节点,3 个 从节点

    步骤五:测试集群环境

    向集群端口 30001 的主节点存储数据,如下:

    127.0.0.1:30001> set name zhangsan
    -> Redirected to slot [5798] located at 127.0.0.1:30002
    OK
    127.0.0.1:30002> 
    

    结果显示,数据存储到端口为 30002 的主节点。

    原因是存储数据分配的槽位是 5798,30002主节点的槽位是 [5461-10922],所以应该存储到 30002 主节点上。

    127.0.0.1:30002> get name
    "zhangsan"
    

    在 30002 主节点上确实可以查看数据。

    步骤六:测试集群故障转移

    为了触发故障转移,我们可以做的最简单的事情(也就是在分布式系统中可能出现的语义上最简单的故障)是使单个进程崩溃,如下:

    [root@node-01 redis-5.0.9]# src/redis-cli -c -p 30001 debug segfault
    Error: Server closed the connection
    

    可以看到,端口号为 30001 的主节点被我们搞崩溃了,这时查看集群节点状态,如下

    [root@node-01 redis-5.0.9]# src/redis-cli -c  -p 30002
    127.0.0.1:30002> cluster nodes
    127.0.0.1:30003@40003 master - 0 1615541662157 3 connected 10923-16383
    127.0.0.1:30004@40004 slave  0 1615541661655 4 connected
    127.0.0.1:30005@40005 master - 0 1615541661655 7 connected 0-5460 # 成为新的主节点
    127.0.0.1:30002@40002 myself,master - 0 1615541662000 2 connected 5461-10922
    127.0.0.1:30006@40006 slave  0 1615541661655 6 connected
    127.0.0.1:30001@40001 master,fail - 1615541651480 1615541651077 1 disconnected
    

    可以看到,端口 30001的主节点,显示为 fail,而它的从节点是端口 30005,现在已经切换为主节点,说明集群故障转移成功。

    作者:Binge
    本文版权归作者和博客园共有,转载必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    关于同时上传多个图片的类(有点粗糙)
    关于上传图片的类(有点粗糙)
    关于分页的类(有点粗糙)
    php是什么
    关于glod方法的使用和介绍
    PHP中从数据库获取查询结果时容易出的错误及原因(smarty)
    转载- 支持Android4.0以下webp的使用
    Android用户体验
    转载-Android数据库高手秘籍(一)——SQLite命令
    转载 -安卓开发-Activity中finish() onDestroy() 和System.exit()的区别
  • 原文地址:https://www.cnblogs.com/binbingg/p/14543525.html
Copyright © 2011-2022 走看看