• redis集群


    哨兵模式

    1主n从

    原理:client端先请求哨兵,哨兵返回主master的ip,client端通过ip访问redis服务。

      哨兵也是一个程序,监控redis服务器情况,对外有服务端口。

    问题:client端一直只访问一个节点,单台服务器内存不能提供到很大。

    高可用集群模式

    n主n*m从,多个子集群

    搭建集群步骤

    待完成...

    复制因子:1个主节点配几个子节点

    分片:理论上划分出16384个槽位,每个集群上大体上均分槽位。只有master节点分配槽位。

    命令:(在下面章节有 Redis Cluster日常操作命令)

      访问集群  redis-cli -a password -c(cluster) -h hostip -p port

      查看节点信息  cluster nodes 

        nodeid ip:port master ... connect 分配的槽位范围

        nodeip ip:port slave master_nodeip ..

        一般主节点和从节点不在同一台机器上,如机器出故障,这个集群就全部有问题,不能做到高可用了。

    原理分析

    槽位定位算法

      槽位计算:hash_slot = cre16(key) mode 16384  

      get、set 操作都会计算key的槽位,判断在哪个集群上;

      节点信息(主节点和从节点的匹配关系)在服务器端的nodes-port.conf中(自己配置的名称);客户端也会存一份,当客户端第一次读取到redis信息后,会得到一份节点信息,缓存到jvm中。

    跳转重定向

      redirect to slot[槽位] located at ip:port

      在发现指令key不在当前节点的槽位上时,会向客户端发送一个特殊的跳转指令

    网络抖动:

      主节点之间会有心跳监控机制,若检测期间网络延迟,可能会误认为某个主节点已死,从而选举新的主节点。解决:设置超时时间。

    适宜的节点数:

      redis官方做过测试,节点不要超过1000个。

    redis集群水平扩展(扩容)

    existing_host:existing_port(任意存活的节点)目的主要是与集群联系上。

    1.新节点以集群方式启动

    主节点:

    2.redis-cli add-node new_host:new_port existing_host:existing_port(任意存活的节点)  默认设置为主节点

    3.重新分槽:redis-cli --cluster reshard existing_host:existing_port

      选择分多少,为哪个id分

      选择哪种方式:

        all  从其他所有主节点平均分片过来

        done 从某个具体的节点分片

      注意:分槽过程中,redis会阻塞。

    从节点:

    4.redis-cli add-node new_host:new_port existing_host:existing_port(任意存活的节点)

    5.默认为主节点,改为从节点,进入新节点客户端:

      redis-cli -c -h ip -p port

      cluster replicate 主节点的nodeip

    扩容的配置,在主节点心跳检测时,会进行同步

    redis集群缩容

    1.数据迁移,将当前节点的数据迁移到其他节点

    redis-cli --cluster reshard existing_host:existing_port

    source node 目标nodeip

    done

    2.删除从节点

    redis-cli del-node existing_host:existing_port node_id

    3. 删除主节点

    redis-cli del-node existing_host:existing_port node_id

    数据迁移

    涉及槽位迁移的redis服务,都会阻塞;是在节点existing存活时,做数据迁移

    两种方式:

    1. redis-cli --cluster reshard 

    2. redis-cli --cluster rebalance existing_host:existing_port 

    选举原理

    分布一致性协议,少数服从多数 

    Redis Cluster日常操作命令

    https://www.cnblogs.com/kevingrace/p/7910692.html

  • 相关阅读:
    SubString函数总结
    button按钮居中
    2019 面试题
    linux(centos)搭建SVN服务器
    svn 设置钩子将代码同步到web目录下面
    sql 语句总结
    php 多维数组转换
    php 两个数组是否相同,并且输出全面的数据,相同的加一个字段标示
    PHP错误类型及屏蔽方法
    设置div中文字超出时自动换行
  • 原文地址:https://www.cnblogs.com/hongyedeboke/p/12825648.html
Copyright © 2020-2023  润新知