转载 https://www.cnblogs.com/zhoujinyi/p/11606935.html
附加:解决创建集群超时问题,检查防火墙
firewall-cmd --zone=public --add-port=16379/tcp --permanent
firewall-cmd --zone=public --add-port=16389/tcp --permanent
firewall-cmd --zone=public --add-port=26379/tcp --permanent
firewall-cmd --zone=public --add-port=26389/tcp --permanent
#重新加载防火墙
firewall-cmd --reload
#查询放行的端口
firewall-cmd --list-all

进入命令行:
./redis-cli -h ip -p port

查看集群节点
cluster nodes

查看key对应的slot
cluster keyslot key

查看slot和节点的对应关系
cluster slots
背景:
Redis Cluster 在5.0之后取消了ruby脚本 redis-trib.rb的支持(手动命令行添加集群的方式不变),集合到redis-cli里,避免了再安装ruby的相关环境。直接使用redis-clit的参数–cluster 来取代。为方便自己后面查询就说明下如何使用该命令进行Cluster的创建和管理,关于Cluster的相关说明可以查看官网或则Redis Cluster部署、管理和测试。

环境:
系统版本:Ubuntu 14.04
Redis版本:5.0.5
机器IP:192.168.163.132
说明:redis-cli --cluster help
复制代码
redis-cli --cluster help
Cluster Manager Commands:
create host1:port1 … hostN:portN #创建集群
–cluster-replicas #从节点个数
check host:port #检查集群
–cluster-search-multiple-owners #检查是否有槽同时被分配给了多个节点
info host:port #查看集群状态
fix host:port #修复集群
–cluster-search-multiple-owners #修复槽的重复分配问题
reshard host:port #指定集群的任意一节点进行迁移slot,重新分slots
–cluster-from #需要从哪些源节点上迁移slot,可从多个源节点完成迁移,以逗号隔开,传递的是节点的node id,还可以直接传递–from all,这样源节点就是集群的所有节点,不传递该参数的话,则会在迁移过程中提示用户输入
–cluster-to #slot需要迁移的目的节点的node id,目的节点只能填写一个,不传递该参数的话,则会在迁移过程中提示用户输入
–cluster-slots #需要迁移的slot数量,不传递该参数的话,则会在迁移过程中提示用户输入。
–cluster-yes #指定迁移时的确认输入
–cluster-timeout #设置migrate命令的超时时间
–cluster-pipeline #定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10
–cluster-replace #是否直接replace到目标节点
rebalance host:port #指定集群的任意一节点进行平衡集群节点slot数量
–cluster-weight <node1=w1…nodeN=wN> #指定集群节点的权重
–cluster-use-empty-masters #设置可以让没有分配slot的主节点参与,默认不允许
–cluster-timeout #设置migrate命令的超时时间
–cluster-simulate #模拟rebalance操作,不会真正执行迁移操作
–cluster-pipeline #定义cluster getkeysinslot命令一次取出的key数量,默认值为10
–cluster-threshold #迁移的slot阈值超过threshold,执行rebalance操作
–cluster-replace #是否直接replace到目标节点
add-node new_host:new_port existing_host:existing_port #添加节点,把新节点加入到指定的集群,默认添加主节点
–cluster-slave #新节点作为从节点,默认随机一个主节点
–cluster-master-id #给新节点指定主节点
del-node host:port node_id #删除给定的一个节点,成功后关闭该节点服务
call host:port command arg arg … arg #在集群的所有节点执行相关命令
set-timeout host:port milliseconds #设置cluster-node-timeout
import host:port #将外部redis数据导入集群
–cluster-from #将指定实例的数据导入到集群
–cluster-copy #migrate时指定copy
–cluster-replace #migrate时指定replace
help

For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.
复制代码
注意:Redis Cluster最低要求是3个主节点,如果需要集群需要认证,则在最后加入 -a xx 即可。

① 创建集群主节点

redis-cli --cluster create 192.168.163.132:6379 192.168.163.132:6380 192.168.163.132:6381
View Code
② 创建集群主从节点

/redis-cli --cluster create 192.168.163.132:6379 192.168.163.132:6380 192.168.163.132:6381 192.168.163.132:6382 192.168.163.132:6383 192.168.163.132:6384 --cluster-replicas 1
说明:–cluster-replicas 参数为数字,1表示每个主节点需要1个从节点。

View Code
通过该方式创建的带有从节点的机器不能够自己手动指定主节点,所以如果需要指定的话,需要自己手动指定,先使用①或③创建好主节点后,再通过④来处理。

③ 添加集群主节点

redis-cli --cluster add-node 192.168.163.132:6382 192.168.163.132:6379
说明:为一个指定集群添加节点,需要先连到该集群的任意一个节点IP(192.168.163.132:6379),再把新节点加入。该2个参数的顺序有要求:新加入的节点放前

View Code
④ 添加集群从节点

redis-cli --cluster add-node 192.168.163.132:6382 192.168.163.132:6379 --cluster-slave --cluster-master-id 117457eab5071954faab5e81c3170600d5192270
说明:把6382节点加入到6379节点的集群中,并且当做node_id为 117457eab5071954faab5e81c3170600d5192270 的从节点。如果不指定 --cluster-master-id 会随机分配到任意一个主节点。

View Code
⑤ 删除节点

redis-cli --cluster del-node 192.168.163.132:6384 f6a6957421b80409106cb36be3c7ba41f3b603ff
说明:指定IP、端口和node_id 来删除一个节点,从节点可以直接删除,有slot分配的主节点不能直接删除。删除之后,该节点会被shutdown。

View Code
注意:当被删除掉的节点重新起来之后不能自动加入集群,但其和主的复制还是正常的,也可以通过该节点看到集群信息(通过其他正常节点已经看不到该被del-node节点的信息)。

如果想要再次加入集群,则需要先在该节点执行cluster reset,再用add-node进行添加,进行增量同步复制。

到此,目前整个集群的状态如下:

复制代码
192.168.163.132:6379> cluster nodes
815da8448f5d5a304df0353ca10d8f9b77016b28 192.168.163.132:6380@16380 master - 0 1569748297177 2 connected 5461-10922
0c21b6cee354594a23f4d5abf0d01b48bdc96d55 192.168.163.132:6383@16383 slave 56005b9413cbf225783906307a2631109e753f8f 0 1569748295000 4 connected
3a1d04983ab6c4ae853f9602dd922d4ebadc4dbf 192.168.163.132:6382@16382 slave 815da8448f5d5a304df0353ca10d8f9b77016b28 0 1569748295000 5 connected
117457eab5071954faab5e81c3170600d5192270 192.168.163.132:6379@16379 myself,master - 0 1569748297000 1 connected 0-5460
56005b9413cbf225783906307a2631109e753f8f 192.168.163.132:6381@16381 master - 0 1569748295000 3 connected 10923-16383
f6a6957421b80409106cb36be3c7ba41f3b603ff 192.168.163.132:6384@16384 slave 117457eab5071954faab5e81c3170600d5192270 0 1569748298185 6 connected
复制代码
⑥ 检查集群

redis-cli --cluster check 192.168.163.132:6384 --cluster-search-multiple-owners
说明:任意连接一个集群节点,进行集群状态检查

View Code
⑦ 集群信息查看

redis-cli --cluster info 192.168.163.132:6384
说明:检查key、slots、从节点个数的分配情况

/redis-cli --cluster info 192.168.163.132:6384
192.168.163.132:6380 (815da844…) -> 0 keys | 5462 slots | 1 slaves.
192.168.163.132:6381 (56005b94…) -> 0 keys | 5461 slots | 1 slaves.
192.168.163.132:6379 (117457ea…) -> 2 keys | 5461 slots | 1 slaves.
[OK] 2 keys in 3 masters.
0.00 keys per slot on average.
⑧ 修复集群

redis-cli --cluster fix 192.168.163.132:6384 --cluster-search-multiple-owners
说明:修复集群和槽的重复分配问题

View Code
⑨ 设置集群的超时时间

redis-cli --cluster set-timeout 192.168.163.132:6382 10000
说明:连接到集群的任意一节点来设置集群的超时时间参数cluster-node-timeout

复制代码
redis-cli --cluster set-timeout 192.168.163.132:6382 10000

Reconfiguring node timeout in every cluster node…
*** New timeout set for 192.168.163.132:6382
*** New timeout set for 192.168.163.132:6384
*** New timeout set for 192.168.163.132:6383
*** New timeout set for 192.168.163.132:6379
*** New timeout set for 192.168.163.132:6381
*** New timeout set for 192.168.163.132:6380

New node timeout set. 6 OK, 0 ERR.
复制代码
⑩ 集群中执行相关命令

redis-cli --cluster call 192.168.163.132:6381 config set requirepass cc
redis-cli -a cc --cluster call 192.168.163.132:6381 config set masterauth cc
redis-cli -a cc --cluster call 192.168.163.132:6381 config rewrite
说明:连接到集群的任意一节点来对整个集群的所有节点进行设置。

复制代码
redis-cli --cluster call 192.168.163.132:6381 config set cluster-node-timeout 12000

Calling config set cluster-node-timeout 12000
192.168.163.132:6381: OK
192.168.163.132:6383: OK
192.168.163.132:6379: OK
192.168.163.132:6384: OK
192.168.163.132:6382: OK
192.168.163.132:6380: OK


复制代码
到此,相关集群的基本操作已经介绍完,现在说明集群迁移的相关操作。

Redis 6.0 新增了几个命令:

1,fix 的子命令:–cluster-fix-with-unreachable-masters

2,call的子命令:–cluster-only-masters、–cluster-only-replicas

3,集群节点备份:backup

View Code
迁移相关
① 在线迁移slot :在线把集群的一些slot从集群原来slot节点迁移到新的节点,即可以完成集群的在线横向扩容和缩容。有2种方式进行迁移

一是根据提示来进行操作:

直接连接到集群的任意一节点
redis-cli -a cc --cluster reshard 192.168.163.132:6379
信息如下:

View Code
二是根据参数进行操作:

redis-cli -a cc --cluster reshard 192.168.163.132:6379 --cluster-from 117457eab5071954faab5e81c3170600d5192270 --cluster-to 815da8448f5d5a304df0353ca10d8f9b77016b28 --cluster-slots 10 --cluster-yes --cluster-timeout 5000 --cluster-pipeline 10 --cluster-replace
说明:连接到集群的任意一节点来对指定节点指定数量的slot进行迁移到指定的节点。

View Code
② 平衡(rebalance)slot :

1)平衡集群中各个节点的slot数量

redis-cli -a cc --cluster rebalance 192.168.163.132:6379
View Code
2)根据集群中各个节点设置的权重等平衡slot数量(不执行,只模拟)

redis-cli -a cc --cluster rebalance --cluster-weight 117457eab5071954faab5e81c3170600d5192270=5 815da8448f5d5a304df0353ca10d8f9b77016b28=4 56005b9413cbf225783906307a2631109e753f8f=3 --cluster-simulate 192.168.163.132:6379
③ 导入集群

redis-cli --cluster import 192.168.163.132:6379 --cluster-from 192.168.163.132:9021 --cluster-replace
说明:外部Redis实例(9021)导入到集群中的任意一节点。

View Code
注意:测试下来发现参数–cluster-replace没有用,如果集群中已经包含了某个key,在导入的时候会失败,不会覆盖,只有清空集群key才能导入。

*** Importing 97847 keys from DB 0
Migrating 9223372011174675807 to 192.168.163.132:6381: Source 192.168.163.132:9021 replied with error:
ERR Target instance replied with error: BUSYKEY Target key name already exists
并且发现如果集群设置了密码,也会导入失败,需要设置集群密码为空才能进行导入(call)。通过monitor(9021)的时候发现,在migrate的时候需要密码进行auth认证。

总结:
Redis Cluster 通过redis-cli --cluster来创建和管理集群的方式和 redis-trib.rb脚本绝大部分都是一样的,所以对于比较熟悉 redis-trib.rb 脚本的,使用–cluster也非常顺手。

REDIS故障排查工具相关推荐

  1. MongoDB 常用故障排查工具

    MongoDB 常用故障排查工具 1.profile profiling levels: 0,关闭profile:1,只抓取slow查询:2,抓取所有数据. 启动profile并且设置Profile级 ...

  2. 计算机网络故障排查工具,网络故障排查之路由器篇

    上一篇文章介绍了光猫的简单故障排查.网络故障简易排查篇之光猫故障判断.今天给大家介绍一下路由器的简单故障排查.今天先主要介绍通过手机进入路由器,查看路由的相关状态.以后单独写一篇从电脑进路由器. 光猫 ...

  3. 那些年,我用过的Java线上故障排查工具和方法整理

    点击上方 IT牧场 ,选择 置顶或者星标 技术干货每日送达 原文 | https://fredal.xin/java-error-check 线上故障主要会包括cpu.磁盘.内存以及网络问题,而大多数 ...

  4. linux网络95值工具,Linux下网络故障排查工具之ping|traceroute和tcptraceroute|mtr工具

    服务器运维人员在日常运维服务器的过程中经常会遇到服务器网络故障,有服务器硬件造成的,也有服务商网络问题造成的,也有区域网络问题造成的,这个时候就需要用到ping,traceroute,mtr这三个命令 ...

  5. linux服务器无网络确认,Linux服务器故障排查实用指南

    [2013年3月25日 51CTO外电头条]由于造成网络问题的因素多种多样,因此网络故障排查技能就成了每位服务器或网络服务负责人必不可少的重要素质.Linux为我们提供了大量网络故障排查工具,在本文中 ...

  6. 服务器开发中网络数据分析与故障排查经验

    接下来我们先讨论一下这些网络接口函数的使用注意事项: 1.以上函数如果调用出错后,返回值均为-1;但是返回值是-1,不一定代表出错,这还得根据对应的套接字模式(阻塞与非阻塞模式). 2.默认使用的so ...

  7. 用Windows自带的系统恢复环境WinRE进行系统重大故障排查,轻松修复Windows蓝屏、白屏等问题

    进命令提示符或BIOS修改电脑软硬件设置时, 进安全模式杀毒.卸载软件.排查问题时: 系统文件损坏.进不了系统,需要重置时, 更新后没声音.键鼠不能用,要卸载更新时-- 我们常提到的以上各种场景,都可 ...

  8. linux服务器网络不稳定,Linux服务器故障排查指南7:网络缓慢状况

    网络缓慢状况的故障排查 从某种角度来说,网络无法工作的问题更容易解决.当一台主机无法访问,我们可以执行前面讨论过的故障排查步骤直到一切恢复正常.但如果仅仅是网络缓慢,追查其根本原因往往变得更为棘手.本 ...

  9. linux网络管理(链路聚合、桥接网络、故障排查、常用工具)

    文章目录 网络进阶管理 链路聚合 桥接网络 链路聚合配置 Centos7/RHEL7配置bond聚合链路 Centos7/RHEL7配置bond0 Centos7/RHEL7配置bond1 Cento ...

最新文章

  1. 扛住100亿次请求?我们来试一试!
  2. 代码居中对齐_一篇文章带你了解CSS对齐方式
  3. ssh 免密码登录(设置后仍需输密码的原因及解决方法)
  4. Java中读取控制台输入
  5. [渝粤教育] 广东-国家-开放大学 21秋期末考试马克思主义基本原理概论(A)10882k1 (5)
  6. php原生session,利用Memcached在php下实现session机制 替换PHP的原生session支持
  7. Spring事务管理接口
  8. Linux学习笔记:rpm程序包管理
  9. python3怎么安装mysql_Python3下mysqlclient的安装和使用
  10. Atitit.提升电子商务安全性 在线充值功能安全方面的设计
  11. 《Python游戏趣味编程》 第3章 美丽的圆圈画
  12. 加密算法(二)——MD5,Base64,DES,RSA加密算法解析
  13. mysql string agg_postgresql – 如何使array_agg()像mySQL中的group_concat()一样工作
  14. UEFI原理与编程(七):包及.dsc、.dec、.fdf文件
  15. 厂区 3D 室内定位及电子围栏
  16. getchar()用法
  17. 人工智能学习路线,文末赠书活动(深度学习Spark机器学习)
  18. 【大学总结】迟到但未缺席的大学总结
  19. Flutter中的Isolate的个人理解
  20. android图片分辨率改变,Android实现改变一个图片的像素值

热门文章

  1. 弹窗在大屏上居中对齐,在小屏上被挡住解决方案
  2. 直播 背景 技术体系 乐视云直播Demo
  3. (原创)c#学习笔记05--变量的更多内容01--类型转换01--隐式转换
  4. JavaScript将成为浏览器战争的主战场
  5. IBatisNet1.5学习--配置篇
  6. 深入理解 sudo 与 su 之间的区别
  7. python-socket
  8. Linux 下C++编写
  9. FreeMarker模板文件的组成(2)
  10. 获取web.py上面的示例code