设为首页 收藏本站
查看: 426|回复: 0

[经验分享] Redis 集群cluster

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-7-22 09:06:18 | 显示全部楼层 |阅读模式

在网上查找 redis集群的相关文档,很多都是以主从或者主从故障转移而说是集群,前几天玩了下集群,今天终于写出来一部分内容,可以分享出来了。

一、       Redis集群基础介绍

1、Redis集群简介:
Redis集群是一个可以在多个 Redis 节点之间进行数据共享的设施。
Redis 集群通过分区来提供一定程度的可用性:即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。
Redis 集群提供了以下两个好处:
(1、)将数据自动切分(split)到多个节点的能力。
(2、)当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力。
2、集群的数据分片功能:
Redis 集群没有使用一致性hash, 而是引入了哈希槽的概念。
Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽。这种结构很容易添加或者删除节点,并且无论是添加删除或者修改某一个节点,都不会造成集群不可用的状态。
3、Redis集群的主从架构:
为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,每个节点都会有N-1个复制品。
eg:如有A,B,C三个节点的集群,在没有复制模型的情况下,如果节点B失败了,那么整个集群就会以为缺少B节点所承担的哈希槽这个范围的槽而不可用。

然而如果在集群创建的时候(或者过一段时间)我们为每个节点添加一个从节点A1,B1,C1,那么整个集群便有三个master节点和三个slave节点组成,这样在节点B失败后,集群便会选举B1为新的主节点继续服务,整个集群便不会因为槽找不到而不可用了。当然如果B和B1都down了,那集群还是不可用的。
二、      搭建并使用Redis集群
1、架构剖析:

IP                                                       Port
192.168.1.223                                 6379、6380、6381、6382 6383
192.168.1.226                                  6379、6380、6381、6382 6383

2、安装redis:
redis的安装方法不再阐述,看参考前面的文档:
http://www.minunix.com/2014/07/redis-install/
3、修改redis配置文件:
其它配置文件和上文中的配置一样,只需要将配置文件中的cluster 部分中开启以下三项:
cluster-enabled yes

cluster-config-file "nodes.conf"

cluster-node-timeout 1500

其它配置同Redis基础及部署文档

文件中的 cluster-enabled 选项用于开实例的集群模式, 而 cluster-conf-file 选项则设定了保存节点配置文件的路径, 默认值为 nodes.conf.节点配置文件无须人为修改, 它由 Redis 集群在启动时创建, 并在有需要时自动进行更新。
要让集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。本例中使用10个节点,5个主节点,5个从节点。

4、搭建集群:

通过使用 Redis 集群命令行工具 redis-trib , 编写节点配置文件的工作可以非常容易地完成: redis-trib位于Redis源码的src文件夹中, 它是一个Ruby程序, 这个程序通过向实例发送特殊命令来完成创建新集群, 检查集群, 或者对集群进行重新分片(reshared)等工作。
# ./redis-trib create --replicas 1 192.168.1.223:6379 192.168.1.223:6380 192.168.1.223:6381 192.168.1.223:6382 192.168.1.223:6383 192.168.1.226:6379

192.168.1.226:6380 192.168.1.226:6381 192.168.1.226:6382 192.168.1.226:6383

此语句是创建一个集群的命令,其中“--replicas 1”意思是为集群中的每个节点创建一个从节点,后面的是节点的实体ip:port;
redis-trib 会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yes , redis-trib 就会将这份配置应用到集群当中,各个节点互相通信,得到如下结果:

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

这表示集群中的 16384 个槽都有至少一个主节点在处理, 集群运作正常。

5、测试集群:

测试 Redis 集群比较简单的办法就是使用 redis-rb-cluster 或者 redis-cli , 我们将使用 redis-cli 为例来进行演示:

# ./redis-cli -h 192.168.1.223 -p 6379 -c

192.168.1.223:6379> set aa bb

OK

192.168.1.223:6379> set 33 dd

-> Redirected to slot [5878] located at 192.168.1.226:6379

OK

192.168.1.226:6379>get aa

-> Redirected to slot [1180] located at 192.168.1.223:6379

"bb"

192.168.1.223:6379> get 33

-> Redirected to slot [5878] located at 192.168.1.226:6379

"dd"

由此可以看到,redis集群已经搭建完成。

redis-cli 对集群的支持是非常基本的, 所以它总是依靠 Redis 集群节点来将它转向(redirect)至正确的节点。一个真正的(serious)集群客户端应该做得比这更好: 它应该用缓存记录起哈希槽与节点地址之间的映射(map), 从而直接将命令发送到正确的节点上面。这种映射只会在集群的配置出现某些修改时变化, 比如说, 在一次故障转移(failover)之后, 或者系统管理员通过添加节点或移除节点来修改了集群的布局(layout)之后, 诸如此类。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-247621-1-1.html 上篇帖子: redis cluster 添加 删除 重分配 节点 下篇帖子: redis高可用主从复制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表