一站式学习Redis 从入门到高可用分布式实践(慕课)第九章 Redis Cluster(集群)
- 呼唤集群
并发量 ops
数据量 大数据
- 数据分布
顺序分区和哈希分区
修改:顺序分布其实不支持批量操作
哈希分布
- 节点取余分区 --------建议多倍扩容比较好,数据迁移量少
- 一致性哈希分区 --------token环,只影响邻近节点,对其他节点影响小(节点多时候建议)
- 虚拟槽分区 --------前两者是客户端分片,后者是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
- 集群原理
- 开发运维常见问题
因而不建议使用从节点。集群模式下不建议使用读写分离