-
redis-cluster架构图
-
redis-cluster投票容错
架构细节:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效。
(2)客户端与redis节点直连,不需要中间proxy层。客户端不需要连接集群所有节点,连接集群中任意一个可用节点即可。
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster负责维护
node<->slot<->value
Redis集群中内置了16384个哈希槽,当需要在redis集群中放置一个key-value时,redis先对key使用crc16算法算出一个结果,然后把结果对16384求余数,这样每个key会对应一个编号在0-16383之间的哈希槽,redis会根据节点的数量大致均等的将哈希槽映射到不同的节点。
-
Redis集群的搭建
Redis集群中至少应该有三个节点。要保证集群的高可用,需要每个节点一个备份机,Redis集群至少需要6台服务器。
搭建伪分布式。可以使用一台虚拟机运行6个redis实例。需要修改redis的端口号7001-7006。 -
集群的搭建环境
- 使用Ruby脚本搭建集群。需要ruby的运行环境。
yum install ruby
yum install rubygems
- 安装ruby脚本所使用的的包
gem install redis-3.2.1.gem
搭建步骤
需要6台redis服务器,搭建伪分布式。
需要6个redis实例。
需要运行在不同的端口7001-7006
第一步
创建6个redis实例,每个实例运行在不同的端口。需要修改redis.conf配置文件。配置文件中还需要把cluster-enabled yes前的注释去掉。
- 在/usr/local 下创建redis-cluster文件夹,然后在redis-cluster文件夹下分别创建redis01-redis06文件夹。
- 把单机版redis bin目录下的配置文件分配拷贝到这6个文件夹下
cp -r redis/bin/ redis-cluster/redis01
cd redis-cluster/redis01
rm -f redis-check-aof dump.rdb
cp -r redis01/ redis02
cp -r redis01/ redis03
cp -r redis01/ redis04
cp -r redis01/ redis05
cp -r redis01/ redis06
- 修改redis.conf配置文件,依次修改端口号和去掉注释
- 创建一个批启动配置文件,并写入以下配置,具体路径请参照自己的文件夹相对路径
vim startall.sh
cd redis01/bin/
./redis-server redis.conf
cd ../../
cd redis02/bin/
./redis-server redis.conf
cd ../../
cd redis03/bin/
./redis-server redis.conf
cd ../../
cd redis04/bin/
./redis-server redis.conf
cd ../../
cd redis05/bin/
./redis-server redis.conf
cd ../../
cd redis06/bin/
./redis-server redis.conf
cd ../../
- 授权为可执行文件
chmod u+x startall.sh
- 运行下启动程序,如无报错则启动成功,可以查看下启动情况
ps aux|grep redis
./redis-trib.rb create --replicas 1 IP地址:7001
IP地址:7002 IP地址:7003 IP地址:7004 IP地址:7005 IP地址:7006
测试
至此,redis集群就搭建完成了。