文章目录
- 前言
- 准备环境
- 文件&脚本
- redis节点清单文件
- shell脚本
- 操作步骤
- ${REDIS_BASE_PATH}下生成文件目录结构如下
前言
由于最近服务器外网IP频繁变更,导致redis集群不可用,要重新搭建集群,所以简单写了个集群的一键部署脚本,通过docker来搭建集群。这个自动化脚本主要是对之前的另一篇文章《docker搭建三主三从redis集群,可外网访问》里的关键步骤的整合和集成,建议使用该脚本前先看一下上述文章,了解一下集群搭建的整体流程以及前置环境准备
准备环境
- docker环境
- redis镜像【镜像版本:5.0.5】
- redis-cli客户端
- 防火墙端口开通【端口号:6111–6116,16111–16116】
文件&脚本
redis节点清单文件
文件名:nodes-port-list.txt
文件路径:/home/redis-cluster/nodes-port-list.txt
文件用途:用于指定各节点端口
文件内容如下:
6111
6112
6113
6114
6115
6116
shell脚本
文件名:redis-cluster-script.sh
文件路径:/home/redis-cluster/redis-cluster-script.sh
文件用途:集群创建脚本
#/bin/bash
# Created by 31 on 2021-02-01
# 集群目录,可自定义
REDIS_BASE_PATH='/home/redis-cluster'
# 获取服务器公网IP
REDIS_IP=$(host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}')
echo "当前公网IP:"${REDIS_IP}
# 停止和删除docker容器
echo "开始停止和删除docker容器..."
while read line
do
docker stop "redis-"$line
docker rm "redis-"$line
done < ./nodes-port-list.txt
echo“docker容器清理完成,开始创建集群配置文件......”
# 写入集群配置文件
cat>${REDIS_BASE_PATH}/redis-cluster.conf<<EOF
port \${PORT}
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip $REDIS_IP
cluster-announce-port \${PORT}
cluster-announce-bus-port 1\${PORT}
appendonly yes
masterauth mypassword
requirepass mypassword
EOF
echo "集群配置文件创建完毕,开始创建节点配置..."
# 创建集群各节点配置文件
while read line
do
port=$line
rm -rf ${REDIS_BASE_PATH}/${port}
mkdir -p ${REDIS_BASE_PATH}/${port}/conf \
&& PORT=${port} envsubst < ${REDIS_BASE_PATH}/redis-cluster.conf > ${REDIS_BASE_PATH}/${port}/conf/redis.conf \
&& mkdir -p ${REDIS_BASE_PATH}/${port}/data; \
done < ./nodes-port-list.txt
echo “节点配置完成,开始创建新docker容器......”
#创建redis docker容器
while read line
do
port=$line
docker run -d -it \
-v /home/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /home/redis-cluster/${port}/data:/data \
--restart always --name redis-${port} --net host \
redis:latest redis-server /usr/local/etc/redis/redis.conf; \
done < ./nodes-port-list.txt
echo “docker容器创建完成,开始进行集群配置......”
# 拼接集群列表
NODE_LIST=""
while read line
do
NODE=${REDIS_IP}":"${line}
NODE_LIST=${NODE_LIST}" "${NODE}
done < ./nodes-port-list.txt
# 执行命令创建集群
redis-cli --cluster create $NODE_LIST --cluster-replicas 1 -a mypassword
echo "集群创建完成!"
exit 0
操作步骤
执行sh redis-cluster-script.sh
命令即可
在创建过程中会询问是否确认,输入“yes”即可
等待程序执行完成即可
${REDIS_BASE_PATH}下生成文件目录结构如下
create-cluster-script -- 执行脚本文件夹
├── nodes-port-list.txt -- 节点配置文件
└── redis-cluster-script.sh -- 集群创建脚本
6111 -- 6111节点目录【一下文件均由脚本生成】
├── conf
│ └── redis.conf -- 6111节点配置文件
└── data
├── appendonly.aof
├── dump.rdb
└── nodes.conf
6112
├── conf
│ └── redis.conf
└── data
├── appendonly.aof
├── dump.rdb
└── nodes.conf
6113
├── conf
│ └── redis.conf
└── data
├── appendonly.aof
├── dump.rdb
└── nodes.conf
6114
├── conf
│ └── redis.conf
└── data
├── appendonly.aof
├── dump.rdb
└── nodes.conf
6115
├── conf
│ └── redis.conf
└── data
├── appendonly.aof
├── dump.rdb
└── nodes.conf
6116
├── conf
│ └── redis.conf
└── data
├── appendonly.aof
├── dump.rdb
└── nodes.conf
redis-cluster.conf -- 集群配置文件【脚本生成】