redis演练(9) redis Cluster 集群管理&failover情况

<redis演练(8) redis Cluster 集群环境安装>,简单阐述了如何安装redis集群环境。

集群环境,主要包括2部分。

1.配置每个节点的配置信息(redis.conf),尤其开启cluster

2.创建集群redis-trib.rb创建集群。

过程非常简单,但非常繁琐,尤其配置各个集群节点的配置信息,如果有一定数量,工作量也不小。

没关系,redis提供了一款cluster工具,能快速构造集群环境。本章的主要内容是介绍redis提供的集群工具。

1.使用create-cluster工具,快速创建集群

该工具在redis-unstable源码中。具体位置:${redis-unstable_dir}/utils/create-cluster。

<redis演练(8) redis Cluster 集群环境安装> 演示了如何创建3主集群环境。这次使用create-cluster工具,快速构造一个6节点,3主3从集群环境。过程更快更简单。

1.1认识create-cluster

[[email protected] create-cluster]# ./create-cluster  -help
Usage: ./create-cluster [start|create|stop|watch|tail|clean]
start       -- Launch Redis Cluster instances.
create      -- Create a cluster using redis-trib create.
stop        -- Stop Redis Cluster instances.
watch       -- Show CLUSTER NODES output (first 30 lines) of first node.
tail <id>   -- Run tail -f of instance at base port + ID.
clean       -- Remove all instances data, logs, configs.

1.2 启动

[[email protected] create-cluster]# ps -ef |grep redis
root      3912  2444  0 10:40 pts/0    00:00:00 grep redis
#先执行start,启动6个节点
[[email protected] create-cluster]# ./create-cluster  start
Starting 30001
Starting 30002
Starting 30003
Starting 30004
Starting 30005
Starting 30006
#确认下
[[email protected] 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节点纳入集群管理
[[email protected] 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查看下

[[email protected] create-cluster]# ./create-cluster  watch

watch命令,一秒监控一次。

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

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

2.认识若干Cluster管理命令

cluster addslots slot [slot ...] 这个命令是用于修改某个节点上的集群配置
例如以下命令分配 1 2 3 slot到接收命令的节点:

> CLUSTER ADDSLOTS 1 2 3OK
cluster countkeysinslot slot 返回连接节点负责的指定hash slot的key的数量
> CLUSTER COUNTKEYSINSLOT 7000(integer) 50341

cluster slots slot分布情况 127.0.0.1:7001> cluster slots
cluster info  INFO 127.0.0.1:30001> 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:6
cluster_my_epoch:1
cluster_stats_messages_sent:40250
cluster_stats_messages_received:40250
cluster keyslot key对应的哈希槽 127.0.0.1:30002> cluster keyslot title
(integer) 2217
cluster meet

不知道什么用,

输入任意IP和端口,都返回true

cluster nodes 节点信息  ./create-cluster  watch命令,就是调用该命令
cluster replicate node-id 配置一个节点为slave
cluster reset [hard|soft]
cluster saveconfig 强制保存信息到nodes.conf
cluster setslot slot importing|migrating|stable|node [node-id]
CLUSTER SLAVES node-id 节点的备节点信息
READONLY
READWRITE
CLUSTER FORGET node-id

3.演示节点fail-over情况

[[email protected] 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节点
[[email protected] create-cluster]# kill -9 2428

监控nodes信息

127.0.0.1:30001> cluster nodes
6ca5cc8273f06880f63ea8ef9ef0f26ee68677f8 127.0.0.1:[email protected] slave 7556689b3dacc00ee31cb82bb4a3a0fcda39db75 0 1473688179624 4 connected
c47d9b24c51eea56723ebf40b5dd7bb627a0d92d 127.0.0.1:[email protected] slave 29cc0b04ce1485f2d73d36c204530b38c69db463 0 1473688179624 5 connected
8c8c363fed795d56b319640ca696e74fbbbd3c77 127.0.0.1:[email protected] master,fail - 1473688174327 1473688173499 3 disconnected
29cc0b04ce1485f2d73d36c204530b38c69db463 127.0.0.1:[email protected] master - 0 1473688179624 2 connected 5461-10922
e16c5b58943ed11dda1a90e5cacb10f42f4fcc53 127.0.0.1:[email protected] master - 0 1473688179624 7 connected 10923-16383
7556689b3dacc00ee31cb82bb4a3a0fcda39db75 127.0.0.1:[email protected] myself,master - 0 0 1 connected 0-5460

发生了主备切换。

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

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

模拟30006节点宕掉

[[email protected] create-cluster]# kill -9 2446
[[email protected] 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节点
[[email protected] 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:[email protected] slave 7556689b3dacc00ee31cb82bb4a3a0fcda39db75 0 1473689972166 4 connected
c47d9b24c51eea56723ebf40b5dd7bb627a0d92d 127.0.0.1:[email protected] slave 29cc0b04ce1485f2d73d36c204530b38c69db463 0 1473689972166 5 connected
8c8c363fed795d56b319640ca696e74fbbbd3c77 127.0.0.1:[email protected] master,fail - 1473688174327 1473688173499 3 disconnected
29cc0b04ce1485f2d73d36c204530b38c69db463 127.0.0.1:[email protected] master - 0 1473689972166 2 connected 5461-10922
e16c5b58943ed11dda1a90e5cacb10f42f4fcc53 127.0.0.1:[email protected] master - 0 1473689972166 7 connected 10923-16383
7556689b3dacc00ee31cb82bb4a3a0fcda39db75 127.0.0.1:[email protected] myself,master - 0 0 1 connected 0-5460

# 恢复启动30003节点
[[email protected] 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:[email protected] slave 7556689b3dacc00ee31cb82bb4a3a0fcda39db75 0 1473690034497 4 connected
c47d9b24c51eea56723ebf40b5dd7bb627a0d92d 127.0.0.1:[email protected] slave 29cc0b04ce1485f2d73d36c204530b38c69db463 0 1473690034497 5 connected
8c8c363fed795d56b319640ca696e74fbbbd3c77 127.0.0.1:[email protected] slave e16c5b58943ed11dda1a90e5cacb10f42f4fcc53 0 1473690034497 7 connected
29cc0b04ce1485f2d73d36c204530b38c69db463 127.0.0.1:[email protected] master - 0 1473690034497 2 connected 5461-10922
e16c5b58943ed11dda1a90e5cacb10f42f4fcc53 127.0.0.1:[email protected] master - 0 1473690034497 7 connected 10923-16383
7556689b3dacc00ee31cb82bb4a3a0fcda39db75 127.0.0.1:[email protected] 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

redis演练(9) redis Cluster 集群管理&failover情况

时间: 2024-10-05 12:16:29

redis演练(9) redis Cluster 集群管理&failover情况的相关文章

redis cluster集群管理工具redis-trib.rb功能小结

redis-trib.rb是redis官方推出的管理redis集群的工具,集成在redis的源码src目录下,是基于redis提供的集群命令封装成简单.便捷.实用的操作工具.redis-trib.rb是redis作者用ruby完成的.所以要执行redis-trib.rb命令,需要Ruby,具体可参考:http://www.cnblogs.com/kevingrace/p/7846324.html [[email protected] ~]# /data/redis-4.0.6/src/redis

redis 3.0.7 cluster 集群部署

一.环境描述 DB:redis 3.0.7 最新稳定版 OS:centos 6.6_x64 二.安装步骤 1.基本软件包安装 [[email protected] ~]# yum -y install ruby [[email protected] ~]# yum -y install rubygems 下载路径,上传到/tmp路径下 https://rubygems.org/gems/redis/versions/3.0.0 [[email protected] ~]# cd /tmp [[e

redis 4.0.1 | cluster集群

安装: cd /opt wget http://download.redis.io/releases/redis-4.0.1.tar.gz tar zxf redis-4.0.1.tar.gz cd redis-4.0.1 make 集群搭建: 2台机器                   3 master      --         3slave master: cd src cp redis-trib.rb /usr/local/bin/ mkdir redis_cluster mkdi

Redis Cluster集群搭建与应用

1.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper,但从redis 3.0之后版本支持redis-cluster集群,redis-cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接.其redis-cluster架构图如下: 其结构特点 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. 节点的fail是通过集群中超过半数的节点检测失效时才生效. 客户端与redis节点直

redis演练(8) redis Cluster 集群环境安装

redis是个分布式缓存,与传统数据库最大的优势,在于它的"分布式"上. 分布式的优势: 容易实现容量的扩展 数据的均等分布 很好的高可用性 redis 和memcached是分布式缓存的两款流行方案,他们之间的对比 redis memcached 主从功能 Replication 支持 主备自动切换 本身不支持,可以通过客户端自己实现 键值一致性 哈希槽 一致性哈希 集群 服务端支持(但是beta版) unstable 由客户端实现 工具支持 提供自带的工具(客户端redis-cli

Redis集群管理

原文链接:http://blog.csdn.net/xyang81/article/details/51895011 在上一篇<Redis3.2集群担建与验证>文章中分享了集群的详细担建过程,本篇主要分享集群管理的常见操作,如:添加节点.删除节点.slot分配.如果你还没有担建集群环境,建议先看上篇<Redis3.2集群担建与验证>过程,再来阅读本文比较好理解. 1.集群管理常用命令 // 集群(cluster) CLUSTER INFO 打印集群的状态信息 CLUSTER NOD

redis cluster 集群重启关闭

找遍了redis cluster官方文档,没发现有关集群重启和关闭的方法.为啥会没有呢,猜测redis cluster至少要三个节点才能运行,三台同时挂掉的可能性比较小,只要不同时挂掉,挂掉的机器修复后在加入集群,集群都能良好的运作,万一同时挂掉,数据又没有备份的话,就有大麻烦了. redis cluster集群中的节点基本上都对等的,没有管理节点.如果要让所有节点都关闭,只能关闭进程了# pkill -9 redis 把所有集群都关闭,然后在重新启动,会报以下错误 # redis-trib.r

Redis Cluster集群部署方案

什么是 Redis 集群 Redis 集群是一个分布式(distributed).容错(fault-tolerant)的 Redis 实现,集群可以使用的功能是普通单机 Redis 所能使用的功能的一个子集(subset). Redis 集群中不存在中心(central)节点或者代理(proxy)节点,集群的其中一个主要设计目标是达到线性可扩展性(linear scalability). Redis 集群为了保证一致性(consistency)而牺牲了一部分容错性:系统会在保证对网络断线(net

Redis Cluster集群总结性梳理

前面已经介绍了Redis Cluster集群及其部署过程,下面再补充下有关Redis Cluster应用原理部分内容,以便更加深刻透彻地理解Redis Cluster. 一.Redis Cluster集群最核心的三个目标 性能:这是Redis赖以生存的看家本领,增加集群功能后当然不能对性能产生太大影响,所以Redis采取了P2P而非Proxy方式.异步复制.客户端重定向等设计,而牺牲了部分的一致性.使用性. 水平扩展:集群的最重要能力当然是扩展,文档中称可以线性扩展到1000结点. 可用性:在C