参考资料:
吴水成老师的<<Redis集群的安装(Redis3+CentOS)>> 见附件
Redis 官方集群指南:http://redis.io/topics/cluster-tutorial
Redis 官方集群规范:http://redis.io/topics/cluster-spec
Redis 集群指南(中文翻译,紧供参考):http://redisdoc.com/topic/cluster-tutorial.html
Redis 集群规范(中文翻译,紧供参考): http://redisdoc.com/topic/cluster-spec.html
实践:结合自身的实践
一.Redis Cluster介绍
Redis集群是一个无中心的分布式redis存储架构,可以在多个节点之间进行数据共享,解决了redis高可用、可扩展等问题,redis集群提供了以下两个好处
(1) 将数据自动切分(split)到多个节点
(2) 当集群中的某一个节点故障时,redis还可以继续处理客户端的请求。
一个 Redis 集群包含 16384 个哈希槽(hash slot),数据库中的每个数据都属于这16384个哈希槽中的一个。集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽。集群中的每一个节点负责处理一部分哈希槽。集群中的每个节点都有1个至N个复制品,其中一个为主节点,其余的为从节点,如果主节点下线了,集群就会把这个主节点的一个从节点设置为新的主节点,继续工作。这样集群就不会因为一个主节点的下线而无法正常工作
详尽内容,请参考:http://www.cnblogs.com/wjoyxt/p/4242184.html http://blog.csdn.net/a67474506/article/details/50435498
二.安装配置
1.环境介绍
Redis 集 群的安装( Redis3.0.3 + CentOS 6.6 _x64 )要让 Redis3.0 集群正常工作至少需要 3 个 Master 节点,要想实现高可用,每个 Master 节点要配备至少 1 个 Slave 节点。根据以上特点和要求,进行如下的集群实施规划:
使用 6 台服务器(物理机或虚拟机)部署 3 个 Master + 3 个 Slave;
我的环境设置:
机器:虚拟机
O S: CentOS 6.6 _x64
IP:
192.168.1.121:7111 192.168.1.121:7112 192.168.1.121:7113
192.168.1.122:7114 192.168.1.124:7116 192.168.1.123:7115
2.Redis安装配置
Redis介绍,安装使用及集群介绍
3.Redis集群的安装
3.1 剩余内容参考:Redis集群的安装(Redis3+CentOS)即可
3.2.安装过程中问题小结
(1) redis-trib create --replicas 1 192.168.1.107:7114 192.168.1.108:7115 192.168.1.109:7116 192.168.1.104:7111 192.168.1.105:7112 192.168.1.106:7113
注:(1)不满足可换位置再试 (2)当存在伪节点时,当主从在一台,机器出问题就都有问题了; 因为节点主从不可控
(2)报错:[ERR] Node 172.168.63.202:7001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some key
1)将每个节点下aof、rdb、nodes.conf本地备份文件删除;
2)172.168.63.201:7001> flushdb #清空当前数据库(可省略)
3)之后再执行脚本,成功执行;
参考:http://blog.csdn.net/vtopqx/article/details/50235737
4.Redis集群高可用测试
5.Redis集群的扩展测试
5.1 遵从文件<<redis集群的扩展性测试>>
5.2 以下是自身的实践及问题总结
1.新增节点到集群内:在新节点机器上执行
/usr/local/src/redis3.0/src/redis-trib.rb add-node 192.168.1.111:7117 192.168.1.121:7111
2.为新节点分配哈希槽(slot) :
你只需要指定集群中其中一个节点的地址, redis-trib 就会自动找到集群中的其他节点。 目前 redis-trib只能在管理员的协助下完成重新分片的工作,命令如下:
# /usr/local/src/redis3.0/src/redis-trib.rb reshard 192.168.1.121:7111
3.移动完成查看节点是否正常
/usr/local/src/redis3.0/src/redis-trib.rb check 192.168.1.121:7111
4.添加从节点
#/usr/local/src/redis3.0/src/redis-trib.rb add-node 192.168.1.111:7118 192.168.1.121:7111
5.redis-cli 连接上新节点 shell,输入命令:cluster replicate 对应 master 的 node-id
127.0.0.1:7118>cluster replicate ab31611b3424990e2b9bbe73135cb4cb0ace394f
ab31611b3424990e2b9bbe73135cb4cb0ace394f位7117的nodeId
6.删除一个 slave 节点
# cd /usr/local/src/redis-3.0.3/src/
# ./redis-trib.rb del-node 172.21.10.203:7118 7f868a38a90acfdf40121613bfed1a089b7db028
删除一个 master 节点
删除 master 节点之前首先要使用 reshard 移除该 master 的全部 slot,然后再删除当前节点(目前只能把被
删除 master 的 slot 迁移到一个节点上),操作和分配 slot 类似,指定具体的 Source node 即可。
# /usr/local/src/redis-3.0.3/src/redis-trib.rb reshard 172.21.10.203:7117
确认已清空该 Master 节点的所有 slot 后就可以删除该节点了(命令与删除 slave 节点一样) :
# cd /usr/local/src/redis-3.0.3/src/
# ./redis-trib.rb del-node 172.21.10.203:7117 93c4477e5d23db7fc17fc4c15ec72595b52d25e7