RedisCluster搭建- (create-cluster,分布式部署)

https://redis.io/topics/cluster-tutorial

一,使用create-cluster实现

老版本需要使用redis-trib的ruby程序

无主模型的哨兵模式的多节点自动分区
,每个对槽位的管理。

/usr/local/redis-5.0.7/utils/create-cluster
README太详细了,跟着操作吧

createcuster是一个用于轻松启动大量Redis的小脚本配置为在群集模式下运行的实例。它的主要目标是允许手动在Redis集群不易复制的条件下进行测试
单元测试,例如当需要大量实例来触发
一个给定的bug。

该工具还可以用于在一个数据库中轻松创建多个实例Redis集群以便对系统进行一点实验。
要创建群集,请执行以下步骤:

1.编辑create cluster并更改起始/结束端口,具体取决于要创建的实例数。
2.使用“./create cluster start”运行实例。
3.使用“./create cluster create”执行redis cli–cluster create,以便将创建一个实际的Redis集群。
4.现在你可以玩集群了。在当前目录中创建每个实例的AOF文件和日志。

要停止群集:
1.使用“./create cluster stop”停止所有实例。在你停止这个实例之后
如果您改变主意,可以使用“./create cluster start”重新启动它们。
2.使用“./create cluster clean”删除所有AOF/log文件,然后用clea重新启动n环境。

1,修改文件

PORT=30000
TIMEOUT=2000
NODES=6 #启动6个节点
REPLICAS=1 #副本数是1 ,3主3从

2,启动

./create cluster start
RedisCluster搭建- (create-cluster,分布式部署)_第1张图片

3,分槽位

./create cluster create
RedisCluster搭建- (create-cluster,分布式部署)_第2张图片

4,测试

无主模型的路由原理

redis-cli -p 30001
set k1 1

客户端连接谁无所谓,但是算法解决分槽点落值到哪个节点上的事情,这个是根据error报错的关键字MOVEN来实现的。
但是普通客户端只能识别这个报错,需要使用Cluster模式的连接方式。

redis-cli -c -p 30001
set k1 1
设置k1 :计算出k1落点30003,跳转到节后创建k1;
获取k1 :由于现在在对应的节点上,直接返回
设置k2 :计算出k1落点30001,跳转后创建;
获取k2 :由于现在在对应的节点30001上,直接返回;
获取k1 :计算出k1落点是30003,自身的节点是30001,跳转到30003后返回;
RedisCluster搭建- (create-cluster,分布式部署)_第3张图片

无主模型支持事务么?

watch k2 :计算出在01节点上,跳转后执行指令;
开启事务multi:命令也发给01
更新k1的值:它路由到03节点上去,执行set指令
exec : 报错
因为你是在01上开启的事务,在03结束,03上没有开启事务的标识
RedisCluster搭建- (create-cluster,分布式部署)_第4张图片
那集群模式就不能实现事务了么?
根据之前的观察来看,事务出错的原因是由于算法计算key的落点不同,导致事务命令不能落在同一个节点上导致的,那我们可以通过HashTag,通过把需要事务执行的key落在同一个节点上来实现。操作走起
RedisCluster搭建- (create-cluster,分布式部署)_第5张图片
所有指令都落在了02这个节点上

使用命令

1,先关闭并清空临时文件

./create-cluster stop
./create-cluster clean

redis-cli --cluster help

可以通过指令手动操作
RedisCluster搭建- (create-cluster,分布式部署)_第6张图片

2,创建配置文件,并启动

##Redis端口号过高。群集通信端口比Redis端口高10000个端口号。
##您的Redis端口号必须低于55535。
port 60006
cluster-enabled yes 
cluster-config-file nodes-60006.conf 
cluster-node-timeout 2000 
appendonly yes 
appendfilename appendonly-60006.aof
dbfilename dump-60006.rdb 
logfile 60006.log 
daemonize yes

 ../../src/redis-server ./6001.conf 

redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1

RedisCluster搭建- (create-cluster,分布式部署)_第7张图片
RedisCluster搭建- (create-cluster,分布式部署)_第8张图片

3,数据倾斜时,如何移动?

redis-cli --cluster reshard 127.0.0.1:6001
根据指示,挪动槽位数据,把01的2000挪动到03中。
RedisCluster搭建- (create-cluster,分布式部署)_第9张图片
如何挪动指定槽位呢?
技术不要较真,不是实现不了,而是代价太大。

你可能感兴趣的:(#,redis,RedisCluster)