安装之类的准备工作可以参考redis官网介绍:redis文档
这里主要分享两个脚本(拿了大佬的东西,@fengyong7723131的原文,一开始没成功,自己经过实践做了一些更改)
干货开始
按照官网的指引做好准备工作以后的文件结构是这样的:
piao@DESKTOP-13G5OT3:~/redis-cluster$ ll
total 8
drwxrwxr-x 1 piao piao 512 Aug 4 15:51 node_7000/
drwxrwxr-x 1 piao piao 512 Aug 4 15:42 node_7001/
drwxrwxr-x 1 piao piao 512 Aug 4 15:42 node_7002/
drwxrwxr-x 1 piao piao 512 Aug 4 17:36 node_7003/
drwxrwxr-x 1 piao piao 512 Aug 4 17:36 node_7004/
drwxrwxr-x 1 piao piao 512 Aug 4 17:36 node_7005/
其中与官网不同的地方有:
不需要单独复制redis-server到集群文件夹,可以直接使用包管理软件(apt,yum)安装redis来调用redis-server
节点中的配置文件加了一个pid文件配置,为了方便停止集群:
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
pidfile redis.pid
启动/停止节点
#!/bin/bash
cluster_home=/home/piao/redis-cluster
cluster_dir=`ls`
#node节点的个数
node_size=0
#node节点数组
nodes=[]
#信息文件
infoFile="infoFile"
#pid文件
pidFile="pidFile"
#创建infoFile和pidFile文件
touch infoFile
touch pidFile
#启动以node开头的文件夹下的redis节点,条件一:node开头,条件二:必须是文件夹
function starCluster(){
echo "" > $infoFile
echo "========================端口号:======================="
for node in $cluster_dir
do
echo ${node}
if [ -d $node ]
then
echo "${node}是文件夹"
else
echo "${node}不是文件夹"
fi
if [ "${node:0:5}" = "node_" ]
then
echo "starting $node"
node_size=`expr ${node_size} + 1`
cd $cluster_home/$node
redis-server redis.conf >> $infoFile&
fi
done
echo ""
echo "======================================================"
echo "===================有${node_size}个redis节点====================="
echo "======================================================"
}
#关闭所有节点
function stopCluster(){
#cat $infoFile | grep "PID" | awk '{ infoSize=length($0);infoIndex=index($0,"PID");print substr($0,infoIndex+4,infoSize) }' > $pidFile
echo "===================redis集群的pid:===================="
for node in $cluster_dir
do
if [ "${node:0:5}" = "node_" ]
then
echo -e "`cat ${node}/redis.pid`, \c"
kill -9 `cat ${node}/redis.pid` &
fi
done
echo ""
echo "======================================================"
}
case $1 in
start) starCluster
;;
stop) stopCluster
;;
esac
启动集群:
#!/bin/bash
cluster_home=/home/piao/redis-cluster/
cd $cluster_home
cluster_dir=`ls`
for node in $cluster_dir
do
if [ "${node:0:5}" = "node_" ]
then
echo "清除$node"
rm -rf $node/appendonly.aof $node/dump.rdb $node/nodes.conf
fi
done
redis-cli --cluster create 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-replicas 1
执行集群脚本后,需要手动输入yes
PS:使用Redis需要注意安全,服务器至少应该启用防火墙,Redis加上密码的话就更好了
Redis集群的密码似乎需要各个节点手动设置,可以在节点配置文件中加上
requirepass 123456
或者连接Redis后,使用如下命令配置:
127.0.0.1:7000 > config set requirepass 123456