centos7编译安装redis脚本

本文介绍了一种自定义脚本,通过获取用户输入配置Redis安装路径、端口等,嵌入源码并编译,释放配置文件、环境变量,以及管理透明大页,最终完成Redis的定制化部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文用于记录redis安装脚本编写并将redis5.0.14源码包嵌入脚本的过程。

0x00.编写思路

  1. 通过read命令获取redis端口、redis安装目录、redis需要以什么账户运行(提供默认值)

  2. 将嵌入到脚本中的redis源码包释放到临时目录并进行编译安装

  3. 释放相关配置文件至对应目录中并开启redis服务

0x01.具体实现

  1. 通过命令行控制获取用户输入,如果用户未进行输入,则提供默认值

    示例代码:

    if [ -z $REDIS_BASE ] ; then
        _MANUAL_EXECUTION=true
        _REDIS_BASE=/opt/redis
        read -p "Please select the redis home dir name [$_REDIS_BASE] " REDIS_BASE
        if [ -z "$REDIS_BASE" ] ; then
            REDIS_BASE=$_REDIS_BASE
            echo "Selected default - $_REDIS_BASE"
        fi
    fi
  2. 获取脚本文件中的redis源码包并进行释放

    由于采用base64编码方式(该方式释放后可以保证文件md5值不被改变)将redis源码包放入脚本末尾,因此需要通过awk获取redis数据存放在脚本的开始位置,通过tail命令指定跳过行数将redis数据提取到某位置后,还原成redis源码包。为避免安装覆盖掉原有redis,需要进行一些判断处理。

    示例代码:

    buid_install() {
        if gcc --version >/dev/null ; then
            if [ ! -e ${REDIS_BASE}/bin/redis-server ] ; then
                skip_rownum=$(awk '/^#__BIN_FILE_BEGIN__/ {print NR + 1; exit 0; }' "$1")
                zipname=/tmp/redis-5.0.14.tar.gz
                tmpname=/tmp/redis_file
                tail -n +${skip_rownum} "$1" >${tmpname}
                base64 -d ${tmpname} > ${zipname}
                md5="406a4ddbdf0b60b4f288bf0c3cb06933"
                tmpmd5=$(md5sum ${zipname}|cut -f1 -d' ')
                if [ "$md5"="$tmpmd5" ] ; then
                    cd $(dirname ${zipname})
                    tar zxf $(basename ${zipname})
                    cd ${zipname$.tar.gz}
                    make -j$(cat /proc/cpuinfo |grep "physical id"|wc -l) >/dev/null
                    make install PREFIX=$2
                    rm -rf /tmp/redis*
                else
                    rm -rf /tmp/redis*
                    die "Emmmmm....The installation package is damaged and the installation is stopped."
                fi
            else
                echo "Skiping Build..."
            fi
        else
            die "GCC is not installed, installation exit"
        fi
    }

  3. 释放相关文件

    释放redis配置文件:

    CONF_FILE=${REDIS_BASE}/conf/${REDIS_PORT}.conf
    cat >${CONF_FILE} <<EOF
    bind 0.0.0.0
    protected-mode yes
    port 6379
    requirepass ${PASSWD}
    masterauth ${PASSWD}
    tcp-backlog 511
    timeout 0
    tcp-keepalive 300
    daemonize yes
    supervised no
    pidfile ${PIDFILE}
    loglevel notice
    logfile ${LOGFILE}
    databases 16
    always-show-logo yes
    save 900 1
    save 300 10
    save 60 10000
    stop-writes-on-bgsave-error yes
    rdbcompression yes
    rdbchecksum yes
    dbfilename dump.rdb
    dir /opt/redis/data/6379
    replica-serve-stale-data yes
    replica-read-only yes
    repl-diskless-sync no
    repl-diskless-sync-delay 5
    repl-disable-tcp-nodelay no
    replica-priority 100
    lazyfree-lazy-eviction no
    lazyfree-lazy-expire no
    lazyfree-lazy-server-del no
    replica-lazy-flush no
    appendonly no
    appendfilename "appendonly.aof"
    appendfsync everysec
    no-appendfsync-on-rewrite no
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
    aof-load-truncated yes
    aof-use-rdb-preamble yes
    lua-time-limit 5000
    slowlog-log-slower-than 10000
    slowlog-max-len 128
    latency-monitor-threshold 0
    notify-keyspace-events ""
    hash-max-ziplist-entries 512
    hash-max-ziplist-value 64
    list-max-ziplist-size -2
    list-compress-depth 0
    set-max-intset-entries 512
    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64
    hll-sparse-max-bytes 3000
    stream-node-max-bytes 4096
    stream-node-max-entries 100
    activerehashing yes
    client-output-buffer-limit normal 0 0 0
    client-output-buffer-limit replica 256mb 64mb 60
    client-output-buffer-limit pubsub 32mb 8mb 60
    hz 10
    dynamic-hz yes
    aof-rewrite-incremental-fsync yes
    rdb-save-incremental-fsync yes
    EOF

    释放用于systemed的redis环境变量文件:

    cat >${REDIS_BASE}/conf/redis-env-${REDIS_PORT} <<EOF
    PASSWORD=${PASSWD}
    PORT=${REDIS_PORT}
    CONFIG_FILE=${CONF_FILE}
    EOF

    释放用于关闭Transparent Huge Pages(大内存页)的脚本并配置开机运行:

    由于redis的特性,开启大页内存会影响性能

    cat > ${REDIS_BASE}/bin/close_thp.sh <<EOF
    #!/bin/bash
    if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
        echo never > /sys/kernel/mm/transparent_hugepage/enabled
    fi
    if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
        echo never > /sys/kernel/mm/transparent_hugepage/defrag
    fi
    EOF
    chmod +x ${REDIS_BASE}/bin/close_thp.sh
    if ! grep "${REDIS_BASE}/bin/close_thp.sh"  /etc/rc.local ; then
        cat >> /etc/rc.local <<EOF
    bash ${REDIS_BASE}/bin/close_thp.sh
    EOF
    fi
    chmod +x /etc/rc.local

    释放systemed单元配置文件及配置PATH环境变量:

    cat > /usr/lib/systemd/system/redis_${REDIS_PORT}.service <<EOF
    [Unit]
    Description=The redis service is deployed by BitBears
    After=syslog.target network-online.target remote-fs.target nss-lookup.target
    Wants=network-online.target
    ​
    [Service]
    Type=forking
    PIDFile=${PIDFILE}
    EnvironmentFile=${REDIS_BASE}/conf/redis-env-${REDIS_PORT}
    ExecStart=${REDIS_BASE}/bin/redis-server \${CONFIG_FILE}
    ExecStop=${REDIS_BASE}/bin/redis-cli -a "\${PASSWORD}" -p \${PORT} shutdown
    Restart=on-failure
    RestartSec=10
    User=${USERNAME}
    Group=${GROUPNAME}
    LimitNOFILE=65535
    ​
    [Install]
    WantedBy=multi-user.target
    EOF
    ​
    systemctl daemon-reload
    systemctl enable --now redis_${REDIS_PORT}
    cat >/etc/profile.d/BitBears_redis.sh <<EOF
    REDIS_HOME=$REDIS_BASE && export REDIS_HOME
    PATH=\${REDIS_HOME}/bin:\${PATH} && export PATH
    EOF
    source /etc/profile.d/BitBears_redis.sh

0x02.成品及使用方式

  1. 下载脚本

    https://download.youkuaiyun.com/download/bitpanda_1/53410491https://download.youkuaiyun.com/download/bitpanda_1/53410491
    
  2. 解压脚本并赋予权限
  3. 运行命令并按提示输入相关参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值