CentOS 7編譯安裝Redis

安裝編譯相關依賴

  • CentOS/Fedora yum install gcc gcc-c++ cmake tcl

下載Redis源碼包

curl -o redis-4.0.10.tar.gz http://download.redis.io/releases/redis-4.0.10.tar.gzc++

解壓Redis源碼包

tar -xzvf redis-4.0.10.tar.gzredis

編譯

具體過程:vim

# 進入解壓目錄, 默認在當前目錄
cd redis-4.0.10

# 執行make
make

# 安裝, 指定目錄
make PREFIX=/usr/local/redis install

Redis配置

# 將配置文件放在/usr/local/redis/etc/下面, 放在/etc/redis/下也能夠
mkdir /usr/local/redis/etc/

# 將解壓目錄中的redis.conf拷貝到/usr/local/redis/etc/下面
cp redis.conf /usr/local/redis/etc/

# 進入redis的執行文件目錄
cd /usr/local/redis/bin/

# 將redis-benchmark, redis-cli, redis-server複製到/usr/bin
cp redis-benchmark redis-cli redis-server /usr/bin/

調整內存分配使用方式, 並使其生效:

# 此參數可用的值爲0,1,2 
# 0.表示當用戶空間請求更多的內存時,內核嘗試估算出可用的內存 
# 1.表示內核容許超量使用內存直到內存用完爲止 
# 2.表示整個內存地址空間不能超過swap+(vm.overcommit_ratio)%的RAM值 

echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
sysctl -p

修改Redis配置和Redis加固

Redis配置

編輯配置文件vim /usr/local/redis/etc/redis.conf, 將其中的對應內容修改成:bash

# redis以守護進程的方式運行, no表示不以守護進程的方式運行(會佔用一個終端)
daemonize yes

# 密碼
requirepass password

# 綁定ip
# bind 127.0.0.1

# 端口
port 7480

# 數據目錄
dir /data/redis

# 客戶端閒置多長時間後斷開鏈接,默認爲0關閉此功能
timeout 300

# 設置redis日誌級別,默認級別:notice
loglevel verbose

# 設置日誌文件的輸出方式,若是以守護進程的方式運行redis 默認:""
# 而且日誌輸出設置爲stdout,那麼日誌信息就輸出到/dev/null裏面去了
logfile stdout

Redis加固

  • 綁定127.0.0.1 若是隻是本地通訊, 就確保監聽在本地, 修改配置文件的bind 127.0.0.1服務器

  • 設置防火牆 若是須要其餘機器訪問,或者設置了slave模式,那就記得加上相應的防火牆設置,命令以下: iptables -A INPUT -s x.x.x.x -p tcp --dport 6379 -j ACCEPTapp

  • 認證 添加密碼, 修改配置文件requirepass asdlkashdkj123123curl

  • 低權限帳戶 建立一個redis用戶, 使用這個用戶執行redis-serversocket

useradd -M -s /sbin/nologin redis
setsid sudo -u redis /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf'

Redis啓動腳本

  • CentOS 6service服務
cp /root/redis-4.0.10/utils/redis_init_script  /etc/rc.d/init.d/redis

在文件的開頭#!的下一行添加vim /etc/rc.d/init.d/redis:tcp

# chkconfig: 2345 90 10
# description: Redis is a persistent key-value database

若是添加了密碼, 請添加-a password$CLIEXEC -a password -p $REDISPORT shutdown中.ide

再在stop;;後添加:

restart)
    $0 stop
    $0 start
    ;;
status)
    PID=$(cat $PIDFILE)
    if [ ! -x /proc/${PID} ]
    then
        echo 'Redis is not running'
    else
        echo "Redis is running ($PID)"
    fi
    ;;

例如:

#!/bin/sh
#
# chkconfig: 2345 90 10
# description: Redis is a persistent key-value database
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

### BEGIN INIT INFO
# Provides:     redis_7480
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Redis data structure server
# Description:          Redis data structure server. See https://redis.io
### END INIT INFO

REDISPORT=7480
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli

PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/usr/local/redis/etc/redis.conf"

case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, Process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
                printf "Redis \033[1;32;32mStarted...\033[0m\n"
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, Process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -a password -p $REDISPORT shutdown >> /dev/null 2>&1
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                printf "Redis \033[1;32;32mStopped...\033[0m\n"
        fi
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    status)
        if [ ! -f $PIDFILE ]
        then
            echo "$PIDFILE does not exist, Process is not running"
            exit 6379
        fi
        PID=$(cat $PIDFILE)
        if [ ! -x /proc/${PID} ]
        then
            printf "Redis is \033[1;31;31mnot running\033[0m\n"
        else
            printf "Redis is \033[1;32;32mrunning\033[0m ($PID)\n"
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac
# 若是沒報錯的話,說明成功,能夠用
chkconfig --add redis

# 啓動redis服務器
service redis start
# 開機自啓
chkconfig redis on
# 查看是否啓動成功
ps -ef | grep redis
  • CentOS 7systemd服務

/usr/lib/systemd/system目錄下建立redis.service文件, 權限爲root.root 755, 輸入如下內容, 將ExecStart後面的執行路徑修改成本身的路徑:

[Unit]
Description=Redis persistent key-value database
After=network.target

[Service]
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf --daemonize yes
ExecStop=/usr/local/redis/bin/redis-cli -a password -p 6379 shutdown
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target

而後建立/usr/libexec/redis-shutdown文件, 輸入如下內容, 記得將REDIS_CLICONFIG_FILE修改成本身的路徑:

#!/bin/bash
#
# Wrapper to close properly redis and sentinel
test x"$REDIS_DEBUG" != x && set -x

REDIS_CLI=/usr/local/redis/bin/redis-cli

# Retrieve service name
SERVICE_NAME="$1"
if [ -z "$SERVICE_NAME" ]; then
   SERVICE_NAME=redis
fi

# Get the proper config file based on service name
CONFIG_FILE="/usr/local/redis/etc/$SERVICE_NAME.conf"

# Use awk to retrieve host, port from config file
HOST=`awk '/^[[:blank:]]*bind/ { print $2 }' $CONFIG_FILE | tail -n1`
PORT=`awk '/^[[:blank:]]*port/ { print $2 }' $CONFIG_FILE | tail -n1`
PASS=`awk '/^[[:blank:]]*requirepass/ { print $2 }' $CONFIG_FILE | tail -n1`
SOCK=`awk '/^[[:blank:]]*unixsocket\s/ { print $2 }' $CONFIG_FILE | tail -n1`

# Just in case, use default host, port
HOST=${HOST:-127.0.0.1}
if [ "$SERVICE_NAME" = redis ]; then
    PORT=${PORT:-6379}
else
    PORT=${PORT:-26739}
fi

# Setup additional parameters
# e.g password-protected redis instances
[ -z "$PASS"  ] || ADDITIONAL_PARAMS="-a $PASS"

# shutdown the service properly
if [ -e "$SOCK" ] ; then
    $REDIS_CLI -s $SOCK $ADDITIONAL_PARAMS shutdown
else
    $REDIS_CLI -h $HOST -p $PORT $ADDITIONAL_PARAMS shutdown
fi

修改/usr/libexec/redis-shutdown權限, chmod 755 /usr/libexec/redis-shutdown

從新載入systemd, 掃描新的或有變更的service, systemctl daemon-reload

開機自啓, systemctl enable redis

相關文章
相關標籤/搜索