自定义参数
PKG_NAME= #PKG包名
REDIS_NAME= #redis服务名
REDIS_PASSWD= #设置redis密码
REDIS_PATH= #redis安装目录
REDIS_PORT= #设置REDIS端口
TEMP_PATH= #临时目录
USER_NAME= #启动用户
部署参数检查
#!/bin/bash
# 检查参数是否设置
echo "=====检查参数是否设置====="
if [ ! $TEMP_PATH ];then
echo "=====$TEMP_PATH 参数未设置,请检查!====="
exit 1
fi
if [ ! $REDIS_PATH ];then
echo "=====$REDIS_PATH 参数未设置,请检查!====="
exit 1
fi
if [ ! $PKG_NAME ];then
echo "=====$PKG_NAME 参数未设置,请检查!====="
exit 1
fi
if [ ! $REDIS_NAME ];then
echo "=====$REDIS_NAME 参数未设置,请检查!====="
exit 1
fi
if [ ! $REDIS_PASSWD ];then
echo "=====$REDIS_PASSWD 参数未设置,请检查!====="
exit 1
fi
if [ ! $REDIS_PORT ];then
echo "=====$REDIS_PORT 参数未设置,请检查!====="
exit 1
fi
ISSTART=$(netstat -nutlp|grep ${REDIS_PORT} | grep -v "grep"|wc -l)
SENTRY_ISSTART=$(netstat -nutlp|grep 2${REDIS_PORT} | grep -v "grep"|wc -l)
#检查端口是否已被监听
echo "=====检查端口是否已被监听====="
if [ "${ISSTART}" != "0" ]; then
echo "=====redis 启动端口已监听,请重新选择端口====="
exit 1
else
echo "=====redis 启动端口未监听,符合预期!====="
fi
echo "=====检查哨兵端口是否已被监听====="
if [ "${SENTRY_ISSTART}" != "0" ]; then
echo "=====redis 哨兵端口已监听,请重新选择端口====="
exit 1
else
echo "=====redis 哨兵端口未监听,符合预期!====="
fi
#检查目标目录是否存在
echo "=====检查目标目录是否存在====="
if [ ! -d $TEMP_PATH ];then
echo "=====临时目录不存在,创建目录====="
mkdir -p $TEMP_PATH
else
echo "=====临时目录已存在,无需创建====="
fi
if [ ! -d $REDIS_PATH/$REDIS_PORT ];then
echo "$REDIS_PATH/$REDIS_PORT 目录不存在,创建目录"
mkdir -p $REDIS_PATH/$REDIS_PORT/{run,data,tmp,logs}
else
echo "=====$REDIS_PORT 目录已存在,退出安装====="
exit 1
fi
echo "=====部署前检查通过====="
上传并解压安装包
#!/bin/bash
pwd
echo "=====解压安装包到指定目录====="
unzip -o $PKG_NAME.zip -d $TEMP_PATH
echo "=====查看解压是否成功====="
ls $TEMP_PATH/$PKG_NAME
安装redis
#!/bin/bash
# 复制配置文件模板到相应的目标目录
echo "====复制配置文件模板到相应的目标目录====="
cd $TEMP_PATH/$PKG_NAME
\cp redis.conf $REDIS_PATH/$REDIS_PORT/run/$REDIS_PORT.conf
\cp sentinel.conf $REDIS_PATH/$REDIS_PORT/run/2$REDIS_PORT.conf
\cp switch.sh $REDIS_PATH/$REDIS_PORT/run/
# 给switch.sh文件添加可执行权限
echo "=====给switch.sh文件添加可执行权限====="
chmod +x $REDIS_PATH/$REDIS_PORT/run/switch.sh
#修改配置文件
echo "=====开始修改配置文件====="
sed -i 's/6301/'$REDIS_PORT'/g' $REDIS_PATH/$REDIS_PORT/run/$REDIS_PORT.conf
sed -i 's/6301/'$REDIS_PORT'/g' $REDIS_PATH/$REDIS_PORT/run/2$REDIS_PORT.conf
sed -i 's/6301/'$REDIS_PORT'/g' $REDIS_PATH/$REDIS_PORT/run/switch.sh
sed -i 's/123456/'$REDIS_PASSWD'/g' $REDIS_PATH/$REDIS_PORT/run/$REDIS_PORT.conf
sed -i 's/123456/'$REDIS_PASSWD'/g' $REDIS_PATH/$REDIS_PORT/run/2$REDIS_PORT.conf
sed -i 's/123456/'$REDIS_PASSWD'/g' $REDIS_PATH/$REDIS_PORT/run/switch.sh
sed -i 's/127.0.0.1/'$master'/g' $REDIS_PATH/$REDIS_PORT/run/2$REDIS_PORT.conf
echo "=====查看修改后的配置文件$REDIS_PORT.conf====="
cat $REDIS_PATH/$REDIS_PORT/run/$REDIS_PORT.conf
echo "=====查看修改后的配置文件2$REDIS_PORT.conf====="
cat $REDIS_PATH/$REDIS_PORT/run/2$REDIS_PORT.conf
echo "=====查看修改后的配置文件switch.sh====="
cat $REDIS_PATH/$REDIS_PORT/run/switch.sh
# 安装tcl插件
echo "=====开始安装tcl插件====="
yum -y install tcl-8.5*
# 解压并安装redis
echo "=====开始解压redis安装包并安装redis====="
tar zxf $REDIS_NAME.tar.gz -C /usr/src
cd /usr/src/$REDIS_NAME
make MALLOC=libc
make PREFIX=$REDIS_PATH install
\cp $REDIS_PATH/bin/* /usr/local/sbin/
# 给普通用户账号授权
echo "=====给普通用户账号授权====="
chown -R $USER_NAME:$USER_NAME $REDIS_PATH
设置启停脚本+启动主节点
#!/bin/bash
chown -R ifly:ifly ${REDIS_PATH}
echo "=====开始设置启动脚本====="
# 设置启动脚本
cat > /usr/lib/systemd/system/redis${REDIS_PORT}.service <<-EOF
[Unit]
Description=Redis
After=network.target
[Service]
User=${USER_NAME}
Group=${USER_NAME}
ExecStart=${REDIS_PATH}/bin/redis-server ${REDIS_PATH}/${REDIS_PORT}/run/${REDIS_PORT}.conf --daemonize no
ExecStop=${REDIS_PATH}/bin/redis-cli -p ${REDIS_PORT} shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
echo "=====启动并设置开机自启====="
systemctl daemon-reload
systemctl start redis${REDIS_PORT}.service
systemctl enable redis${REDIS_PORT}.service
echo "=====启停方式:systemctl start|stop|restart redis${REDIS_PORT}====="
cat > /usr/lib/systemd/system/sentinel${REDIS_PORT}.service <<-EOF
[Unit]
Description=Redis
After=network.target
[Service]
User=${USER_NAME}
Group=${USER_NAME}
ExecStart=${REDIS_PATH}/bin/redis-sentinel ${REDIS_PATH}/${REDIS_PORT}/run/2${REDIS_PORT}.conf --daemonize no
ExecStop=${REDIS_PATH}/bin/redis-cli -p 2${REDIS_PORT} shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
echo "=====启动并设置开机自启====="
systemctl daemon-reload
systemctl start sentinel${REDIS_PORT}.service
systemctl enable sentinel${REDIS_PORT}.service
echo "=====启停方式:systemctl start|stop|restart sentinel${REDIS_PORT}====="
#按照端口判断,默认启动时间2分钟,判断两次,按需修改循环次数
echo "=====开始判断服务是否已启动成功====="
for((i=1;i<=12;i++));
do
sleep 10
ISSTART=$(netstat -nutlp|grep ${REDIS_PORT}|grep -v "grep"|wc -l)
if [ "$ISSTART" != "0" ]; then
echo "发现服务端口,为确保服务真正启动成功,等待15秒后进行第二次判断!"
sleep 15
ISSTART=$(netstat -nutlp|grep ${REDIS_PORT}|grep -v "grep"|wc -l)
if [ "$ISSTART" != "0" ]; then
echo "等待15秒后端口仍启动,服务第二次判断通过,服务启动成功!"
exit 0
else
echo "等待15秒后端口未启动,服务第二次判断失败,服务启动失败!"
exit 1
fi
else
echo "服务启动中,请等待!"
fi
done
echo "等待2分钟后未发现服务端口,服务启动失败!"
exit 1
设置启停脚本+设置从节点并启动
#!/bin/bash
# 指定主节点
echo "=====指定主节点====="
echo "slaveof $master $REDIS_PORT" >> $REDIS_PATH/$REDIS_PORT/run/$REDIS_PORT.conf
cat $REDIS_PATH/$REDIS_PORT/run/$REDIS_PORT.conf
chown -R ifly:ifly ${REDIS_PATH}
echo "=====开始设置启动脚本====="
# 设置启动脚本
cat > /usr/lib/systemd/system/redis${REDIS_PORT}.service <<-EOF
[Unit]
Description=Redis
After=network.target
[Service]
User=${USER_NAME}
Group=${USER_NAME}
ExecStart=${REDIS_PATH}/bin/redis-server ${REDIS_PATH}/${REDIS_PORT}/run/${REDIS_PORT}.conf --daemonize no
ExecStop=${REDIS_PATH}/bin/redis-cli -p ${REDIS_PORT} shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
echo "=====启动并设置开机自启====="
systemctl daemon-reload
systemctl start redis${REDIS_PORT}.service
systemctl enable redis${REDIS_PORT}.service
echo "=====启停方式:systemctl start|stop|restart redis${REDIS_PORT}====="
cat > /usr/lib/systemd/system/sentinel${REDIS_PORT}.service <<-EOF
[Unit]
Description=Redis
After=network.target
[Service]
User=${USER_NAME}
Group=${USER_NAME}
ExecStart=${REDIS_PATH}/bin/redis-sentinel ${REDIS_PATH}/${REDIS_PORT}/run/2${REDIS_PORT}.conf --daemonize no
ExecStop=${REDIS_PATH}/bin/redis-cli -p 2${REDIS_PORT} shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
echo "=====启动并设置开机自启====="
systemctl daemon-reload
systemctl start sentinel${REDIS_PORT}.service
systemctl enable sentinel${REDIS_PORT}.service
echo "=====启停方式:systemctl start|stop|restart sentinel${REDIS_PORT}====="
#按照端口判断,默认启动时间2分钟,判断两次,按需修改循环次数
echo "=====开始判断服务是否已启动成功====="
for((i=1;i<=12;i++));
do
sleep 10
ISSTART=$(netstat -nutlp|grep ${REDIS_PORT}|grep -v "grep"|wc -l)
if [ "$ISSTART" != "0" ]; then
echo "发现服务端口,为确保服务真正启动成功,等待15秒后进行第二次判断!"
sleep 15
ISSTART=$(netstat -nutlp|grep ${REDIS_PORT}|grep -v "grep"|wc -l)
if [ "$ISSTART" != "0" ]; then
echo "等待15秒后端口仍启动,服务第二次判断通过,服务启动成功!"
exit 0
else
echo "等待15秒后端口未启动,服务第二次判断失败,服务启动失败!"
exit 1
fi
else
echo "服务启动中,请等待!"
fi
done
echo "等待2分钟后未发现服务端口,服务启动失败!"
exit 1
检查集群状态
#!/bin/bash
INFO_REPCA=`redis-cli -p ${REDIS_PORT} -a ${REDIS_PASSWD} info replication`
ROLE_STATUS=`redis-cli -p ${REDIS_PORT} -a ${REDIS_PASSWD} info replication|grep role:master |wc -l`
SLAVE_NUM=`redis-cli -p ${REDIS_PORT} -a ${REDIS_PASSWD} info replication|grep connected_slaves:2 |wc -l`
SENT_STATUS=`redis-cli -p 2${REDIS_PORT} -a ${REDIS_PASSWD} info |grep master0:name=master${REDIS_PORT},status=ok,address=${master}:${REDIS_PORT},slaves=2,sentinels=3 |wc -l`
INFO_SENTI=`redis-cli -p 2${REDIS_PORT} -a ${REDIS_PASSWD} info |grep master0`
# 检查主从状态
if [ ${ROLE_STATUS} == '1' ] && [ ${SLAVE_NUM} == '1' ];then
echo "=====主从状态正常!====="
echo "${INFO_REPCA}"
else
echo "=====主从状态异常,请检查!====="
fi
# 检查哨兵集群状态
if [ ${SENT_STATUS} == '1' ];then
echo "=====哨兵集群状态正常!====="
echo "${INFO_SENTI}"
else
echo "=====哨兵集群状态异常,请检查!====="
fi
清理临时目录安装包
#!/bin/bash
rm -rf ${TEMP_PATH}
mkdir -p ${TEMP_PATH}