Redis集群

文章介绍了Redis如何进行扩容,包括通过代理主机和无中心化集群配置两种方式。同时,详细阐述了Redis集群的搭建步骤,如删除旧文件、创建多个实例、配置集群模式等。此外,讨论了插槽机制、故障恢复策略以及Jedis在集群环境中的操作。文章还指出了Redis集群的优缺点,如分摊压力、无中心配置,但不支持多键操作等。
摘要由CSDN通过智能技术生成
  一,问题

    容量不够,redis如何进行扩容

    并发写操作,redis如何进行分摊

    主从模式、薪火相传模式,主机宕机,导致ip地址发生变化,应用程序中配置需要对应主机地址,端口信息等。

    之前通过代理主机来解决,但是redis3.0中提拱了解决方案,就是无中心化集群配置

    代理主机:在客户端和redis服务器之间加一台代理服务器,客户端通过代理服务器来对目标服务器进行访问;

    无中心化集群:就是客户端发起请求,可以到任何一台目标服务器,目标服务器发现如果不是自己的任务,可以转交下一台服务器进行处理。

  二、介绍

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

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

  三、搭建

        在/myredis目录下操作

       1、将rdb,aof文件都删掉

       2、制作6个实例,6379,6380,6381,6389,6390,6391

       3、添加相应配置(以6379为例,其他替换6379即可)

include /home/du/myredis/redis.conf
pidfile "/var/run/redis_6379.pid"
port 6379
dbfilename "dump6379.rdb"     
cluster-enabled yes    #开启集群模式
cluster-config-file nodes-6379.conf  #设置节点配置名称
cluster-node-timeout 15000  # 设定节点失联时间,超过该时间(毫秒),集群自动进行主从切换

      4、启动6个redis服务,将6个节点合成一个集群

          4.1 进入到redis的安装目录的src目录   /opt/redis-6.2.8/src

          4.2 执行如下命令(这里只是演示)

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

             --cluster-replicas 1 以最简单的方式 为每个主节点创建一个从节点

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

redis-cli --cluster create --cluster-replicas 1 192.168.xxx.165:6379 192.168.xxx.165:6380 192.168.xxx.165:6381 192.168.xxx.165:6389 192.168.xxx.165:6390 192.168.xxx.165:6391

     5、测试连接

       -c  采用集群策略进行连接,设置数据会自动切换到相应的写主机

redis-cli -c -p 6379

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

  四、slots插槽

     1、介绍

       一个Redis集群包括16384个插槽(hash slot),数据库中每个键都属于这16384个插槽的其中一个

       集群使用公式CRC16(key)%16384 来计算键key属于哪个插槽,其中CRC16(key)语句用于计算键key的CRC16校验和。

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

     节点A负责处理0-5460号插槽

     节点B负责处理5461-10922号插槽

     节点C负责处理10923-16383号插槽

      2、演示

        1、当添加一个值时,redis会计算插槽值,然切换到对应范围的主机

        2、不在同一个slot下的键值,是不能使用mget,mset等多键操作,因为计算出来的slot值不在一个范围时,无法切换主机

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

       4、查询集群中的值

:6380> cluster keyslot k1   #计算k1键的插槽值
(integer) 12706
:6380> cluster countkeysinslot 12706    #获取插槽12706值的数量 只能返回当前主机slotf范围的
(integer) 0
:6379> cluster countkeysinslot 449
(integer) 1
192.168.188.165:6379> cluster getkeysinslot 449 2   #获取插槽449两个值,因为只有一个所以返回一个
1) "k2"
  五、故障恢复

       1、当某主机挂掉之后,从机会接替主机的工作成为主机,并且当原主机启动之后,会成为新主机的从机

       2、如果某一段插槽主从都挂掉,而cluster-require-full-coverage为yes,那么整个集群都挂掉。

            如果某一段插槽主从都挂掉,而cluster-require-full-coverage为no,那么该插槽的数据群都不能使用,也无法存储。

  六、Jedis操作演示

即使连接的不是主机,集群会自动切换主机存储,主机写,从机读。

无中心化主从集群,无论从哪台主机写的数据,其他主机都能读到数据。

/**
     * Jedis操作Redis集群演示
     */
    @Test
    public void redisClusterDemo(){
        //创建对象
        HostAndPort hostAndPort = new HostAndPort("192.168.xxx.165", 6379);
        JedisCluster jedisCluster = new JedisCluster(hostAndPort);

        //进行操作
        String set = jedisCluster.set("b1", "value1");

        String value1 = jedisCluster.get("b1");
        System.out.println(value1);

        //关闭
        jedisCluster.close();
    }
  七、Redis集群的优势与不足

        优点:1、实现扩容

                  2、分摊压力

                  3、无中心配置,相对简单

        不足:1:多键操作不被支持

                  2、多键的Redis事务是不被支持的,lua脚本不被支持

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值