一站式学习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

 

  • 集群原理

 

  • 开发运维常见问题

 

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

 

 

posted on 2018-11-28 11:38  明觉乃自清  阅读(836)  评论(0编辑  收藏  举报

导航