初学者一枚,有不对的地方还请指出来,谢谢喽 ^-^
架构细节:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(PING就是用来检测redis节点的健康状态,在终端输入ping命令出来pong就表示此节点健康)
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与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集群至少需要6台服务器。
因为是个人开发使用所以我们搭建伪分布式。可以使用一台虚拟机运行6个redis实例。需要修改redis的端口号7001-7006
1、搭建伪分布式
(1)在安装redis的目录中创建同级目录redis-cluster用于存放redis集群中的其他redis
mkdir redis-cluster
(2)复制redis中的bin(redis实例)到redis-cluster目录中的redis01目录中
cp redis/bin redis-cluster/redis01 -r
(3)cd到redis01中,如果有dump.rdb、appendonly.aof文件就删除(搭建集群需要每个节点都是空节点,否则会出错)
rm -f dump.rdb、rm -f appendonly.aof
(4)修改redis.conf文件中的端口号、开启集群模式
vi redis.conf
修改redis端口为7001
开启集群模式
接着 Esc + : + wq 保存退出就ok了
(5)接着复制其他五个redis
e.g.:cp -r redis01/ redis02
分别修改其他五个redis的端口号(7002-7006)
(6)创建批处理文件(mkdir start-all.sh)用于方便启动redis集群
vi start-all.sh
添加执行语句(如下图)
给start-all.sh文件添加可执行权限:
chmod u+x start-all.sh
开启redis:./start-all.sh
查看redis进程:ps aux|grep redis
(7)cd到redis-3.0.0目录--->cd到src目录
复制redis-trib.rb文件到redis-cluster目录:cp redis-trib.rb /usr/local/redis-cluster
(此时我们创建的redis还只是单机redis,说白了就是还不是集群)
(运行redis集群需要ruby环境,也就是用ruby将redis之间连接起来)
2、搭建redis集群环境
使用ruby脚本搭建集群。需要ruby的运行环境。
安装ruby,运行下面俩命令:
yum install ruby
yum install rubygems
3、安装ruby脚本运行使用的包
使用SecureCRT中的SFTP将本地文件上传到虚拟机
运行命令:gem install redis-3.0.0.gem 安装ruby脚本需要的库
4、使用ruby脚本搭建集群。(参数“1”指每一个节点有一个备份机,所以集群必须是偶数个节点,否则会报错)
./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006
redis集群搭建过程信息,如图:
5、redis集群的使用方法
redis-cli连接集群。
[root@localhost redis-cluster]# redis01/redis-cli -p 7002 -c
-c:代表连接的是redis集群
到此redis集群搭建完成!0-0