Redis集群

2018-12-24 09:10:46来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

  对于redis集群的搭建,redis的3或4版本和redis5版本的命令是不一样的,redis5.x以上的版本,对于集群的创建更加的简单,会经常使用命令redis-cli。接下来看一下,在一台电脑上,如何实现redis的集群。

一、下载和安装

  首先在官网下载redis的稳定版本,下载地址是:https://redis.io/download,目前稳定的最新版本是5.0.3,下载之后,先使用命令tar -zxvf redis-5.0.3.tar.gz,对压缩包进行解压。

  进入redis-5.0.3目录,执行命令make,进行编译,编译完成之后,执行命令make install进行安装,一直等到结束,则redis安装成功。

二、集群的搭建

  在/var/local/目录下,执行命令mkdir redis-cluster,创建目录,进入redis-cluster目录,执行命令mkdir 5001 5002 5003 5004 5005 5006,创建6个目录,用于存放配置文件,模拟6台机器。然后将redis-5.0.3里的redis.conf拷贝到/var/local/redis-cluster/5001/这个文件夹下面,对其文件进行修改,修改内容如下:

port 5001

daemonize yes

pidfile /var/run/redis_5001.pid

dir /var/local/redis-cluster/5001/

appendonly yes

cluster-enabled yes

cluster-config-file nodes-5001.conf

cluster-node-timeout 15000

然后将修改之后的redis.conf文件拷贝到5002 5003 5004 5005 5006文件夹下,将里面的5001替换为对应的文件夹名称即可。

接下来创建集群,redis3或4的版本使用工具redis-trib.rb,需要安装redisgem才能运行redis-trib,执行命令gem install redis

./root/redis-5.0.3/srcredis-trib.rb create --replicas 1 127.0.0.1:5001 127.0.0.1:5002 127.0.0.1:5003 127.0.0.1:5004 127.0.0.1:5005 127.0.0.1:5006

--replicas 1 这个意思是每个主服务器都有一个从服务器

redis5.x版本使用工具redis-cli,执行创建集群的命令:

redis-cli --cluster create 127.0.0.1:5001 127.0.0.1:5002 127.0.0.1:5003 127.0.0.1:5004 127.0.0.1:5005 127.0.0.1:5006 --cluster-replicas 1

Redis-cli将为您提供配置。键入yes接受建议的配置将配置并加入群集,这意味着实例将被引导为彼此通信。最后,如果一切顺利,你会看到这样的消息:

这意味着至少有一个主实例为16384个可用插槽提供服务。

1、执行命令查看集群信息

5001 5002 5003是主服务器,5004是5001的从服务器,5005是5002的从服务器,5006是5003的从服务器

2、在5001客户端下执行set name foo,然后看看在5003下能否获取到name的值

这个意思是将值存到了5002的5798槽位上了

在5004里也能获取到这个值,说明集群搭建成功。

三、动态扩容

1、动态增加主节点

  在/var/local/redis-cluster/文件夹下,创建5007文件夹,然后再从5001文件夹下拷贝redis.conf文件过来,将文件里所有的5001替换为5007,然后执行 redis-server /var/local/redis-cluster/5007/redis.conf命令,启动5007节点。

  接下来需要往集群里动态增加节点了,可以执行redis-cli --cluster help命令查看如何操作。

执行命令redis-cli --cluster add-node 127.0.0.1:5007 127.0.0.1:5001,第一个参数是要添加的新节点,第二个参数是集群里存在的任意节点

看到跟这一样的输出信息,说明新节点加入集群成功。但是此时,它是主节点,但是没有任何槽位。

执行命令redis-cli --cluster reshard 127.0.0.1:5007分配槽位

How many slots do you want to move (from 1 to 16384)? 500意思是要给这个新的主节点分配500槽位(solt)

What is the receiving node ID? b17a37dbfe82bea0fef90160536577cc019f0505意思是接收这个槽位的节点id是b17a37dbfe82bea0fef90160536577cc019f0505

这个意思是从所以的节点里选出500个槽位

Do you want to proceed with the proposed reshard plan (yes/no)? yes 意思是开始执行这个计划

查看集群信息 :

可以看到5007上也分配到了槽位,这样就算完成了动态增加主节点。

2、动态增加从节点

  在/var/local/redis-cluster/文件夹下,创建5008文件夹,然后再从5001文件夹下拷贝redis.conf文件过来,将文件里所有的5001替换为5008,然后执行 redis-server /var/local/redis-cluster/5008/redis.conf命令,启动5008节点。

  执行命令redis-cli --cluster add-node 127.0.0.1:5008 127.0.0.1:5001 --cluster-slave --cluster-master-id b17a37dbfe82bea0fef90160536577cc019f0505,第一个参数是要添加的新节点,第二个参数是集群里存在的任意节点 ,--cluster-slave是说明这个新节点是从节点, --cluster-master-id是要把此节点作为谁的从节点,如果不加这个参数的话,会默认分配给从节点数量少的那个主节点。

查看集群信息:

可以看到5008节点已加入集群,并作为了5007的从节点。

四、删除节点

1、删除从节点

  执行命令redis-cli --cluster del-node 127.0.0.1:5008 cbae5d371f1f043808ea49df7a901cab3af1f7e2,删除5008节点

说明删除成功。

查看集群信息:

可以看到集群中已经没有了5008节点。

2、删除主节点

   删除主节点之前得先把主节点上的槽位分给其他主节点,这样才能删除,如果有槽位,则不允许删除。

  第一步先分片给其他节点

What is the receiving node ID? 意思是哪个节点接收这这些槽位,可以随便写一个主节点的Id

Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1: b17a37dbfe82bea0fef90160536577cc019f0505
Source node #2: done意思是槽位的来源是5007节点

Do you want to proceed with the proposed reshard plan (yes/no)? yes意思是执行计划

  第二步删除节点

查看集群信息:

可以看到原来的主节点5007已经不在集群里了,而且5007和5008的服务也被停止了

  总结:redis的数据是存放在槽位里的,如果需要扩容的时候,其实是把槽位分配给新的节点,总的槽位就是16384个。从节点是没有槽位的,它的数据与之对应的主节点数据保持一致,当主节点宕机的时候,从节点可以成为主节点继续提供服务,但是主节点和从节点都宕机了,则将不再提供服务。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:shiro源码篇 - 疑问解答与系列总结,你值得拥有

下一篇:MySql/Oracle树形结构查询