Redis 使用手冊

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”

wKiom1RwGgnAz6RPAAETGuHSZwY077.jpg

複製配置文件:

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

wKiom1RwGkPBtezUAADqZWEHm6Y361.jpgRedi的連接操作:
wKiom1RwGmLh60NoAAFZO61AYYs958.jpg

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 <<end_ftp
open xxx.xxx.xxx.xxx
user user@passsword
binary
cd redisbackup
put redis_RDB_$date.tar.gz
close
bye
end_ftp
if [ $? -eq 0 ]
then
       echo "Database FTP OK!" && service iptables start
else
       echo "Database FTP Faild" && service iptables start
       exit 1
fi
exit 0

AOF日誌

aof日誌的全稱是append only file,從名字上我們就能看出來,它是一個追加寫入的日誌文件。與一般數據庫的binlog不同的是,AOF文件是可識別的純文本,它的內容就是一個個的Redis標準命令

打開配置文件

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

操作記錄:

wKiom1RwGumhnz8fAACI4jJjERA922.jpg

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狀態,就說明已經恢復成功


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章