1. 程式人生 > >Redis.conf及其Sentinel.conf配置項詳細說明

Redis.conf及其Sentinel.conf配置項詳細說明

maxmemory 自動 zip slaveof level 多次 dfs 寫入 數據庫

一、redis.conf 配置項說明如下:

1. daemonize no

Redis默認不是以守護進程的方式運行,可以通過該配置項修改,使用yes啟用守護進程

2. pidfile /var/run/redis_6379.pid

當Redis以守護進程方式運行時,即使該項沒有配置,Redis也會默認把pid寫入/var/run/redis.pid文件;而當Redis不是以守護進程凡是運行時,若該項沒有配置,則redis不會創建pid文件。創建pid文件是嘗試性的動作,即使創建寫入失敗,redis依然可以啟動運行

3.port 6379

指定Redis監聽端口,默認端口為6379,作者在自己的一篇博文中解釋了為什麽選用6379作為默認端口,因為6379在手機按鍵上MERZ對應的號碼,而MERZ取自意大利歌女Alessia Merz的名字

4.bind 127.0.0.1

綁定的主機地址,如果想全部訪問不做限制的話,全為0.0.0.0,

5.timeout 300

當 客戶端閑置多長時間後關閉連接,如果指定為0,表示關閉該功能

6.loglevel verbose

指定日誌記錄級別,Redis總共支持四個級別:debug、verbose、notice、warning,默認為verbose

7.logfile ""

日誌記錄方式,配置空字符串強制讓日誌打到標準輸出,如果配置Redis為守護進程方式運行,而這裏又配置為日誌記錄方式為標準輸出,則日誌將會發送給/dev/null

8.databases 16

設置數據庫的數量,默認數據庫為0,可以使用SELECT <dbid>命令在連接上指定數據庫id

9 save <seconds> <changes>

指定在多長時間內,有多少次更新操作,就將數據同步到數據文件,可以多個條件配合

Redis默認配置文件中提供了三個條件:

save 900 1

save 300 10

save 60 10000

分別表示900秒(15分鐘)內有1個更改,300秒(5分鐘)內有10個更改以及60秒內有10000個更改。

10. stop-writes-on-bgsave-error yes

如果以RDB的方式持久化數據時出錯了,redis默認將不接收寫入操作,以便讓應用層感知出現問題了,配置為no禁用;

11.rdbcompression yes

指定存儲至本地數據庫時是否壓縮數據,默認為yes,Redis采用LZF壓縮,如果為了節省CPU時間,可以關閉該選項,但會導致數據庫文件變的巨大

12.dbfilename dump.rdb

指定本地數據庫文件名,默認值為dump.rdb

13.dir ./

指定本地數據庫存放目錄

14. slaveof <masterip> <masterport>

設置當本機為slave服務時,設置master服務的IP地址及端口,在Redis啟動時,它會自動從master進行數據同步

15.slave-serve-stable-data yes

當一個slave失去與其master的連接時,該配置用來指定slave是否繼續接收client的請求,指定為yes則繼續接收,指定為no,則slave會回復"SYNC with master in progress"錯誤給client的所有請求(除了info和slaveof命令外)

16.slave-read-only yes

slave是否是只讀的,默認為yes

17 repl-diskless-sync no

master與slave同步策略:disk or socket

slave與master同步時,master會生成rdb file並傳輸給該slave,這個傳輸過程有兩種形式:

1.Disk-backed:master fork出一個子進程來把rdb file先寫入disk,然後再由主進程將該rdb發給slaves

2.Diskless:master fork出一個子進程來直接把rdb file發送給slaves,在這個過程中,master就無法給其它slave提供同步,後面的slave的同步都得入隊列。但是可以指定master 再fork之前等待多久,以盡可能地同時將rdb file發給多個slave

18.repl-diskless-sync-delay 5

指定的delay,單位second

19. repl-ping-slave-period 10

slave發送心跳間隔,單位second

20.repl-timeout 60

該配置指定了:

1.同步時slave端的IO超時

2.master超時(從slave的角度,data,ping)

3.slave超時(從master的角度)

單位second

比如 repl-ping-slave-period配置為10而該項配60,則如果slave連續發了6次ping,都沒有收到來自master的pong,則slave會主觀地認為該master已死

21.repl-disable-tcp-nodelay no

22.repl-backlog-size 1mb

slave同步緩沖區大小

23.repl-backlog-ttl 3600

slave同步緩沖區存活時間(當master與對應的slave斷開連接後)

24.slave-priority 100

slave的被選舉優先級,越小越優先,但設為0則沒有被選舉權,默認為100

25. masterauth <master-password>

當master設置了密碼保護時,slave連接master的密碼

26 requirepass foobared

設置Redis連接密碼,如果配置了連接密碼,客戶端在連接Redis時需要通過masterauth提供密碼,默認關閉

27 maxclients 128

設置同一時間最大客戶端連接數,默認無限制,Redis可以同時打開的客戶端連接數為Redis進程可以打開的最大文件描述符數,如果設置 maxclients 0,表示不作限制。當客戶端連接數到達限制時,Redis會關閉新的連接並向客戶端返回max number of clients reached錯誤信息

28 maxmemory <bytes>

指定Redis最大內存限制,Redis在啟動時會把數據加載到內存中,達到最大內存後,Redis會先嘗試清除已到期或即將到期的Key,當此方法處理 後,仍然到達最大內存設置,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis新的vm機制,會把Key存放內存,Value會存放在swap區,若設為0,則不限制內存,64位系統默認不限制內存,而32位系統默認最大為3GB

maxmemory-policy (noeviction | allkeys-lru | volatile-lru | allkeys-random | volatile-random | volatile-ttl)

當內存到達閥值時redis對於會增加內存的命令的處理策略:

noeviction:返回錯誤

allkeys-lru:對於所有的key采用lru算法刪掉一些key

volatile-lru:對於所有有超時的key采用lru算法刪掉一些key

allkeys-random:對於所有的key采用隨機算法刪掉一些key

volatile-random:對於所有有超時的key采用隨機算法刪掉一些key

volatile-ttl:對於所有有超時的key采用隨機算法刪掉一些key,優先刪除存活時間短的那些

29.appendonly no

指定是否在每次更新操作後進行日誌記錄,Redis在默認情況下是異步的把數據寫入磁盤,如果不開啟,可能會在斷電時導致一段時間內的數據丟失。因為 redis本身同步數據文件是按上面save條件來同步的,所以有的數據會在一段時間內只存在於內存中。默認為no

30.appendfilename appendonly.aof

指定更新日誌文件名,默認為appendonly.aof

31.appendfsync everysec

指定更新日誌條件,共有3個可選值:
no:表示等操作系統進行數據緩存同步到磁盤(快)
always:表示每次更新操作後手動調用fsync()將數據寫到磁盤(慢,安全)
everysec:表示每秒同步一次(折衷,默認值)

32.vm-enabled no

指定是否啟用虛擬內存機制,默認值為no,簡單的介紹一下,VM機制將數據分頁存放,由Redis將訪問量較少的頁即冷數據swap到磁盤上,訪問多的頁面由磁盤自動換出到內存中(在後面的文章我會仔細分析Redis的VM機制)

33 vm-swap-file /tmp/redis.swap

虛擬內存文件路徑,默認值為/tmp/redis.swap,不可多個Redis實例共享

34 vm-max-memory 0

將所有大於vm-max-memory的數據存入虛擬內存,無論vm-max-memory設置多小,所有索引數據都是內存存儲的(Redis的索引數據 就是keys),也就是說,當vm-max-memory設置為0的時候,其實是所有value都存在於磁盤。默認值為0

35.vm-page-size 32

Redis swap文件分成了很多的page,一個對象可以保存在多個page上面,但一個page上不能被多個對象共享,vm-page-size是要根據存儲的 數據大小來設定的,作者建議如果存儲很多小對象,page大小最好設置為32或者64bytes;如果存儲很大大對象,則可以使用更大的page,如果不 確定,就使用默認值

36. vm-pages 134217728

設置swap文件中的page數量,由於頁表(一種表示頁面空閑或使用的bitmap)是在放在內存中的,,在磁盤上每8個pages將消耗1byte的內存。

37 vm-max-threads 4

設置訪問swap文件的線程數,最好不要超過機器的核數,如果設置為0,那麽所有對swap文件的操作都是串行的,可能會造成比較長時間的延遲。默認值為4

38 glueoutputbuf yes

設置在向客戶端應答時,是否把較小的包合並為一個包發送,默認為開啟

39

hash-max-zipmap-entries 64

hash-max-zipmap-value 512

指定在超過一定的數量或者最大的元素超過某一臨界值時,采用一種特殊的哈希算法

40. activerehashing yes

指定是否激活重置哈希,默認為開啟

41 include /path/to/local.conf

指定包含其它的配置文件,可以在同一主機上多個Redis實例之間使用同一份配置文件,而同時各個實例又擁有自己的特定配置文件

42 slowlog-log-slower-than 10000

單位microsecond,指定多慢的命令才會被記錄到慢日誌中,這個時間是命令的純執行時間,即不包括IO等的時間,若 < 0則不記錄慢日誌,若為0則記錄每一條命令

42 slowlog-max-len 1024

最大慢日誌記錄條數

二、redis-sentinel.conf配置項說明如下:

1.port 26379

sentinel監聽端口,默認是26379,可以修改。

2.sentinel monitor <master-name> <ip> <redis-port> <quorum>

告訴sentinel去監聽地址為ip:port的一個master,這裏的master-name可以自定義,quorum是一個數字,指明當有多少個sentinel認為一個master失效時,master才算真正失效。master-name只能包含英文字母,數字,和“.-_”這三個字符需要註意的是master-ip 要寫真實的ip地址而不要用回環地址(127.0.0.1)。

配置示例:

sentinel monitor mymaster 192.168.0.5 6379 2

3.sentinel auth-pass <master-name> <password>

設置連接master和slave時的密碼,註意的是sentinel不能分別為master和slave設置不同的密碼,因此master和slave的密碼應該設置相同。

配置示例:

sentinel auth-pass mymaster 0123passw0rd

4.sentinel down-after-milliseconds <master-name> <milliseconds>

這個配置項指定了需要多少失效時間,一個master才會被這個sentinel主觀地認為是不可用的。 單位是毫秒,默認為30秒

配置示例:

sentinel down-after-milliseconds mymaster 30000

5.sentinel parallel-syncs <master-name> <numslaves>

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

配置示例:

sentinel parallel-syncs mymaster 1

6. sentinel failover-timeout <master-name> <milliseconds>

failover-timeout 可以用在以下這些方面:

1. 同一個sentinel對同一個master兩次failover之間的間隔時間。

2. 當一個slave從一個錯誤的master那裏同步數據開始計算時間。直到slave被糾正為向正確的master那裏同步數據時。

3.當想要取消一個正在進行的failover所需要的時間。

4.當進行failover時,配置所有slaves指向新的master所需的最大時間。不過,即使過了這個超時,slaves依然會被正確配置為指向master,但是就不按parallel-syncs所配置的規則來了。

配置示例:

sentinel failover-timeout mymaster1 20000

7.sentinel的notification-script和reconfig-script是用來配置當某一事件發生時所需要執行的腳本,可以通過腳本來通知管理員,例如當系統運行不正常時發郵件通知相關人員。對於腳本的運行結果有以下規則:

若腳本執行後返回1,那麽該腳本稍後將會被再次執行,重復次數目前默認為10

若腳本執行後返回2,或者比2更高的一個返回值,腳本將不會重復執行。

如果腳本在執行過程中由於收到系統中斷信號被終止了,則同返回值為1時的行為相同。

一個腳本的最大執行時間為60s,如果超過這個時間,腳本將會被一個SIGKILL信號終止,之後重新執行。

1).sentinel notification-script <master-name> <script-path>

通知型腳本:當sentinel有任何警告級別的事件發生時(比如說redis實例的主觀失效和客觀失效等等),將會去調用這個腳本,這時這個腳本應該通過郵件,SMS等方式去通知系統管理員關於系統不正常運行的信息。調用該腳本時,將傳給腳本兩個參數,一個是事件的類型,一個是事件的描述。如果sentinel.conf配置文件中配置了這個腳本路徑,那麽必須保證這個腳本存在於這個路徑,並且是可執行的,否則sentinel無法正常啟動成功。

配置示例:

sentinel notification-script mymaster /var/redis/notify.sh

2).sentinel client-reconfig-script <master-name> <script-path>

當一個master由於failover而發生改變時,這個腳本將會被調用,通知相關的客戶端關於master地址已經發生改變的信息。以下參數將會在調用腳本時傳給腳本:

<master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>

目前<state>總是“failover”, <role>是“leader”或者“observer”中的一個。 參數 from-ip, from-port, to-ip, to-port是用來和舊的master和新的master(即舊的slave)通信的。這個腳本應該是通用的,能被多次調用,不是針對性的。

配置示例:

sentinel client-reconfig-script mymaster /var/redis/reconfig.sh

Redis.conf及其Sentinel.conf配置項詳細說明