Redis系列学习(四)Redis Cluster搭建

来源:互联网 发布:java工程师面试题大全 编辑:程序博客网 时间:2024/06/14 21:28

Redis Cluster搭建

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

准备redis节点

  • Redis下载并解压

    redis是在3.0以后才支持集群部署,所以我这就简单了直接下载最新的版本来使用:http://download.redis.io/releases/redis-4.0.6.tar.gz(截止2017-12-18)。

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 6379cp -r 6379 6380cp -r 6379 6381cp -r 6379 6382cp -r 6379 6383cp -r 6379 6384

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

  • 启动6个Redis

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

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

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

节点之间关联(meet)

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

127.0.0.1:6379> cluster meet 127.0.0.1 6380OK

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

127.0.0.1:6379> cluster meet 127.0.0.1 6381OK127.0.0.1:6379> cluster meet 127.0.0.1 6382OK127.0.0.1:6379> cluster meet 127.0.0.1 6383OK127.0.0.1:6379> cluster meet 127.0.0.1 6384OK

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

127.0.0.1:6379> cluster nodesa81a469e72e5287e371245d4c447032280a43985 127.0.0.1:6380@16380 master - 0 1513590576000 3 connectede330c5ee3fca8529b7a1a4b6b90e0681a5d94aba 127.0.0.1:6382@16382 master - 0 1513590576000 0 connected6830059fe7cd9b0f485935b9675c7b99f0ea5ed5 127.0.0.1:6384@16384 master - 0 1513590577486 0 connected288a76e10524bf1f8605ee25403b25f32a41357e 127.0.0.1:6379@16379 myself,master - 0 1513590576000 1 connected492f1b479e90cd96c4428f7e847405f9e4432822 127.0.0.1:6383@16383 master - 0 1513590576477 4 connected872c0fbc8945e1a598a03674bea2a8c978d1969e 127.0.0.1:6381@16381 master - 0 1513590576000 2 connected

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

分配数据槽

先用cluster info查看下slots的情况

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

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

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

再通过 cluster info查看集群状态

127.0.0.1:6379> cluster infocluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:6cluster_size:3cluster_current_epoch:5cluster_my_epoch:1cluster_stats_messages_ping_sent:5037cluster_stats_messages_pong_sent:5092cluster_stats_messages_meet_sent:5cluster_stats_messages_publish_sent:45cluster_stats_messages_sent:10179cluster_stats_messages_ping_received:5092cluster_stats_messages_pong_received:5042cluster_stats_messages_publish_received:11cluster_stats_messages_received:10145
127.0.0.1:6379> cluster nodesa81a469e72e5287e371245d4c447032280a43985 127.0.0.1:6380@16380 master - 0 1513595690817 3 connected 5462-10922e330c5ee3fca8529b7a1a4b6b90e0681a5d94aba 127.0.0.1:6382@16382 slave 288a76e10524bf1f8605ee25403b25f32a41357e 0 1513595691000 1 connected6830059fe7cd9b0f485935b9675c7b99f0ea5ed5 127.0.0.1:6384@16384 slave 872c0fbc8945e1a598a03674bea2a8c978d1969e 0 1513595689808 5 connected288a76e10524bf1f8605ee25403b25f32a41357e 127.0.0.1:6379@16379 myself,master - 0 1513595689000 1 connected 0-5461492f1b479e90cd96c4428f7e847405f9e4432822 127.0.0.1:6383@16383 slave a81a469e72e5287e371245d4c447032280a43985 0 1513595691825 4 connected872c0fbc8945e1a598a03674bea2a8c978d1969e 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 288a76e10524bf1f8605ee25403b25f32a41357eOKlocalhost:~/Server/redis-cluster$ redis-cli -p 6383 cluster replicate a81a469e72e5287e371245d4c447032280a43985OKlocalhost:~/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