码迷,mamicode.com
首页 > 其他好文 > 详细

redis集群

时间:2020-03-29 17:56:07      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:yum   公式   over   eps   png   append   设定   string   ati   

问题

1)         容量不够,redis如何进行扩容?

2)         并发写操作, redis如何分摊?

什么是集群

1)         Redis 集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。

2)         Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求

9.2 集群方案

9.3 安装ruby环境

1)         能上网:

执行yum install ruby

执行yum install rubygems

2)         不能上网:

l   cd  /run/media/root/CentOS 7 x86_64/Packages  获取如下rpm包

技术图片

 

 

l  拷贝到/opt/rpmruby/目录下,并cd到此目录

l  执行:rpm -Uvh *.rpm --nodeps –force 按照依赖安装各个rpm包

l  按照依赖安装各个rpm包

l  执行在opt目录下执行  gem install --local redis-3.2.0.gem

9.4 准备6个Redis实例

1)         准备6个实例  6379,6380,6381,6389,6390,6391

         拷贝多个redis.conf文件

         开启daemonize yes

         Pid文件名字

         指定端口

         Log文件名字

         Dump.rdb名字

         Appendonly 关掉或者换名字

2)         再加入如下配置

cluster-enabled yes    打开集群模式

cluster-config-file  nodes-端口号.conf  设定节点配置文件名

cluster-node-timeout 15000   设定节点失联时间,超过该时间(毫秒),集群自动进行主从切换

9.5 合体

1)         将6个实例全部启动,nodes-端口号.conf文件都生成正常

2)         合体

l  进入到 cd  /opt/redis-3.2.5/src

l  执行

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

192.168.31.211:6379 192.168.31.211:6380  192.168.31.211:6381

192.168.31.211:6389 192.168.31.211:6390  192.168.31.211:6391

l  注意: IP地址修改为当前服务器的地址,端口号为每个Redis实例对应的端口号.

9.6 集群操作

1)         以集群的方式进入客户端

redis-cli  -c  -p  端口号

2)         通过cluster nodes 命令查看集群信息

技术图片

 

 

1)         redis cluster 如何分配这六个节点

一个集群至少要有三个主节点。

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

分配原则尽量保证每个主数据库运行在不同的IP地址,每个从库和主库不在一个IP地址上。

2)         什么是slots

l  一个 Redis 集群包含 16384 个插槽(hash slot), 数据库中的每个键都属于这 16384 个插槽的其中一个, 集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。

l  集群中的每个节点负责处理一部分插槽。 举个例子, 如果一个集群可以有主节点, 其中:

        节点 A 负责处理 0 号至 5500 号插槽。

        节点 B 负责处理 5501 号至 11000 号插槽。

        节点 C 负责处理 11001 号至 16383 号插槽

3)         在集群中录入值

l  在redis-cli每次录入、查询键值,redis都会计算出该key应该送往的插槽,如果不是该客户端对应服务器的插槽,redis会报错,并告知应前往的redis实例地址和端口.

l  redis-cli客户端提供了 –c 参数实现自动重定向。

如 redis-cli  -c –p 6379 登入后,再录入、查询键值对可以自动重定向。

l  不在一个slot下的键值,是不能使用mget,mset等多键操作。

l  可以通过{}来定义组的概念,从而使key中{}内相同内容的键值对放到一个slot中去

4)         查询集群中的值

l  CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。

l  CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量

l  CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键

5)         故障恢复

l  如果主节点下线?从节点能否自动升为主节点?

l  主节点恢复后,主从关系会如何?

l  如果所有某一段插槽的主从节点都当掉,redis服务是否还能继续?

redis.conf中的参数  cluster-require-full-coverage

9.7 集群的Jedis开发

public class JedisClusterTest {
  public static void main(String[] args) {
 
     Set<HostAndPort> set =new HashSet<HostAndPort>();
     set.add(new HostAndPort("192.168.31.211",6379));
     JedisCluster jedisCluster=new JedisCluster(set);
     jedisCluster.set("k1", "v1");
     System.out.println(jedisCluster.get("k1"));
  }
}

Redis集群的优缺点

l  优点

实现扩容

分摊压力

无中心配置相对简单

l  缺点

多键操作是不被支持的

多键的Redis事务是不被支持的。lua脚本不被支持。

由于集群方案出现较晚,很多公司已经采用了其他的集群方案,而代理或者客户端分片的方案想要迁移至redis cluster,需要整体迁移而不是逐步过渡,复杂度较大。

redis集群

标签:yum   公式   over   eps   png   append   设定   string   ati   

原文地址:https://www.cnblogs.com/Objecting/p/12593589.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!