作者:北京运维

1. 安装环境说明

  • OS 版本:CentOS 7.5.1804
  • Redis 版本:redis-3.2.12

Redis 下载页面:http://download.redis.io/releases/

Redis 版本号第 2 位,如果是奇数,则为非稳定版本(例如 2.7、2.9、3.1)如果是偶数为稳定版本(例如 2.8、3.0、3.2)

2. 下载安装 Redis

$ 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 检查版本:

$ 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

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 脚本实现功能说明

  1. 运行 init 脚本自动创建 Redis 实例(单实例或多实例);
  2. 根据模板文件 redis.conf.tpl 生成 Redis 配置文件;
  3. 软链接 redis_scripts 脚本到 /etc/init.d/目录下为对应端口实例的启动脚本;
  4. 运行 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=/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

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

创建 redis_chkmult.cfg 用于记录上次创建 Redis 实例

$ vim /usr/local/redis/redis_chkmult.cfg
PORTS="6381"
SLAVE_CHK="true"

4.5 uninit 脚本

$ 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

4.5 验证 init 脚本

创建一个 Redis 实例,端口为 6383

4.6 验证 uninit 脚本

删除 6383 实例

Redis 单机和多实例部署的更多相关文章

  1. Redis单机配置多实例,实现主从同步

    版权声明:本文为博主原创文章,欢迎转载,转载请保留或注明出处 本文转自:http://www.cnblogs.com/lgeng/p/6623336.html 一,单机多实例:Redis官网: htt ...

  2. Mysql 数据库单机多实例部署手记

        最近的研发机器需要部署多个环境,包括数据库.为了管理方便考虑将mysql数据库进行隔离,即采用单机多实例部署的方式.找了会资料发现用的人也不是太多,一般的生产环境为了充分发挥机器性能都是单机单 ...

  3. redis安装,修改配置文件,多实例部署 redis-server

    redis 安装 解压: [root@Aliyun software]# tar -xvf redis-3.2.11.tar.gz 进入redis根目录: [root@Aliyun software] ...

  4. tomcat单机多实例部署

    最近在面试的过程中,一家公司在面试时提到了有关tomcat单机多实例部署的提问, 正好, 之前使用IntelliJ IDEA 13.1.4这款IDE开发web项目,在开发的过程中,因为有多个web项目 ...

  5. solr单机多实例部署文件锁冲突解决的方法

    给出一个有问题的单机多tomcat实例引用同一个solr实例部署图. 这样的部署必定造成一个问题.启动第二个tomcat实例时,一定会报索引目录文件锁已经被占用. 最初的解决的方法是.有多少个tomc ...

  6. MYSQL 5.5.32的单机多实例部署

    Centos6.6安装并配置单机多实例的MYSQL数据库 本文介绍安装单机多实例的MYSQL数据库的环境如下: 系统平台环境:Centos6.6 Mysql软件包:Mysql-5.5.32.tar.g ...

  7. Redis学习笔记之Redis单机,伪集群,Sentinel主从复制的安装和配置

    0x00 Redis简介 Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure server). Redis的键值 ...

  8. Redis 单机模式,主从模式,哨兵模式(sentinel),集群模式(cluster),第三方模式优缺点分析

    Redis 的几种常见使用方式包括: 单机模式 主从模式 哨兵模式(sentinel) 集群模式(cluster) 第三方模式 单机模式 Redis 单副本,采用单个 Redis 节点部署架构,没有备 ...

  9. redis从入门到放弃 -> 部署方案

    单点部署方案 环境准备: [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@ ...

随机推荐

  1. Azure 中快速搭建 FTPS 服务

    FTP,FTPS 与 SFTP 的区别 FTP (File Transfer Protocol)是一种常用的文件传输协议,在日常工作中被广泛应用.不过,FTP 协议使用明文传输.如果文件传输发生在公网 ...

  2. Facebook POP 使用指南

    Facebook POP 使用指南 Pop是一个动画引擎,用以扩展iOS.OSX的动画类型.相较于iOS.OSX中的基本动画效果,Pop扩展后支持弹簧动画效果与衰减动画效果,你可以用Pop动画引擎来构 ...

  3. [翻译] MAThemeKit

    MAThemeKit https://github.com/mamaral/MAThemeKit MAThemeKit provides iOS developers the ability to c ...

  4. 提升PHP速度

    PHP的优点之一是速度很快,对于一般的网站应用,可以说是已经足够了.不过如果站点的访问量很高.带宽窄或者其它的因素令服务器产生性能瓶颈的时候,你可能得想想其它的办法来进一步提高PHP的速度了.这篇文章 ...

  5. 阿里云 CentOS 镜像和 EPEL 源

    配置阿里云网络yum源 阿里云镜像源地址http://mirrors.aliyun.com/ 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.re ...

  6. codeforces 453C Little Pony and Summer Sun Celebration

    codeforces 453C Little Pony and Summer Sun Celebration 这道题很有意思,虽然网上题解很多了,但是我还是想存档一下我的理解. 题意可以这样转换:初始 ...

  7. java @XmlTransient与@Transient区别

    1.@XmlTransient a.@XmlTransient 注解解决 JavaBean 属性名称与字段名称之间的名称冲突,或者用于防止字段/属性的映射 b.阻止将 JavaBean 属性映射到 X ...

  8. [HNOI2010]公交线路

    题目 发现\(n\)比较大,但是\(k,p\)都很小,考虑矩乘使得复杂度倾斜一下 发现所有车的最大间隔都是\(p\),还保证\(k<p\),于是我们可以考虑压下最后\(p\)位的情况 于是设\( ...

  9. Python 多线程 使用线程 (二)

    Python中实现多线程需要使用到 threading 库,其中每一个 Thread类 的实例控制一个线程. Thread类 #类签名 def __init__(self, group=None, t ...

  10. 基于LNMP的小米电子商务网站平台

    项目参考:http://www.cnblogs.com/along21/p/7822228.html 基于LNMP的小米电子商务网站平台 1.环境 setenforce 0 #关闭selinux sy ...