部署前准备
因为进行Redis集群部署操作的实验需要启停较多的Redis服务,因此,我写了如下两个简单的脚本来辅助启停本机Redis应用。
要使用集群功能,Redis 服务必须要先打开 cluster-enabled 配置选项,修改path/to/redis.conf 文件中的 cluster-enabled 配置项的值为 yes
启动redis实例startRedis.sh
#!/usr/bin/bash
#在本机启动N个redis实例,redis实例的端口从6379开始,每启动一个实例端口递增1
#如:启动两个redis实例,两个实例的端口分别为 6379和6380
#脚本默认使用当前目录下的myRedis.conf文件作为配置文件。此配置文件中必须要有cluster-enabled yes配置项,以开启Redis集群功能
#在当前目录下根据启动Redis的端口创建子目录,每个redis的aof、rdb、config等文件都在相应的子目录下
declare -i port=6378
declare -i n=$1
declare -i i=1
echo "启动redis实例个数为:$n"
test $n -le 0 && n=1 #若启动脚本没有带参数,默认启动1个redis实例
while [ $i -le $n ]
do
port=$((port+1))
echo "开始启动redis实例,监听端口$port"
# 若当前目录下不存在相应端口的子目录,则创建
test -d $port || mkdir $port
# 启动Redis服务
redis-server myRedis.conf --port $port --cluster-config-file nodes-$port.conf --appendfilename appendonly-$port.aof --dbfilename dump-$port.rdb --dir ./$port &
i=$((i+1))
done
echo "所有redis实例启动成功!"
exit 0
停止redis实例stopRedis.sh
#!/usr/bin/bash
#停止本机所有的redis服务
#获取本机所有redis服务的端口
portArr=`ps -ef | grep redis-server | sed '/grep/'d | awk '{print $9}' | awk -F : '{print $2}'`
echo "所有的redis服务端口 $portArr"
for port in $portArr
do
echo "停止$port端口上的redis服务"
redis-cli -p $port shutdown
done
exit 0
启停脚本的使用范例:
//在本机上启动6个Redis服务,端口为6379-6384
[root@localhost]# bash startRedis.sh 6
//停止本机的所有Redis服务
[root@localhost]# bash stopRedis.sh
部署Redis集群
本文章中使用Redis自带的redis-trib.rb工具来进行Redis集群的部署,redis-trib.rb是用ruby编写的,所有要先安装ruby,然后安装redis gem依赖包。
//centos系统下安装ruby,执行以下命令
//其他安装方式参看官方文档
[root@localhost]# yum install ruby
//安装redis-trib.rb依赖的gem包redis
[root@localhost]# gem install redis
//启动redis服务,创建6个redis服务,端口以6379开始递增
[root@localhost]# bash startRedis.sh 6
//创建部署redis集群
[root@localhost]# /home/ojh/redis/redis-stable/src/redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384
向集群中增加节点
若要向集群中增加节点只要向新节点发送CLUSTER MEET ip port命令即可,其中ip和port是原集群中任一节点的ip和端口。原集群中节点接收到meet命令后会通过Gossip协议通知集群中每一个节点,因此新节点仅需meet集群中任一节点即可。
节点添加到集群中后,可以通过CLUSTER REPLICATE nodeId命令将节点设置为节点nodeId的从服务。
下面例子向集群中增加一主一从两个节点:
//启动redis服务,增加到集群中的新节点
[root@localhost]# mkdir 6385
[root@localhost]# redis-server myRedis.conf --port 6385 --cluster-config-file nodes-6385.conf --appendfilename appendonly-6385.aof --dbfilename dump-6385.rdb --dir ./6385 &
//启动后看新节点的nodes config文件可以看到新节点还没加入到集群中
[root@localhost redisCuster]# cat 6385/nodes-6385.conf
cb3e00c246f4e7eea69eafdf2bf73851c0bc2e54 :0 myself,master - 0 0 0 connected
vars currentEpoch 0 lastVoteEpoch 0
//向新节点发送CLUSTER MEET ip port命令
[root@localhost]# redis-cli -p 6385
127.0.0.1:6385> CLUSTER MEET 127.0.0.1 6383
//meet后再看6385的config文件,可以看到6385已经成功添加到集群上了
[root