redis cluster 集群搭建(增、删、改、查) :5.0.2

环境简介:

1:centos 7  ;
2:redis version  5.0.2   ;
3:  安装方式:编译安装 ;
4:。。。

创建集群

节点IP地址

10.42.166.105:6379
10.42.142.202:6379
10.42.11.183:6379
10.42.35.201:6379
10.42.181.22:6379
10.42.225.72:6379

使用公司redis docker 镜像启动6个实例后,开始创建集群:
create命令可选replicas参数,replicas表示需要有几个slave。最简单命令使用如下:

redis-cli --cluster create --cluster-replicas 1 10.42.166.105:6379 10.42.142.202:6379 10.42.11.183:6379 10.42.35.201:6379 10.42.181.22:6379 10.42.225.72:6379 

查看集群节点

redis-cli cluster nodes

测试创建key

set testkey1 testvalue1
get testkey1

模拟故障,删除镜像

直接在rancher集群直接delete 10.42.141.119 节点

查看状态

[email protected]:/data# redis-cli cluster nodes
21322d2e62d027393a46add604a8eed37c53b460 10.42.1.140:[email protected] slave 39cde9a04a9cfde37337840f31fa1bc1ab8fb37a 0 1546933324975 6 connected
dfa238fff8a7a49230cff7eb74f573f5645c8ec5 10.42.166.105:[email protected] myself,master - 0 1546933324000 1 connected 0-5460
f1e99f5f57b2390cba33c8142cb79c2e062db854 10.42.158.17:[email protected] master - 0 1546933325980 2 connected 5461-10922
3f20faa26d09fd263f249976fbdac859d26a511a 10.42.91.228:[email protected] slave f1e99f5f57b2390cba33c8142cb79c2e062db854 0 1546933326981 5 connected
39cde9a04a9cfde37337840f31fa1bc1ab8fb37a 10.42.221.211:[email protected] master - 0 1546933325000 3 connected 10923-16383

### 集群显示节点连接失败
9460c46ed7e8e9d809a896d966754823c7fb9e5d 10.42.141.119:[email protected] slave,fail dfa238fff8a7a49230cff7eb74f573f5645c8ec5 1546933279432 1546933277829 4 connected

从集群彻底删除节点

从集群中移除 node_id 指定的节点。

redis-cli cluster forget dfa238fff8a7a49230cff7eb74f573f5645c8ec5

返回
OK

### 从集群中删除节点
del-node可以把某个节点从集群中删除。del-node只能删除没有分配slot的节点。删除命令传递两个参数:

host:port:从该节点获取集群信息。
node_id:需要删除的节点id。

redis-cli cluster del-node 10.42.141.211:6379  dfa238fff8a7a49230cff7eb74f573f5645c8ec5

添加新节点 (添加从节点)

--slave:设置该参数,则新节点以slave的角色加入集群
--master-id:这个参数需要设置了--slave才能生效,--master-id用来指定新节点的master节点。如果不设置该参数,则会随机为节点选择master节点。

redis-cli --cluster add-node  新节点IP地址:端口    存在节点IP:端口 --cluster-slave (从节点) --cluster-master-id (master节点的ID)

redis-cli --cluster add-node   10.42.141.119:6379  10.42.166.105:6379  --cluster-slave   --cluster-master-id  dfa238fff8a7a49230cff7eb74f573f5645c8ec5

返回结果如下:

>>> Adding node 10.42.141.119:6379 to cluster 10.42.166.105:6379
>>> Performing Cluster Check (using node 10.42.166.105:6379)
M: dfa238fff8a7a49230cff7eb74f573f5645c8ec5 10.42.166.105:6379
   slots:[0-5460] (5461 slots) master
..........
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 10.42.141.119:6379 to make it join the cluster.
Waiting for the cluster to join

>>> Configure node as replica of 10.42.166.105:6379.
[OK] New node added correctly.

添加一组集群节点

节点如下:
10.42.42.180 (主)
10.42.22.184 (从)

方法:先添加主节点,然后添加从节点;

添加主节点

redis-cli --cluster add-node 新节点IP:端口 已存在节点IP:端口
实例:
redis-cli --cluster add-node 10.42.42.180:6379 10.42.166.105:6379

[email protected]:/data# redis-cli --cluster add-node 10.42.42.180:6379  10.42.166.105:6379
>>> Adding node 10.42.42.180:6379 to cluster 10.42.166.105:6379
>>> Performing Cluster Check (using node 10.42.166.105:6379)
M: 748273d7a0a186d229028edefdcff2711c1c0e0d 10.42.166.105:6379
...........
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 10.42.42.180:6379 to make it join the cluster.  《== 添加成功
[OK] New node added correctly.

验证

[email protected]:/data# redis-cli cluster nodes
........
b18bef6a47c06a624d1e2ba0f5d83d4c4ce97ff7 10.42.11.183:[email protected] master - 0 1546941402518 3 connected 10923-16383
6764b152d0d7526b48a16621ff2a4c72f6494622 10.42.142.202:[email protected] master - 0 1546941402000 2 connected 5461-10922

### 新节点
0488e5f3e006f0df2806bf0b178a2414b248b1e5 10.42.42.180:[email protected] master - 0 1546941402000 0 connected

添加从节点

redis-cli --cluster add-node 新节点IP地址:端口 存在节点IP:端口 --cluster-slave (从节点) --cluster-master-id (master节点的ID)

实例:
redis-cli --cluster add-node 10.42.22.184:6379 10.42.42.180:6379 --cluster-slave --cluster-master-id 0488e5f3e006f0df2806bf0b178a2414b248b1e5

[email protected]:/data# redis-cli --cluster add-node   10.42.22.184:6379  10.42.42.180:6379  --cluster-slave   --cluster-master-id  0488e5f3e006f0df2806bf0b178a2414b248b1e5
>>> Adding node 10.42.22.184:6379 to cluster 10.42.42.180:6379
>>> Performing Cluster Check (using node 10.42.42.180:6379)
M: 0488e5f3e006f0df2806bf0b178a2414b248b1e5 10.42.42.180:6379
   slots: (0 slots) master
................
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 10.42.22.184:6379 to make it join the cluster.
Waiting for the cluster to join

>>> Configure node as replica of 10.42.42.180:6379.
[OK] New node added correctly.

验证

[email protected]:/data# redis-cli cluster nodes
f41d8746a1fd31135b0af1737f69a77ec8e6cd26 10.42.225.72:[email protected] slave b18bef6a47c06a624d1e2ba0f5d83d4c4ce97ff7 0 1546941516826 6 connected
.......
6764b152d0d7526b48a16621ff2a4c72f6494622 10.42.142.202:[email protected] master - 0 1546941514822 2 connected 5461-10922

## 新加节点添加成功,但还没有分配槽位
0488e5f3e006f0df2806bf0b178a2414b248b1e5 10.42.42.180:[email protected] master - 0 1546941515825 7 connected
f9bc8def897915d73569b140d1478fbf94d3dbef 10.42.22.184:[email protected] slave 0488e5f3e006f0df2806bf0b178a2414b248b1e5 0 1546941515000 7 connected

rebalance平衡集群节点slot数量

语法:

rebalance       host:port
                --weight <arg>
                --auto-weights
                --threshold <arg>
                --use-empty-masters
                --timeout <arg>
                --simulate
                --pipeline <arg>

host:port:这个是必传参数,用来从一个节点获取整个集群信息,相当于获取集群信息的入口。
--weight <arg>:节点的权重,格式为node_id=weight,如果需要为多个节点分配权重的话,需要添加多个--weight <arg>参数,即--weight b31e3a2e=5 --weight 60b8e3a1=5,node_id可为节点名称的前缀,只要保证前缀位数能唯一区分该节点即可。没有传递–weight的节点的权重默认为1。
--auto-weights:这个参数在rebalance流程中并未用到。
--threshold <arg>:只有节点需要迁移的slot阈值超过threshold,才会执行rebalance操作。具体计算方法可以参考下面的rebalance命令流程的第四步。
--use-empty-masters:rebalance是否考虑没有节点的master,默认没有分配slot节点的master是不参与rebalance的,设置--use-empty-masters可以让没有分配slot的节点参与rebalance。
--timeout <arg>:设置migrate命令的超时时间。
--simulate:设置该参数,可以模拟rebalance操作,提示用户会迁移哪些slots,而不会真正执行迁移操作。
--pipeline <arg>:与reshar的pipeline参数一样,定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10。

实例:

redis-cli --cluster rebalance 10.42.35.201:6379 --cluster-threshold 1 --cluster-use-empty-masters --pipeline 10

如果需要模拟执行添加 : --cluster-simulate

[email protected]:/data# redis-cli --cluster rebalance  10.42.35.201:6379 --cluster-threshold 1 --cluster-use-empty-masters
>>> Performing Cluster Check (using node 10.42.35.201:6379)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Rebalancing across 4 nodes. Total weight = 4.00
Moving 1366 slots from 10.42.142.202:6379 to 10.42.42.180:6379
###############################################################################################
Moving 1365 slots from 10.42.166.105:6379 to 10.42.42.180:6379
#############################################################################################
Moving 1365 slots from 10.42.11.183:6379 to 10.42.42.180:6379
#############################################################################################

验证rebalance 结果:

redis-cli cluster nodes

[email protected]:/data# redis-cli cluster  nodes
f41d8746a1fd31135b0af1737f69a77ec8e6cd26 10.42.225.72:[email protected] slave b18bef6a47c06a624d1e2ba0f5d83d4c4ce97ff7 0 1546942598000 6 connected
e538c397a1c8ca6217561a88d72b08b0e513da84 10.42.181.22:[email protected] slave 6764b152d0d7526b48a16621ff2a4c72f6494622 0 1546942598000 5 connected
39aceb27ccdce533c5cfbf51eb13928d2515fadc 10.42.35.201:[email protected] slave 748273d7a0a186d229028edefdcff2711c1c0e0d 0 1546942599807 4 connected
6764b152d0d7526b48a16621ff2a4c72f6494622 10.42.142.202:[email protected] master - 0 1546942598803 2 connected 6827-10922
748273d7a0a186d229028edefdcff2711c1c0e0d 10.42.166.105:[email protected] myself,master - 0 1546942597000 1 connected 1365-5460
b18bef6a47c06a624d1e2ba0f5d83d4c4ce97ff7 10.42.11.183:[email protected] master - 0 1546942598000 3 connected 12288-16383

## 新加节点已经有分配槽位
f9bc8def897915d73569b140d1478fbf94d3dbef 10.42.22.184:[email protected] slave 0488e5f3e006f0df2806bf0b178a2414b248b1e5 0 1546942600809 7 connected
0488e5f3e006f0df2806bf0b178a2414b248b1e5 10.42.42.180:[email protected] master - 0 1546942597000 7 connected 0-1364 5461-6826 10923-12287

常用命令参考:

集群

cluster info :打印集群的信息
cluster nodes :列出集群当前已知的所有节点( node),以及这些节点的相关信息。
节点

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 槽中的键

参考文档:

http://weizijun.cn/2016/01/08/redis%20cluster%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7redis-trib-rb%E8%AF%A6%E8%A7%A3/

原文地址:http://blog.51cto.com/michaelkang/2344337

时间: 2024-10-11 04:25:58

redis cluster 集群搭建(增、删、改、查) :5.0.2的相关文章

Redis Cluster集群搭建测试

# Redis Clutser # ## 一.Redis Cluster集群 ## 参考资料: http://www.cnblogs.com/lykxqhh/p/5690923.html Redis集群搭建的方式有多种,例如使用zookper等,但从redis3.0之后版本支持redis cluster集群,Redis Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接.其redis cluster架构图如下: 其结构特点: 1.所有的redis节点彼此互

Redis Cluster集群搭建与应用

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

Redis Cluster集群搭建

1.服务器 192.168.1.201 192.168.1.204 192.168.1.205 192.168.1.206 192.168.1.207 192.168.1.208 因为Redis Cluster如果数据冗余是1的话,至少要3个Master和3个Slave. 2.安装步骤 (1)准备工作 mkdir /usr/local/redis_cluster mkdir /usr/local/redis_cluster (安装所需的文件) cd /usr/local/redis_cluste

redis cluster 集群搭建步骤和注意事项

1.安装Ubuntu ,修改root的密码. sudo passwd  (apt-get update 更新系统) 2.安装 Gcc 和G++  sudo apt-get install build-essential 3.下载 Redis  wget http://download.redis.io/releases/redis-3.2.3.tar.gz 4.解压 tar -xvf redis-3.0.2.tar.gz 5.进入 redis-3.0.2 ,执行make编译源码,进入src目录 

Redis Cluster 集群搭建部署

1.准备 1>redis-3.0 tar包 2>yum ruby rubygem 提示:①安装rubygem时,有可能需先安装ruby-rdoc,然后执行ruby setup.rb与gem install -l redis              ②安装redis,先解压,进入rdis安装目录,make&make install&make test,make过程中需保证tcl1.85版本以上 2.当前选定6台机器,端口默认.三个master与三个slave(如果在一台机器,修

Redis Cluster集群部署搭建

在Oracle的路上走了许多年,换换感觉,尝试一下新的知识,也是一个不错的感觉.Redis,一个超轻量化的内存数据库,只做一小块数据库功能实现,却非常优秀的一个产品.今天,就分享一下安装Redis集群的过程. 搭建redis集群,建议至少需要准备3台服务器,共搭建6个节点,3个master,3个slave,并且要求3个master节点不能全部跑到同一台服务器上,保证节点安全,3台服务器的配置相同,使用redistest账号搭建,对应的端口是7000/7001/7002端口 我的集群分配如下,每个

Redis Cluster 集群使用(3)

简介 Redis3.0版本之前,可以通过Redis Sentinel(哨兵)来实现高可用(HA),从3.0版本之后,官方推出了Redis Cluster,它的主要用途是实现数据分片(Data Sharding),不过同样可以实现HA,是官方当前推荐的方案.在Redis Sentinel模式中,每个节点需要保存全量数据,冗余比较多,而在Redis Cluster模式中,每个分片只需要保存一部分的数据,对于内存数据库来说,还是要尽量的减少冗余.在数据量太大的情况下,故障恢复需要较长时间. Redis

Redis进阶实践之十一 Redis的Cluster集群搭建

原文:Redis进阶实践之十一 Redis的Cluster集群搭建 一.引言 本文档只对Redis的Cluster集群做简单的介绍,并没有对分布式系统的所涉及到的概念做深入的探讨.本文只是针对如何设置集群.测试和操作集群做了简述,并且从用户的角度描述了系统的行为,并不涉及Redis集群规范中所包含的细节.但是,本教程试图从最终用户的角度来解释有关Redis的Cluster集群的可用性和一致性的特点,并以简单易懂的方式讲解. 请注意,本教程需要使用Redis 3.0版本或更高版本. 如果您打算部署

redis集群与分片(2)-Redis Cluster集群的搭建与实践

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