本文旨在帮助大家熟悉如何搭建redis集群,redis cluster方案是redis3.0才推出来的,所以搭建的时候注意redis版本,本文以最新的redis-4.0.7为基础搭建
下载redis安装包,编译安装
$ wget http://download.redis.io/releases/redis-4.0.7.tar.gz
$ tar xzf redis-4.0.7.tar.gz
$ cd redis-4.0.7
$ make
中间可能会有提示性错误,一般是缺少对应的库造成的,安装好对应的库再编译就ok了
vim /etc/profile
//在末尾把redis的安装包路径加进去,便于使用redis命令
PATH=$PATH:/home/redis/redis-4.0.7/src
执行命令 source /etc/profile 使命令生效
source /etc/profile
直接执行 redis-server 看redis服务器是否正常启动
cluster搭建
在 /home/redis/目录下创建cluster目录,同时创建logs、conf、data目录,分别用户存储日志文件,配置文件,持久化文件
cd /home/redis
mkdir cluster
cd cluster
mkdir logs
mkdir conf
mkdir data
将 /home/redis/redis-4.0.7/redis.conf 拷贝至 /home/redis/cluster/conf 目录,分别复制6份,根据端口号区分
cp redis-6379.conf redis-6380.conf
cp redis-6379.conf redis-6381.conf
cp redis-6379.conf redis-6382.conf
cp redis-6379.conf redis-6383.conf
cp redis-6379.conf redis-6384.conf
分别修改对应的配置文件以及对应的属性
daemonize yes
port 6379
logfile /home/redis/cluster/logs/redis-6379.log
dir /home/redis/cluster/data
#开启集群
cluster-enabled yes
#集群配置文件
cluster-config-file nodes-6379.conf
#集群节点超时时间
cluster-node-timeout 15000
分别启动6个redis服务
redis-server /home/redis/cluster/conf/redis-6379.conf
redis-server /home/redis/cluster/conf/redis-6380.conf
redis-server /home/redis/cluster/conf/redis-6381.conf
redis-server /home/redis/cluster/conf/redis-6382.conf
redis-server /home/redis/cluster/conf/redis-6383.conf
redis-server /home/redis/cluster/conf/redis-6384.conf
这时候集群节点对其他节点并未感知,也不能正常工作,可以执行 cluster nodes 命令查看相关信息
节点握手,执行 redis-cli 默认连接到 6379这台服务器上去,然后分别执行以下命令将剩余redis服务加进集群,
cluster meet 127.0.0.1 6380
cluster meet 127.0.0.1 6381
cluster meet 127.0.0.1 6382
cluster meet 127.0.0.1 6383
cluster meet 127.0.0.1 6384
这时候节点也是不能正常工作的,因为还没分配slot,我们可以写一个shell脚本来批量的给集群内的服务器分配slot
n=0
for ((i=n;i<=5461;i++))
do
redis-cli -h 127.0.0.1 -p 6379 -a dxy CLUSTER ADDSLOTS $i
done
n=5462
for ((i=n;i<=10922;i++))
do
redis-cli -h 127.0.0.1 -p 6380 -a dxy CLUSTER ADDSLOTS $i
done
n=10923
for ((i=n;i<=16383;i++))
do
redis-cli -h 127.0.0.1 -p 6381 -a dxy CLUSTER ADDSLOTS $i
done
ok,slot分配完成,但是还有三台服务器没有使用到,那三台服务器的作用是什么呢?答案是用来充当这三台服务器的从服务器,实现高可用及故障转移用的
使用如下命令可以为主节点指定对应的从节点,分别在三台主节点服务器上执行,对应的集群节点id可以用cluster nodes查询到
cluster replicate 集群节点id
ok,这样一个redis集群算是搭建好了,主节点接受读写操作请求,从节点默认不接受,如果从节点需要接受读请求,需要修改配置文件为只读