UDN-企业互联网技术人气社区

板块导航

浏览  : 876
回复  : 1

[讨论交流] Redis Cluster集群主从方案(附Jedis Cluster教程)

[复制链接]
泡泡兔的头像 楼主
发表于 2016-7-24 14:23:55 | 显示全部楼层 |阅读模式
  一、Redis集群介绍

  • Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。
  • Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.
  • Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令.
  • Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽,举个例子,比如当前集群有3个节点,那么: 节点 A 包含 0 到 5500号哈希槽. 节点 B 包含5501 到 11000 号哈希槽. 节点 C 包含11001 到 16384号哈希槽.

  二、Redis Cluster集群的优势:

  • 自动分割数据到不同的节点上。
  • 整个集群的部分节点失败或者不可达的情况下能够继续处理命令。
  • 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
  • 支持主从复制模型。(slave->master 选举,集群容错)

  三、Redis Cluster集群的主从复制模型:

  为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,假如有A,B,C三个节点的集群,在没有复制模型的情况下,如果节点B失败了,那么整个集群就会以为缺少5501-11000这个范围的槽而不可用.
然而如果在集群创建的时候我们为每个节点添加一个从节点A1,B1,C1,那么整个集群便有三个master节点和三个slave节点组成,这样在节点B失败后,集群便会选举B1为新的主节点继续服务,整个集群便不会因为槽找不到而不可用了。

  四、Redis Cluster模型图
2.png

  五、Redis的安装以及cluster配置

  下载redis最新的安装包
  1. wget http://download.redis.io/releases/redis-3.0.7.tar.gz
复制代码

  解压
  1. tar xzf redis-3.0.7.tar.gz
复制代码

  安装支持包tcl
  1. yum install tcl 编译原文件
  2. make
复制代码

  创建集群相关文件(方便管理)
  1. mkdir cluster
  2. cd cluster
  3. mkdir 6379 6380 6381 6382 6383 6384
复制代码

  cluster下面每个目录中都创建一个redis.conf文件. 注意修改文件中的端口号:
  1. port 6379
  2. cluster-enabled yes
  3. cluster-config-file nodes_6379.conf
  4. cluster-node-timeout 5000
  5. appendonly yes
复制代码

  把redis-server的可执行文件复制到cluster下面的各个目录, 然后打开6个shell终端,进入各个目录,启动每个实例, 命令如下:
  1. ./redis-server redis.conf
复制代码

  检查6个服务是否都启动了
2.png

  搭建集群
  1. ./redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384
复制代码

  –replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。

  此时报错,发现缺少相应的ruby环境,如下安装相应环境:
  1. yum install ruby
  2. yum install rubygems
  3. gem install redis
复制代码

  安装好环境后再次搭建集群
  1. ./redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384
复制代码

  检测集群节点相关信息
  1. ./redis-trib.rb check 127.0.0.1:6379
复制代码

2.png

  可以发现系统将前3个服务做了主节点,后3个服务作为了从节点,并且是相对应的。

  进入某个节点验证
  1. ./redis-cli -c -h 127.0.0.1 -p 6379
复制代码

2.png

  可以发现程序根据key对16384取模的值为3488,根据hash槽的分布跳转到了对应的节点上。 可见集群环境正常运行

  六、Jedis Cluster教程
  1. <dependency>
  2.     <groupId>redis.clients</groupId>
  3.     <artifactId>jedis</artifactId>
  4.     <version>2.8.0</version>
  5.     <type>jar</type>
  6.     <scope>compile</scope>
  7. </dependency>

  8. Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
  9. //这里只需要配置一个地址就行,其他的地址让jedis自己去找。
  10. jedisClusterNodes.add(new HostAndPort("127.0.0.1", 6379));
  11. JedisCluster jc = new JedisCluster(jedisClusterNodes);
  12. jc.set("11", "22");
  13. String value = jc.get("11");
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部