redis cluster的现状
reids-cluster计划在redis3.0中推出,可以看作者antirez的声明:
(ps:跳票了好久,今年貌似加快速度了),目前的最新版本见:
https://raw.githubusercontent.com/antirez/redis/3.0/00-RELEASENOTES
作者的目标:Redis Cluster will support up to ~1000 nodes. 赞...
目前redis支持的cluster特性(已测试):
1):节点自动发现
2):slave->master 选举,集群容错
3):Hot resharding:在线分片
4):集群管理:cluster xxx
5):基于配置(nodes-port.conf)的集群管理
6):ASK 转向/MOVED 转向机制.
redis cluster 架构
架构细节:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
redis-cluster选举:容错
(1)领着选举过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.
(2):什么时候整个集群不可用(cluster_state:fail)?
-
如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.
-
如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态.
-
当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误
部署环境:CentOS 6.5 X86_64
地址:192.168.93.131
集群环境:三个主节点与三个从节点
对应端口关系如下:
127.0.0.1:7000
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
127.0.0.1:7004
127.0.0.1:7005
这里也可不使用回环地址
安装依赖,否则启动cluster过程会报错
yum install ruby rubygems
安装ruby后执行 gem install redis
2.
下载redis 3.0(3.0版本之前不支持cluster模式)
https://github.com/antirez/redis/archive/3.0.0.tar.gz
我这里使用最新版
rz通过CRT上传解压:
cd /usr/local/src
tar -zxvf redis-3.0.0.tar.gz
mv redis-3.0.0 /usr/local/
cd /usr/local/redis-3.0.0.
make && make install
注意:
“warning: Clock skew detected. Your build may be incomplete.”
出现这个问题 需要通过ntpdate同步系统时间
3.
创建集群相关目录
mkdir -p /usr/local/cluster
cd /usr/local/cluster
mkdir 7000
mkdir 7001
mkdir 7002
mkdir 7003
mkdir 7004
mkdir 7005
4.
修改配置文件redis.conf
cp /usr/local/redis-3.0.0/redis.conf /usr/local/cluster
修改如下各项
daemonize yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
将redis.conf配置文件分别拷贝到7000/7001/7002/7003/7004/7005目录下
拷贝过去之后,将各个redis.conf文件下的port和目录名对应
5.
cd /usr/local/cluster/7000
redis-server redis.conf
cd /usr/local/cluster/7001
redis-server redis.conf
cd /usr/local/cluster/7002
redis-server redis.conf
cd /usr/local/cluster/7003
redis-server redis.conf
cd /usr/local/cluster/7004
redis-server redis.conf
cd /usr/local/cluster/7005
redis-server redis.conf
6.
执行redis的创建集群命令
cd /usr/local/redis-3.0.0/src
./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
这里输入yes,配置完成
7.
进去集群环境:
[root@localhost cluster]# redis-cli -c -h 127.0.0.1 -p 7000
127.0.0.1:7000>set sex male
Ok
127.0.0.1:7000>get sex
“male”
切换任意节点:
[root@localhost cluster]# redis-cli -c -h 127.0.0.1 -p 7004
127.0.0.1:7004> get sex
-> Redirected to slot [2584] located at 127.0.0.1:7000
"male"
查看所有节点:
redis-cli -p 7000 -h 127.0.0.1 cluster nodes
添加其他地址下的节点:
./redis-trib.rb add-node 192.168.93.132:7000
将93132的节点添加到93130的集群上
基础参考:http://redis.readthedocs.org/en/redirect-to-RedisDoc.com/