Redis集群的搭建、维护、运营的相关命令与工具介绍
一、概述
此教程主要介绍redis集群的搭建(Linux),集群命令的使用,redis-trib.rb工具的使用,此工具是ruby语言写的,用于集群搭建、集群维护,是官方发布的小工具。而redis怎么获得,怎么编译,请在网上查找其他教程,或者访问redis官网有非常详细的介绍(https://redis.io/download)
二、集群的搭建
1.1前期准备工作
d 支持集群的redis最低版本为redis3.0,最少9个redis实例,3个为master,6个slave,每个master跟2个slave。
d 建议最少3台网络相互独立的服务器,每个服务器运行1个master,2个slave,共3个redis实例。
d 三台服务器的操作系统建议使用Linux CentOS 7.x版本。
d 每个实例需要2个TCP监听端口,一个为普通端口,一个为总线端口,后者在前者的基础上固定+10000,所以只有普通端口是可指定的。总线端口是依赖于普通端口的。
1.2集群参数配置
d 准备3台Linux服务器13、14、15。
d 在3个服务器创建目录“/usr/local/src/cluster”,然后在cluster中以端口名分别创建三个目录,13001、13002、13003,14001、14002、14003,15001、15002、15003。
d 在9个目录中安装(或者直接复制)redis实例。这些实例我们称之为结点(node),然后进入参数配置环节。
d 每个结点目录下有一个redis.conf文件,用编辑工具打开此文件进行编辑:
port 13001/13002/13003/14001/14002/14003/15001/15002/15003
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
1.3创建集群
创建集群有一个官方发布的专业工具:redis-trib.rb,它是Ruby语言开发的,随redis源码一起发布,在src目录下面,与集群相关的工作可以通过此工具来完成。
d 安装redis-trib运行环境:redis gem,运行以下命令
gem install redis
d 创建集群,通过以下命令,启动所有实例(9个)
./redis-server ../redis.conf
然后再把所有实例,按集群方式运行,运行以下命令:
./redis-trib.rb create --replicas 2 192.168.1.13:13001 192.168.1.14:14002 192.168.1.15:15002
192.168.1.14:14001 192.168.1.13:13002 192.168.1.15:15003 192.168.1.15:15001 192.168.1.13:
13003 192.168.1.14:14003
create为关键字,表示创建,--relicas 2表示每个主结点跟着2个从结点。如果成功将出现以下提示:
[OK] All 16384 slots covered
1.4测试
以下的测试实例:
[root@Centos13 13001]# ./src/redis-cli -h 192.168.1.13 -p 13001
192.168.1.13:13001> set foo bar
(error) MOVED 12182 192.168.1.14:14003
192.168.1.13:13001>
[root@Centos13 13001]# ./src/redis-cli -h 192.168.1.14 -p 14003
192.168.1.14:14003> set foo bar
OK
关于集群的运行状态更详细的信息,请查看第二章的cluster info命令与第三章的check、info命令。
三、集群redis命令
3.1CLUSTER REPLICATE node-id
把某个节点指定给某个主服务做从服务
接收命令的接点为空的主节点(此命令一般针对从节点的)的话,它将变成从的角色(似乎意思是说,如果它是一个非空的主的话,此命令是不能执行的)。
只要满足以下条件,从节点都能接收此命令:
指定的node id在node表时是存在的
node id不是我们发命令的节点的id(不能自己给自己发)
node id是个主服务
当以下条件满足时,即使接收命令的节点是一个主节点,也能成功:
接收命令的结点没有给任何槽服务
接收命令的结点是个空结点,没有任何键
3.2CLUSTER INFO
打印集群的信息
3.3CLUSTER NODES
列出集群当前已知的所有节点(node),以及这些节点的相关信息。
3.4CLUSTER MEET <ip> <port>
将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
3.5CLUSTER FORGET <node_id>
从集群中移除 node_id 指定的节点。
3.6CLUSTER REPLICATE <node_id>
将当前节点设置为 node_id 指定的节点的从节点。
3.7CLUSTER SAVECONFIG
将节点的配置文件保存到硬盘里面。
3.8CLUSTER ADDSLOTS <slot> [slot ...]
将一个或多个槽(slot)指派(assign)给当前节点。
3.9CLUSTER DELSLOTS <slot> [slot ...]
移除一个或多个槽对当前节点的指派。
3.10CLUSTER FLUSHSLOTS
移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
3.11CLUSTER SETSLOT <slot> NODE <node_id>
将槽 slot 指派给 node_id 指定的节点。
3.12CLUSTER SETSLOT <slot> MIGRATING <node_id>
将本节点的槽 slot 迁移到node_id 指定的节点中。
3.13CLUSTER SETSLOT <slot> IMPORTING <node_id>
从 node_id 指定的节点中导入槽slot 到本节点。
3.14CLUSTER SETSLOT <slot> STABLE
取消对槽 slot 的导入(import)或者迁移(migrate)。
3.15CLUSTER KEYSLOT <key>
计算键 key 应该被放置在哪个槽上。
3.16CLUSTER COUNTKEYSINSLOT <slot>
返回槽 slot 目前包含的键值对数量。
3.17CLUSTER GETKEYSINSLOT <slot> <count>
返回 count 个 slot 槽中的键。
3.18CLUSTER SLAVES node-id
返回一个master节点的slaves列表
四、redis-trib工具命令
4.1create创建集群
d create命令可选replicas参数,replicas表示需要有几个slave。最简单命令使用如下:
redis-trib.rb create 10.180.157.199:6379 10.180.157.200:6379 10.180.157.201:6379
d 有一个slave的创建命令如下:
redis-trib.rb create --replicas 1 10.180.157.199:6379 10.180.157.200:6379 10.180.157.201:6379 10.180.157.202:6379 10.180.157.205:6379 10.180.157.208:6379
d 创建流程如下:
1、首先为每个节点创建ClusterNode对象,包括连接每个节点。检查每个节点是否为独立且db为空的节点。执行load_info方法导入节点信息。
2、检查传入的master节点数量是否大于等于3个。只有大于3个节点才能组成集群。
3、计算每个