本文就官方redis分布式的部署进行总结说明,redis分布式中集成了高可用HA功能,依次进行说明,现对redis的分布式部署做以下总结。
下载redis版本
官方下载地址:http://download.redis.io/releases/redis-3.2.4.tar.gzredis编译
解压redis-3.2.4.tar.gz包,进入到redis-3.2.4
我一般添加快捷方式:ln -s redis-3.2.4 redis
进入redis目录的src下,执行:.configure完成编译即可部署环境说明
参照官方说明,支持redis主备,最少部署六个节点,三主三备
mkdir redis-cluster
cd redis-cluster
mkdir 7000 7001 7002 7003 7004 7005
拷贝编译好的redis分别拷贝到7000,7001,7002,7003,7004,7005下面,见下图所示
分别进入到7000,7001,7002,7003,7004,7005的redis-3.2.4目录中,新建redis_cluster_7000.conf redis_cluster_7001.conf等文件,添加以下内容
redis_cluster_7000.conf配置文件如下所示
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
redis_cluster_7001.conf配置文件如下所示
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
依次类推即可。
- 分别启动以上六个redis实例
进入到7000/redis-3.2.4的src目录下,执行
../redis-server ./redis_cluster_7000.conf
../redis-server ./redis_cluster_7001.conf
../redis-server ./redis_cluster_7002.conf
../redis-server ./redis_cluster_7003.conf
../redis-server ./redis_cluster_7004.conf
../redis-server ./redis_cluster_7005.conf
备注:以上启动的六个redis之间没有任何的关系,都是独立的,下文介绍如何将六个redis实例变成3主三备。
- 安装gem
yum install gem
在线安装失败后,可考虑离线安装
- 创建redis集群
进入到任意redis的src目录下,执行如下命令
gem install redis
#创建集群,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-trib.rb check 127.0.0.1:7000
如下图所示
备注:3个master将16384个槽分配了,后续介绍redis如何将key存储到这些槽中。
- 新增集群节点
- 开启两个redis实例,本文基于同一台机器部署,跨机器部署只需要修改ip就行,如下所示:
./redis-server ../redis_cluster_7006.conf &
./redis-server ../redis_cluster_7007.conf &
启动后的redis进程如下图所示:
2.将7006加入到集群中作为主节点:
src目录下执行:./redis-trib.rb add-node 127.0.0.1:7006 127.0.0.1:7000
查看集群状态:./redis-trib.rb check 127.0.0.1:7006
发现此时:7006已经成为了集群中一个主,但是没有分配一个槽,故此时连接7006操作的话,所有的请求都会转发到其他的solt槽去处理。
3.接下来我们给7006redis添加一个备
redis的src目录下执行:./redis-trib.rb add-node –slave –master-id e6aee83e740d7dc44afd563e4aa160378f5a4cdf 127.0.0.1:7007 127.0.0.1:7000
检查集群状态:
此时我们发现7007已经变成7006一个备了,但是7006还是没有被分配槽号,接下来我们操作如何进行solt的重分配。
以下命令solt槽的分配交由系统自动完成
./redis-trib.rb reshard 127.0.0.1:7000
配置部分截图:
# redis-trib.rb reshard 127.0.0.1:7000
#下面是主要过程
How many slots do you want to move (from 1 to 16384)? 2000
#设置slot数2000
What is the receiving node ID? 03ccad2ba5dd1e062464bc7590400441fafb63f2
#新节点node id
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1:all
#表示全部节点重新洗牌
Do you want to proceed with the proposed reshard plan (yes/no)? yes
#确认重新分
再次查看集群状态
备注:分配成功
- 异常总结
[ERR] Nodes don't agree about configuration!
>>> Check for open slots...
[WARNING] Node 127.0.0.1:7006 has slots in importing state (5608).
[WARNING] The following slots are open: 5608
出现这种情况:某个槽位号被打开了,解决方法
redis-trib.rb fix 127.0.0.1:7000
#执行部分结果如下:
[ERR] Nodes don't agree about configuration!
>>> Check for open slots...
[WARNING] Node 127.0.0.1:7006 has slots in importing state (5608).
[WARNING] The following slots are open: 5608
>>> Fixing open slot 5608
Set as migrating in:
Set as importing in: 127.0.0.1:7006
>>> Moving all the 5608 slot keys to its owner 127.0.0.1:7001
Moving slot 5608 from 127.0.0.1:7006 to 127.0.0.1:7001:
>>> ****Setting 5608 as STABLE in 127.0.0.1:7006****
>>> Check slots coverage...
由上可以,设置7006的5608槽为stable即可
具体操作如下:
再次查看集群,集群恢复正常!