Reis的介绍:

Redis 是完全开源免费的,遵守BSD协议,先进的key - value持久化产品。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 有序集合(sorted sets)等类型。

安装:

wget http://redis.googlecode.com/files/redis-2.8.3.tar.gz wget http://fossies.org/linux/misc/redis-2.8.3.tar.gz tar xzf redis-2.8.3.tar.gz cd redis-2.8.3 make && make install && echo “install redis ok”

复制配置文件:

cp redis.conf  /etc/ sed -i "/daemonize/s/no/yes/" /etc/redis.conf sed -i "/# bind 127.0.0.1/s/#bind/bind/" /etc/redis.conf sed -i "/logfilestdout/s/stdout/\/var\/log\/redis.log/" /etc/redis.conf sed -i "/dir.\//s/.\//\/work\/redis/" /etc/redis.conf sed -i"/dbfilename/s/dump.rdb/\/work\/redis\/dump.rdb/" /etc/redis.conf sed -i "/appendonly no/s/no/yes/"/etc/redis.conf sed -i "/no-appendfsync-on-rewrite no/s/no-appendfsync-on-rewriteno/no-appendfsync-on-rewrite yes/" /etc/redis.conf cd .. mv redis-2.8.3 /work/redis

启动redis

/usr/local/bin/redis-server  /etc/redis.conf

Redi的连接操作:

Redi的停止

/usr/local/bin/redis-cli  shutdown

Redis数据的可持久化

 

Redis的持久化分为RDB快照和AOF操作日志

RDB快照。Redis支持将当前数据的快照存成一个数据文件的持久化机制。而一个持续写入的数据库如何生成快照呢。Redis借助了fork命令的copy on write机制。在生成快照时,将当前进程fork出一个子进程,然后在子进程中循环所有的数据,将数据写成为RDB文件。

我们可以通过Redissave指令来配置RDB快照生成的时机,比如你可以配置当10分钟以内有100次写入就生成快照,也可以配置当1小时内有1000次写入就生成快照,也可以多个规则一起实施。这些规则的定义就在Redis的配置文件中,你也可以通过RedisCONFIG SET命令在Redis运行时设置规则,不需要重启Redis

RDB文件的备份:

#!/bin/bash #redis for RDB backup cd /work/redisback date=`date +'%Y-%m-%d'` #/bin/sync #Filename=redis_RDB_$date.tar.gz #echo $Filename /usr/local/bin/redis-cli  -h 127.0.0.1 -p 6379  save > /dev/null 2>&1 if [ $? -eq 0 ] then        tar -Pzcvf redis_RDB_$date.tar.gz /work/redis/dump.rdb fi #cd /redisback #/redisback/ftp.sh #cd /redisback ftp -A -n <

AOF日志

aof日志的全称是append only file,从名字上我们就能看出来,它是一个追加写入的日志文件。与一般数据库的binlog不同的是,AOF文件是可识别的纯文本,它的内容就是一个个的Redis标准命令

打开配置文件

appendonly yes appendfsync everysec no-appendfsync-on-rewrite yes

操作记录:

AOF的日志备份恢复也是备份日志文件即可

 

Redis是一个内存数据库,无论是RDB还是AOF,都只是其保证数据恢复的措施。所以Redis在利用RDBAOF进行恢复的时候,都会读取RDBAOF文件,重新加载到内存中。相对于MySQL等数据库的启动时间来说,会长很多,因为MySQL本来是不需要将数据加载到内存中的。

但是相对来说,MySQL启动后提供服务时,其被访问的热数据也会慢慢加载到内存中,通常我们称之为预热,而在预热完成前,其性能都不会太高。而Redis的好处是一次性将数据加载到内存中,一次性预热。这样只要Redis启动完成,那么其提供服务的速度都是非常快的。

而在利用RDB和利用AOF启动上,其启动时间有一些差别。RDB的启动时间会更短,原因有两个,一是RDB文件中每一条数据只有一条记录,不会像AOF日志那样可能有一条数据的多次操作记录。所以每条数据只需要写一次就行了。另一个原因是RDB文件的存储格式和Redis数据在内存中的编码格式是一致的,不需要再进行数据编码工作。在CPU消耗上要远小于AOF日志的加载。

 

Redis的数据持久化建议同时开启RDB快照和AOF日志,使用shell脚本定期将两个文件进行打包备份,在redis出现问题的时候,停止redis主进程,然后删除原有的RDB文件和AOF日志文件,使用其还原,重启redis即可

Redis的高可用架构

Redis主从架构

 

redis

禁用RDB快照

#save 900 1   #save 300 10 #save 60 10000  #禁用RDB快照   #appendonly no  #禁用AOF日志

redis的配置

save 900 1 #启用Snapshot save 300 10 save 60 10000   appendonly yes  #启用AOF appendfilenameappendonly.aof  #AOF文件的名称 # appendfsync always appendfsync everysec #每秒钟强制写入磁盘一次 # appendfsync no            no-appendfsync-on-rewriteyes    #在日志重写时,不进行命令追加操作 auto-aof-rewrite-percentage100  #自动启动新的日志重写过程 auto-aof-rewrite-min-size64mb   #启动新的日志重写过程的最小值

分别启动masterslave

master中确认为启动snapshot参数:

27.0.0.1:6379> CONFIG GET save 1) "save" 2) ""

在master上可以使用info参数确认当前redis的相关信息,

我们这里模拟redis损坏,直接killredis的进程ID,然后在slave上查看状态信息:info命令 master_link_status的状态已经是down了,Master已经不可访问了

进行恢复:

Slave上执行:

Slaveof no one

然后执行info确保没有master的信息

slave上的两个dump.rdbappendonly.aof文件拷贝到master服务器,尝试恢复。然后启动主master进程,使用info命令查看数据已经恢复,最后在slave上执行:slaveof192.168.50.234 6379

执行info命令查看master_link_status显示为up,同步状态正常。

Redis主从架构恢复的步骤:

 

Slave上执行:Slaveofno one 确保无master的相关信息

拷贝slaveRDB AOF文件之master

启动master进程,使用info指令确认数据已经恢复

Slave上执行slaveof192.168.50.234 6379 ,使用指令info查看master_link_sstatus显示为up状态,就说明已经恢复成功