redis集群搭建

环境

  • CentOS7 操作系统
  • 已安装好的Redis,具体安装看上一篇

集群搭建

同台机器集群搭建
  1. 创建文件夹
    我们设计集群中 Redis 节点的端口号为 9000-9005,端口号即集群下各实例文件夹。数据存放在 端口号/data 文件夹中。

    1
    2
    3
    # mkdir /opt/redis_cluster
    # cd /opt/redis_cluster
    # mkdir -p 9000/data 9001/data 9002/data 9003/data 9004/data 9005/data
  2. 复制一个redis.conf文件到9000目录下,并修改
    从源码包中复制配置文件并修改

    1
    2
    # cp /opt/redis-4.0.11/redis.conf /opt/redis_cluster/9000
    # vi /opt/redis_cluster/9000/redis.conf

    重点修改以下配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    port 9000(每个节点的端口号)
    daemonize yes
    #bind 127.0.0.1(绑定当前机器 IP,可以不配置)
    dir /opt/redis_cluster/9000/data/(数据文件存放位置)
    pidfile /var/run/redis_9000.pid(pid 9000和port要对应)
    cluster-enabled yes(启动集群模式)
    cluster-config-file nodes9000.conf(9001和port要对应)
    cluster-node-timeout 15000
    appendonly yes
    protected-mode no(保护模式设置为no,如果启用了,则只能够通过lookback ip(127.0.0.1)访问Redis cache)
  3. 把配置好的复制5份

    1
    2
    3
    4
    5
    # cp -rf /opt/redis_cluster/9000/* /opt/redis_cluster/9001
    # cp -rf /opt/redis_cluster/9000/* /opt/redis_cluster/9002
    # cp -rf /opt/redis_cluster/9000/* /opt/redis_cluster/9003
    # cp -rf /opt/redis_cluster/9000/* /opt/redis_cluster/9004
    # cp -rf /opt/redis_cluster/9000/* /opt/redis_cluster/9005
  4. 挨个修改实例的配置文件
    通过搜索会发现其实只有四个点需要修改,我们全局替换下吧,进入相应的节点文件夹,做替换就好了,不放心再手工检查下

    1
    2
    # vi /opt/redis_cluster/9001/redis.conf
    :%s/9001/9002
  5. 启动

    1
    2
    3
    4
    5
    6
    # /usr/local/bin/redis-server /opt/redis_cluster/9000/redis.conf
    # /usr/local/bin/redis-server /opt/redis_cluster/9001/redis.conf
    # /usr/local/bin/redis-server /opt/redis_cluster/9002/redis.conf
    # /usr/local/bin/redis-server /opt/redis_cluster/9003/redis.conf
    # /usr/local/bin/redis-server /opt/redis_cluster/9004/redis.conf
    # /usr/local/bin/redis-server /opt/redis_cluster/9005/redis.conf
  6. 检查是否启动成功

    1
    2
    # ps -ef |grep redis
    # /usr/local/bin/redis-cli -h 127.0.0.1 -p 9000

    连接成功,set值会报(error) CLUSTERDOWN Hash slot not served错误,原因是实例之间无法相互发现,我们继续

  7. 安装集群所需软件
    由于 Redis 集群是用ruby实现的集群管理,所以安装ruby相关软件

    1
    2
    3
    # yum install ruby
    # yum install rubygems
    # gem install redis

    此处需要安装大于等于2.2的ruby版本

  8. 配置集群
    通过redis-trib.rb命令创建集群,如果/usr/local/bin/目录没有,从源码包拷贝一个即可

    1
    # /usr/local/bin/redis-trib.rb create --replicas 1 127.0.0.1:9000 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:9003 127.0.0.1:9004 127.0.0.1:9005

    交互过程中输入yes,同意即可,–replicas 1表示主从复制比例为 1:1,即一个主节点对应一个从节点

  9. 验证

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
      # /usr/local/bin/redis-cli -h 127.0.0.1 -p 9000
    127.0.0.1:9000> cluster info
    cluster_state:ok
    cluster_slots_assigned:16384
    cluster_slots_ok:16384
    cluster_slots_pfail:0
    cluster_slots_fail:0
    cluster_known_nodes:6
    cluster_size:3
    cluster_current_epoch:6
    cluster_my_epoch:1
    cluster_stats_messages_ping_sent:1122
    cluster_stats_messages_pong_sent:1060
    cluster_stats_messages_sent:2182
    cluster_stats_messages_ping_received:1060
    cluster_stats_messages_pong_received:1102
    cluster_stats_messages_received:2162
    127.0.0.1:9000> cluster nodes
    4f8c920acc559c11153c5aaf856820ca39c443cb 10.200.1.11:9000@19000 myself,master - 0 1544424469000 1 connected 0-5460
    ec2af1f981c08bf01131545369c0600b91c5172c 10.200.1.11:9004@19004 slave 4f8c920acc559c11153c5aaf856820ca39c443cb 0 1544424468000 5 connected
    bcc85b3502c107f18557d11889739a2b6f0ed896 10.200.1.11:9003@19003 slave aadb89ee25e9849e758529c477f9af6ede99850a 0 1544424467000 4 connected
    923d1b67ee012927bf4de345143d5f93670c97b5 10.200.1.11:9001@19001 master - 0 1544424468909 2 connected 5461-10922
    aadb89ee25e9849e758529c477f9af6ede99850a 10.200.1.11:9002@19002 master - 0 1544424469920 3 connected 10923-16383
    70fad7237c2e8bb308167f7e8b7a7b670d333564 10.200.1.11:9005@19005 slave 923d1b67ee012927bf4de345143d5f93670c97b5 0 1544424468000 6 connected
    127.0.0.1:9000>

    通过命令,可以详细的看出集群信息和各个节点状态,主从信息以及连接数、槽信息等

  10. 测试

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # /usr/local/bin/redis-cli -c -h 10.200.1.11 -p 9000
    10.200.1.11:9000> set name test
    -> Redirected to slot [5798] located at 10.200.1.11:9001
    OK
    10.200.1.11:9001> get name
    "test"
    10.200.1.11:9001> keys *
    1) "name"
    2) "cache:test3"
    10.200.1.11:9001>

-c 表示集群模式

不同机器的集群搭建

和同一台机器搭建唯一的区别是通过redis-trib.rb命令创建集群,随便在一个实例上执行即可

参考资料

Redis 集群搭建详细指南