服务器架设篇-----CentOS安装Redis-2.8.19

参考文章

扩展阅读:

检查下面依赖是否安装,如果没有要先安装,不然会有异常。

[root@webserver ~]# yum installgcc-c++
[root@webserver ~]# yum install -y tcl

1、安装 http://redis.io/download

[root@webserver ~]# wget http://download.redis.io/releases/redis-2.8.19.tar.gz
[root@webserver ~]# tar xzf redis-2.8.19.tar.gz       # 解压文件
[root@webserver ~]# mv redis-2.8.19 /usr/local/redis  # 
[root@webserver ~]# cd /usr/local/redis               # 进入redis目录
[root@webserver ~]# make                              # 编译
[root@webserver ~]# make install                      # 安装

安装完之后,会在src目录下生成几个可执行文件,分别是

mkreleasehdr.sh     # 
redis-benchmark     # Redis性能测试工具,测试Redis在当前系统下的读写性能
redis-check-aof     # 数据修复
redis-check-dump    # 检查导出工具
redis-cli           # 进入Redis客户端的,可以用telnet根据其纯文本协议来操作
redis-sentinel      # 
redis-server        # 启动Redis服务的

Redis配置文件

[root@webserver ~]# mkdir -p /usr/local/redis/bin               # 设置配置文件路径
[root@webserver ~]# cp /usr/local/redis/redis.conf /usr/local/redis/bin #
[root@webserver ~]# mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-sentinel redis-server /usr/local/redis/bin
[root@webserver ~]# vi /usr/local/redis/bin/redis.conf          # 修改配置文件
    仅修改: daemonize yes    #这里只简单的将daemonize参数设置为yes,目的是将Redis服务设置为后台开启,这样服务开启后就不会占用当前session了

redis.conf的主要配置参数

daemonize yes                           # 是否以后台daemon方式运行,默认情况下,redis不是在后台运行的,如果需要在后台运行,把该项的值更改为yes
pidfile /usr/local/redis/var/redis.pid  # pid文件位置,默认会把pid文件放在/var/run/redis.pid,当运行多个redis服务时,需要指定不同的pid文件和端口
bind        #指定Redis只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求,在生产环境中最好设置该项。
port 6379                               # 监听的端口号
timeout 300                             # 设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接
loglevel debug                          # log信息级别,分为debug|verbose|notice|warning4级。生产环境下一般开启notice。
logfile /usr/local/redis/var/redis.log  # log文件位置,默认使用标准输出,即打印在命令行终端的窗口上
databases 16     # 开启数据库的数量,可以使用SELECT 命令来切换数据库。默认使用的数据库是0
save * *   #保存快照的频率,第一个*表示多长时间,第二个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
save 900 1       # 在900秒之内有1个keys发生变化时
save 300 10      # 在300秒之内有10个keys发生变化时
save 60 10000    # 在60秒之内有10000个keys发生变化时
rdbcompression yes          # 在进行镜像备份时,是否进行压缩
dbfilename dump.rdb         # 镜像备份文件的文件名(只是文件名,不包括目录)
dir /usr/local/redis/var/   # 数据快照的保存目录(这个是目录)
slaveof <masterip> <masterport>    #设置该数据库为其他数据库的从数据库
masterauth <master-password>       #当主数据库连接需要密码验证时,在这里指定
requirepass <password>             #设置客户端连接后进行任何其他指定前需要使用的密码。警告:因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150K次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解
maxclients 128           #限制同时连接的客户数量,默认不限制。当连接数超过这个值时,redis将不再接收其他连接请求,客户端尝试连接时将收到error信息
maxmemory <bytes>        #设置redis能够使用的最大内存。当内存满了的时候,如果还接收到set命令,redis将先尝试剔除设置过expire信息的key,而不管该key的过期时间还没有到达。在删除时,将按照过期时间进行删除,最早将要被过期的key将最先被删除。如果带有expire信息的key都删光了,那么将返回错误。这样,redis将不再接收写请求,只接收get请求。maxmemory的设置比较适合于把redis当作于类似memcached的缓存来使用。

appendonly no           # 是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。默认情况下,redis会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁,如果发生诸如拉闸限电、拔插头等状况,那么将造成比较大范围的数据丢失。所以redis提供了另外一种更加高效的数据库备份及灾难恢复方式。开启append only模式之后,redis会把所接收到的每一次写操作请求都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态。但是这样会造成appendonly.aof文件过大,所以redis还支持了BGREWRITEAOF指令,对appendonly.aof进行重新整理。所以我认为推荐生产环境下的做法为关闭镜像,开启appendonly.aof,同时可以选择在访问较少的时间每天对appendonly.aof进行重写一次。
appendfsync always      # 设置对appendonly.aof文件进行同步的频率,(三个选项,分别是always表示每次有写操作都进行同步、everysec表示对写操作进行累积,每秒同步一次、no 不调用fsync等待系统自己同步)
vm-enabled              # 是否开启虚拟内存支持,默认值为no。因为redis是一个内存数据库,而且当内存满的时候,无法接收新的写请求,所以在redis 2.0中,提供了虚拟内存的支持。但是需要注意的是,redis中,所有的key都会放在内存中,在内存不够时,只会把value值放入交换区。这样保证了虽然使用虚拟内存,但性能基本不受影响,同时,你需要注意的是你要把vm-max-memory设置到足够来放下你的所有的key
vm-swap-file             # 设置虚拟内存的交换文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享
vm-max-memory 0          # 将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的 (Redis的索引数据就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0
vm-page-size 32          #
vm-pages 134217728       #
vm-max-threads 4         #
glueoutputbuf yes        # 把小的输出缓存放在一起,以便能够在一个TCP packet中为客户端发送多个响应,具体原理和真实效果我不是很清楚。所以根据注释,你不是很确定的时候就设置成yes
hash-max-zipmap-entries 64   #在redis 2.0中引入了hash数据结构。当hash中包含超过指定元素个数并且最大的元素没有超过临界时,hash将以一种特殊的编码方式(大大减少内存使用)来存储,这里可以设置这两个临界值
hash-max-zipmap-value 512 # activerehashing # 是否重置Hash表,开启之后,redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。当你的使用场景中,有非常严格的实时性需要,不能够接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存 shareobjects no # shareobjectspoolsize 1024#

注意:Redis官方文档对VM的使用提出了一些建议:

  • 当你的key很小而value很大时,使用VM的效果会比较好.因为这样节约的内存比较大.
  • 当你的key不小时,可以考虑使用一些非常方法将很大的key变成很大的value,比如你可以考虑将key,value组合成一个新的value.
  • 最好使用linux ext3 等对稀疏文件支持比较好的文件系统保存你的swap文件.
  • vm-max-threads这个参数,可以设置访问swap文件的线程数,设置最好不要超过机器的核数.如果设置为0,那么所有对swap文件的操作都是串行的.可能会造成比较长时间的延迟,但是对数据完整性有很好的保证.

启动

[root@webserver ~]# /usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
[root@webserver ~]# ps -ef | grep redis                # 查看启动
[root@webserver ~]# vi /etc/rc.local                                 # 将Redis作为 Linux 服务随机启动
  /usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf  #新增一行

使用

[root@webserver ~]# /usr/local/redis/bin/redis-cli
  >set name carey
   OK
  >get name
   carey
[root@webserver ~]# /usr/local/redis/bin/redis-cli shutdown  # 关闭客户端
如果端口变化可以指定端口 /usr/local/redis/bin/redis-cli -p 6380 shutdown

保存/备份

数据备份可以通过定期备份该文件实现。因为redis是异步写入磁盘的,如果要让内存中的数据马上写入硬盘可以执行如下命令:

[root@webserver ~]# /usr/local/redis/bin/redis-cli save
或者(指定端口)
[root@webserver ~]# /usr/local/redis/bin/redis-cli -p 6380 save

注意,以上部署操作需要具备一定的权限,比如复制和设定内核参数等。

执行redis-benchmark命令时也会将内存数据写入硬盘。

自启动

从此处下载脚本 下载 声明:此脚本来自网络,经过简单修改,已测,可用。

用这个脚本管理之前,需要先配置下面的内核参数,否则Redis脚本在重启或停止redis时,将会报错,并且不能自动在停止服务前同步数据到磁盘上:

[root@webserver ~]# vi /etc/sysctl.conf
      vm.overcommit_memory = 1
然后应用生效:
[root@webserver ~]# sysctl -p
然后增加服务并开机自启动:
[root@webserver ~]# chmod 755 /etc/init.d/redis
[root@webserver ~]# chkconfig --add redis
[root@webserver ~]# chkconfig --level 345 redis on
[root@webserver ~]# chkconfig --list redis

Redis主从配置

参考文章:

  • http://www.cnblogs.com/liuling/p/2014-4-19-02.html

Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构。

按上面步骤安装Savle

修改配置文件

[root@webserver ~]# vi /usr/local/redis/bin/redis.conf
 slaveof 192.168.1.MasterIP 6379  # 映射到master服务器上
 masterauth admin                 # 如果master设置了验证密码,还需配置masterauth 

配置完之后启动slave的Redis服务

异常

zmalloc.h:51:31:error: jemalloc/jemalloc.h: No such file or directory

异常原因:一些编译依赖或原来编译遗留出现的问题
解决方案:make distclean。清理一下,然后再make。

在make成功以后,需要make test。在make test出现异常。
couldn'texecute "tclsh8.5": no such file or directory

异常原因:没有安装tcl
如果不先安装tcl在编译redis的时候,执行make test 会报以下错误,这步也可以省略,不执行make test 直接执行make install 对redis的启动和关闭没有什么影响。

[root@localhostredis]# make test
cd src &&make test
make[1]: Enteringdirectory `/usr/local/webserver/redis/src'
You need tcl 8.5 ornewer in order to run the Redis test
make[1]: *** [test]Error 1
make[1]: Leavingdirectory `/usr/local/webserver/redis/src'
make: *** [test]Error 2
posted @ 2015-01-22 16:40  cjky  阅读(325)  评论(0编辑  收藏  举报