CentOS7上搭建Redis Cluster

Redis 天涯孤鸟 4598℃ 0评论

一、Redis集群介绍

Redis3.0之后,提供了Cluster特性。所以如果想搭建redis-cluster模式,必须要使用reids3.0以上版本。

Redis的几个重要特征:

  • Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。
  • Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.
  • Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Redis 集群的优势:
    自动分割数据到不同的节点上。
    整个集群的部分节点失败或者不可达的情况下能够继续处理命令。

二、环境配置

centos7,redis-3.2.5,ruby,rubygems
要让集群正常工作至少需要3个主节点,在这里我创建6个Redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下:
127.0.0.1 6390
127.0.0.1 6391
127.0.0.1 6392
127.0.0.1 6393
127.0.0.1 6394
127.0.0.1 6395

三、配置Redis

在redis-3.2.5目录下创建六个目录,分别以端口后命名:

创建完之后,将redis.conf分别复制到这六个目录下

然后修改各个目录下的reids.conf文件配置,要搭建redis cluster,最少需要配置下面几个参数

  • cluster-enabled :开启实例的集群模式
  • cluster-config-file:设定了保存节点配置文件的路径, 默认值为 nodes.conf.节点配置文件无须人为修改, 它由 Redis 集群在启动时创建, 并在有需要时自动进行更新。

四、启动Redis

配置完每个节点之后,启动节点:

查看节点运行情况:

接下来创建集群。

创建cluster过程可能会遇到一些问题:
1)、>>> Creating cluster
[ERR] Node 127.0.0.1:6390 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

解决方法:

2)、/usr/local/share/gems/gems/redis-3.3.3/lib/redis/client.rb:121:in call': ERR Slot 741 is already busy (Redis::CommandError)
from /usr/local/share/gems/gems/redis-3.3.3/lib/redis.rb:2705:in
block in method_missing’
from /usr/local/share/gems/gems/redis-3.3.3/lib/redis.rb:58:in block in synchronize'
from /usr/share/ruby/monitor.rb:211:in
mon_synchronize’
from /usr/local/share/gems/gems/redis-3.3.3/lib/redis.rb:58:in synchronize'
from /usr/local/share/gems/gems/redis-3.3.3/lib/redis.rb:2704:in
method_missing’
from ./redis-trib.rb:212:in flush_node_config'
from ./redis-trib.rb:776:in
block in flush_nodes_config’
from ./redis-trib.rb:775:in each'
from ./redis-trib.rb:775:in
flush_nodes_config’
from ./redis-trib.rb:1296:in create_cluster_cmd'
from ./redis-trib.rb:1701:in


解决方法:由于上一次的配置不正确导致的,重新删除节点中node.conf文件,重启节点即可
成功创建的结果如下图所示:


到这里Redis集群已经搭建成功,重截图中的红色框而已看出,这里有三个master节点和三个slave节点。

五、集群测试

上面已经搭建好集群,接来下我们连一个节点进行写入数据,看看是什么效果?


往集群中写入数据:

会报(error) MOVED 5798 127.0.0.1:6391这个错误,那是因为我们连接redis客户端的时候,没有以集群的方式进行连接导致的。以集群模式连接只需要再加一个-c就可以:

可以看到,以上写入数据的时候,是将数据分配到6391这个节点上的slot为5798上。取值的时候,会从6391节点上的slot为5798插槽取值。

转载请注明:猫头鹰工作室 » CentOS7上搭建Redis Cluster

喜欢 (1)or分享 (0)
Avatar
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址