====== Redis数据库的安装和配置 ======
[[http://redis.io/|Redis]]是一个高性能的开源key-value数据库,本文讲述在[[http://www.centos.org/|CentOS]]下Redis的安装配置过程。
===== 安装方式 =====
安装方式有很多种,最直接的就是从源代码编译安装。Redis是用纯C编写的,而且不依赖其他库文件,所以编译非常顺利。
但这种方式存在几个问题:
* 生产系统出于安全需要可能不会安装开发工具,无法编译;
* 可能会与具体发行版的包管理机制冲突;
* 需要人工跟踪所有安装文件,以应对将来的维护和升级。
理想的方式是通过发行版的包管理器进行安装。CentOS的官方仓库虽然没有Redis,但第三方仓库[[https://fedoraproject.org/wiki/EPEL|EPEL]]里有,启用EPEL源后,就可以通过YUM安装了。
当然,仓库里的软件版本或多或少都存在滞后的问题,在这快速迭代的时代,问题有时会非常严重到无法忍受。
如果你需要新版本的软件,又不想失去发行版包管理机制的便利,一个折衷的方法是自己构建软件安装包。CentOS的包格式是RPM,下面我们就来制作Redis的RPM包。
===== RPM包制作 =====
制作rpm的工具是[[http://www.rpm.org/max-rpm-snapshot/rpmbuild.8.html|rpmbuild]],主要的工作量是编写软件的spec,以指导rpmbuild编译打包,详细方法可在[[http://www.rpm.org/|rpm.org]]上找到。
不过,稍等,我们不需要从头造轮子。前面提到,EPEL上有Redis的旧版本软件,我们完全可以在它的基础上修改使用。
从EPEL获取Redis的源代码包,比如redis-2.4.10-1.el6.src.rpm,链接[[http://dl.fedoraproject.org/pub/epel/6/SRPMS/repoview/redis.html]]。
用rpm命令安装:
rpm -i redis-2.4.10-1.el6.src.rpm
完毕会生成一个rpmbuild目录,我们看看目录里的内容:
rpmbuild/SOURCES
rpmbuild/SOURCES/redis-2.4.10.tar.gz
rpmbuild/SOURCES/redis-2.4.8-redis.conf.patch
rpmbuild/SOURCES/redis.logrotate
rpmbuild/SOURCES/redis.init
rpmbuild/SPECS
rpmbuild/SPECS/redis.spec
接下来,我们首先从Redis官网下载最新的源代码包,如redis-2.6.14.tar.gz,替换SOURCES子目录下的redis-2.4.10.tar.gz。
在一个临时目录下解开redis-2.6.14.tar.gz,对其中的redis.conf进行所需的修改,完毕用diff命令生成patch文件redis-2.6.14-redis.conf.patch,替换SOURCES子目录下的redis-2.4.8-redis.conf.patch。
patch文件内容如下(你可以进行自己的定制):
--- redis-2.6.14/redis.conf.orig 2013-08-06 11:52:04.086999514 +0800
+++ redis-2.6.14/redis.conf 2013-08-06 11:53:34.225999518 +0800
@@ -14,11 +14,11 @@
# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
-daemonize no
+daemonize yes
# When running daemonized, Redis writes a pid file in /var/run/redis.pid by
# default. You can specify a custom pid file location here.
-pidfile /var/run/redis.pid
+pidfile /var/run/redis/redis.pid
# Accept connections on the specified port, default is 6379.
# If port 0 is specified Redis will not listen on a TCP socket.
@@ -27,7 +27,7 @@ port 6379
# If you want you can bind a single interface, if the bind option is not
# specified all the interfaces will listen for incoming connections.
#
-# bind 127.0.0.1
+bind 127.0.0.1
# Specify the path for the unix socket that will be used to listen for
# incoming connections. There is no default, so Redis will not listen
@@ -66,7 +66,7 @@ loglevel notice
# Specify the log file name. Also 'stdout' can be used to force
# Redis to log on the standard output. Note that if you use standard
# output for logging but daemonize, logs will be sent to /dev/null
-logfile stdout
+logfile /var/log/redis/redis.log
# To enable logging to the system logger, just set 'syslog-enabled' to yes,
# and optionally update the other syslog parameters to suit your needs.
@@ -150,7 +150,7 @@ dbfilename dump.rdb
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
-dir ./
+dir /var/lib/redis/
################################# REPLICATION #################################
最后修改redis.spec,替换版本号等基本信息:
5c5
< Version: 2.4.10
---
> Version: 2.6.14
16c16
< Patch0: %{name}-2.4.8-redis.conf.patch
---
> Patch0: %{name}-2.6.14-redis.conf.patch
91c91
< %doc 00-RELEASENOTES BUGS CONTRIBUTING COPYING README TODO
---
> %doc 00-RELEASENOTES BUGS CONTRIBUTING COPYING MANIFESTO README
至此,准备工作完毕,执行rpmbuild编译构建:
cd rpmbuild/SPECS/
rpmbuild -bb redis.spec
生成的安装包在:rpmbuild/RPMS/x86_64/redis-2.6.14-1.el6.x86_64.rpm。
===== 配置 =====
在目标机器上安装:
rpm -i redis-2.6.14-1.el6.x86_64.rpm
相关文件位置:
* 配置文件:/etc/redis.conf
* 启动脚本:/etc/rc.d/init.d/redis
* 数据库目录:/var/lib/redis
* 日志目录:/var/log/redis
启动数据库服务:
service redis start
Redis对进程同时打开的文件数量有要求,并期望设置内核参数vm.overcommit_memory,这些信息可从日志/var/log/redis/redis.log中获得。
编辑/etc/security/limits.conf,设置redis用户(redis服务进程的id)的打开文件上限:
redis hard nofile 10032
编辑/etc/sysctl.conf,设置:
vm.overcommit_memory = 1
完毕。
{{tag>Redis}}