redis集群搭建及扩容和缩容操作

数据分布

数据分区
分区规则

顺序分区:是按照顺序分区;特点就是数据分散易倾斜,键值业务相关可顺序访问支持批量操作。例如HBase,BigTable

哈希分区:将数据按照某种规则打撒。列入hash(key)%3;特点数据分散度高键值分布业务无关无法顺序访问支持批量操作。例如memcache,redis

hash分区:

节点取余
    当添加一个节点时,会导致数据大量迁移,几乎达到了80%以上,所以采用节点取余的方式推荐采有多倍扩容,就是添加的机器是原有集群节点数的倍数 ,数据的迁移会缩小到50%

一致性Hash
    在一个圆环上,均匀的把节点分布在圆环上,数据的token落在圆环上,顺时针寻找最近的节点就是数据存储的节点。节点伸缩只影响邻近的节点,但是还是有数据迁移。翻倍伸缩能保证最小迁移数据和负载均衡

虚拟槽分区
    槽其实只是一个数据,多个节点来均分这个数字
     预设虚拟槽:每个槽映射一个数据子集,一般比节点数大

搭建集群

分布式架构

每个节点之间是互相通信的,每个节点都负责读写

redis Cluster架构

节点
    cluster-enabled:yes
meet
    节点之间互相通信,交换消息,所有节点共享消息
指派槽
    客户端需要计算出数据所管理到槽,然后映射到该槽上
复制
    每个主节点有一个从节点,主备切换不需要依赖从节点

redis cluster特性

复制
高可用
分片

redis cluster的安装

redis cluster的安装方式有两种:

原生命令安装
官方工具安装

原生命令安装

  1. 配置开启节点

    配置开启redis

    port ${port}
    daemonize yes
    dir "/opt/redis/redis/data"
    dbfilename "dump-${port}.rdb"
    cluster-enabled yes
    cluster-config-file nodes-${port}.conf
    

    用以上模板完成对

    redis-server redis-7000.conf
    redis-server redis-7001.conf
    redis-server redis-7002.conf
    redis-server redis-7003.conf
    redis-server redis-7004.conf
    redis-server redis-7005.conf
    
  2. meet

    cluster meet ip port
    
    redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7000 #两个节点之间就可以相互同信
    redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7001
    redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7002
    redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7003
    redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7004  
    redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7005
    

cluster节点主要配置

cluster-enabled yes
cluster-node-timeout 15000 #故障转移的时间或者节点超时时间,在redis源码中很多都用到这个配置
cluster-config-file "nodes.conf"
cluster-require-full-coverage yes #集群内所有节点都能提供服务

查看集群的信息

redis-cli -p 7000 cluster nodes
  1. 指派槽

    cluster addslots slot [slot...]
    redis-cli -h 127.0.0.1 -p 7000 cluster addslots {0...5461}
    redis-cli -h 127.0.0.1 -p 7001 cluster addslots {5462...10992}  
    redis-cli -h 127.0.0.1 -p 7002 cluster addslots {10993...16383}
    
    redis-cli -p 7000 cluster slots #查看槽的分配信息
    
  2. 设置主从

    redis-cli -p 7000 cluster nodes #查看集群的节点信息 可以查看每个节点的node-id     
    
    cluster replicate node-id
    redis-cli -h 127.0.0.1 -p 7003 cluster replicate ${node-id-7000}
    redis-cli -h 127.0.0.1 -p 7004 cluster replicate ${node-id-7001}
    redis-cli -h 127.0.0.1 -p 7005 cluster replicate ${node-id-7002}
    

官方工具安装

  1. 下载、编译、安装Ruby

    wget http://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.gz
    
    tar -zxvf ruby-2.5.0.tar.gz
    ./configure -prefix=/usr/local/ruby
    make
    make install
    cd /usr/local/ruby
    cp bin/ruby /usr/local/bin
    
  2. 安装rubygem redis

  3. 安装redis-trib.rb

    cp ${REDIS_HOME}/src/redis-trib.rb /usr/local/bin
    
  4. 配置开启redis,配置文件跟上面相同

    redis-server redis-8000.conf
    redis-server redis-8001.conf
    redis-server redis-8002.conf
    redis-server redis-8003.conf
    redis-server redis-8004.conf
    redis-server redis-8005.conf
    
  5. 一键开启

    ./redis-trib.rb create --replicas 1 127.0.0.1:8000 1 127.0.0.1:8001 1 127.0.0.1:8002 1 127.0.0.1:8003 1 127.0.0.1:8004 1 127.0.0.1:8005     
    

集群伸缩

  1. 伸缩原理

    集群伸缩=槽和数据在节点之间的移动
    实际就是添加机器或者减少机器,导致数据迁移

  2. 扩容集群

2.1. 准备新节点

集群模式
配置和其他节点统一
启动后是孤儿节点

    redis-server conf/redis-6385.conf
    redis-server conf/redis-6386.conf

redis-6385.conf和redis-6386.conf配置与集群的统一 

2.2. 加入集群(实际就是meet操作)

将新添加的6385和6386节点加入到集群

cluster meet 127.0.0.1 6385
cluster meet 127.0.0.1 6386

加入过后查看集群配置

cluster nodes

加入集群的作用

为它迁移槽和数据实现扩容
作为从节点负责故障转移

利用redis-trib.rb工具加入集群

redis-trib.rb add-node new_host:new_port existing_host:existing_port --slave --master-id <arg>
redis-trib.rb add-node 127.0.0.1:6385 127.0.0.16379

2.3. 迁移槽和数据

2.4 实际操作

生成配置文件

#把redis-7000.conf的内容7000替换成7006内容并复制到redis-7006.conf
sed 's/7000/7006/g' redis-7000.conf > redis-7006.conf
sed 's/7000/7007/g' redis-7000.conf > redis-7007.conf

启动两个节点

redis-server redis-7006.conf
redis-server redis-7007.conf

进入7006的客户端

redis-cli -p 7006
cluster nodes

退出后再7000的节点加入7006,7007

#加入7006
redis-cli -p 7000 cluster meet 127.0.0.1 7006
#加入7007
redis-cli -p 7000 cluster meet 127.0.0.1 7007

在7007的节点上做主从 7007从,7006主

redis-cli -p 7007 cluster replicate <7006的replicateId>

通过以下命令可以看到7006节点是没有分配到槽的

redis-cli -p 7000 cluster nodes

用redis-trib.rb 来迁移数据

#会打印出当前集群的状态  
redis-trib.rb reshard 127.0.0.1:7000

#提示迁移多少个槽
#添加到哪个节点,输入节点ID
#all or none 
#是否继续

查看槽的集群分配

redis-cli -p 7000 cluster slots
  1. 缩容集群

3.1 下线迁移槽

3.2 忘记节点

cluster forget {downNodeId}

3.3 关闭节点

3.4 实际操作

迁移槽

#将7006节点迁移到7000
redis-trib.rb reshard --form <7006ID> --to <7000ID> --slots <槽的数量> host:port

可一个直接通过 redis-trib.rb查看帮助

用redis-trib.rb忘记并下线节点(下线的时候需要先下从节点否则,集群会做一个故障转移)

redis-trib.rb del-node 1127.0.0.1:7000 <忘记节点ID > 

已经很晚了。。。。。。睡觉 下面会接着介绍客户端路由,集群原理及常见的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值