做者:北京運維node
Redis 下載頁面:http://download.redis.io/releases/redis
Redis 版本號第 2 位,若是是奇數,則爲非穩定版本(例如 2.七、2.九、3.1)若是是偶數爲穩定版本(例如 2.八、3.0、3.2)vim
$ cd /usr/local/ $ wget http://download.redis.io/releases/redis-3.2.12.tar.gz $ tar xf redis-3.2.12.tar.gz $ ln -sv redis-3.2.12 redis $ cd redis $ make $ make install
安裝完成後再任意目錄下執行 redis-cli -v 檢查版本:bash
$ redis-cli -v redis-cli 3.2.12
Redis 安裝完成後,src 和 /usr/local/bin/ 目錄下多了幾個 redis 開頭的可執行文件:服務器
$ ls /usr/local/bin/redis-* /usr/local/bin/redis-benchmark /usr/local/bin/redis-check-rdb /usr/local/bin/redis-sentinel /usr/local/bin/redis-check-aof /usr/local/bin/redis-cli /usr/local/bin/redis-server
可執行文件 | 做用 |
---|---|
redis-server | 啓動 Redis |
redis-cli | Redis 命令行客戶端 |
redis-benchmark | Redis 基準測試工具 |
redis-check-aof | Redis AOF 持久化文件檢測和修復工具 |
redis-check-rdb | Redis RDB 持久化文件檢測和修復工具 |
redis-sentinel | 啓動 Redis Sentinel (哨兵模式) |
Redis 目錄下都會有一個 redis.conf 的配置文件,裏面就是 redis 的默認配置,一般咱們會在一臺服務器上啓動多個 redis 實例,而且集中將配置管理在指定目錄下,並且不是徹底手動配置的,而是將 redis.conf 做爲模板進行修改。app
redis 的基礎配置運維
配置名 | 配置說明 |
---|---|
port | 端口 |
logfile | 日誌文件 |
dir | Redis 工做目錄(存放持久化文件和日誌文件) |
daemonize | 是否已守護進程方式啓動 Redis(yes 或 no) |
複製 redis.conf 配置文件到指定目錄,修改默認端口,而且以守護進程方式運行 Redis:tcp
$ mkdir /etc/redis $ cp redis.conf /etc/redis/redis_6381.conf $ vim /etc/redis/redis_6381.conf # 默認端口爲 6379 port 6381 # 定義 Redis 日誌文件路徑,默認爲空 logfile "/data/redis/logs/redis_6381.log" # 定義 Redis 持久化文件路徑,默認爲 `./` 當前目錄 dir /data/redis # 定義已守護進程方式啓動 Redis,默認爲 no daemonize yes # 定義 pid 文件,默認爲 redis_6379.pid pidfile /var/run/redis_6381.pid # 定義 RDB 持久化文件名,默認爲 dump.rdb dbfilename 6381.rdb # 定義 AFO 持久化文件名,默認爲 appendonly.aof appendfilename "6381.aof" $ mkdir -pv /data/redis/logs/
$ redis-server /etc/redis/redis_6381.conf
驗證 Redis 是否啓動成功:工具
$ ss -tnlp | grep 6381
Redis 單機多實例部署方法十分簡單,只要複製多個 redis 配置文件便可。須要注意每一個實例的端口不能衝突。基於上面的例子,在複製一份 redis 配置文件監聽在 6382 端口。測試
$ cp redis.conf /etc/redis/redis_6382.conf $ vim /etc/redis/redis_6382.conf port 6382 daemonize yes pidfile /var/run/redis_6382.pid logfile "/data/redis/logs/redis_6382.log" dbfilename 6382.rdb dir /data/redis appendfilename "6382.aof"
啓動 6382 實例:
$ redis-server /etc/redis/redis_6382.conf
驗證 6382 實例是否啓動:
$ ss -tnlp | grep 6382
注意:該腳本依賴於本文 Redis 安裝方式,其它方式自行修改。
redis.conf.tpl 模板文件中 REDISPORT 會在 init 腳本執行時替換爲傳入的端口號。
$ vim /usr/local/redis/redis.conf.tpl daemonize yes # 定義 PID 文件路徑 pidfile /var/run/redis_REDISPORT.pid bind 127.0.0.1 protected-mode no # 定義 Redis 端口 port REDISPORT tcp-backlog 20000 timeout 30 tcp-keepalive 0 loglevel notice # 定義日誌文件路徑 logfile /data/redis/logs/redis_REDISPORT.log databases 16 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes # 定義 RDB 文件 dbfilename REDISPORT.rdb dir /data/redis/ slave-serve-stale-data yes slave-read-only yes repl-timeout 300 repl-disable-tcp-nodelay no repl-backlog-size 1024mb repl-backlog-ttl 0 slave-priority 100 maxmemory 20G maxmemory-policy noeviction appendonly yes # 定義 AOF 持久化文件名 appendfilename REDISPORT.aof appendfsync everysec no-appendfsync-on-rewrite yes auto-aof-rewrite-percentage 0 auto-aof-rewrite-min-size 1024mb lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-entries 512 list-max-ziplist-value 64 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10
$ vim /usr/local/redis/redis_scripts #!/bin/sh ## ## redis - this script starts and stops the redis daemin ## ## chkconfig: - 52 15 ## description: Simple Redis init.d script conceived to work on Linux systems \ MYNAM=`basename "$0"` REDISPORT=`echo ${MYNAM} | awk -F'_' '{print $2}'` if [ -z "${REDISPORT}" ] ; then REDISPORT=6379 fi EXEC=/usr/local/bin/redis-server CLIEXEC=/usr/local/bin/redis-cli PROG=$(basename $EXEC) PIDFILE=/var/run/redis_${REDISPORT}.pid CONF="/etc/redis/redis_${REDISPORT}.conf" [ -x $EXEC ] || exit 5 [ -f $CONF ] || exit 6 case "$1" in start) if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed" else echo "Starting Redis server..." $EXEC $CONF fi ;; stop) if [ ! -f $PIDFILE ] then echo "$PIDFILE does not exist, process is not running" else PID=$(cat $PIDFILE) echo "Stopping ..." $CLIEXEC -p $REDISPORT shutdown while [ -x /proc/${PID} ] do echo "Waiting for Redis to shutdown ..." sleep 1 done echo "Redis stopped" fi ;; *) echo "Please use start or stop as first argument" ;; esac $ chmod +x /usr/local/redis/redis_scripts.sh
$ vim /usr/local/redis/init.sh #!/bin/sh # # define restricted path PATH="/bin:/usr/bin:/sbin:/usr/sbin" # adirname - return absolute dirname of given file adirname() { odir=`pwd`; cd `dirname $1`; pwd; cd "${odir}"; } # --------- # constants # --------- MYNAM=`basename "$0"` MYDIR=`adirname "$0"` MYTMP="${MYDIR}/../tmp" MYLCK="${MYTMP}/${MYNAM}.lock" PORTS=(${1//,/ }) for PORT in ${PORTS[@]} do cp redis.conf.tpl /etc/redis/redis_${PORT}.conf sed -i "s/REDISPORT/${PORT}/g" /etc/redis/redis_${PORT}.conf # 連接啓動腳本對應本次生成實例的端口 ln -s redis_scripts redis_${PORT} # 連接啓動腳本到 /etc/init.d/ ln -s /usr/local/redis/redis_${PORT} /etc/init.d/redis_${PORT} # 啓動 redis /etc/init.d/redis_${PORT} start done # 記錄上一次建立 Redis 實例的端口號 vi /usr/local/redis/redis_chkmult.cfg $ chmod +x /usr/local/redis/init.sh
建立 redis_chkmult.cfg 用於記錄上次建立 Redis 實例
$ vim /usr/local/redis/redis_chkmult.cfg PORTS="6381" SLAVE_CHK="true"
$ vim /usr/local/redis/uninit.sh #!/bin/sh # # define restricted path PATH="/bin:/usr/bin:/sbin:/usr/sbin" # adirname - return absolute dirname of given file adirname() { odir=`pwd`; cd `dirname $1`; pwd; cd "${odir}"; } # --------- # constants # --------- MYNAM=`basename "$0"` MYDIR=`adirname "$0"` MYTMP="${MYDIR}/../tmp" MYLCK="${MYTMP}/${MYNAM}.lock" PORTS=(${1//,/ }) vi /usr/local/redis/redis_chkmult.cfg for PORT in ${PORTS[@]} do /etc/init.d/redis_${PORT} stop sudo rm -rf /etc/init.d/redis_${PORT} sudo rm -rf /usr/local/redis/redis_${PORT} sudo rm -rf /etc/redis/redis_${PORT}.conf sudo rm -rf /data/redis/logs/redis_${PORT}.* sudo rm -rf /data/redis/${PORT}.* done $ chmod +x /usr/local/redis/uninit.sh
建立一個 Redis 實例,端口爲 6383
刪除 6383 實例