文章目錄
Redis 3.2.8 與 Redis-Windows 3.2.1 config 解析 - part 1 (INCLUDES,NETWORK,GENERAL)
前幾天在進行 Redis Server HA 設定時,發現有好幾個設定自己沒有實際使用過,更重要的是還有個設定我之前根本就誤會使用方式了,身為一個期望自己更好的工程師,一定要立馬來好好搞清楚才行,不然鬧了笑話事小,產生 bug 可就嚴重了
關於單位(units)
config 範例一開始指出關於 Redis 使用 memory 容量的單位說明
- 單位量詞無大小寫之分
- 單位用法
- 1k => 1000 bytes
- 1kb => 1024 bytes
- 1m => 1000000 bytes
- 1mb => 1024*1024 bytes
- 1g => 1000000000 bytes
- 1gb => 1024*1024*1024 bytes
關於引用(INCLUDES)
- 可以引用一個或多個 config template 來標準化管理 Redis
- 被引用的檔案需要被設定成可被引用
include
選項無法被 admin 或是 sentinel 的config rewrite
指令覆寫- 將 include 寫在 config 開頭可以避免在執行時期被其他指令覆寫
- 如果需要覆寫 include,就將指令寫在文件結尾,確保會被當做最後的值
- 範例:
include .\path\to\local.conf
include c:\path\to\other.conf
- 範例:
關於網路(NETWORK)
關於 bind > 如果沒有使用
bind
指令來設定, Redis 預設會監聽 server 上的可用網路 IP(我搞錯的設定就是這個,我原以為是白名單的概念,僅接受設定者的連線)- 可以使用
bind
指定監聽一個或多個 ip 如果 Redis 直接對外,監聽所有可用 IP 是非常危險的
範例
- 只允許透過
127.0.0.1
進行連線
bind 127.0.0.1
- 允許透過 192.16.1.100 及 10.0.01 的連線
bind 192.168.1.100 10.0.0.1
- 只允許透過
- 可以使用
關於 protected-mode
為了避免 Redis 直接曝露在網路,預設啟用保護模式。 保護模式啟用下,如果同時滿足以下兩個條件, Redis 只能接受 127.0.0.1 與 ::1 或是 unix socket 的連線:
- 沒有使用
bind
指令明確指定監聽接口 - 沒有使用
requirepass
設定密碼- 範例
protected-mode yes #啟用保護模式
protected-mode no #停用保護模式
- 範例
- 沒有使用
關於 port
- 指定 Redis 接受連線的 port (預設 6379)
若設為 0,會停用 TCP socket
- 範例:
port 6379
關於 TCP listen() backlog
這個部份我看不懂,以下僅提供個人理解用
- 屬於 linux kernel 的部份,TCP listen() 可以設定 handshake 處理的 queue 大小
- 在高用量的環境,建議將 backlog 設大,以避免 client 連線緩慢
- 相關資訊可以參考 Linux TCP socket 開發中 listen backlog 的含義,listen() 的 backlog 及 TCP 相關參數
範例
tcp-backlog 511
關於 Unix socket
- 用來指定 unix socket 的連線路徑,預設不啟用監聽 unix socket
範例
unixsocket /tmp/redis.sock
關於 timeout
- 指定秒數關閉閒置的連線,預設為 0 (不啟用)
範例
timeout 0
關於 TCP keepalive
如果值不為 0 則設定 TCP 的 SO_KEEPALIVE 值,主要有兩個好處:
- 檢測失效的連線
- 避免連接兩端的網路設備有問題而出現正常連線的假象
指定秒數發送 TCP ACK 訊號來進行確認
偵測到關閉連線需耗費兩倍設定值的時間
Redis 3.2.1 開始預設值為 300 秒
範例
tcp-keepalive 300
關於一般設定(GENERAL)
關於 daemon
- 預設不以 daemon(背景 service) 執行,以 command 方式啟動時會令 command prompt 進入互動模式
- 如果啟用 daemon,會將資料寫入 pid file
- windows - Redis 3.2.1 版不支援這個設定
範例
daemonize no
關於 supervised
這個選項我看不懂用途,以下提供個人理解用
- 透過
upstart
和systemd
指令來管理 daemon 用 - 可以用來確保 Redis 會自動重啟
- windows - Redis 3.2.1 版不支援這個設定
範例
supervised no
- 透過
關於 pidfile
- 用來指定 pid 路徑,會在啟動時寫入(建立檔案),結束時移除(檔案)
- 如果不是在 daemon 模式下
且
未指定 pid 路徑就不會建立 pid 檔 - 在daemon 模式下,需要使用 pid 檔,此時會使用預設路徑
/var/run/redis_6379.pid
- windows - Redis 3.2.1 版不支援這個設定
範例
pidfile /var/run/redis_6379.pid
關於 loglevel
- 指定 log 級別
- debug:最大量 log,適用於開發、測試階段
- verbose:次多 log
- notice:適量 log,適合 production
warning:僅重要、關鍵 log
範例
loglevel notice
關於 logfile
- 指定 log 位置及檔名
- 如果是空字串,就會使用 stdout(standard output) - windows 版 3.2.1 則是要指定
stdout
- 使用 daemon 且使用 standard output 時,log 會寫至
dev/null
範例
logfile ""
關於 syslog-enabled
- 將 log 寫至系統 log 中
- windows 環境下,使用 service 執行,會自動啟用
範例
syslog-enabled no
關於 syslog-ident
- 設定 系統 log 名稱
範例
syslog-enabled no
關於 syslog-facility
- 設定 syslog 設備
- 必需是 USER 或者 LOCAL0 到 LOCAL7
- windows 版 3.2.1 不支援這個設定
範例
syslog-facility local0
關於 databases
- 指定 redis instance db 數量
- 連線時未指定 db id ,預設使用 db 0
範例
databases 16
參考資料
文章作者 Yowko Tsai
上次更新 2021-10-28
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。