🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### redis-trib.rb简介 `redis-trib.rb` 是采用 `Ruby` 实现的 Redis 集群管理工具。内部通过 Cluster 相关命令帮我们简化集群创建、检查、槽迁移和均衡等常见运维操作,使用之前需要安装 Ruby 依赖环境。 ### 搭建集群 #### 安装 Ruby 依赖环境 wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.gz yum -y install zlib-devel tar xvf ruby-2.5.1.tar.gz cd ruby-2.5.1/ ./configure -prefix=/usr/local/ruby make make install cd /usr/local/ruby/ cp bin/ruby /usr/local/bin cp bin/gem /usr/local/bin #### 安装rubygem redis依赖 wget http://rubygems.org/downloads/redis-3.3.0.gem gem install -l redis-3.3.0.gem #### 查看redis-trib.rb支持的操作 ``` redis-trib.rb help Usage: redis-trib <command> <options> <arguments ...> #创建集群 create host1:port1 ... hostN:portN --replicas <arg> #带上该参数表示是否有从,arg表示从的数量 #检查集群 check host:port #查看集群信息 info host:port #修复集群 fix host:port --timeout <arg> #在线迁移slot reshard host:port #个是必传参数,用来从一个节点获取整个集群信息,相当于获取集群信息的入口 --from <arg> #需要从哪些源节点上迁移slot,可从多个源节点完成迁移,以逗号隔开,传递的是节点的node id,还可以直接传递--from all,这样源节点就是集群的所有节点,不传递该参数的话,则会在迁移过程中提示用户输入 --to <arg> #slot需要迁移的目的节点的node id,目的节点只能填写一个,不传递该参数的话,则会在迁移过程中提示用户输入。 --slots <arg> #需要迁移的slot数量,不传递该参数的话,则会在迁移过程中提示用户输入。 --yes #设置该参数,可以在打印执行reshard计划的时候,提示用户输入yes确认后再执行reshard --timeout <arg> #设置migrate命令的超时时间。 --pipeline <arg> #定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10。 #平衡集群节点slot数量 rebalance host:port --weight <arg> --auto-weights --use-empty-masters --timeout <arg> --simulate 不会真正迁移,测试用的 --pipeline <arg> 一次迁移多少分数据 --threshold <arg> #将新节点加入集群 add-node new_host:new_port existing_host:existing_port --slave --master-id <arg> #从集群中删除节点 del-node host:port node_id #设置集群节点间心跳连接的超时时间 set-timeout host:port milliseconds #在集群全部节点上执行命令 call host:port command arg arg .. arg #将外部redis数据导入集群 import host:port --from <arg> --copy --replace ``` 启动好6个节点之后,使用 `redis-trib.rb create` 命令完成节点握手和槽分配过程 redis-trib.rb create --replicas 1 47.98.147.49:6391 47.98.147.49:6392 47.98.147.49:6393 47.98.147.49:6394 47.98.147.49:6395 47.98.147.49:6396 `--replicas` 参数指定集群中每个主节点配备几个从节点,这里设置为1,redis-trib.rb 会尽可能保证主从节点不分配在同一机器下,因此会重新排序节点列表顺序。节点列表顺序用于确定主从角色,先主节点之后是从节点。创建过程中首先会给出主从节点角色分配的计划,并且会生成报告。 ### Redis-cluster原理 #### 1、节点通信 在分布式存储中需要提供维护节点元数据信息的机制,所谓元数据是指:节点负责哪些数据,是否出现故障等状态信息,Redis 集群采用 Gossip(流言)协议,Gossip 协议工作原理就是节点彼此不断通信交换信息,一段时间后所有的节点都会知道集群完整的信息,这种方式类似流言传播 集群中的每个节点都会单独开辟一个 TCP 通道,用于节点之间彼此通信,通信端口号在基础端口上加10000。 2)每个节点在固定周期内通过特定规则选择几个节点发送 ping 消息。 3)接收到 ping 消息的节点用 pong 消息作为响应。 集群中每个节点通过一定规则挑选要通信的节点,每个节点可能知道全部节点,也可能仅知道部分节点,只要这些节点彼此可以正常通信,最终它们会达到一致的状态。当节点出故障、新节点加入、主从角色变化、槽信息变更等事件发生时,通过不断的 ping/pong 消息通信,经过一段时间后所有的节点都会知道整个集群全部节点的最新状态,从而达到集群状态同步的目的。