1.redis环境搭建
redis的搭建可以查看我的上一篇文章:http://www.jianshu.com/p/6356356abebb
2.redis cluster环境搭建
搭建redis cluster环境最少需要3个主节点,这里参考官网的示例创建6个节点,其中为3个主节点,3从节点,对应的redis节点IP和端口如下:
127.0.0.1:7000
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
127.0.0.1:7004
127.0.0.1:7005
下面是一个最少选项的集群的配置文件
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
创建一个新的目录, 并创建六个以端口号为名字的子目录, 稍后我们在将每个目录中运行一个 Redis 实例: 命令如下:
mkdir cluster-test
cd cluster-test
mkdir 7000 7001 7002 7003 7004 7005
在文件夹 7000 至 7005 中, 各创建一个 redis.conf 文件, 文件的内容可以使用上面的示例配置文件, 但记得将配置中的端口号和nodes.conf(同一服务器相同名字有冲突)从 7000 改为与文件夹名字相同的号码。
启动cluster实例
$ ./src/redis-server /cluster-test/7000/redis.conf
实例打印的日志显示, 因为 nodes.conf 文件不存在, 所以每个节点都为它自身指定了一个新的 ID :
实例会一直使用同一个 ID , 从而在集群中保持一个独一无二(unique)的名字.
3.搭建集群
进入redis目录,用如下命令创建集群。
./src/redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
- 提示错误 ** /usr/bin/env: ruby: No such file or directory **
安装ruby即可
yum install ruby -y
- 提示错误 ** ./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)
from ./redis-trib.rb:24 **
缺少rubygems组件,使用yum安装
yum install rubygems -y
- 提示错误 ** /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from ./redis-trib.rb:25 **
提示不能加载redis,是因为缺少redis和ruby的接口,使用gem 安装
gem install redis
在执行集群命令
./src/redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
- 输入 yes 即可
至此集群模式搭建完成。
使用redis-cli命令进入集群环境,进入集群模式需要带上 -c ,不带则表示进入7000端口的普通redis。
redis-cli -c -p 7000
4.Redis Cluster命令
集群
- cluster info :打印集群的信息
- cluster nodes :列出集群当前已知的所有节点( node),以及这些节点的相关信息。
节点
- 添加一个节点,第一个参数为新节点的地址,第二个参数是任意一个已经存在的节点的IP和端口
** ./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000:**- 此处的命令和添加一个主节点命令类似,此处并没有指定添加的这个从节点的主节点,这种情况下系统会在其他的复制集中的主节点中随机选取一个作为这个从节点的主节点。
./redis-trib.rb add-node --slave 127.0.0.1:7006 127.0.0.1:7000:- 你可以通过下面的命令指定主节点:
** ./redis-trib.rb add-node --slave --master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 127.0.0.1:7006 127.0.0.1:7000 **- 删除节点只要使用 del-node 命令即可,第一个参数是任意一个节点的地址,第二个节点是你想要移除的节点地址
./redis-trib del-node 127.0.0.1:7000 `<node-id>`
使用同样的方法移除主节点,不过在移除主节点前,需要确保这个主节点是空的. 如果不是空的,需要将这个节点的数据重新分片到其他主节点上.- **cluster meet <ip> <port> **:将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
- **cluster forget <node_id> **:从集群中移除 node_id 指定的节点。
- **cluster replicate <node_id> **:将当前节点设置为 node_id 指定的节点的从节点。
- **cluster saveconfig **:将节点的配置文件保存到硬盘里面
槽(slot)
- **cluster addslots <slot> [slot ...] **:将一个或多个槽( slot)指派( assign)给当前节点。
- **cluster delslots <slot> [slot ...] **:移除一个或多个槽对当前节点的指派。
- **cluster flushslots **:移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
- **cluster setslot <slot> node <node_id> **:将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
- **cluster setslot <slot> migrating <node_id> **:将本节点的槽 slot 迁移到 node_id 指定的节点中。
- **cluster setslot <slot> importing <node_id> **:从 node_id 指定的节点中导入槽 slot 到本节点。
- **cluster setslot <slot> stable **:取消对槽 slot 的导入( import)或者迁移( migrate)。
键
- **cluster keyslot <key> **:计算键 key 应该被放置在哪个槽上。
- **cluster countkeysinslot <slot> **:返回槽 slot 目前包含的键值对数量。
- **cluster getkeysinslot <slot> <count> **:返回 count 个 slot 槽中的键