Redis Cluster搭建

  • 准备redis节点
  • 节点之间关联
  • 分配数据槽

准备redis节点

tar zxf redis-4.0.6.tar.gz

  • Redis编译安装

cd redis-4.0.6
make & make install

  • Redis Cluster 配置

集群一般会有多个节点组成,节点数量一般会设置成6个才能确保高复用,
在redis.conf文件中修改如下:

port 6379
daemonize yes (设置是否后台启动,默认为no)
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000

其他配置和单机版的一致。

为了目录结构明了,我搭建的6个节点分别使用端口作为目录名,所以如下:

mv redis-4.0.6 6379
cp -r 6379 6380
cp -r 6379 6381
cp -r 6379 6382
cp -r 6379 6383
cp -r 6379 6384

各自修改redis.conf文件的信息,所不同的是port和nodes-6379.conf,都修改为一致的端口号即可。

  • 启动6个Redis

我们可以创建一个start-all.sh脚本用来启动所有redis服务器

redis-server 6379/redis.conf
redis-server 6380/redis.conf
redis-server 6381/redis.conf
redis-server 6382/redis.conf
redis-server 6383/redis.conf
redis-server 6384/redis.conf

可以通过查看日志看是否启动完成。

节点之间关联(meet)

节点之间关联是集群之间通信的第一步,可以使用命令发起: cluster meet ip port

127.0.0.1:6379> cluster meet 127.0.0.1 6380
OK

然后可以让所有的节点互相连接:

127.0.0.1:6379> cluster meet 127.0.0.1 6381
OK
127.0.0.1:6379> cluster meet 127.0.0.1 6382
OK
127.0.0.1:6379> cluster meet 127.0.0.1 6383
OK
127.0.0.1:6379> cluster meet 127.0.0.1 6384
OK

用 cluster nodes命令可以查看所有集群已连接的节点

127.0.0.1:6379> cluster nodes
a81a469e72e5287e371245d4c447032280a43985 127.0.0.1:6380@16380 master - 0 1513590576000 3 connected
e330c5ee3fca8529b7a1a4b6b90e0681a5d94aba 127.0.0.1:6382@16382 master - 0 1513590576000 0 connected
6830059fe7cd9b0f485935b9675c7b99f0ea5ed5 127.0.0.1:6384@16384 master - 0 1513590577486 0 connected
288a76e10524bf1f8605ee25403b25f32a41357e 127.0.0.1:6379@16379 myself,master - 0 1513590576000 1 connected
492f1b479e90cd96c4428f7e847405f9e4432822 127.0.0.1:6383@16383 master - 0 1513590576477 4 connected
872c0fbc8945e1a598a03674bea2a8c978d1969e 127.0.0.1:6381@16381 master - 0 1513590576000 2 connected

这样集群就搭建完成,但是还无法进行工作。需要为节点分配槽后就可以工作了。

分配数据槽

先用cluster info查看下slots的情况

127.0.0.1:6379> cluster info
cluster_state:fail(不可用)
cluster_slots_assigned:0(暂无slot)
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:0
cluster_current_epoch:5
cluster_my_epoch:1
cluster_stats_messages_ping_sent:23
cluster_stats_messages_pong_sent:34
cluster_stats_messages_meet_sent:5
cluster_stats_messages_sent:62
cluster_stats_messages_ping_received:34
cluster_stats_messages_pong_received:28
cluster_stats_messages_received:62

分配槽空间,可以使用cluster addslots命令,我们按以下数据

redis-cli -p 6379 cluster addslots {0..5461}
OK
redis-cli -p 6380 cluster addslots {5462..10922}
OK
redis-cli -p 6381 cluster addslots {10923..16383}
OK

再通过 cluster info查看集群状态

127.0.0.1:6379> 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:5
cluster_my_epoch:1
cluster_stats_messages_ping_sent:5037
cluster_stats_messages_pong_sent:5092
cluster_stats_messages_meet_sent:5
cluster_stats_messages_publish_sent:45
cluster_stats_messages_sent:10179
cluster_stats_messages_ping_received:5092
cluster_stats_messages_pong_received:5042
cluster_stats_messages_publish_received:11
cluster_stats_messages_received:10145
127.0.0.1:6379> cluster nodes
a81a469e72e5287e371245d4c447032280a43985 127.0.0.1:6380@16380 master - 0 1513595690817 3 connected 5462-10922
e330c5ee3fca8529b7a1a4b6b90e0681a5d94aba 127.0.0.1:6382@16382 slave 288a76e10524bf1f8605ee25403b25f32a41357e 0 1513595691000 1 connected
6830059fe7cd9b0f485935b9675c7b99f0ea5ed5 127.0.0.1:6384@16384 slave 872c0fbc8945e1a598a03674bea2a8c978d1969e 0 1513595689808 5 connected
288a76e10524bf1f8605ee25403b25f32a41357e 127.0.0.1:6379@16379 myself,master - 0 1513595689000 1 connected 0-5461
492f1b479e90cd96c4428f7e847405f9e4432822 127.0.0.1:6383@16383 slave a81a469e72e5287e371245d4c447032280a43985 0 1513595691825 4 connected
872c0fbc8945e1a598a03674bea2a8c978d1969e 127.0.0.1:6381@16381 master - 0 1513595689000 2 connected 10923-16383

还有3个节点没有使用,之前设置的3个为主节点,所以剩下的3个设置为从节点,确保主节点异常时,从节点可以继续使用,确保功能正常。使用命令cluster replicate nodeid在从节点上执行即可。

localhost:~/Server/redis-cluster$ redis-cli -h 127.0.0.1 -p 6382 cluster replicate 288a76e10524bf1f8605ee25403b25f32a41357e
OK
localhost:~/Server/redis-cluster$ redis-cli -p 6383 cluster replicate a81a469e72e5287e371245d4c447032280a43985
OK
localhost:~/Server/redis-cluster$ redis-cli -p 6384 cluster replicate 872c0fbc8945e1a598a03674bea2a8c978d1969e

再使用cluster nodes可查看集群状态,这样3主3从的redis集群就搭建完成了。

Redis Cluster关闭

使用redis-cli shuwdown命令即可,但是需要添加-p来指定端口,如果集群是部署在不同机子上且使用默认端口6379,那就无需添加此参数。

redis-cli -p 6379 shuwdown save