- 新建
redis-cluster
目录 - 执行
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
下载redis - 执行
tar xzf redis-5.0.5.tar.gz
解压 - 进入
redis-5.0.5
目录下执行make
编译 - 进入
/usr/local/redis-cluster
下查看目录
Redis Cluster(Redis集群)简介
- redis是一个开源的key value存储系统,受到了广大互联网公司的青睐。redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群;
- redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节点;
redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制),每个节点都是一个redis实例; - 为了实现集群的高可用,即判断节点是否健康(能否正常使用),redis-cluster有这么一个投票容错机制:如果集群中超过半数的节点投票认为某个节点挂了,那么这个节点就挂了(fail)。这是判断节点是否挂了的方法;
- 那么如何判断集群是否挂了呢? -> 如果集群中任意一个节点挂了,而且该节点没有从节点(备份节点),那么这个集群就挂了。这是判断集群是否挂了的方法;
- 那么为什么任意一个节点挂了(没有从节点)这个集群就挂了呢? -> 因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384[0-16383]个slot上,或者说把这些slot均等的分配给了各个节点。当需要在Redis集群存放一个数据(key-value)时,redis会先对这个key进行crc16算法,然后得到一个结果。再把这个结果对16384进行求余,这个余数会对应[0-16383]其中一个槽,进而决定key-value存储到哪个节点中。所以一旦某个节点挂了,该节点对应的slot就无法使用,那么就会导致集群无法正常工作。
- 综上所述,每个Redis集群理论上最多可以有16384个节点。
集群搭建
redis 5.0版本 集群搭建不需要我们安装ruby就可以搭建成功,并且redis给我们提供了快速搭建脚本,执行utils/create-cluster/ 目录下的create-cluster脚本 就可以快速搭建,该脚本提供以下几个命令供我们使用
echo "Usage: $0 [start|create|stop|watch|tail|clean]"
echo "start -- Launch Redis Cluster instances." 创建redis集群实例
echo "create -- Create a cluster using redis-cli --cluster create." 搭建redis集群
echo "stop -- Stop Redis Cluster instances." 停止redis集群实例
echo "watch -- Show CLUSTER NODES output (first 30 lines) of first node."
echo "tail <id> -- Run tail -f of instance at base port + ID."
echo "clean -- Remove all instances data, logs, configs." 删除生成的日志,配置,数据文件
echo "clean-logs -- Remove just instances logs." 只删除日志
要想外部服务器访问到我们搭建的集群,我们需要对脚本修改一下,进入/usr/local/redis-cluster/redis-5.0.5/utils/create-cluster
目录下,执行vim create-cluster
:
- start部分增加如下配置:
--bind
指定我们要绑定的ip(服务器ip)--requirepass
指定我们的密码--protected-mode no
关闭安全模式(外部应用可以连接到redis)
由于搭建环境的机子内存有点小,所有添加了限制内存的语句
--bind 192.168.3.86 --requirepass 12345 --protected-mode no
- create部分修改如下配置:
127.0.0.1IP地址修改为服务器地址或开放所有地址0.0.0.0
添加-a 12345
密码设置
- stop部分修改如下配置:
添加-h IP地址
,-a 12345
密码设置
4.执行./create-cluster start
启动集群
5.执行./create-cluster create
开启集群
集群测试
链接集群语句
../../src/redis-cli -h localhost -p 30003 -a 12345 -c
在30002中设置key后可以在30001获取
集群操作
- 添加主节点,从节点
- 删除节点:重新分配槽,移除节点
redis 5.0中使用 redis-cli 添加cluster node 并 reshard
Redis cluster集群:原理及搭建