想在3分钟以内搭建一个Redis Cluster集群吗?说3分钟可能有点久,实际上好像不到一分钟就完成了Redis Cluster集群的搭建。
介绍
redis cluster是官方提供的一种集群方案,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。
结构特点:
- 所有节点彼此互联,redis服务器启动两个端口,一个为服务客户端的端口,另外一个为内部通讯端口,内部通讯端口比服务端口大10000. 比如:6379与16379
- 超过半数及以上的节点时,节点才会失效
- 客户端与redis服务器直连,无代理服务器,只需连接到集群中的任何一个节点即可
- Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。
快速搭建
今天看官方文档的时候发现redis源码包中还存在一个redis-cluster的shell脚本,可以快速创建集群。
创建
cd utils/create-cluster
gem install redis
./create-cluster start
./create-cluster create
是不是很快就创建了redis集群
内部实现
create-cluster利用的是使用redis-server命令行指定配置参数让redis-server启动在不同的端口。
要想搭建redis-cluster集群,我们需要的最少配置文件为
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
create-cluster启动实例的shell脚本。
PORT=30000
TIMEOUT=2000
NODES=6
REPLICAS=1
ENDPORT=$((PORT+NODES))
if [ "$1" == "start" ]
then
while [ $((PORT < ENDPORT)) != "0" ]; do
PORT=$((PORT+1))
echo "Starting $PORT"
../../src/redis-server --port $PORT --cluster-enabled yes --cluster-config-file nodes-${PORT}.conf --cluster-node-timeout $TIMEOUT --appendonly yes --appendfilename appendonly-${PORT}.aof --dbfilename dump-${PORT}.rdb --logfile ${PORT}.log --daemonize yes
done
exit 0
fi
if [ "$1" == "create" ]
then
HOSTS=""
while [ $((PORT < ENDPORT)) != "0" ]; do
PORT=$((PORT+1))
HOSTS="$HOSTS 127.0.0.1:$PORT"
done
../../src/redis-trib.rb create --replicas $REPLICAS $HOSTS
exit 0
fi
可以看出来创建集群的脚本本质上也是命令行指定配置参数,创建脚本则是利用redis-trib.rb
最后
这里简单的演示下redis集群的快速搭建,先明白集群搭建,后面详细说明其实现原理,Redis集群的搭建非常简单,深入比较难。