shell脚本安装Redis一主二从三哨兵样例

自定义参数

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}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值