Redis 集群环境搭建

Redis 集群环境搭建

用两台机器模拟6个节点,一台机器3个节点,创建出3 master、3 salve 环境。

redis 采用 redis-3.2.4 版本。

两台虚拟机都是 CentOS ,一台 CentOS7 (IP:192.168.31.245),一台 CentOS7(IP:192.168.31.210) 。

安装过程

1. 下载并解压

wget http://download.redis.io/releases/redis-3.2.4.tar.gz

tar -zxvf redis-3.2.4.tar.gz

2. 编译安装

cd redis-3.2.4

make && make install

3. 将 redis-trib.rb 复制到 /usr/local/bin 目录下

cd src

cp redis-trib.rb /usr/local/bin/

 

4. 创建 Redis 节点

首先在 192.168.31.245 机器上 /root/software/redis-3.2.4 目录下创建 redis_cluster 目录;

mkdir redis_cluster

 

在 redis_cluster 目录下,创建名为7000、7001、7002的目录,并将 redis.conf 拷贝到这三个目录中

mkdir 7000 7001 7002<br>cp redis.conf redis_cluster/7000

cp redis.conf redis_cluster/7001

cp redis.conf redis_cluster/7002

  

分别修改这三个配置文件,修改如下内容

port  7000    //端口7000,7002,7003       

bind 本机ip   //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群

daemonize    yes     //redis后台运行

pidfile  /var/run/redis_7000.pid         //pidfile文件对应7000,7001,7002

cluster-enabled  yes                     //开启集群  把注释#去掉

cluster-config-file  nodes_7000.conf   //集群的配置  配置文件首次启动自动生成 7000,7001,7002

cluster-node-timeout  15000            //请求超时  默认15秒,可自行设置

appendonly  yes                       //aof日志开启  有需要就开启,它会每次写操作都记录一条日志 

 接着在另外一台机器上(192.168.31.210),的操作重复以上三步,只是把目录改为7003、7004、7005,对应的配置文件也按照这个规则修改即可

5. 启动各个节点

第一台机器上执行

redis-server redis_cluster/7000/redis.conf

redis-server redis_cluster/7001/redis.conf

redis-server redis_cluster/7002/redis.conf



另外一台机器上执行

redis-server redis_cluster/7003/redis.conf

redis-server redis_cluster/7004/redis.conf

redis-server redis_cluster/7005/redis.conf

6. 检查 redis 启动情况

##一台机器<br>ps -ef | grep redis

root      61020      1  0 02:14 ?        00:00:01 redis-server 127.0.0.1:7000 [cluster]   

root      61024      1  0 02:14 ?        00:00:01 redis-server 127.0.0.1:7001 [cluster]   

root      61029      1  0 02:14 ?        00:00:01 redis-server 127.0.0.1:7002 [cluster]   



netstat -tnlp | grep redis

tcp        0      0 127.0.0.1:17000             0.0.0.0:*                   LISTEN      61020/redis-server

tcp        0      0 127.0.0.1:17001             0.0.0.0:*                   LISTEN      61024/redis-server

tcp        0      0 127.0.0.1:17002             0.0.0.0:*                   LISTEN      61029/redis-server

tcp        0      0 127.0.0.1:7000              0.0.0.0:*                   LISTEN      61020/redis-server

tcp        0      0 127.0.0.1:7001              0.0.0.0:*                   LISTEN      61024/redis-server

tcp        0      0 127.0.0.1:7002              0.0.0.0:*                   LISTEN      61029/redis-server

   

##另外一台机器

ps -ef | grep redis

root       9957      1  0 02:32 ?        00:00:01 redis-server 127.0.0.1:7003 [cluster]

root       9964      1  0 02:32 ?        00:00:01 redis-server 127.0.0.1:7004 [cluster]

root       9971      1  0 02:32 ?        00:00:01 redis-server 127.0.0.1:7005 [cluster]

root      10065   4744  0 02:38 pts/0    00:00:00 grep --color=auto redis

netstat -tlnp | grep redis

tcp        0      0 127.0.0.1:17003         0.0.0.0:*               LISTEN      9957/redis-server 1

tcp        0      0 127.0.0.1:17004         0.0.0.0:*               LISTEN      9964/redis-server 1

tcp        0      0 127.0.0.1:17005         0.0.0.0:*               LISTEN      9971/redis-server 1

tcp        0      0 127.0.0.1:7003          0.0.0.0:*               LISTEN      9957/redis-server 1

tcp        0      0 127.0.0.1:7004          0.0.0.0:*               LISTEN      9964/redis-server 1

tcp        0      0 127.0.0.1:7005          0.0.0.0:*               LISTEN      9971/redis-server 1

7.创建集群

Redis 官方提供了 redis-trib.rb 这个工具,就在解压目录的 src 目录中,第三步中已将它复制到 /usr/local/bin 目录中,可以直接在命令行中使用了。使用下面这个命令即可完成安装。

redis-trib.rb  create  --replicas  1  192.168.31.245:7000 192.168.31.245:7001  192.168.31.245:7002 192.168.31.210:7003  192.168.31.210:7004  192.168.31.210:7005

其中,前三个 ip:port 为第一台机器的节点,剩下三个为第二台机器。

等等,出错了。这个工具是用 ruby 实现的,所以需要安装 ruby。安装命令如下:

yum -y install ruby ruby-devel rubygems rpm-build

gem install redis

之后再运行 redis-trib.rb 命令,会出现如下提示:

输入 yes 即可,然后出现如下内容,说明安装成功。

  

8. 集群验证

在第一台机器上连接集群的7002端口的节点,在另外一台连接7005节点,连接方式为 redis-cli -h 192.168.31.245 -c -p 7002  ,加参数 -C 可连接到集群,因为上面 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略。

在7005节点执行命令  set hello world ,执行结果如下:

然后在另外一台7002端口,查看 key 为 hello 的内容, get hello  ,执行结果如下:

说明集群运作正常。

 

简单说一下原理

redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。

Redis 集群没有并使用传统的一致性哈希来分配数据,而是采用另外一种叫做哈希槽 (hash slot)的方式来分配的。redis cluster 默认分配了 16384 个slot,当我们set一个key 时,会用CRC16算法来取模得到所属的slot,然后将这个key 分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384。所以我们在测的时候看到set 和 get 的时候,直接跳转到了7000端口的节点。

Redis 集群会把数据存在一个 master 节点,然后在这个 master 和其对应的salve 之间进行数据同步。当读取数据时,也根据一致性哈希算法到对应的 master 节点获取数据。只有当一个master 挂掉之后,才会启动一个对应的 salve 节点,充当 master 。

需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数 <(xiao于) 总节点数的一半时,整个集群就无法提供服务了。

 

Redis运维

 

1.2 启动

[root@hadoop2 create-cluster]# ps -ef |grep redis
root      3912  2444  0 10:40 pts/0    00:00:00 grep redis
#先执行start,启动6个节点
[root@hadoop2 create-cluster]# ./create-cluster  start
Starting 30001
Starting 30002
Starting 30003
Starting 30004
Starting 30005
Starting 30006
#确认下
[root@hadoop2 create-cluster]# ps -ef |grep redis
root      5189     1  0 13:58 ?        00:00:00 ../../src/redis-server *:30001 [cluster]                                                                                                                                                                                                           
root      5191     1  0 13:58 ?        00:00:00 ../../src/redis-server *:30002 [cluster]                                                                                                                                                                                                           
root      5193     1  0 13:58 ?        00:00:00 ../../src/redis-server *:30003 [cluster]                                                                                                                                                                                                           
root      5201     1  0 13:58 ?        00:00:00 ../../src/redis-server *:30004 [cluster]                                                                                                                                                                                                           
root      5206     1  0 13:58 ?        00:00:00 ../../src/redis-server *:30005 [cluster]                                                                                                                                                                                                           
root      5208     1  0 13:58 ?        00:00:00 ../../src/redis-server *:30006 [cluster]                                                                                                                                                                                                           
root      5235  2444  0 13:59 pts/0    00:00:00 grep redis
#6节点纳入集群管理
[root@hadoop2 create-cluster]# ./create-cluster  create
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:30001
127.0.0.1:30002
127.0.0.1:30003
Adding replica 127.0.0.1:30004 to 127.0.0.1:30001
Adding replica 127.0.0.1:30005 to 127.0.0.1:30002
Adding replica 127.0.0.1:30006 to 127.0.0.1:30003
M: 7556689b3dacc00ee31cb82bb4a3a0fcda39db75 127.0.0.1:30001
   slots:0-5460 (5461 slots) master
M: 29cc0b04ce1485f2d73d36c204530b38c69db463 127.0.0.1:30002
   slots:5461-10922 (5462 slots) master
M: 8c8c363fed795d56b319640ca696e74fbbbd3c77 127.0.0.1:30003
   slots:10923-16383 (5461 slots) master
S: 6ca5cc8273f06880f63ea8ef9ef0f26ee68677f8 127.0.0.1:30004
   replicates 7556689b3dacc00ee31cb82bb4a3a0fcda39db75
S: c47d9b24c51eea56723ebf40b5dd7bb627a0d92d 127.0.0.1:30005
   replicates 29cc0b04ce1485f2d73d36c204530b38c69db463
S: e16c5b58943ed11dda1a90e5cacb10f42f4fcc53 127.0.0.1:30006
   replicates 8c8c363fed795d56b319640ca696e74fbbbd3c77
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join..
>>> Performing Cluster Check (using node 127.0.0.1:30001)
M: 7556689b3dacc00ee31cb82bb4a3a0fcda39db75 127.0.0.1:30001
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: 6ca5cc8273f06880f63ea8ef9ef0f26ee68677f8 127.0.0.1:30004
   slots: (0 slots) slave
   replicates 7556689b3dacc00ee31cb82bb4a3a0fcda39db75
S: c47d9b24c51eea56723ebf40b5dd7bb627a0d92d 127.0.0.1:30005
   slots: (0 slots) slave
   replicates 29cc0b04ce1485f2d73d36c204530b38c69db463
M: 8c8c363fed795d56b319640ca696e74fbbbd3c77 127.0.0.1:30003
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
M: 29cc0b04ce1485f2d73d36c204530b38c69db463 127.0.0.1:30002
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: e16c5b58943ed11dda1a90e5cacb10f42f4fcc53 127.0.0.1:30006
   slots: (0 slots) slave
   replicates 8c8c363fed795d56b319640ca696e74fbbbd3c77
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

All 16384 slots covered,说明创建成功了。

上面信息,整理成图如下

./create-cluster  start命令指定的参数
../../src/redis-server 
--port $PORT 
--cluster-enabled yes 
--cluster-config-file nodes-${PORT}.conf 
--cluster-node-timeout $TIMEOUT
--appendonly yes
--appendfilename appendonly-${PORT}.aof 
--dbfilename dump-${PORT}.rdb
--logfile ${PORT}.log --daemonize yes

1.3 集群创建了之后,watch查看下

[root@hadoop2 create-cluster]# ./create-cluster  watch

watch命令,一秒监控一次。

节点信息格式
见http://redis.io/commands/cluster-nodes

通过上面配置,可以清楚了解主备情况。

2.演示节点fail-over情况

[root@hadoop2 create-cluster]# ps -ef |grep redis
root      2424     1  0 21:41 ?        00:00:00 ../../src/redis-server *:30001 [cluster]                                                                                                                                                                                                           
root      2426     1  0 21:41 ?        00:00:00 ../../src/redis-server *:30002 [cluster]                                                                                                                                                                                                           
root      2428     1  0 21:41 ?        00:00:00 ../../src/redis-server *:30003 [cluster]                                                                                                                                                                                                           
root      2430     1  0 21:41 ?        00:00:00 ../../src/redis-server *:30004 [cluster]                                                                                                                                                                                                           
root      2441     1  0 21:41 ?        00:00:00 ../../src/redis-server *:30005 [cluster]                                                                                                                                                                                                           
root      2446     1  0 21:41 ?        00:00:00 ../../src/redis-server *:30006 [cluster]

模拟关闭 30003 Master节点

[root@hadoop2 create-cluster]# kill -9 2428

监控nodes信息

127.0.0.1:30001> cluster nodes
6ca5cc8273f06880f63ea8ef9ef0f26ee68677f8 127.0.0.1:30004@40004 slave 7556689b3dacc00ee31cb82bb4a3a0fcda39db75 0 1473688179624 4 connected
c47d9b24c51eea56723ebf40b5dd7bb627a0d92d 127.0.0.1:30005@40005 slave 29cc0b04ce1485f2d73d36c204530b38c69db463 0 1473688179624 5 connected
8c8c363fed795d56b319640ca696e74fbbbd3c77 127.0.0.1:30003@40003 master,fail - 1473688174327 1473688173499 3 disconnected
29cc0b04ce1485f2d73d36c204530b38c69db463 127.0.0.1:30002@40002 master - 0 1473688179624 2 connected 5461-10922
e16c5b58943ed11dda1a90e5cacb10f42f4fcc53 127.0.0.1:30006@40006 master - 0 1473688179624 7 connected 10923-16383
7556689b3dacc00ee31cb82bb4a3a0fcda39db75 127.0.0.1:30001@40001 myself,master - 0 0 1 connected 0-5460

发生了主备切换。

实验证明:集群环境下,如果某个节点宕掉,可以正常发生主备切换,集群正常使用。

演示主备节点都宕掉的情况

模拟30006节点宕[dàng]掉

[root@hadoop2 create-cluster]# kill -9 2446
[root@hadoop2 create-cluster]# /usr/local/redis/bin/redis-cli -c  -p 30002
127.0.0.1:30002> get title
(error) CLUSTERDOWN The cluster is down

集群环境不可用。

 

现在陆续恢复,30006,30003节点

#恢复启动30006节点
[root@hadoop2 create-cluster]# ../../src/redis-server --port 30006 --cluster-enabled yes 
--cluster-config-file nodes-30006.conf --cluster-node-timeout 5000 --appendonly yes 
--appendfilename appendonly-30006.aof 
--dbfilename dump-30006.rdb --logfile 30006.log --daemonize yes
#集群恢复正常工作。
127.0.0.1:30002> get title
-> Redirected to slot [2217] located at 127.0.0.1:30001
"1"
127.0.0.1:30001> cluster nodes
6ca5cc8273f06880f63ea8ef9ef0f26ee68677f8 127.0.0.1:30004@40004 slave 7556689b3dacc00ee31cb82bb4a3a0fcda39db75 0 1473689972166 4 connected
c47d9b24c51eea56723ebf40b5dd7bb627a0d92d 127.0.0.1:30005@40005 slave 29cc0b04ce1485f2d73d36c204530b38c69db463 0 1473689972166 5 connected
8c8c363fed795d56b319640ca696e74fbbbd3c77 127.0.0.1:30003@40003 master,fail - 1473688174327 1473688173499 3 disconnected
29cc0b04ce1485f2d73d36c204530b38c69db463 127.0.0.1:30002@40002 master - 0 1473689972166 2 connected 5461-10922
e16c5b58943ed11dda1a90e5cacb10f42f4fcc53 127.0.0.1:30006@40006 master - 0 1473689972166 7 connected 10923-16383
7556689b3dacc00ee31cb82bb4a3a0fcda39db75 127.0.0.1:30001@40001 myself,master - 0 0 1 connected 0-5460

# 恢复启动30003节点
[root@hadoop2 create-cluster]# ../../src/redis-server --port 30003 --cluster-enabled yes 
--cluster-config-file nodes-30003.conf --cluster-node-timeout 5000 --appendonly yes 
--appendfilename appendonly-30003.aof --dbfilename dump-30003.rdb 
--logfile 30003.log --daemonize yes
# 30003不再被恢复成主节点
127.0.0.1:30001> cluster nodes
6ca5cc8273f06880f63ea8ef9ef0f26ee68677f8 127.0.0.1:30004@40004 slave 7556689b3dacc00ee31cb82bb4a3a0fcda39db75 0 1473690034497 4 connected
c47d9b24c51eea56723ebf40b5dd7bb627a0d92d 127.0.0.1:30005@40005 slave 29cc0b04ce1485f2d73d36c204530b38c69db463 0 1473690034497 5 connected
8c8c363fed795d56b319640ca696e74fbbbd3c77 127.0.0.1:30003@40003 slave e16c5b58943ed11dda1a90e5cacb10f42f4fcc53 0 1473690034497 7 connected
29cc0b04ce1485f2d73d36c204530b38c69db463 127.0.0.1:30002@40002 master - 0 1473690034497 2 connected 5461-10922
e16c5b58943ed11dda1a90e5cacb10f42f4fcc53 127.0.0.1:30006@40006 master - 0 1473690034497 7 connected 10923-16383
7556689b3dacc00ee31cb82bb4a3a0fcda39db75 127.0.0.1:30001@40001 myself,master - 0 0 1 connected 0-5460

具体集群概括如图

如果发现 error MOVED,可能是因为客户端没有开启cluster模式。

错误描述如下

127.0.0.1:30001> set title3 "3"
(error) MOVED 9980 127.0.0.1:30002
集群扩容
xiezefan@ubuntu:~$ ps -ef | grep redis
xiezefan 13372     1  0 20:09 ?        00:00:08 redis-server *:7000 [cluster]
xiezefan 13376     1  0 20:09 ?        00:00:08 redis-server *:7001 [cluster]
xiezefan 13380     1  0 20:09 ?        00:00:08 redis-server *:7002 [cluster]
xiezefan 13382     1  0 20:09 ?        00:00:08 redis-server *:7003 [cluster]
xiezefan 13386     1  0 20:09 ?        00:00:08 redis-server *:7004 [cluster]
xiezefan 13390     1  0 20:09 ?        00:00:08 redis-server *:7005 [cluster]
xiezefan 13394     1  0 20:09 ?        00:00:08 redis-server *:7006 [cluster]
xiezefan 13400     1  0 20:09 ?        00:00:08 redis-server *:7007 [cluster]

现在我们已经有一个包含6个节点的集群,为集群加入一个master节点7006和一个slave节点7007。

redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000

以上命令将7006节点接入7000所在的集群。接下来,我们为7006增加一个slave节点。

redis-trib.rb add-node --slave 127.0.0.1:7007 127.0.0.1:7000

以上命令表示增加slave节点,将7006的节点加入7000节点所在的集群中作为slave节点,随机依附现有的master节点中slave最少的节点,如果需要再指定特别的master节点,使用

redis-trib.rb add-node --slave --master-id 23b412673af0506df6382353e3a65960d5b7e66d 127.0.0.1:7007 127.0.0.1:7000

其中的23b412673af0506df6382353e3a65960d5b7e66d是7006节点的id,我们可以通过cluster nodes命令查看节点的id。

接下来我们用负载均衡,Slot是Redis Cluster数据承载的最单位,我们可以指定将一定范围的Slot转移到新的节点来实现负载均衡。

用户同样可以用运维工具redis-trib.rb完成reshard工作,具体步骤如下:

(1)输入如下命令:

 ./redis-trib.rb reshard 127.0.0.1:7000

其中127.0.0.1:7000是集群里任一节点。

(2)接着要求输入需要迁移的哈希槽数目,提示如下:

How many slots do you want to move (from 1 to 16384)?

假如输入100

(3)接着要求输入迁入哈希槽的目的节点ID,提示如下:

What is the receiving node ID?

假如输入ID:1

(4)接着要求输入迁出哈希槽的源节点ID,提示如下:

Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs

这里可以输入多个节点ID或选择所有节点(all),这里注意源节点ID不能是目的节点ID。

5)接着redis-trib.rb会根据上面信息制定迁移计划,并输出如下:

Resharding plan:
Moving slot $slot1 from $sourceid1
Moving slot $slot2 from $sourceid2   
Do you want to proceed with the proposed reshard plan (yes/no)?

这里输入yes

(6)接着等待数据迁移完成,至此reshard工作结束。

集群相关命令

cluster meet ip:port 

集群间相互握手,加入彼此所在的集群。(将指定节点加入到集群)

cluster nodes

获取集群间节点信息的列表,如下所示,格式为<node ID> <node IP:PORT> <node role> [master node ID|-] <node ping_sent> <node pong_received> <node epoch> <node status>。

127.0.0.1:6379> cluster nodes
a15705fdb7cac60e07ff699bf4c514e80f245a2c 10.180.157.205:6379 slave 2b5603326d0fca28031467727fae4558115a99d8 0 1450854214289 11 connected
6477541e4594e60e095c8f440882636236545936 10.180.157.202:6379 slave 9b35a393fa6623887215023b761d531dde452d3c 0 1450854211276 12 connected
ecf9ae60e87ea3358d9c5f1f269e0ed9a387ea40 10.180.157.201:6379 master - 0 1450854214788 5 connected 10923-16383
2b5603326d0fca28031467727fae4558115a99d8 10.180.157.200:6379 master - 0 1450854213283 11 connected 5461-10922
f31f6ce49b3a2f3a246b2d97349c8f8614cf3a2c 10.180.157.208:6379 slave ecf9ae60e87ea3358d9c5f1f269e0ed9a387ea40 0 1450854212286 9 connected
9b35a393fa6623887215023b761d531dde452d3c 10.180.157.199:6379 myself,master - 0 0 12 connected 0-5460

cluster myid

返回节点的id。

127.0.0.1:6379> cluster myid
"9b35a393fa6623887215023b761d531dde452d3c"

cluster slots

返回集群间节点负责的数据分布表。

 

127.0.0.1:6379> cluster slots
1) 1) (integer) 10923
   2) (integer) 16383
   3) 1) "10.180.157.201"
      2) (integer) 6379
   4) 1) "10.180.157.208"
      2) (integer) 6379
2) 1) (integer) 5461
   2) (integer) 10922
   3) 1) "10.180.157.200"
      2) (integer) 6379
   4) 1) "10.180.157.205"
      2) (integer) 6379
3) 1) (integer) 0
   2) (integer) 5460
   3) 1) "10.180.157.199"
      2) (integer) 6379
   4) 1) "10.180.157.202"
      2) (integer) 6379

cluster flushslots

清空该节点负责slots,必须在节点负责的这些slot都没有数据的情况下才能执行,该命令需要谨慎使用,由于之前说的bitmapTestBit方法,redis只比较负责的节点,清空的slots信息无法被其他节点同步。

cluster addslots [slot]

在当前节点上增加slot。(将指定的一个或多个slot 指派给当前节点)

cluster delslots [slot]

在节点上取消slot的负责。这也会导致前面说的slot信息无法同步,而且一旦集群有slot不负责,配置

为yes的话,该节点就无法提供服务了,所以使用也需谨慎。

cluster setslot <slot> MIGRATING <nodeid>

把本节点负责的某个slot设置为迁移到目的节点。(即将本节点的slot指派给或叫迁移到指定的节点)

cluster setslot <slot> MIGRATING <nodeid>

把本节点负责的某个slot设置为迁移到目的节点。(即将本节点的slot指派给或叫迁移到指定的节点)

cluster setslot <slot> IMPORTING <nodeid>

设置某个slot为从迁移源节点迁移标志。(即将指定节点的slot指派给或叫迁移到本节点)

cluster setslot <slot> STABLE

设置某个slot为从迁移状态恢复为正常状态。(取消slot的导入(importing)或迁移(migrating))

cluster setslot <slot> NODE <nodeid>

设置某个slot为某节点负责。该命令使用也需要注意,cluster setslot的四个命令需要配置迁移工具使用,单独使用容易引起集群混乱。该命令在集群出现异常时,需要指定某个slot为某个节点负责时,最好在每个节点上都执行一遍,至少要在迁移的节点和最高epoch的节点上执行成功。(将指定的slot指派给指定的节点,如果该slot已经指派给另一个节点,则要另一个节点先删除该slot)

cluster info

集群的一些info信息。

127.0.0.1:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:12
cluster_my_epoch:12
cluster_stats_messages_sent:1449982
cluster_stats_messages_received:1182698

cluster saveconfig

保存集群的配置文件,集群默认在配置修改的时候会自动保存配置文件,该方法也能手动执行命令保存。

cluster keyslot

可以查询某个key对应的slot地址。

127.0.0.1:6379> cluster keyslot key
(integer) 12539

cluster countkeysinslot

可以查询该节点负责的某个slot内部key的数量。

127.0.0.1:6379> cluster countkeysinslot 13252
(integer) 2

cluster getkeysinslot <slot> <count>

可以查询该节点负责的某个slot内部指定数量的key列表。

127.0.0.1:6379> cluster getkeysinslot 13252 10
1) "key0"
2) "key2298"

cluster forget

把某个节点加入黑名单,这样就无法完成握手。黑名单的过期时为60s,60s后两节点又会继续完成握手。

cluster replicate <nodeid>

负责某个节点,成为它的slave。(将当前节点设置为指定nodeid节点的从节点)

cluster slaves

列出某个节点slave列表。

127.0.0.1:6379> cluster slaves 2b5603326d0fca28031467727fae4558115a99d8
1) "a15705fdb7cac60e07ff699bf4c514e80f245a2c 10.180.157.205:6379 slave 2b5603326d0fca28031467727fae4558115a99d8 0 1450854932667 11 connected"

cluster count-failure-reports

列出某个节点的故障转移记录的长度。

cluster failover [FORCE|TAKEOVER]

手动执行故障转移。
cluster set-config-epoch

设置节点epoch,只有在节点加入集群前才能设置。
cluster reset [SOFT|HARD]

重置集群信息,soft是清空其他节点的信息,但不修改自己的id。hard还会修改自己的id。不传该参数则使用soft方式。

readonly

在slave上执行,执行该命令后,可以在slave上执行只读命令。

readwrite

在slave上执行,执行该命令后,取消在slave上执行命令。

集群相关配置

cluster-enabled

说明:集群开关,默认是不开启集群模式。
默认值:no。
是否可以动态修改:no。
值的范围:yes|no。

cluster-config-file

说明:集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。
默认值:nodes.conf。
是否可以动态修改:no。
值的范围:文件路径。

cluster-node-timeout

说明:节点的超时时间,单位是毫秒。
默认值:15000。
是否可以动态修改:yes。
值的范围:大于0。

cluster-slave-validity-factor

说明:在进行故障转移的时候,group的全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了,导致数据过于陈旧,这样的slave不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长。判断方法是比较slave断开连接的时间和(node-timeout * slave-validity-factor) + repl-ping-slave-period。
默认值:10。
是否可以动态修改:yes。
值的范围:大于等于0。

cluster-migration-barrier

说明:master的slave数量大于该值,slave才能迁移到其他孤儿master上,具体说明见均衡集群的slave章节。
默认值:1。
是否可以动态修改:yes。
值的范围:大于等于0。

说明:默认情况下,集群全部的slot有节点负责,集群状态才为ok,才能提供服务。设置为no,可以在slot没有全部分配的时候提供服务。不建议打开该配置,这样会造成分区的时候,分区的master一直在接受写请求,而造成很长时间数据不一致。
默认值:yes。
是否可以动态修改:yes。
值的范围:yes|no。

转载于:https://my.oschina.net/u/3445245/blog/1647076

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值