Redis3.X配置文件和sentinel配置文件詳解

Redis3.X配置文件和sentinel配置文件詳解

標籤(空格分隔): redis


配置文件基於最新的Redis3.2.4版本

redis配置文件

./redis-server /path/to/redis.conf

 配置文件實例所在路徑

################################## INCLUDES ###################################

可以通過引入文件擴展redis的配置

# include /path/to/local.conf
# include /path/to/other.conf

################################## NETWORK #####################################

# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1

默認情況下,redis在server上所有的有效的網絡接口上監聽客戶端連接。
如果只想監聽部分網絡端口,可以綁定一個或者多個IP端口,用空格隔開

bind 127.0.0.1

綁定IP,默認是本機所有網絡設備

protected-mode yes

port 6379

默認值6379,redis的服務端口

tcp-backlog 511

TCP監聽的最大容量數量
在高併發的情況下可以將這個屬性值調高避免客戶端連接緩慢問題。,修改此值的時候還需要修改/proc/sys/net/core/somaxconn 對應的值

注:此參數確定了TCP連接中已完成隊列(完成三次握手之後)的長度, 當然此值必須不大於Linux系統定義的/proc/sys/net/core/somaxconn值,默認是511,而Linux的默認參數值是128。當系統併發量大並且客戶端速度緩慢的時候,可以將這二個參數一起參考設定。該內核參數默認值一般是128,對於負載很大的服務程序來說大大的不夠。一般會將它修改爲2048或者更大。在/etc/sysctl.conf中添加:net.core.somaxconn = 2048,然後在終端中執行sysctl -p。

# unixsocket /tmp/redis.sock

配置unix socket來讓redis支持監聽本地連接。

# unixsocketperm 700

配置unix socket使用文件的權限

timeout 0

客戶端空閒n秒後斷開連接,默認是0不斷開連接

tcp-keepalive 300

tcp keepalive參數。如果設置不爲0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有兩個好處:檢測掛掉的對端。降低中間設備出問題而導致網絡看似連接卻已經與對端端口的問題。在Linux內核中,設置了keepalive,redis會定時給對端發送消息。檢測到對端關閉需要兩倍的設置值。

################################# GENERAL #####################################

daemonize no

默認值爲no,該參數用於定製redis服務是否以守護模式運行(是否後臺運行)

supervised no

#

pidfile /var/run/redis_6379.pid

默認值/var/run/redis.pid,指定redis服務的進程號文件路徑,以守護模式運行時需要配置該參數。

loglevel notice

設置服務端的日誌級別,有如下幾種選擇:
    debug:記錄詳細信息,用於開發調試
    verbose:默認選項。提供很多有用信息,但是不像debug那麼詳細
    notice:適度提醒,多用於產品環境
    warning:僅顯示重要的警告信息

logfile “”

指定日誌輸出路徑,默認值:stdout,表示輸出到屏幕,守護模式則輸出到/dev/null;

如果要輸出日誌到syslog中,可以啓動syslog-enabled yes,默認該選項值爲no。

# syslog-enabled no

# syslog-ident redis

sysolog的標識符

# syslog-facility local0

日誌的來源、設備

databases 16

指定數據庫的數量,默認爲16【0-15】,默認使用數據庫是0.

################################ SNAPSHOTTING(快照設置) ################################

# Save the DB on disk:

# save

指定多長時間刷新快照到磁盤,這個選項有兩個屬性值,只有兩個屬性值均滿足時纔會觸發;可以設置多種級別,默認設置如下:

    每900(15分鐘)至少一次鍵值變更時觸發
    每300(5分鐘)至少十次鍵值變更時觸發
    每60(1分鐘)至少一萬次鍵值變更時觸發

save 900 1
save 300 10
save 60 10000

stop-writes-on-bgsave-error yes

當RDB持久化出現錯誤後,是否依然進行繼續進行工作,yes:不能進行工作,no:可以繼續進行工作,可以通過info中的rdb_last_bgsave_status瞭解RDB持久化是否有錯誤

rdbcompression yes

默認值:yes,當dump數據庫使用LZF壓縮字符串對象,如果CPU資源比較緊張,可以設置爲no,選擇不壓縮。

rdbchecksum yes

是否校驗rdb文件。從rdb格式的第五個版本開始,在rdb文件的末尾會帶上CRC64的校驗和。這跟有利於文件的容錯性,但是在保存rdb文件的時候,會有大概10%的性能損耗,所以如果你追求高性能,可以關閉該配置。

dbfilename dump-6379.rdb

默認值:dump.rdb,dump到文件系統中的文件名

dir ./

默認值:./,即當前目錄,dump出的數據文件的存儲路徑

################################# REPLICATION #################################

以下爲複製相關的設置,默認是不開啓的,所以均被註釋。設置集羣是使用這些參數。

# slaveof

slaveof <masterip> <masterport>
指定主端IP和端口號,用於創建一個鏡像服務。

# masterauth

masterauth <master-password>
如果master配置密碼的話,此處需要設置

slave-serve-stale-data yes

默認值:yes,當slave丟失與master端的連接,或者複製仍在處理,那麼slave會有兩種表現:
    當設置爲yes時,salve繼續響應客戶端請求,儘管數據已經不同步甚至沒有數據(出現在初次同步的情況下);
    當設置爲no時,salve會返回“SYNC with master in progree”的錯誤信息。

slave-read-only yes

默認從redis只讀模式(作爲從服務器,默認情況下是隻讀的(yes),可以修改成NO,用於寫(不建議)。

repl-diskless-sync no

是否使用socket方式複製數據。目前redis複製提供兩種方式,disk和socket。如果新的slave連上來或者重連的slave無法部分同步,就會執行全量同步,master會生成rdb文件。有2種方式:
    disk方式是master創建一個新的進程把rdb文件保存到磁盤,再把磁盤上的rdb文件傳遞給slave。socket是master創建一個新的進程,直接把rdb文件以socket的方式發給slave。disk方式的時候,當一個rdb保存的過程中,多個slave都能共享這個rdb文件。
    socket的方式就的一個個slave順序複製。
    在磁盤速度緩慢,網速快的情況下推薦用socket方式。

repl-diskless-sync-delay 5

diskless複製的延遲時間,防止設置爲0。一旦複製開始,節點不會再接收新slave的複製請求直到下一個rdb傳輸。所以最好等待一段時間,等更多的slave連上來。

# repl-ping-slave-period 10

默認值10,指定salve定期ping master的週期
(slave根據指定的時間間隔向服務器發送ping請求。時間間隔可以通過 repl_ping_slave_period 來設置,默認10秒。)

# repl-timeout 60

複製連接超時時間。master和slave都有超時時間的設置。master檢測到slave上次發送的時間超過repl-timeout,即認爲slave離線,清除該slave信息。slave檢測到上次和master交互的時間超過repl-timeout,則認爲master離線。需要注意的是repl-timeout需要設置一個比repl-ping-slave-period更大的值,不然會經常檢測到超時。

repl-disable-tcp-nodelay no

是否禁止複製tcp鏈接的tcp nodelay參數,可傳遞yes或者no。默認是no,即使用tcp nodelay。如果master設置了yes來禁止tcp nodelay設置,在把數據複製給slave的時候,會減少包的數量和更小的網絡帶寬。但是這也可能帶來數據的延遲。默認我們推薦更小的延遲,但是在數據量傳輸很大的場景下,建議選擇yes。

# repl-backlog-size 1mb

複製緩衝區大小,這是一個環形複製緩衝區,用來保存最新複製的命令。這樣在slave離線的時候,不需要完全複製master的數據,如果可以執行部分同步,只需要把緩衝區的部分數據複製給slave,就能恢復正常複製狀態。緩衝區的大小越大,slave離線的時間可以更長,複製緩衝區只有在有slave連接的時候才分配內存。沒有slave的一段時間,內存會被釋放出來,默認1m。

# repl-backlog-ttl 3600

master沒有slave一段時間會釋放複製緩衝區的內存,repl-backlog-ttl用來設置該時間長度。單位爲秒。

slave-priority 100

當master不可用,Sentinel會根據slave的優先級選舉一個master。最低的優先級的slave,當選master。而配置成0,永遠不會被選舉。

# min-slaves-to-write 3

redis提供了可以讓master停止寫入的方式,如果配置了min-slaves-to-write,健康的slave的個數小於N,mater就禁止寫入。master最少得有多少個健康的slave存活才能執行寫命令。這個配置雖然不能保證N個slave都一定能接收到master的寫操作,但是能避免沒有足夠健康的slave的時候,master不能寫入來避免數據丟失。設置爲0是關閉該功能。

# min-slaves-max-lag 10

延遲小於min-slaves-max-lag秒的slave才認爲是健康的slave。

################################## SECURITY ###################################

# requirepass foobared

requirepass配置可以讓用戶使用AUTH命令來認證密碼,才能使用其他命令。這讓redis可以使用在不受信任的網絡中。爲了保持向後的兼容性,可以註釋該命令,因爲大部分用戶也不需要認證。使用requirepass的時候需要注意,因爲redis太快了,每秒可以認證15w次密碼,簡單的密碼很容易被攻破,所以最好使用一個更復雜的密碼。

# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

把危險的命令給修改成其他名稱。比如CONFIG命令可以重命名爲一個很難被猜到的命令,這樣用戶不能使用,而內部工具還能接着使用。

# rename-command CONFIG “”

設置成一個空的值,可以禁止一個命令

################################### LIMITS ####################################

# maxclients 10000

設置能連上redis的最大客戶端連接數量。默認是10000個客戶端連接。由於redis不區分連接是客戶端連接還是內部打開文件或者和slave連接等,所以maxclients最小建議設置到32。如果超過了maxclients,redis會給新的連接發送’max number of clients reached’,並關閉連接。

# maxmemory

redis配置的最大內存容量。當內存滿了,需要配合maxmemory-policy策略進行處理。注意slave的輸出緩衝區是不計算在maxmemory內的。所以爲了防止主機內存使用完,建議設置的maxmemory需要更小一些。

內存容量超過maxmemory後的處理策略。
# volatile-lru ->利用LRU算法移除設置過過期時間的key
# allkeys-lru -> 利用LRU算法移除任何key。
# volatile-random -> 隨機移除設置過過期時間的key。
# allkeys-random -> 隨機移除任何key
# volatile-ttl -> 移除即將過期的key,根據最近過期時間來刪除(輔以TTL)
# noeviction -> 不移除任何key,只是返回一個寫錯誤。

# maxmemory-policy noeviction

# maxmemory-samples 5

lru檢測的樣本數。使用lru或者ttl淘汰算法,從需要淘汰的列表中隨機選擇sample個key,選出閒置時間最長的key移除。

############################## APPEND ONLY MODE ###############################

appendonly no

默認redis使用的是rdb方式持久化,這種方式在許多應用中已經足夠用了。但是redis如果中途宕機,會導致可能有幾分鐘的數據丟失,根據save來策略進行持久化,Append Only File是另一種持久化方式,可以提供更好的持久化特性。Redis會把每次寫入的數據在接收後都寫入 appendonly.aof 文件,每次啓動時Redis都會先把這個文件的數據讀入內存裏,先忽略RDB文件。

appendfilename “appendonly-6379.aof”

aof文件名。默認: "appendonly.aof"

# AOF持久化三種策略:
#
# no: 表示不執行fsync,由操作系統保證數據同步到磁盤,速度最快。
# always: 表示每次寫入都執行fsync,以保證數據同步到磁盤
# everysec: 表示每秒執行一次fsync,可能會導致丟失這1s數據。
#
# 如果不確定使用哪種策略就是用: “everysec”.

# appendfsync always
appendfsync everysec
# appendfsync no

no-appendfsync-on-rewrite no

在aof重寫或者寫入rdb文件的時候,會執行大量IO,此時對於everysec和always的aof模式來說,執行fsync會造成阻塞過長時間,no-appendfsync-on-rewrite字段設置爲默認設置爲no。如果對延遲要求很高的應用,這個字段可以設置爲yes,否則還是設置爲no,這樣對持久化特性來說這是更安全的選擇。設置爲yes表示rewrite期間對新寫操作不fsync,暫時存在內存中,等rewrite完成後再寫入,默認爲no,建議yes。Linux的默認fsync策略是30秒。可能丟失30秒數據。

auto-aof-rewrite-percentage 100

aof自動重寫配置。當目前aof文件大小超過上一次重寫的aof文件大小的百分之多少進行重寫,即當aof文件增長到一定大小的時候Redis能夠調用bgrewriteaof對日誌文件進行重寫。當前AOF文件大小是上次日誌重寫得到AOF文件大小的二倍(設置爲100)時,自動啓動新的日誌重寫過程。

auto-aof-rewrite-min-size 64mb

設置允許重寫的最小aof文件大小,避免了達到約定百分比但尺寸仍然很小的情況還要重寫

aof-load-truncated yes

aof文件可能在尾部是不完整的,當redis啓動的時候,aof文件的數據被載入內存。重啓可能發生在redis所在的主機操作系統宕機後,尤其在ext4文件系統沒有加上data=ordered選項(redis宕機或者異常終止不會造成尾部不完整現象。)出現這種現象,可以選擇讓redis退出,或者導入儘可能多的數據。如果選擇的是yes,當截斷的aof文件被導入的時候,會自動發佈一個log給客戶端然後load。如果是no,用戶必須手動redis-check-aof修復AOF文件纔可以。

################################ LUA SCRIPTING ###############################

\lua-time-limit 5000

如果達到最大時間限制(毫秒),redis會記個log,然後返回error。當一個腳本超過了最大時限。只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。第一個可以殺沒有調write命令的東西。要是已經調用了write,只能用第二個命令殺。

################################ REDIS CLUSTER ###############################

# cluster-enabled yes

集羣開關,默認是不開啓集羣模式。

# cluster-config-file nodes-6379.conf

集羣配置文件的名稱,每個節點都有一個集羣相關的配置文件,持久化保存集羣的信息。這個文件並不需要手動配置,這個配置文件有Redis生成並更新,每個Redis集羣節點需要一個單獨的配置文件,請確保與實例運行的系統中配置文件名稱不衝突

# cluster-node-timeout 15000

節點互連超時的閥值。集羣節點超時毫秒數

# cluster-slave-validity-factor 10

在進行故障轉移的時候,全部slave都會請求申請爲master,但是有些slave可能與master斷開連接一段時間了,導致數據過於陳舊,這樣的slave不應該被提升爲master。該參數就是用來判斷slave節點與master斷線的時間是否過長。判斷方法是:
比較slave斷開連接的時間和(node-timeout *slave-validity-factor) + repl-ping-slave-period
如果節點超時時間爲三十秒, 並且slave-validity-factor爲10,假設默認的repl-ping-slave-period是10秒,即如果超過310秒slave將不會嘗試進行故障轉移 

# cluster-migration-barrier 1

master的slave數量大於該值,slave才能遷移到其他孤立master上,如這個參數若被設爲2,那麼只有當一個主節點擁有2 個可工作的從節點時,它的一個從節點會嘗試遷移。

# cluster-require-full-coverage yes

默認情況下,集羣全部的slot有節點負責,集羣狀態才爲ok,才能提供服務。設置爲no,可以在slot沒有全部分配的時候提供服務。不建議打開該配置,這樣會造成分區的時候,小分區的master一直在接受寫請求,而造成很長時間數據不一致。

################################## SLOW LOG ###################################

slowlog-log-slower-than 10000

slog log是用來記錄redis運行中執行比較慢的命令耗時。當命令的執行超過了指定時間,就記錄在slow log中,slog log保存在內存中,所以沒有IO操作。執行時間比slowlog-log-slower-than大的請求記錄到slowlog裏面,單位是微秒,所以1000000就是1秒。注意,負數時間會禁用慢查詢日誌,而0則會強制記錄所有命令。

slowlog-max-len 128

慢查詢日誌長度。當一個新的命令被寫進日誌的時候,最老的那個記錄會被刪掉。這個長度沒有限制。只要有足夠的內存就行。你可以通過 SLOWLOG RESET 來釋放內存。

################################ LATENCY MONITOR ##############################

latency-monitor-threshold 0

延遲監控功能是用來監控redis中執行比較緩慢的一些操作,用LATENCY打印redis實例在跑命令時的耗時圖表。只記錄大於等於下邊設置的值的操作。0的話,就是關閉監視。默認延遲監控功能是關閉的,如果你需要打開,也可以通過CONFIG SET命令動態設置。

############################# EVENT NOTIFICATION ##############################
#鍵空間通知使得客戶端可以通過訂閱頻道或模式,來接收那些以某種方式改動了 Redis 數據集的事件。因爲開啓鍵空間通知功能需要消耗一些 CPU ,所以在默認配置下,該功能處於關閉狀態。

#notify-keyspace-events 的參數可以是以下字符的任意組合,它指定了服務器該發送哪些類型的通知:

##K 鍵空間通知,所有通知以 __keyspace@__ 爲前綴
##E 鍵事件通知,所有通知以 __keyevent@__ 爲前綴
##g DEL 、 EXPIRE 、 RENAME 等類型無關的通用命令的通知
##$ 字符串命令的通知
##l 列表命令的通知
##s 集合命令的通知
##h 哈希命令的通知
##z 有序集合命令的通知
##x 過期事件:每當有過期鍵被刪除時發送
##e 驅逐(evict)事件:每當有鍵因爲 maxmemory 政策而被刪除時發送
##A 參數 g$lshzxe 的別名
#輸入的參數中至少要有一個 K 或者 E,否則的話,不管其餘的參數是什麼,都不會有任何 通知被分發。詳細使用可以參考http://redis.io/topics/notifications

notify-keyspace-events “”

############################### ADVANCED CONFIG ###############################

hash-max-ziplist-entries 512

數據量小於等於hash-max-ziplist-entries的用ziplist,大於hash-max-ziplist-entries用hash

hash-max-ziplist-value 64

value大小小於等於hash-max-ziplist-value的用ziplist,大於hash-max-ziplist-value用hash。

list-max-ziplist-entries 512

數據量小於等於list-max-ziplist-entries用ziplist,大於list-max-ziplist-entries用list。

list-max-ziplist-value 64

value大小小於等於list-max-ziplist-value的用ziplist,大於list-max-ziplist-value用list。

set-max-intset-entries 512

數據量小於等於set-max-intset-entries用iniset,大於set-max-intset-entries用set。

zset-max-ziplist-entries 128

數據量小於等於zset-max-ziplist-entries用ziplist,大於zset-max-ziplist-entries用zset。

zset-max-ziplist-value 64

value大小小於等於zset-max-ziplist-value用ziplist,大於zset-max-ziplist-value用zset。

hll-sparse-max-bytes 3000

value大小小於等於hll-sparse-max-bytes使用稀疏數據結構(sparse),大於hll-sparse-max-bytes使用稠密的數據結構(dense)。一個比16000大的value是幾乎沒用的,建議的value大概爲3000。如果對CPU要求不高,對空間要求較高的,建議設置到10000左右。

activerehashing yes

Redis將在每100毫秒時使用1毫秒的CPU時間來對redis的hash表進行重新hash,可以降低內存的使用。當你的使用場景中,有非常嚴格的實時性需要,不能夠接受Redis時不時的對請求有2毫秒的延遲的話,把這項配置爲no。如果沒有這麼嚴格的實時性要求,可以設置爲yes,以便能夠儘可能快的釋放內存。

client-output-buffer-limit normal 0 0 0

對客戶端輸出緩衝進行限制可以強迫那些不從服務器讀取數據的客戶端斷開連接,用來強制關閉傳輸緩慢的客戶端。
對於normal client,第一個0表示取消hard limit,第二個0和第三個0表示取消soft limit,normal client默認取消限制,因爲如果沒有尋問,他們是不會接收數據的。

client-output-buffer-limit slave 256mb 64mb 60

對於slave client和MONITER client,如果client-output-buffer一旦超過256mb,又或者超過64mb持續60秒,那麼服務器就會立即斷開客戶端連接。

client-output-buffer-limit pubsub 32mb 8mb 60

對於pubsub client,如果client-output-buffer一旦超過32mb,又或者超過8mb持續60秒,那麼服務器就會立即斷開客戶端連接。

hz 10

redis執行任務的頻率爲1s除以hz。

aof-rewrite-incremental-fsync yes

在aof重寫的時候,如果打開了aof-rewrite-incremental-fsync開關,系統會每32MB執行一次fsync。這對於把文件寫入磁盤是有幫助的,可以避免過大的延遲峯值。

sentinel配置文件

port 26379

Sentinel實例的端口號

dir /tmp

Sentinel 實例的目錄

logfile /var/log/redis/redis-server.log

日誌文件

daemonize yes

後臺執行

protected-mode no

3.2裏的參數,是否開啓保護模式,默認開啓。要是配置裏沒有指定bind和密碼。開啓該參數後,redis只會本地進行訪問,拒絕外部訪問。要是開啓了密碼   和bind,可以開啓。否   則最好關閉,設置爲no。

sentinel monitor mymaster 127.0.0.1 6379 2

格式:sentinel <option_name> <master_name> <option_value>;這一行代表sentinel監控的master的名字叫做mymaster,地址爲127.0.0.1:6379,行尾最後的一個2代表什麼意思呢?我們知道,網絡是不可靠的,有時候一個sentinel會因爲網絡堵塞而誤以爲一個master redis已經死掉了,當sentinel集羣式,解決這個問題的方法就變得很簡單,只需要多個sentinel互相溝通來確認某個master是否真的死了,這個2代表,當集羣中有2個sentinel認爲master死了時,才能真正認爲該master已經不可用了。

sentinel down-after-milliseconds mymaster 30000

sentinel會向master發送心跳PING來確認master是否存活,如果master在“一定時間範圍”內不迴應PONG 或者是回覆了一個錯誤消息,那麼這個sentinel會主觀地(單方面地)認爲這個master已經不可用了(subjectively down, 也簡稱爲SDOWN)。而這個down-after-milliseconds就是用來指定這個“一定時間範圍”的,默認單位是毫秒,默認30秒。

sentinel parallel-syncs mymaster 1

在發生failover主備切換時,這個選項指定了最多可以有多少個slave同時對新的master進行同步,這個數字越小,完成failover所需的時間就越長,但是如果這個數字越大,就意味着越多的slave因爲replication而不可用。可以通過將這個值設爲 1 來保證每次只有一個slave處於不能處理命令請求的狀態。

sentinel failover-timeout mymaster 180000

failover過期時間,當failover開始後,在此時間內仍然沒有觸發任何failover操作,當前sentinel將會認爲此次failoer失敗。默認180秒,即3minutes.

#sentinel auth-pass mymaster xxxxxxx

設置連master和slaves驗證密碼,在監控redis實例時很有用

#sentinel notification-script

sentinel notification-script <master-name> <script-path>
發生切換之後執行的一個自定義腳本:如發郵件、vip切換等

#sentinel client-reconfig-script T1 /opt/bin/notify.py

發生切換之後執行的一個自定義腳本:如發郵件、vip切換等
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章