====== 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}}