zoukankan      html  css  js  c++  java
  • 一站式学习Redis 从入门到高可用分布式实践(慕课)第九章 Redis Cluster(集群)

    • 呼唤集群

       并发量  ops

       数据量  大数据

    • 数据分布

     顺序分区和哈希分区

    修改:顺序分布其实不支持批量操作

    哈希分布

    1. 节点取余分区          --------建议多倍扩容比较好,数据迁移量少
    2. 一致性哈希分区      --------token环,只影响邻近节点,对其他节点影响小(节点多时候建议)
    3. 虚拟槽分区             --------前两者是客户端分片,后者是redis-cluster,服务端管理节点、槽、数据

    • 搭建集群

     Redis Cluster架构

            节点               cluster-enabled  yes  开启节点

            meet              节点间通讯,所有节点共享信息

           指派槽             16384个slot默认

            复制               主从复制,高可用,分片从而实现故障自动转移

    两种安装方式:

            原生命令安装

    第一步:开启节点

    port 7000
    daemonize yes
    bind 0.0.0.0
    dir "/opt/moudels/redis/data"
    logfile "7000.log"
    dbfilename "dump-7000.rdb"
    cluster-enabled yes
    cluster-config-file nodes-7000.conf
    cluster-require-full-coverage no

    可以使用如下语句进行配置文件复制和改动:sed 's/7000/7001/g' redis-7000.conf > redis-7001.conf

    第二步:meet

    [root@redis01 redis]# redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 70001

    最后一个yes改成no

    第三步:分布槽

    [root@redis01 redis]# redis-cli -h 127.0.0.1 -p 7000 cluster addslots{0...5461}

    [root@redis01 redis]# redis-cli -h 127.0.0.1 -p 7001 cluster addslots{5462...10992}

    [root@redis01 redis]# redis-cli -h 127.0.0.1 -p 7002 cluster addslots{10992...16383}

    第四步:设置主从

     [root@redis01 redis]# redis-cli -h 127.0.0.1 -p 7003 cluster replicate ${node-id-7000}

     [root@redis01 redis]# redis-cli -h 127.0.0.1 -p 7004 cluster replicate ${node-id-7001}

     [root@redis01 redis]# redis-cli -h 127.0.0.1 -p 7005 cluster replicate ${node-id-7002}

    以上集群就说三主三从安装。

    [root@redis01 script]# more addslots.sh
    start=$1
    end=$2
    port=$3
    for slot in `seq ${start} ${end}`
    do
    echo "slot:${slot}"
    redis-cli -p ${port} cluster addslots ${slot}
    done
    [root@redis01 script]#

    分配槽

    sh addslots.sh 0 5461 7000 

    sh addslots.sh 5462 10922 7001

    sh addslots.sh 10923 16383 7002

    [root@redis01 script]# redis-cli -p 7000 cluster nodes
    16c0e2f17551fbcc5e4e23ec6f9c5e686f97448e 127.0.0.1:7001 master - 0 1543299928519 1 connected 5462-10922
    334b8b113051d594f0e95898a8bfcb6776409114 127.0.0.1:7003 master - 0 1543299926503 3 connected
    4574a8677f3aa2412cda7b761a62205ab6f37515 127.0.0.1:7005 master - 0 1543299927510 5 connected
    a1c2a222a0527b46621fcee0b9a95eb6dbc562ee 127.0.0.1:7000 myself,master - 0 0 0 connected 0-5461
    31efa34cdf52947268a9c7a2b325b3d0e99d631f 127.0.0.1:7002 master - 0 1543299925495 2 connected 10923-16383
    553393c9b7aeaa4414f49cf9b06bc124fb626c54 127.0.0.1:7004 master - 0 1543299929529 4 connected

    设置主从:
    [root@redis01 script]# redis-cli -p 7003 cluster replicate a1c2a222a0527b46621fcee0b9a95eb6dbc562ee
    OK
    [root@redis01 script]#

    最后一步:[root@redis01 script]# redis-cli -c -p 7000

            官方工具安装       ruby工具

     Ruby环境准备

         下载编译安装ruby

     wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz  #下载

     tar -xzvf ruby-2.4.3.tar.gz #解压

    cd ruby-2.4.3

    ./configure --prefix=/usr/local/ruby

    sudo make && make install #编译安装

    安装完记得配置PATH

          安装rubygem redis

     wget https://rubygems.org/downloads/redis-3.3.0.gem  #下载

    gem install -l redis-3.3.0.gem

    gem list --check redis gem

          安装redis-trib.rb

    cp ${redis-home}/src/redis-trib.rb /usr/local/bin

     创建集群:

    redis-trib.rb create --replicas 1 127.0.0.1:6481 127.0.0.1:6482 127.0.0.1:6483 127.0.0.1:6484 127.0.0.1:6485 127.0.0.1:6486

    集群完整性检查

    redis-trib.rb check 127.0.0.1:6379    redis-trib.rb check 127.0.0.1:6481

    • 集群伸缩

    扩容集群

     准备新节点

     加入集群 

    127.0.0.1>cluster meet 127.0.0.1 6385 加入   

    [root@redis01 config]# redis-trib.rb add-node 127.0.0.1:8006 127.0.0.1:8000   --slave --master-id 有meet的作用

     迁移槽和数据

     

     缩容

    先下从节点再下主节点

    • 客户端路由

     moved重定向

    >cluster keysolt php  返回键所在的槽号

    ask重定向

    smart客户端

    故障发现:通过ping/pong消息实现故障发现,不需要sentinal

    • 集群原理
    • 开发运维常见问题

     

    因而不建议使用从节点。集群模式下不建议使用读写分离

  • 相关阅读:
    java——对象学习笔记
    ORACLE中如何查看分区表信息
    postgresql相关系统表查询
    oracle系统表查询
    linux shell常用函数,ps
    文本文件合并
    nginx多版本PHP配置
    webuploader实现文件上传
    open abc.txt: The system cannot find the file specified
    PHP在线批量下载文件
  • 原文地址:https://www.cnblogs.com/jiang910/p/10031181.html
Copyright © 2011-2022 走看看