OS 版本:CentOS 7.5.1804
Redis 版本:redis-3.2.12
Redis 下载页面:
Redis 版本号第 2 位,如果是奇数,则为非稳定版本(例如 2.7、2.9、3.1)如果是偶数为稳定版本(例如 2.8、3.0、3.2)
2. 下载安装 Redis $ cd /usr/local/ $ wget $ tar xf redis-3.2.12.tar.gz $ ln -sv redis-3.2.12 redis $ cd redis $ make $ make install安装完成后再任意目录下执行 redis-cli -v 检查版本:
$ redis-cli -v redis-cli 3.2.12Redis 安装完成后,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 2.1 可执行文件说明 可执行文件 作用redis-server 启动 Redis
redis-cli Redis 命令行客户端
redis-benchmark Redis 基准测试工具
redis-check-aof Redis AOF 持久化文件检测和修复工具
redis-check-rdb Redis RDB 持久化文件检测和修复工具
redis-sentinel 启动 Redis Sentinel (哨兵模式)
2.2 Redis 的基础配置
Redis 目录下都会有一个 redis.conf 的配置文件,里面就是 redis 的默认配置,通常我们会在一台服务器上启动多个 redis 实例,并且集中将配置管理在指定目录下,而且不是完全手动配置的,而是将 redis.conf 作为模板进行修改。
redis 的基础配置
配置名 配置说明port 端口
logfile 日志文件
dir Redis 工作目录(存放持久化文件和日志文件)
daemonize 是否已守护进程方式启动 Redis(yes 或 no)
2.3 启动 Redis 2.3.1 准备 Redis 配置文件
复制 redis.conf 配置文件到指定目录,修改默认端口,并且以守护进程方式运行 Redis:
$ 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/ 2.3.2 启动 Redis $ redis-server /etc/redis/redis_6381.conf验证 Redis 是否启动成功:
$ ss -tnlp | grep 6381 3. Redis 单机多实例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 4. Redis 自动化创建实例脚本 4.1 脚本实现功能说明运行 init 脚本自动创建 Redis 实例(单实例或多实例);
根据模板文件 redis.conf.tpl 生成 Redis 配置文件;
软链接 redis_scripts 脚本到 /etc/init.d/目录下为对应端口实例的启动脚本;
运行 uninit 脚本卸载指定 Redis 实例
注意:该脚本依赖于本文 Redis 安装方式,其它方式自行修改。
4.2 配置文件模板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 4.3 Redis 启动脚本模板 $ 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=http://www.likecs.com/usr/local/bin/redis-server CLIEXEC=http://www.likecs.com/usr/local/bin/redis-cli PROG=$(basename $EXEC) PIDFILE=http://www.likecs.com/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 4.4 init 脚本 $ 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