美文网首页
redis 集群讲解 (一 )安装 运行 基本 操作

redis 集群讲解 (一 )安装 运行 基本 操作

作者: Gxgeek | 来源:发表于2018-01-11 17:23 被阅读0次

    redis cluster

    • 支撑N个redis master node,每个master node都可以挂载多个slave node

    • 读写分离的架构,对于每个master来说,写就写到master,然后读就从mater对应的slave去读

    • 高可用,因为每个master都有salve节点,那么如果mater挂掉,redis cluster这套机制,就会自动将某个slave切换成master

    • redis cluster(多master + 读写分离 + 高可用)

    redis cluster vs. replication + sentinal

    • 如果你的数据量很少,主要是承载高并发高性能的场景,比如你的缓存一般就几个G,单机足够了

    • replication,一个mater,多个slave,要几个slave跟你的要求的读吞吐量有关系,然后自己搭建一个sentinal集群,去保证redis主从架构的高可用性,就可以了

    • redis cluster,主要是针对海量数据+高并发+高可用的场景,海量数据,如果你的数据量很大,那么建议就用redis cluster

    redis cluster

    (1)自动将数据进行分片,每个master上放一部分数据
    (2)提供内置的高可用支持,部分master不可用时,还是可以继续工作的

    在redis cluster架构下,每个redis要放开两个端口号,比如一个是6379,另外一个就是加10000的端口号,比如16379

    16379端口号是用来进行节点间通信的,也就是cluster bus的东西,集群总线。cluster bus的通信,用来进行故障检测,配置更新,故障转移授权

    cluster bus用了另外一种二进制的协议,主要用于节点间进行高效的数据交换,占用更少的网络带宽和处理时间

    哈希算法

    • 1、最老土的hash算法和弊端(大量缓存重建)

    • 2、一致性hash算法(自动缓存迁移)+虚拟节点(自动负载均衡)


      一致性hash算法的讲解和优点.png
      一致性hash算法的虚拟节点实现负载均衡.png
    • 3、redis cluster的hash slot算法
    redis cluster有固定的16384个hash slot,对每个key计算CRC16值,然后对16384取模,可以获取key对应的hash slot
    
    redis cluster中每个master都会持有部分slot,比如有3个master,那么可能每个master持有5000多个hash slot
    
    hash slot让node的增加和移除很简单,增加一个master,就将其他master的hash slot移动部分过去,减少一个master,就将它的hash slot移动到其他master上去
    
    移动hash slot的成本是非常低的
    
    客户端的api,可以对指定的数据,让他们走同一个hash slot,通过hash tag来实现
    

    redis cluster 搭建

    单机集群

    #创建redis 日志目录
     mkdir -p /var/log/redis/7001
     mkdir -p /var/log/redis/7002
     mkdir -p /var/log/redis/7003
     mkdir -p /var/log/redis/7004
     mkdir -p /var/log/redis/7005
     mkdir -p /var/log/redis/7006
    
    #创建redis 集群 配置 目录
     mkdir -p /etc/redis-cluster
    # redis目录
    mkdir -p mkdir -p /var/redis/7001
    mkdir -p mkdir -p /var/redis/7002
    mkdir -p mkdir -p /var/redis/7003
    mkdir -p mkdir -p /var/redis/7004
    mkdir -p mkdir -p /var/redis/7005
    mkdir -p mkdir -p /var/redis/7006
    
    

    配置文件 主要配置 其他几分类似

    port 7001
    cluster-enabled yes
    cluster-config-file /etc/redis-cluster/node-7001.conf
    cluster-node-timeout 15000
    daemonize   yes                         
    pidfile     /var/run/redis_7001.pid                         
    dir         /var/redis/7001 
    logfile /var/log/redis/7001.log
    bind 0.0.0.0        
    appendonly yes
    

    安装必备软件

    • 步骤1 - 安装 RVM
      $ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
      
      $ curl -sSL https://get.rvm.io | bash -s stable
      
       如果上面的连接失败,可以尝试: 
      $   curl -L https://raw.githubusercontent.com/wayneeseguin/rvm/master/binscripts/rvm-installer | bash -s stable
      
      #成功之后
      source /usr/local/rvm/scripts/rvm
      rvm install 2.3.3
      rvm use 2.3.3
      gem install redis
      
      
      
      
    启动集群
    
    ```shell
    redis-trib.rb create --replicas 1  127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
    
    out:
    >>> Creating cluster
    >>> Performing hash slots allocation on 6 nodes...
    Using 3 masters:
    127.0.0.1:7001
    127.0.0.1:7002
    127.0.0.1:7003
    Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
    Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
    Adding replica 127.0.0.1:7006 to 127.0.0.1:7003
    M: 5f7f1ff4582dcd1a6cc66a9e636fe18bcacc7d4c 127.0.0.1:7001
       slots:0-5460,5999,12706,14559 (5464 slots) master
    M: 63035068bbbc1ee1df40a050d5d47b7779f86043 127.0.0.1:7002
       slots:5461-10922 (5462 slots) master
    M: be557259c0ea02517557931251df7120c00cd4c2 127.0.0.1:7003
       slots:10923-16383 (5461 slots) master
    S: 210ae237bb73aa3c876eb9933a9926c575fba0cd 127.0.0.1:7004
       replicates 5f7f1ff4582dcd1a6cc66a9e636fe18bcacc7d4c
    S: 3cb4215cb614950f9e68be6a995bf98ea81d52a6 127.0.0.1:7005
       replicates 63035068bbbc1ee1df40a050d5d47b7779f86043
    S: 65e578ed3fe7d5947a4f9c621c8157ab6c1251b5 127.0.0.1:7006
       replicates be557259c0ea02517557931251df7120c00cd4c2
    Can I set the above configuration? (type 'yes' to accept):
    

    简单解释一下这个命令:调用 ruby 命令来进行创建集群,--replicas 1 表示主从复制比例为 1:1,即一个主节点对应一个从节点;然后,默认给我们分配好了每个主节点和对应从节点服务,以及 solt 的大小,因为在 Redis 集群中有且仅有 16383 个 solt ,默认情况会给我们平均分配,当然你可以指定,后续的增减节点也可以重新分配。

    目前来看,7001-7003 为主节点,7004-7006 为从节点,并向你确认是否同意这么配置。输入 yes 后,会开始集群创建。

    集群搭建成功之后

    验证一下:
    依然是通过客户端命令连接上,通过集群命令看一下状态和节点信息等。

    redis-cli -c -p 7001
    cluster info
    cluster nodes
    

    可以看到

    127.0.0.1:7001> cluster info
    cluster_state:ok
    cluster_slots_assigned:16384
    cluster_slots_ok:16384
    cluster_slots_pfail:0
    cluster_slots_fail:0
    cluster_known_nodes:6
    cluster_size:3
    cluster_current_epoch:6
    cluster_my_epoch:1
    cluster_stats_messages_sent:372
    cluster_stats_messages_received:372
    127.0.0.1:7001> cluster nodes
    65e578ed3fe7d5947a4f9c621c8157ab6c1251b5 127.0.0.1:7006 slave be557259c0ea02517557931251df7120c00cd4c2 0 1515656195286 6 connected
    3cb4215cb614950f9e68be6a995bf98ea81d52a6 127.0.0.1:7005 slave 63035068bbbc1ee1df40a050d5d47b7779f86043 0 1515656197299 5 connected
    5f7f1ff4582dcd1a6cc66a9e636fe18bcacc7d4c 127.0.0.1:7001 myself,master - 0 0 1 connected 0-5460
    210ae237bb73aa3c876eb9933a9926c575fba0cd 127.0.0.1:7004 slave 5f7f1ff4582dcd1a6cc66a9e636fe18bcacc7d4c 0 1515656193268 4 connected
    63035068bbbc1ee1df40a050d5d47b7779f86043 127.0.0.1:7002 master - 0 1515656194275 2 connected 5461-10922
    be557259c0ea02517557931251df7120c00cd4c2 127.0.0.1:7003 master - 0 1515656196295 3 connected 10923-16383
    

    设置一个key

    127.0.0.1:7001> set name mafly
    -> Redirected to slot [5798] located at 127.0.0.1:7002
    OK
    127.0.0.1:7002>
    

    你会发现,当我们 set name mafly 时,出现了 Redirected to slot 信息并自动连接到了7002节点。这也是集群的一个数据分配特性,这里不详细说了。

    出现问题

    1. 使用 ruby 创建集群 yes 之后 出现 in `call': ERR Slot 8579 is already busy (Redis::CommandError)

          用redis-cli 登录到每个节点执行  flushall  和 cluster reset  就可以了。
    

    相关文章

      网友评论

          本文标题:redis 集群讲解 (一 )安装 运行 基本 操作

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