這兩天在配置線上使用的redis服務(wù)。總得看起來,redis服務(wù)的配置文件還是非常簡潔、清楚,配置起來非常順暢,贊一下作者。
下面是我使用的配置,使用主從模式,在master上關(guān)掉所有持久化,在slave上使用AOF持久化:
$cat /opt/redis/etc/redis.conf
######Master config###General 配置daemonize yes #使用daemon 方式運(yùn)行程序,默認(rèn)為非daemon方式運(yùn)行pidfile /tmp/redis.pid #pid文件位置port 6379 #使用默認(rèn)端口timeout 30 # client 端空閑斷開連接的時間loglevel warning #日志記錄級別,默認(rèn)是notice,我這邊使用warning,是為了監(jiān)控日志方便。使用warning后,只有發(fā)生告警才會產(chǎn)生日志,這對于通過判斷日志文件是否為空來監(jiān)控報(bào)警非常方便。logfile /opt/logs/redis/redis.log #日志產(chǎn)生的位置databases 16 #默認(rèn)是0,也就是只用1 個db,我這邊設(shè)置成16,方便多個應(yīng)用使用同一個redis server。使用select n 命令可以確認(rèn)使用的redis db ,這樣不同的應(yīng)用即使使用相同的key也不會有問題。###下面是SNAPSHOTTING持久化方式的策略。為了保證數(shù)據(jù)相對安全,在下面的設(shè)置中,更改越頻繁,SNAPSHOTTING越頻繁,也就是說,壓力越大,反而花在持久化上的資源會越多。所以我選擇了master-slave模式,并在master關(guān)掉了SNAPSHOTTING。#save 900 1 #在900秒之內(nèi),redis至少發(fā)生1次修改則redis抓快照到磁盤#save 300 100 #在300秒之內(nèi),redis至少發(fā)生100次修改則redis抓快照到磁盤#save 60 10000 #在60秒之內(nèi),redis至少發(fā)生10000次修改則redis抓快照到磁盤rdbcompression yes #使用壓縮dbfilename dump.rdb #SNAPSHOTTING的文件名dir /opt/data/redis/ #SNAPSHOTTING文件的路徑###REPLICATION 設(shè)置,#slaveof #如果這臺機(jī)器是臺redis slave,可以打開這個設(shè)置。如果使用master-slave模式,我就會在master上把SNAPSHOTTING關(guān)了,這樣可以不用在master上做持久化,而是在slave上做,這樣可以大大提高master 內(nèi)存使用率和系統(tǒng)性能。#slave-serve-stale-data yes #如果slave 無法與master 同步,是否還可以讀### SECURITY 設(shè)置#requirepass aaaaaaaaa #redis性能太好,用個passwd 意義不大#rename-command FLUSHALL "" #可以用這種方式關(guān)掉非常危險(xiǎn)的命令,如FLUSHALL這個命令,它清空整個 Redis 服務(wù)器的數(shù)據(jù),而且不用確認(rèn)且從不會失敗###LIMIT 設(shè)置maxclients 0 #無client連接數(shù)量限制maxmemory 14gb #redis最大可使用的內(nèi)存量,我的服務(wù)器內(nèi)存是16G,如果使用redis SNAPSHOTTING的copy-on-write的持久會寫方式,會額外的使用內(nèi)存,為了使持久會操作不會使用系統(tǒng)VM,使redis服務(wù)器性能下降,建議保留redis最大使用內(nèi)存的一半8G來留給持久化使用,我個人覺得非常浪費(fèi)。我沒有在master上不做持久化,使用主從方式maxmemory-policy volatile-lru #使用LRU算法刪除設(shè)置了過期時間的key,但如果程序?qū)懙臅r間沒有寫key的過期時間,建議使用allkeys-lru,這樣至少保證redis不會不可寫入。###APPEND ONLY MODE 設(shè)置appendonly no #不使用AOF,AOF是另一種持久化方式,我沒有使用的原因是這種方式并不能在服務(wù)器或磁盤損壞的情況下,保證數(shù)據(jù)可用性。appendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb###SLOW LOG 設(shè)置slowlog-log-slower-than 10000 #如果操作時間大于0.001秒,記錄slow log,這個log是記錄在內(nèi)存中的,可以用redis-cli slowlog get 命令查看slowlog-max-len 1024 #slow log 的最大長度###VIRTUAL MEMORY 設(shè)置vm-enabled no #不使用虛擬內(nèi)存,在redis 2.4版本,作者已經(jīng)非常不建議使用VM。vm-swap-file /tmp/redis.swapvm-max-memory 0vm-page-size 32vm-pages 134217728vm-max-threads 4###ADVANCED CONFIG 設(shè)置,下面的設(shè)置主要是用來節(jié)省內(nèi)存的,我沒有對它們做修改hash-max-zipmap-entries 512hash-max-zipmap-value 64list-max-ziplist-entries 512list-max-ziplist-value 64set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64activerehashing yes###INCLUDES 設(shè)置 ,使用下面的配置,可以配置一些個另其它的設(shè)置,如slave的配置#include /path/to/local.conf#include /path/to/other.conf#include /opt/redis/etc/slave.conf 如果是slave server,把這個注釋打開
slave 配置:
$cat /opt/redis/etc/slave.conf
######slave config###REPLICATION 設(shè)置,slaveof redis01 6397 #如果這臺機(jī)器是臺redis slave,可以打開這個設(shè)置。如果使用master-slave模式,我就會在master上把SNAPSHOTTING關(guān)了,這樣可以不用在master上做持久化,而是在slave上做,這樣可以大大提高master 內(nèi)存使用率和系統(tǒng)性能。slave-serve-stale-data no #如果slave 無法與master 同步,設(shè)置成slave不可讀,方便監(jiān)控腳本發(fā)現(xiàn)問題。###APPEND ONLY MODE 設(shè)置appendonly yes #在slave上使用了AOF,以保證數(shù)據(jù)可用性。
其它后繼數(shù)據(jù)備份工作
1、用redis-cli bgsave 命令每天凌晨一次持久化一次master redis上的數(shù)據(jù),并CP到其它備份服務(wù)器上。
2、用redis-cli bgrewriteaof 命令每半小時持久化一次 slave redis上的數(shù)據(jù),并CP到其它備份服務(wù)器上。
3、寫個腳本 ,定期get master和slave上的key,看兩個是否同步,如果沒有同步,及時報(bào)警。