目录
架构图
容错图
架构细节
节点分配
集群的搭建
集群搭建环境
使用方式
数据测试
redis-cluster架构图
redis-cluster投票:容错图
客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任 何一个可用节点即可
redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->vallue
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出
一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量
大致均等的将哈希槽映射到不同的节点。如下图所示
Redis集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机
所以Redis集群至少需要6台服务器,而考虑到太占用资源,我们可以搭建伪分布式
可以使用一台虚拟机运行6个redis实例。需要修改redis的端口号7001-7006
首先创建个redis-cluster文件夹,我的是在local下创建的
mkdir /usr/local/redis-cluster
然后把已经装好redis文件下的bin目录复制到redis-cluster文件下,没装的话看下面这篇博客
cp /usr/local/redis/bin /usr/local/redis-cluster/redis-01 -r
如果redis-01中有dump.rdb话就删除
rm -f dump.rdb
更改redis.conf配置文件,更改端口和放开cluster-enabled yes
vim redis.conf
然后把redis-01复制5个,在redis-cluster文件目录下
cp -r redis-01/ redis-02
cp -r redis-01/ redis-03
cp -r redis-01/ redis-04
cp -r redis-01/ redis-05
cp -r redis-01/ redis-06
把每个复制的文件下的port端口改了
启动:一个个启动太麻烦了,可以写个批处理 vim start-all.sh 把下面内容复制到里面保存
cd redis-01
./redis-server redis.conf
cd ..
cd redis-02
./redis-server redis.conf
cd ..
cd redis-03
./redis-server redis.conf
cd ..
cd redis-04
./redis-server redis.conf
cd ..
cd redis-05
./redis-server redis.conf
cd ..
cd redis-06
./redis-server redis.conf
cd ..
给这个批处理赋予权限
chmod u+x start-all.sh
查看是否启动成功
ps aux|grep redis
接下来把这六个节点连接到一起把槽分配好,需要一个工具(ruby脚本),在redis源代码中,复制过来
cp /redis-3.0.0/src/redis-trib.rb /usr/local/redis-cluster/
使用ruby脚本搭建集群,需要ruby环境 ,输入以下命令
yum install ruby
yum install rubygems
安装ruby脚本运行使用的包,先把包下载下来,下面提供了网盘链接
链接:https://pan.baidu.com/s/1jUyFF0KmMOsj5IfzYhgz8w 提取码:t349
然后输入以下命令安装
gem install redis-3.0.0.gem
装好后就可以启动啦,不过启动时需要设置参数
./redis-trib.rb create --replicas 1 192.168.25.128:7001 192.168.25.128:7002 192.168.25.128:7003 192.168.25.128:7004 192.168.25.128:7005 192.168.25.128:7006
上面的IP地址要改为自己的
启动后的结果为
可以看到各个节点的创建和连接,槽的分配,主从节点的创建都已成功,最后yes就可以了
可以看到集群已经搭建成功了。注意:要关闭防火墙
先连接集群,任意节点都行
redis-01/redis-cli -p 7004 -c -p是指定端口号 -c是说明连接的是集群
可以看到每次添加数据它都能均匀的分配到每个主节点,数据测试也没问题,接下来可以使用了