注意:
centos7的epel源内redis版本为3.2.12 ,版本太低,因此本脚本使用从redis官网下载的软件包编译安装。
需要自行下载redis包到此脚本所在目录,再执行。
下载链接:http://download.redis.io/releases/
#!/bin/bash
. /etc/init.d/functions
VERSION=redis-4.0.14
PASSWORD=123456
INSTALL_DIR=/app/redis
install() {
yum -y install gcc jemalloc-devel || { action "安装软件包失败,检查网络" false;exit; }
#wget http://download.redis.io/releases/${VERSION}.tar.gz || { action "redis 源码包下载失败" false;exit; }
[ -f ${VERSION}.tar.gz ] || { action "找不到redis源码包" false; exit; }
tar xf ${VERSION}.tar.gz
cd ${VERSION}
make -j 4 PREFIX=${INSTALL_DIR} install # && action "redis 编译安装完成" true || { action "redis 编译安装失败" false;exit; }
ln -s ${INSTALL_DIR}/bin/redis-* /usr/bin/
mkdir -p ${INSTALL_DIR}/{etc,log,data,run}
cp redis.conf ${INSTALL_DIR}/etc/
sed -i -e 's/bind 127.0.0.1/bind 0.0.0.0/' \
-e "/# requirepass/a requirepass $PASSWORD" \
-e "/^dir .*/c dir ${INSTALL_DIR}/data/" \
-e "/logfile .*/c logfile ${INSTALL_DIR}/log/redis-6379.log" \
-e "/^pidfile .*/c pidfile ${INSTALL_DIR}/run/redis_6379.pid" \
${INSTALL_DIR}/etc/redis.conf
if id redis &> /dev/null ;then
action "REDIS 用户已经存在" false
else
useradd -r -s /sbin/nologin redis
action "redis 用户创建成功" true
fi
chown -R redis.redis ${INSTALL_DIR}
cat >> /etc/sysctl.conf <<EOF
net.core.somaxconn = 1024
vm.overcommit_memory = 1
EOF
sysctl -p
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled
cat > /usr/lib/systemd/system/redis.service <<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
ExecStart=${INSTALL_DIR}/bin/redis-server ${INSTALL_DIR}/etc/redis.conf --supervised systemd
ExecStop=/bin/kill -s QUIT \$MAINPID
#Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now redis &> /dev/null && action "REDIS 服务启动成功,redis信息如下:" || { action "REDIS 启动失败" false;exit; }
redis-cli -a $PASSWORD INFO Server 2> /dev/null
}
install