#!/bin/bash
#
#********************************************************************
#Author: chenjiahao
#QQ: 1938191576
#Date: 2022-08-22
#FileName: install_redis.sh
#URL: https://www.placjh.com
#Description: The deploy script
#Copyright (C): 2022 All rights reserved
#*******************************************************************
RD=redis-7.2.3
DIR=/apps
PASSWORD=1syhLqT
color () {
RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \E[0m"
echo -n "$1" && $MOVE_TO_COL
echo -n "["
if [ $2 = "success" -o $2 = "0" ] ;then
${SETCOLOR_SUCCESS}
echo -n $" OK "
elif [ $2 = "failure" -o $2 = "1" ] ;then
${SETCOLOR_FAILURE}
echo -n $"FAILED"
else
${SETCOLOR_WARNING}
echo -n $"WARNING"
fi
${SETCOLOR_NORMAL}
echo -n "]"
echo
}
. /etc/os-release
download(){
if [ $ID = "rocky" -o $ID = "centos" ];then
yum -y install gcc make jemalloc-devel systemd-devel &>/dev/null
elif [ $ID = "ubuntu" ];then
echo "更新apt源"
apt update &>/dev/null
apt -y install gcc make libjemalloc-dev libsystemd-dev &>/dev/null
else
echo OS不支持
exit
fi
color 安装依赖包完毕 0
echo "下载redis源码包"
if ! [ -f redis-7.2.3.tar.gz ];then
wget https://download.redis.io/releases/$RD.tar.gz &>/dev/null
if [ $? -eq 0 ];then
color 下载成功 0
else
color下载失败 1
exit
fi
fi
tar xf redis-7.2.3.tar.gz
}
install(){
color 开始编译 0
mkdir -p $DIR/redis
cd $RD
make -j 2 USE_SYSTEMD=yes PREFIX=$DIR/redis install &>/dev/null
if [ $? -eq 0 ];then
color 编译完毕 0
else
color 编译失败 1
exit
fi
ln -s $DIR/redis/bin/redis-* /usr/bin/;
mkdir -p $DIR/redis/{etc,log,data,run}
cp redis.conf $DIR/redis/etc/
}
modify_conf(){
sed -i -e 's/bind 127.0.0.1/bind 0.0.0.0/' -e "/# requirepass/a requirepass $PASSWORD" -e "/^dir .*/c dir $DIR/redis/data/" -e "/logfile .*/c logfile $DIR/redis/log/redis-6379.log" -e "/^pidfile .*/c pidfile $DIR/redis/run/redis_6379.pid" -e "s/# maxclients 10000/maxclients 100000/" $DIR/redis/etc/redis.conf
useradd -r -s /sbin/nologin redis
chown -R redis.redis $DIR/redis
cat >> /etc/sysctl.conf <<-EOF
net.core.somaxconn = 1024
vm.overcommit_memory = 1
EOF
sysctl -p &>/dev/null
color 更改配置完毕 0
}
ready_start(){
if [ $ID = "rocky" -o $ID = "centos" ];then
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
/etc/rc.d/rc.local
else
echo -e '#!/bin/bash\necho never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.loacl
chmod +x /etc/rc.loacl
/etc/rc.loacl
fi
cat > /lib/systemd/system/redis.service <<-EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
ExecStart=$DIR/redis/bin/redis-server $DIR/redis/etc/redis.conf --supervised systemd
ExecStop=/bin/kill -s QUIT \$MAINPID
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
LimitNOFILE=1000000
[Install]
WantedBy=multi-user.target
EOF
color 启动前准备 0
}
run(){
echo 'nofile - max 1000000' >> /etc/security/limits.conf
systemctl daemon-reload
systemctl enable --now redis &>/dev/null
if [ $? -eq 0 ];then
color 启动完毕 0
else
color 启动失败 1
fi
}
download
install
modify_conf
ready_start
run