本篇将在Centos系统中以tar包方式部署Redis(伪)集群
逐步创建
-
下载安装包并解压 ,再编译
mkdir -p /tmp/redis_cluster cd redis_cluster https://repo.huaweicloud.com/redis/redis-5.0.0.tar.gz tar -zxvf redis-5.0.0.tar.gz mv redis-5.0.0 redis cd redis && make
-
在redis_cluster目录中创建每个节点的文件夹
# 以7000-7005作为主节点端口 # conf存储配置文件;data存储日志和数据 for i in {7000..7005}; do mkdir -p /tmp/redis_cluster/conf && mkdir -p /tmp/redis_cluster/data done
-
编写配置文件
在每个节点conf目录下创建redis.conf文件,并修改变量为具体的值# 对外端口 port ${port} # 关闭保护模式 protected-mode no # 开启集群模式 cluster-enabled yes # 集群配置文件 cluster-config-file nodes_${port}.conf # 集群超时时间 cluster-node-timeout 5000 # 外网IP cluster-announce-ip ${ip} # 端口 cluster-announce-port ${port} # 节点间通信端口 cluster-announce-bus-port 1${port} # aof模式 appendonly yes # 是否以后台方式运行 daemonize yes # 日志级别 loglevel debug # 日志存储路径 logfile ${dataPath}/log.log # 主节点密码 masterauth 123456 # 节点密码 requirepass 123456 # 数据存储路径 dir ${dataPath} # 访问控制 bind 0.0.0.0
-
修改好配置文件,逐个启动即可
cd /tmp/redis_cluster/redis/src ./redis-server /tmp/redis_cluster/redis_7000/conf/redis.conf ./redis-server /tmp/redis_cluster/redis_7001/conf/redis.conf ./redis-server /tmp/redis_cluster/redis_7002/conf/redis.conf ./redis-server /tmp/redis_cluster/redis_7003/conf/redis.conf ./redis-server /tmp/redis_cluster/redis_7004/conf/redis.conf ./redis-server /tmp/redis_cluster/redis_7005/conf/redis.conf
通过
ps -ef | grep redis
查看进程是否存在
-
开启端口
在创建集群的过程中,需要开启端口让外部访问
对于部署在阿里云、腾讯云或华为云的,需要在安全组开启对应的端口
for port in {7000...7005}; do firewall-cmd --add-port=$port/tcp --permanent firewall-cmd --add-port=1$port/tcp --permanent done firewall-cmd --reload && firewall-cmd --list-ports
-
使用redis-cli创建集群
/tmp/redis_cluster/redis/src/redis-cli --cluster create 外网IP:7000 外网IP:7001 外网IP:7002 外网IP:7003 外网IP:7004 外网IP:7005 -a 密码
至此,已将16384个slots分配给每个节点,通过外部访问即可
脚本创建
在以下脚本中,主要完成文件下载,动态生成配置文件等步骤,在脚本执行完后,再使用redis-cli创建集群即可
注意:在集群安装目录下需存在配置文件模板config.conf
port ${port}
protected-mode no
cluster-enabled yes
cluster-config-file nodes_${port}.conf
cluster-node-timeout 5000
cluster-announce-ip ${ip}
cluster-announce-port ${port}
cluster-announce-bus-port 1${port}
appendonly yes
daemonize yes
loglevel debug
logfile ${dataPath}/log.log
masterauth 123456
requirepass 123456
dir ${dataPath}
bind 0.0.0.0
脚本
#!/usr/bin/env bash
#auth 582895699@qq.com
#data 2022年1月24日
# 资源下载地址
TAR_FILE='https://repo.huaweicloud.com/redis/redis-5.0.0.tar.gz'
# 安装目录
TAR_SOURCE_DIR='/tmp/redis_cluster'
# redis文件名称
NEW_DIR_NAME='redis'
# redis节点端口
PORTS=(7000 7001 7002 7003 7004 7005)
# redis子子节点文件件前缀
DIR_PREFIX='redis_'
# 外网IP
IP=""
downloadFileAndCompile() {
# 下载文件
cd $TAR_SOURCE_DIR && wget $TAR_FILE
echo 'download success!'
# 解压文件
tar -zxvf redis-5.0.0.tar.gz
# 文件重命名
mv redis-5.0.0 $NEW_DIR_NAME
# 编译
cd ./$NEW_DIR_NAME && make
}
configRedis() {
for i in ${PORTS[*]}; do
mkdir -p "$TAR_SOURCE_DIR/$DIR_PREFIX$i"/conf &&
mkdir -p "$TAR_SOURCE_DIR/$DIR_PREFIX$i"/data &&
port=${i} ip=${IP} dataPath="$TAR_SOURCE_DIR/$DIR_PREFIX$i/data" envsubst <"$TAR_SOURCE_DIR/config.conf" >"$TAR_SOURCE_DIR/$DIR_PREFIX$i/conf"/redis.conf &&
"$TAR_SOURCE_DIR"/"$NEW_DIR_NAME"/src/redis-server "$TAR_SOURCE_DIR"/"redis_$i"/conf/redis.conf
done
}
run() {
if [ ! -d $TAR_SOURCE_DIR ]; then
echo '文件夹不存在'
exit 1
fi
if [ ! -e "$TAR_SOURCE_DIR/config.conf" ]; then
echo "基础配置文件不存在"
exit 1
fi
downloadFileAndCompile
configRedis
}
run