响水凹

欢迎来到 Guang-Wen Duan (Dennis Duan) 的个人 Wiki

用户工具

站点工具


computer:net:redis

Redis数据库的安装和配置

Redis是一个高性能的开源key-value数据库,本文讲述在CentOS下Redis的安装配置过程。

安装方式

安装方式有很多种,最直接的就是从源代码编译安装。Redis是用纯C编写的,而且不依赖其他库文件,所以编译非常顺利。

但这种方式存在几个问题:

  • 生产系统出于安全需要可能不会安装开发工具,无法编译;
  • 可能会与具体发行版的包管理机制冲突;
  • 需要人工跟踪所有安装文件,以应对将来的维护和升级。

理想的方式是通过发行版的包管理器进行安装。CentOS的官方仓库虽然没有Redis,但第三方仓库EPEL里有,启用EPEL源后,就可以通过YUM安装了。

当然,仓库里的软件版本或多或少都存在滞后的问题,在这快速迭代的时代,问题有时会非常严重到无法忍受。

如果你需要新版本的软件,又不想失去发行版包管理机制的便利,一个折衷的方法是自己构建软件安装包。CentOS的包格式是RPM,下面我们就来制作Redis的RPM包。

RPM包制作

制作rpm的工具是rpmbuild,主要的工作量是编写软件的spec,以指导rpmbuild编译打包,详细方法可在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

完毕。

computer/net/redis.txt · 最后更改: 2014/11/01 02:02 由 127.0.0.1