ruby 搭建windows redis 集群

Redis Cluster集群的搭建

Redis Cluster集群搭建

搭建集群工作需要以下三个步骤:

1)准备节点。

2)节点握手。

3)分配槽。

手动创建集群

准备节点

Redis集群一般由多个节点组成,节点数量至少为6个才能保证组成完整高可用的集群。每个节点需要开启配置cluster-enabled yes,让Redis运行在集群模式下。建议为集群内所有节点统一目录,一般划分三个目录:conf、data、log,分别存放配置、数据和日志相关文件。把6个节点配置统一放在conf目录下,集群相关配置如下:

# 节点端口
port 
#  开启集群模式
cluster-enabled yes
#  节点超时时间,单位毫秒
cluster-node-timeout 
#  集群内部配置文件
cluster-config-file "nodes-.conf"

其他配置和单机模式一致即可,配置文件命名规则redis-{port}.conf,准备好配置后启动所有节点。

redis-server conf/redis-.conf
redis-server conf/redis-.conf
redis-server conf/redis-.conf
redis-server conf/redis-.conf
redis-server conf/redis-.conf
redis-server conf/redis-.conf

Cluster集群启动过程如下图:

每个节点目前只能识别出自己的节点信息,可以执行cluster nodes命令获取集群节点状

态。

:>cluster nodes
8e41673d59c9568aa9d29fb174ce733345b3e8f1 : myself,master -  conn

节点握手

节点握手是指一批运行在集群模式下的节点通过Gossip协议彼此通信,达到感知对方的过程。节点握手是集群彼此通信的第一步,由客户端发起命令:cluster meet{ip}{port}

cluster meet命令是一个异步命令,执行之后立刻返回。内部发起与目标节点进行握手通信,握手通信过程:

1)节点本地创建节点信息对象,并发送meet消息。

2)节点接受到meet消息后,保存节点信息并回复pong消息。

3)之后节点和彼此定期通过ping/pong消息进行正常的节点通

信。

分别执行meet命令让其他节点加入到集群中,

:>cluster meet  .:>cluster meet  .:>cluster meet  .:>cluster meet  

最后执行cluster nodes命令确认6个节点都彼此感知并组成集群。

:> cluster nodes
4fa7eac4080f0b667ffeab9b87841da49b84a6e4 : master - 
5 connected
cfb28ef1deee4e0fa78da86abe5d24566744411e : myself,master -  connected
be9485a6a729fc98c5151374bc30277e89a461d8 : master - 
4 connected
40622f9e7adc8ebd77fca0de9edfe691cb8a74fb : master - 
3 connected
8e41673d59c9568aa9d29fb174ce733345b3e8f1 : master - 
1 connected
40b8d09d44294d2e23c7c768efc8fcd153446746 : master - 
2 connected

节点建立握手之后集群还不能正常工作,这时集群处于下线状态,所有的数据读写都被禁止,通过cluster info命令可以获取集群当前状态。

:> cluster info
cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:0

分配槽

Redis集群把所有的数据映射到个槽中。每个key会映射为一个固定的槽,只有当节点分配了槽,才能响应和这些槽关联的键命令。通过cluster addslots命令为节点分配槽。这里利用bash特性批量设置槽(slots),命令如下:

redis-cli -h  -p  cluster addslots {0...}
redis-cli -h  -p  cluster addslots {...}
redis-cli -h  -p  cluster addslots {...}

执行cluster info查看集群状态,如下所示:

:> cluster info
cluster_state:ok
cluster_slots_assigned:
cluster_slots_ok:
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:5
cluster_my_epoch:0
cluster_stats_messages_sent:
cluster_stats_messages_received:

当前集群状态是OK,集群进入在线状态。所有的槽都已经分配给节点,执行cluster nodes命令可以看到节点和槽的分配关系:

:> cluster nodes
4fa7eac4080f0b667ffeab9b87841da49b84a6e4 : master - 
5 connected
cfb28ef1deee4e0fa78da86abe5d24566744411e : myself,master -  connected

be9485a6a729fc98c5151374bc30277e89a461d8 : master - 
4 connected
40622f9e7adc8ebd77fca0de9edfe691cb8a74fb : master - 
3 connected
8e41673d59c9568aa9d29fb174ce733345b3e8f1 : master - 
1 connected

40b8d09d44294d2e23c7c768efc8fcd153446746 : master - 
2 connected

集群模式下,Reids节点角色分为主节点和从节点。首次启动的节点和被分配槽的节点都是主节点,从节点负责复制主节点槽信息和相关的数据。使用cluster replicate{nodeId}命令让一个节点成为从节点。其中命令执行必须在对应的从节点上执行,nodeId是要复制主节点的节点ID,命令如下:

:>cluster replicate cfb28ef1deee4e0fa78da86abe5d24566744411e
OK
:>cluster replicate 8e41673d59c9568aa9d29fb174ce733345b3e8f1
OK
:>cluster replicate 40b8d09d44294d2e23c7c768efc8fcd153446746
OK

Redis集群模式下的主从复制使用了之前介绍的Redis复制流程,依然支持全量和部分复制。复制(replication)完成后,整个集群的结构如图:

集群搭建需要很多步骤当集群节点众多时,必然会加大搭建集群的复杂度和运维成本。因此Redis官方提供了redis-trib.rb工具方便我们快速搭建集群。

用redis-trib.rb搭建集群

redis-trib.rb是采用Ruby实现的Redis集群管理工具。内部通过Cluster相关命令帮我们简化集群创建、检查、槽迁移和均衡等常见运维操作,使用之前需要安装Ruby依赖环境。

Ruby环境准备

1、安装Ruby:

--  下载 ruby
wget https:// cache.ruby-lang.org/pub/ruby//ruby-.tar.gz
--  安装 ruby
tar xvf ruby-.tar.gz
./configure -prefix=/usr/local/ruby
make
make install
cd /usr/local/ruby
sudo cp bin/ruby /usr/local/bin
sudo cp bin/gem /usr/local/bin

2、安装rubygem redis依赖:

wget http:// rubygems.org/downloads/redis-.gem
gem install -l redis-.gem
gem list --check redis gem

3、安装redis-trib.rb:

sudo cp /{redis_home}/src/redis-trib.rb /usr/local/bin

4、安装完Ruby环境后,执行redis-trib.rb命令确认环境是否正确,输出如

下:

# redis-trib.rb
Usage: redis-trib   
create host1:port1 ... hostN:portN
--replicas 
check host:port
info host:port
fix host:port
--timeout 
reshard host:port
--from 
--to 
--slots 
--yes
--timeout 
--pipeline 

准备节点

首先我们跟之前内容一样准备好节点配置并启动:

redis-server conf/redis-.conf
redis-server conf/redis-.conf
redis-server conf/redis-.conf
redis-server conf/redis-.conf
redis-server conf/redis-.conf
redis-server conf/redis-.conf

创建集群

启动好6个节点之后,使用redis-trib.rb create命令完成节点握手和槽分配过程,命令如下:

redis-trib.rb create --replicas .1:.:.:.:.:.:

--replicas参数指定集群中每个主节点配备几个从节点,这里设置为1。

如果部署节点使用不同的IP地址,redis-trib.rb会尽可能保证主从节点不分配在同一机器下,因此会重新排序节点列表顺序。节点列表顺序用于确定主从角色,先主节点之后是从节点。创建过程中首先会给出主从节点角色分配的计划,当我们同意这份计划之后输入yes,redis-trib.rb开始执行节点握手和槽分配操作。

集群完整性检查

集群完整性指所有的槽都分配到存活的主节点上,只要个槽中有一个没有分配给节点则表示集群不完整。可以使用redis-trib.rb check命令检测之前创建的集群是否成功,check命令只需要给出集群中任意一个节点地址就可以完成整个集群的检查工作,命令如下:

redis-trib.rb check :
原文链接:,转发请注明来源!