zoukankan      html  css  js  c++  java
  • 《Redis 集群》

    由于集群这章节内容较多,也比较重要,所以单独拉出来,做一个小章节。

    1:如何搭建一个集群?

      - 环境为 Ubuntu16.04

      - 这里我预计使用 9001 - 9006 端口,生成一个 6 台机器的集群

      - 生成对应目录

      mkdir ~/redis-cluster
      cd redis-cluster
      mkdir -p 9001/data
      mkdir -p 9002/data
      ......
      mkdir -p 9006/data

      - 同时需要配置每个目录下的 Redis.conf 这里以 9001 端口为例

      port 9001(每个节点的端口号)
      cluster-enabled yes(启动集群模式)(必须)
      cluster-config-file nodes9001.conf(9001和port要对应)(必须)

      - 配置完成之后,启动对应服务 这里以 9001 为例(其余同理)

      sudo redis-server ~/redis-cluster/9001/redis.conf

      - 查看 9001 端口的服务会否正常启动

      vagrant@hong:~/redis-cluster$ ps -aux | grep 'redis'
      root      3712  0.0  0.0  38856  3352 ?        Ssl  08:11   0:00 redis-server 127.0.0.1:9001 [cluster]

      - 这时候集群就已经正常使用了,但是,现在每个节点都是相对独立的。

      - 我们应该把他连接起来。

      - redis 提供的辅助工具可以方便的完成这个任务 redis-trib.rb

      因为是用 Ruby 来写的,所以我们应该先安装它。
      sudo apt-get install ruby
      sudo apt-get install rubygems
      sudo apt-get install redis

      - 安装完成之后,找到这个文件

      sudo find / -name "redis-trib.rb"

      - 初始化集群

      sudo /usr/share/doc/redis-tools/examples/redis-trib.rb create --replicas 1 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:9003 127.0.0.1:9004 127.0.0.1:9005 127.0.0.1:9006
      /usr/share/doc/redis-tools/examples/redis-trib.rb

      - 重要参数

      --replicas 1 表示每个数据库拥有的从库为1,所以整个数据库拥有(6/2) = 3 个主库和从库

      - 输出如下,表示集群搭建成功

    >>> Creating cluster
    >>> Performing hash slots allocation on 6 nodes...

    // 使用下面三个为主库 Using
    3 masters: 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:9003

    // 从库监听列表 Adding replica 127.0.0.1:9004 to 127.0.0.1:9001 // 9004(从库) > 9001(主库) ,下同 Adding replica 127.0.0.1:9005 to 127.0.0.1:9002 Adding replica 127.0.0.1:9006 to 127.0.0.1:9003

    // 分配插槽(在一个集群中。所有键都可以分配到16384个插槽中) M: e456e2ab9792abe01bfd044dc708d550d6efa8a3 127.0.0.1:9001 slots:0-5460 (5461 slots) master M: 7b1a201f5f4c5837d0794ca29e9ef85408f0df3e 127.0.0.1:9002 slots:5461-10922 (5462 slots) master M: 89341ac6f0df97eaf1f974080118ac283b8c1901 127.0.0.1:9003 slots:10923-16383 (5461 slots) master S: 56a07392b3541f41c6b6421f821280a59c687f96 127.0.0.1:9004 replicates e456e2ab9792abe01bfd044dc708d550d6efa8a3 S: 34509ad9c1e88fea4d09e95a296cbdbdaa9c2cd4 127.0.0.1:9005 replicates 7b1a201f5f4c5837d0794ca29e9ef85408f0df3e S: cf18821f8a3dd9cb110db6d6b63a26dae4dd3189 127.0.0.1:9006 replicates 89341ac6f0df97eaf1f974080118ac283b8c1901 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.

    -- 至此,一个集群搭建就完毕了。

    2:插槽和键的关系?

      - 在一个集群中,所有的键会被分给 16384 个插槽。

      - 在使用键时,Redis 将每个键名通过算法(CRC16),计算出散列,再取  16384 的余数,使得每个键都可以分配到每个节点中。

      - 在连接 Redis 时,也可以使用  redis-cli -c -p 端口 使命令重定向到可以处理的插槽中

    3:集群搭建完成之后,还可以在插入节点么?

      - 当然可以。

    新节点:新节点端口> CLUSTER MEET 随便在集群中的一个节点 对应端口

      - 之后我们可以看集群内的节点信息

    CLUSTER NODES

      - 但是,值得注意的是,在新加入节点之后,是不会分配任何插槽的,因为之前创建时就已经分配了插槽。

      - 后续再分配插槽是非常不友好的,因为会影响到之前的键

      - 所以推荐使用预分片,建立足够多的节点,为了以后的大数据量打下基础

     4:集群中的故障恢复

      - 在一个节点中,每个节点都会定期向其他节点发送 PING 命令。

      - 如果某节点没有响应,认为目标节点 疑似下线(类似哨兵的主观下线)

      - 选举,超过一半,则从数据库转成主数据库

      - 如果没有从数据库可以进行恢复,则整个集群默认下线并无法工作。

        - 也可以通过配置修改 cluster-require-full-coverage 使其正常工作。

        - 但是会有一部分负责插槽,无法工作。

      

  • 相关阅读:
    poj-1017 Packets (贪心)
    poj-2393 Yogurt factory (贪心)
    POJ -3190 Stall Reservations (贪心+优先队列)
    hihoCoder 1082然而沼跃鱼早就看穿了一切 (字符串处理)
    kafka:一个分布式消息系统
    Kafka+Storm+HDFS整合实践
    使用Storm实现实时大数据分析
    Kafka使用入门教程 简单介绍
    Zookeeper 的学习与运用
    Kafka 分布式消息队列介绍
  • 原文地址:https://www.cnblogs.com/25-lH/p/9506891.html
Copyright © 2011-2022 走看看