• Redis Cluste部署


    一.原生搭建篇Cluster了解cluster的架构

    Redis-cluster是使用的是一致性哈希算法来切分数据存储,总计16383个槽,分成16383/N(redis节点)个分区,存取时将key转换成int,key/16383来决定存取在哪个分区。

    1.redis.conf配置文件中开启支持cluster集群,改名字为redis-cluster-7000.conf(方便后面集群管理)

    port 7000
    daemonize yes
    pidfile /var/run/redis-7000.pid
    dir /opt/module/redis-cluster/data
    logfile "7000.log"
    dbfilename "dump-7000.rdb"
    #开启集群
    cluster-enabled yes
    #集群中本节点配置文件名 自动生成
    cluster-config-file nodes-7000.conf
    #当集群中某个节点挂了,整个集群是否停止服务,设置成no 继续提供服务
    cluster-require-full-coverage no

    2.用上面的配置文件启动redis,确保配置文件没问题

    3.sed命令生成其他节点的配置文件

    sed "s/7000/7001/g" redis-cluster-7000.conf >redis-cluster-7001.conf 
    sed "s/7000/7002/g" redis-cluster-7000.conf >redis-cluster-7002.conf 
    sed "s/7000/7003/g" redis-cluster-7000.conf >redis-cluster-7003.conf 
    sed "s/7000/7004/g" redis-cluster-7000.conf >redis-cluster-7004.conf 
    sed "s/7000/7005/g" redis-cluster-7000.conf >redis-cluster-7005.conf 
    sed "s/7000/7006/g" redis-cluster-7000.conf >redis-cluster-7006.conf 

    4.启动每个节点 redis-server redis-cluster-700(1~6).conf

    启动后会生成相应的nodes-700(0~6).conf文件。该文件列出了群集中其他节点,它们的状态,持久变量等等。 由于某些消息的接收,通常会将此文件重写并刷新到磁盘上。

    5.每个节点互通(meet)

    meet通信,保证每个节点能够知道其他节点负责的槽区间。

    结构图:

     

    官方:

    请注意,Redis 群集需要形成完整的网格(每个节点与其他节点相连,如上图),但为了创建群集,不需要发送形成完整网格所需的所有 CLUSTER MEET 命令。重要的是发送足够的 CLUSTER MEET 消息,以便每个节点都可以通过一系列已知节点到达每个其他节点。

    所以只需要有一条通路就可以

    进去7000的节点,执行cluster meet 与其他节点通信

    redis-cli -p 7000
    CLUSTER MEET 127.0.0.1 7001
    CLUSTER MEET 127.0.0.1 7002
    CLUSTER MEET 127.0.0.1 7003
    CLUSTER MEET 127.0.0.1 7004
    CLUSTER MEET 127.0.0.1 7005
    CLUSTER MEET 127.0.0.1 7006

    6.查看是否连通

    redis-cli -p 7000 cluster info
    #结果: cluster_state:fail #集群状态 cluster_slots_assigned:
    0 #被分配的槽位数 cluster_slots_ok:0 #正确分配的槽位 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:7 #当前集群下的所有节点,包括主从节点,7说明通了 cluster_size:0 #当前集群下的有槽位分配的节点,即主节点 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:1391 cluster_stats_messages_pong_sent:1375 cluster_stats_messages_meet_sent:6 cluster_stats_messages_sent:2772 cluster_stats_messages_ping_received:1375 cluster_stats_messages_pong_received:1397 cluster_stats_messages_received:2772

    7.分配槽

    采用的是一致性哈希算法,来分配总共给定的16383个槽,此处为了方便就均分了,实际开发中建议根据服务器配置分配。

    这里使用7001-7003作为主节点 7004-7006做从节点

    #此处的分配规则
    7001   0~5000
    7002   5001~10000
    7003   10001~16383
    #代码:
    redis-cli -p 7001 CLUSTER ADDSLOTS 5000
    redis-cli -p 7002 CLUSTER ADDSLOTS 10000
    redis-cli -p 7003 CLUSTER ADDSLOTS 16838

    结构图:

     

    8.配置主从

    这里需要用到Nodeid,第一步中配置生成的文件中可以看

    #第一步的配置  可以查看nodes-7000.conf这个文件
    cluster-config-file nodes-7000.conf

    一一对应:红框为Nodeid

    进入每个主节点用 cluster replicate <Nodeid>

    redis-cli -p 7001 cluster replicate da47d14c9e4079ad0973546027f598aab3596fff

    查看结果

    redis-cli -p 7001 cluster nodes

    到此原生配置完成。

    下一篇开始Ruby快速搭建Cluster集群。

    由于Redis5+移除掉了Ruby,官方说明Redis-trib.rb移到Redis-cli -cluster命令,下一篇没了。

    使用redis-cli --cluster快速搭建集群

    #前面步骤一样
    1.配置主从
    多个主从使用""隔离开
    <几个从>指定多少个从节点
    # redis-cli --cluster create <主:port>  <从1:port> <从2:port>  <主1> > <从1> .... --cluster-replicas <几个从>
    ./redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7004  127.0.0.1:7002 127.0.0.1:7005  127.0.0.1:7003 127.0.0.1:7006 --cluster-replicas 1

    2.分配槽

    #reshard host:port
    #  --cluster-from <arg>
    #  --cluster-to <arg>
    #  --cluster-slots <arg>
    #  --cluster-yes
    #  --cluster-timeout <arg>
    #  --cluster-pipeline <arg>
    #  --cluster-replace

    ./redis-cli --cluster reshard 127.0.0.1:7001 --cluster-from 0 --cluster-to 5000

  • 相关阅读:
    FIS
    git笔记 常规使用
    隐藏文字
    清除浮动的几种方法
    chrome livestyle插件
    Vue3中的微任务队列解析
    JavaScript通过父节点ID递归生成JSON树
    JavaScripts调用摄像头【MediaDevices.getUserMedia()】
    JavaScripts之变量作用域提升问题
    Webpack之 webpack-dev-server 中的 contentBase配置及作用
  • 原文地址:https://www.cnblogs.com/Innocent-of-Dabber/p/11597030.html
Copyright © 2020-2023  润新知