美文网首页
redis 测试集群搭建

redis 测试集群搭建

作者: sT丶 | 来源:发表于2017-12-20 09:17 被阅读0次

    Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation)。

    Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 Redis 节点之间移动数据, 并且在高负载的情况下, 这些命令将降低 Redis 集群的性能, 并导致不可预测的行为。

    Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。

    Redis 集群提供了以下两个好处:

    将数据自动切分(split)到多个节点的能力。
    当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力。

    1. 配置文件
      如果,需要配置集群,最小的配置文件如下
    port 7000
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    appendonly yes
    

    文件中的 cluster-enabled 选项用于开实例的集群模式, 而 cluster-conf-file 选项则设定了保存节点配置文件的路径, 默认值为 nodes.conf 。

    节点配置文件无须人为修改, 它由 Redis 集群在启动时创建, 并在有需要时自动进行更新。

    要让集群正常运作至少需要三个主节点, 不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。

    首先, 让我们进入一个新目录, 并创建六个以端口号为名字的子目录, 稍后我们在将每个目录中运行一个 Redis 实例:

    mkdir cluster-test
    cd cluster-test
    mkdir 7000 7001 7002 7003 7004 7005
    

    在文件夹 7000 至 7005 中, 各创建一个 redis.conf 文件, 文件的内容可以使用上面的示例配置文件, 但记得将配置中的端口号从 7000 改为与文件夹名字相同的号码。

    #每个目录下的端口一定要保证不一样,否则不能使用
    port 7000
    cluster-enabled yes
    #每个目录下的nodes.conf 一定要保证不一样,否则不能使用
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    appendonly yes
    #可以加入 守护进程,后台运行
    daemonize yes
    

    从编译安装好的redis src目录中,复制redis-server到cluster-test 文件夹, 然后使用类似以下命令, 在每个标签页中打开一个实例:

    cd 7000
    ../redis-server ./redis.conf
    

    现在我们已经有了六个正在运行中的 Redis 实例, 接下来我们需要使用这些实例来创建集群, 并为每个节点编写配置文件。

    通过使用 Redis 集群命令行工具 redis-trib , 编写节点配置文件的工作可以非常容易地完成: redis-trib 位于 Redis 源码的 src 文件夹中, 它是一个 Ruby 程序, 这个程序通过向实例发送特殊命令来完成创建新集群, 检查集群, 或者对集群进行重新分片(reshared)等工作。

    我们需要执行以下命令来创建集群:

    ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001  127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
    

    以上命令,基于ruby,具体安装可以参考

    http://www.jianshu.com/p/d51fae8450c4

    命令的意义如下:

    给定 redis-trib.rb 程序的命令是 create , 这表示我们希望创建一个新的集群。
    选项 --replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
    之后跟着的其他参数则是实例的地址列表, 我们希望程序使用这些地址所指示的实例来创建新集群。
    简单来说, 以上命令的意思就是让 redis-trib 程序创建一个包含三个主节点和三个从节点的集群。

    接着, redis-trib 会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yes , redis-trib 就会将这份配置应用到集群当中:

    Creating cluster
    Connecting to node 127.0.0.1:7000: OK
    Connecting to node 127.0.0.1:7001: OK
    Connecting to node 127.0.0.1:7002: OK
    Connecting to node 127.0.0.1:7003: OK
    Connecting to node 127.0.0.1:7004: OK
    Connecting to node 127.0.0.1:7005: OK
    Performing hash slots allocation on 6 nodes...
    Using 3 masters:
    127.0.0.1:7000
    127.0.0.1:7001
    127.0.0.1:7002
    127.0.0.1:7000 replica #1 is 127.0.0.1:7003
    127.0.0.1:7001 replica #1 is 127.0.0.1:7004
    127.0.0.1:7002 replica #1 is 127.0.0.1:7005
    M: 9991306f0e50640a5684f1958fd754b38fa034c9 127.0.0.1:7000
    slots:0-5460 (5461 slots) master
    M: e68e52cee0550f558b03b342f2f0354d2b8a083b 127.0.0.1:7001
    slots:5461-10921 (5461 slots) master
    M: 393c6df5eb4b4cec323f0e4ca961c8b256e3460a 127.0.0.1:7002
    slots:10922-16383 (5462 slots) master
    S: 48b728dbcedff6bf056231eb44990b7d1c35c3e0 127.0.0.1:7003
    S: 345ede084ac784a5c030a0387f8aaa9edfc59af3 127.0.0.1:7004
    S: 3375be2ccc321932e8853234ffa87ee9fde973ff 127.0.0.1:7005
    Can I set the above configuration? (type 'yes' to accept): yes
    

    输入 yes 并按下回车确认之后, 集群就会将配置应用到各个节点, 并连接起(join)各个节点 —— 也即是, 让各个节点开始互相通讯:

    Nodes configuration updated
     Sending CLUSTER MEET messages to join the cluster
    Waiting for the cluster to join...
    Performing Cluster Check (using node 127.0.0.1:7000)
    M: 9991306f0e50640a5684f1958fd754b38fa034c9 127.0.0.1:7000
    slots:0-5460 (5461 slots) master
    M: e68e52cee0550f558b03b342f2f0354d2b8a083b 127.0.0.1:7001
    slots:5461-10921 (5461 slots) master
    M: 393c6df5eb4b4cec323f0e4ca961c8b256e3460a 127.0.0.1:7002
    slots:10922-16383 (5462 slots) master
    M: 48b728dbcedff6bf056231eb44990b7d1c35c3e0 127.0.0.1:7003
    slots: (0 slots) master
    M: 345ede084ac784a5c030a0387f8aaa9edfc59af3 127.0.0.1:7004
    slots: (0 slots) master
    M: 3375be2ccc321932e8853234ffa87ee9fde973ff 127.0.0.1:7005
    slots: (0 slots) master
    [OK] All nodes agree about slots configuration.
    

    如果一切正常的话, redis-trib 将输出以下信息:

    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    

    这表示集群中的 16384 个槽都有至少一个主节点在处理, 集群运作正常。
    本文参考

    http://redisdoc.com/topic/cluster-tutorial.html

    相关文章

      网友评论

          本文标题:redis 测试集群搭建

          本文链接:https://www.haomeiwen.com/subject/ycuiwxtx.html