美文网首页
3.缓存雪崩问题

3.缓存雪崩问题

作者: Junma_c631 | 来源:发表于2020-11-02 16:26 被阅读0次

    缓存雪崩---》大部分数据失效---》设置过期时间----》错开
    过期时间错开、搭建高可用集群rediscluster分散数据io

    集群搭建:

    1.修改配置文件

    bind 0.0.0.0
    #使用的bind后保护模式可以不用关闭
    protected-mode yes
    port 6379
    daemonize yes
    pidfile /var/run/redis_6379.pid
    logfile "/data/redis/logs/redisxxx.log"
    dir  /data/redis/data
    #集群相关配置
    #master主机密码,从机连接主机时要用到
    masterauth 123456
    #本机的密码
    requirepass 123456
    #开启集群模式
    cluster-enabled yes
    #集群信息的存放位置
    cluster-config-file nodes-6379.conf
    #没有从节点接替的情况下master主机挂掉了,当前集群还是否可用的配置项
    #yes代表不可用 no代表可用
    cluster-require-full-coverage no
    

    linux命令:sed 's/7000/7001/g' redis7000/redis.conf > redis7001/redis.conf
    连接redis集群:reids-cli -h 192.168.29.134 -p 7001 -a 123456

    2.启动多个redis实例

    /usr/local/bin/redis-server ./redis7000/redis.conf
    /usr/local/bin/redis-server ./redis7001/redis.conf
    /usr/local/bin/redis-server ./redis7002/redis.conf
    /usr/local/bin/redis-server ./redis7003/redis.conf
    /usr/local/bin/redis-server ./redis7004/redis.conf
    /usr/local/bin/redis-server ./redis7005/redis.conf
    

    以上启动是启动了六个相互孤立的cluster集群,每个集群下有一个实例

    3.分配主从,分配槽位

    [root@nodeo2 src]# redis-cli --cluster help
    Cluster Manager Commands:
      create         host1:port1 ... hostN:portN
                     --cluster-replicas <arg>
      check          host:port
                     --cluster-search-multiple-owners
      info           host:port
      fix            host:port
                     --cluster-search-multiple-owners
      reshard        host:port
                     --cluster-from <arg>
                     --cluster-to <arg>
                     --cluster-slots <arg>
                     --cluster-yes
                     --cluster-timeout <arg>
                     --cluster-pipeline <arg>
                     --cluster-replace
      rebalance      host:port
                     --cluster-weight <node1=w1...nodeN=wN>
                     --cluster-use-empty-masters
                     --cluster-timeout <arg>
                     --cluster-simulate
                     --cluster-pipeline <arg>
                     --cluster-threshold <arg>
                     --cluster-replace
      add-node       new_host:new_port existing_host:existing_port
                     --cluster-slave
                     --cluster-master-id <arg>
      del-node       host:port node_id
      call           host:port command arg arg .. arg
      set-timeout    host:port milliseconds
      import         host:port
                     --cluster-from <arg>
                     --cluster-copy
                     --cluster-replace
      help           
    
    

    /usr/local/bin/redis-cli -h 192.168.29.134 -p 7000 -a 123456 --cluster help
    /usr/local/bin/redis-cli
    --cluster create 192.168.29.134:7000 192.168.29.134:7001 192.168.29.134:7002 192.168.29.134:7003 192.168.29.134:7004 192.168.29.134:7005
    --cluster-replicas 1 -a 123456
    说明:--cluster-replicas 1 意思就是1:1 会判定7000\7001\7002为主节点,
    7003 7004 7005是从节点,从节点的主节点随机分配。槽位平均分配(redis总槽位是16384个0~16383)。

    集群搭建完成后客户端需要以集群方式连接及命令后多加一个 -c,不然key如果落在其他节点设置不进去.
    -c参数可以自动重定向到其他节点,但java客户单jedis是没有这种功能的。

    /usr/local/bin/redis-cli -h 192.168.29.134 -p 7000 -a 123456 -c
    

    192.168.29.134:7000>cluster keyslot k2 可以算出k2的槽位是多少

    4.集群的扩容

    启动需要扩容的节点

    /usr/local/bin/redis-server ./redis7006/redis.conf
    /usr/local/bin/redis-server ./redis7007/redis.conf
    

    加入到集群

    /usr/local/bin/redis-cli --cluster add-node 192.168.29.134:7006 192.168.29.134:7000 -a 123456
    

    加入从节点

    /usr/local/bin/redis-cli --cluster add-node 192.168.29.134:7007 192.168.29.134:7006 --cluster-slave --cluster-master-id 7006的nodeid -a 123456
    
    /#查看集群的节点(包含个节点的nodeid)
    192.168.29.134>cluster nodes 
    

    重新分配槽位
    比如新加入的分配300个槽位,可以选择从某一个或者某几个node上分出来300个曹给新加入的节点
    也可以,选择从所有的节点上每个节点上分出来一些组成300个分给新增加的节点,
    重新分配出去的槽位以及槽位上的数据会转移到新的节点上。

    /usr/local/bin/redis-cli --cluster reshard 192.168.29.134:7000 -a 123456
    

    5.主节点挂掉,从节点会变成主节点(故障转移)

    故障转移期间,集群不可用。
    cluster-require-full-coverage no 这个参数值no时集群部分可用,故障转移的那个节点槽位不可用,
    其他节点可用。 yes所有节点故障转移期间都不可用。

    6.集群的缩容

    去除节点7007的槽位(槽位迁移)

    /usr/local/bin/redis-cli --cluster reshard --cluster-from nodeid1 --cluster-to nodeid2  -a 123456
    

    删除节点

    /usr/local/bin/redis-cli --cluster del-node 192.168.29.134:7000 7007node_id -a 123456
    /usr/local/bin/redis-cli --cluster del-node 192.168.29.134:7000 7006node_id -a 123456
    

    相关文章

      网友评论

          本文标题:3.缓存雪崩问题

          本文链接:https://www.haomeiwen.com/subject/zdgpvktx.html