文档章节

Redis 集群常用命令

杨应滨
 杨应滨
发布于 2016/09/19 11:13
字数 1356
阅读 457
收藏 0

Redis集群提供一种运行Redis的方式,数据被自动的分片到多个Redis节点。 集群不支持处理多个键的命令,因为这需要在Redis节点间移动数据,使得Redis集群不能提供像Redis单点那样的性能,在高负载下会表现得不可预知。 Redis集群也提供在网络分割(partitions)期间的一定程度的可用性,这就是在现实中当一些节点失败或者不能通信时能继续进行运转的能力。 所以,在实践中,你可以从Redis集群中得到什么呢? 在多个节点间自动拆分你的数据集的能力。 当部分节点正在经历失败或者不能与集群其他节点通信时继续运转的能力。

Redis 集群的TCP 端口(Redis Cluster TCP ports)

为了让Redis集群工作正常,对每个节点:

  1. 用于与客户端通信的正常的客户端通信端口(通常为6379)需要开放给所有需要连接集群的客户端以及其他集群节点(使用客户端端口来进行键迁移)。

  2. 集群总线端口(客户端端口固定偏移量加10000)必须从所有的其他集群节点可达。

创建和使用Redis集群(Creating and using a Redis Cluster)

注意,可以正常运转的最小集群需要包含至少3个主服务器节点。在你的第一次尝试中,强烈建议开始一个6个节点的集群,3个主服务器,3个从服务器。下面是最小的Redis集群配置文件:

port 7000  
cluster-enabled yes  
cluster-config-file nodes.conf  
cluster-node-timeout 5000  
appendonly yes  

创建集群(Creating the cluster)

创建3个主从群组,--replicas 1选项意思是我们希望每个创建的主服务器有一个从服务器。其他参数是我想用来创建新集群的实例地址列表。

./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  

采用客户端redis-cli测试集群

$ redis-cli -c -p 7000  
redis 127.0.0.1:7000> set foo bar  
-> Redirected to slot [12182] located at 127.0.0.1:7002  
OK  
redis 127.0.0.1:7002> set hello world  
-> Redirected to slot [866] located at 127.0.0.1:7000  
OK  
redis 127.0.0.1:7000> get foo  
-> Redirected to slot [12182] located at 127.0.0.1:7002  
"bar"  
redis 127.0.0.1:7000> get hello  
-> Redirected to slot [866] located at 127.0.0.1:7000  
"world"  

重新分片集群(Resharding the cluster)

./redis-trib.rb reshard 127.0.0.1:7000  

你只需要指定单个节点,redis-trib会自动找到其它节点。

当前redis-trib只能在管理员的支持下进行重分片,你不能只是说从这个节点移动5%的哈希槽到另一个节点(但是这也很容易实现)。那么问题就随之而来了。第一个问题就是你想要重分片多少:

你想移动多少哈希槽(从1到16384)? 我们尝试重新分片1000个哈希槽,如果没有sleep调用的那个例子程序还在运行的话,这些槽里面应该已经包含了不少的键了。

然后,redis-trib需要知道重分片的目标了,也就是将接收这些哈希槽的节点。我将使用第一个主服务器节点,也就是127.0.0.1:7000,但是我得指定这个实例的节点ID。这已经被redis-trib打印在一个列表中了,但是我总是可以在需要时使用下面的命令找到节点的ID:

$ redis-cli -p 7000 cluster nodes | grep myself  
97a3a64667477371c4479320d683e4c8db5858b1 :0 myself,master - 0 0 0 connected 0-5460  

好了,我的目标节点是97a3a64667477371c4479320d683e4c8db5858b1。 现在,你会被询问想从哪些节点获取这些键。我会输入all,这样就会从所有其它的主服务器节点获取一些哈希槽。 在最后的确认后,你会看到每一个被redis-trib准备从一个节点移动到另一个节点的槽的消息,并且会为每一个被从一侧移动到另一侧的真实的键打印一个圆点。 在重分片进行的过程中,你应该能够看到你的示例程序运行没有受到影响。如果你愿意的话,你可以在重分片期间多次停止和重启它。 在重分片的最后,你可以使用下面的命令来测试一下集群的健康情况:

./redis-trib.rb check 127.0.0.1:7000  

Redis 节点查看

-- 查看主节点
redis-cli -p 7000 cluster nodes | grep master  

-- 查看所有节点
redis-cli -p 7000 cluster nodes  

-- 使节点奔溃
redis-cli -p 7002 debug segfault  

Redis 节点操作

-- 添加节点7006 到 7000 所在的集群中
./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000  

-- 添加从节点7006 到7000 所在的集群中 
./redis-trib.rb add-node --slave 127.0.0.1:7006 127.0.0.1:7000  

-- 添加从节点到指定的主节点中,需要先通过 cluster nodes 查看 master id
./redis-trib.rb add-node --slave --master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 127.0.0.1:7006 127.0.0.1:7000  

-- 移除节点 第一个参数只是集群中的一个随机节点,第二个参数是你想移除的节点的ID。 
./redis-trib del-node 127.0.0.1:7000 <node-id>  

-- 为了给节点127.0.0.1:7005添加一个副本,这个节点当前服务11432-16383范围内的哈希槽,
其节点ID为3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e,
所有我们需要去做的,就是连接这个新的节点(已经作为空主服务器被添加)然后发送命令: 
redis 127.0.0.1:7006> cluster replicate 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e  

-- 运行结果发现有两个从节点了
redis-cli -p 7000 cluster nodes | grep slave | grep 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e  
f093c80dde814da99c5cf72a7dd01590792b783b 127.0.0.1:7006 slave 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 0 1385543617702 3 connected  
2938205e12de373867bf38f1ca29d31d0ddb3e46 127.0.0.1:7002 slave 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 0 1385543617198 3 connect  


© 著作权归作者所有

杨应滨
粉丝 2
博文 21
码字总数 10590
作品 0
广州
项目经理
私信 提问
redis安装、持久化、数据类型、常用操作、操作键值、安全设置、慢查询日志、存储session、主从配置、集群介绍、集群搭建配置、集群操作,php安装redis扩展

21.9 redis介绍 21.10 redis安装 21.11 redis持久化 21.12 redis数据类型 21.13/21.14/21.15 redis常用操作 21.16 redis操作键值 21.17 redis安全设置 21.18 redis慢查询日志 21.19 php安装r...

tobej
07/12
57
0
redis集群部署

网上有很多用Ruby安装Redis-cluster的文章,但是在实际环境下不想安装Ruby,所以本文主要介绍了用Redis命令部署Redis集群,并且为集群中每一个master实例增加一个slave实例。 0 编译安装 也可...

chenhuaming
2016/10/13
162
0
redis-cluster的安装管理

redis-cluster的安装管理 声明: 本文只允许用于个人学习交流使用,如有错误之处请多多指正。 文档版本:Version 1.0 修改记录:2015-10-30 环境介绍 系统环境:RedHat Enterprise Linux Ser...

天意1
2017/05/07
0
0
redis cluster 集群管理工具

  前言   在redis源码编译的时候,在src目录下会有一个redis-trib.rb的脚本,这个脚本是ruby写的,用于管理redis cluster。      安装系统依赖包   yum -y install epel-release  ...

linux运维菜
2018/08/16
0
0
玩转Redis集群(上)

这是redis集群介绍的上篇,主要是关于Redis集群的搭建。后续将为大家介绍Redis集群的常用命令、Java操作Redis集群、以及与Spring/Spring MVC的整合等知识。 Redis集群搭建 要想搭建一个最简单...

zfz_linux_boy
2017/03/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Security 自定义登录认证(二)

一、前言 本篇文章将讲述Spring Security自定义登录认证校验用户名、密码,自定义密码加密方式,以及在前后端分离的情况下认证失败或成功处理返回json格式数据 温馨小提示:Spring Security...

郑清
39分钟前
5
0
php yield关键字以及协程的实现

php的yield是在php5.5版本就出来了,而在初级php界却很少有人提起,我就说说个人对php yield的理解 Iterator接口 在php中,除了数组,对象可以被foreach遍历之外,还有另外一种特殊对象,也就是继承...

冻结not
52分钟前
4
0
servlet请求和响应的过程

本文转载于:专业的前端网站➥servlet请求和响应的过程 1.加载 Servlet类被加载到Java虚拟机中,并且实例化。在这个过程中,web容器(例如tomcat)会调用Servlet类的公开无参构造函数,产生一...

前端老手
52分钟前
4
0
golang 1.13 errors 包来了,不用写“err 气功波”代码

引 这篇是对 errors 包 的姿势挖掘 气功波错误代码 从 http.Get()返回的错误 判断 syscall.ECONNREFUSED 错误.以前要对 go 标准库 error 结构有点熟悉,才能写出下面的代码 func CmdErr(err ...

guonaihong
56分钟前
31
0
喜玛拉雅已听书单

时间倒序排 书名 作者 状态 唐砖 孑与2 进行中 死灵之书(克苏鲁神话合集) 阿卜杜拉·阿尔哈萨德 进行中 赡养人类 刘慈欣 完结 赡养上帝 刘慈欣 完结 中国太阳 刘慈欣 完结 中国太阳 刘慈欣...

Alex_Java
57分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部