Redis重要引數回顧
最近有點鬧心.
先是昨天壁掛爐管子崩了,家裡發大水.
小花狸還把鑰匙扔廁所裡了,沒注意直接給沖走了..
晚上,有郵件報警.
才發現家裡鍵盤還讓小花狸玩壞了...
這孩子.太淘氣了
晚上9點半,叫車去單位處理.
發現Redis記憶體使用接近上限.已經使用了10G左右.
我調整了一下上限,解除了報警.
但是檢視top的時候,發現Redis-server cpu使用率達到100%.
昨天是崩潰的一天..
當時每秒執行400左右,設定並檢視慢日誌.沒有明顯問題.
後來想起,這個Redis有大量寫入.觸發了rdb持久化儲存.每分鐘fork一個子程式,進行轉儲匯出.那個CPU使用率達到100%的程式,應該是fork的子程式.
對業務應該沒有影響.畢竟Redis rdb是透過 Copy-on-write 寫時複製機制的.(好像就是修改請求,寫記憶體的新頁,不會修改原來的資料頁,讓fork的子程式做持久化.)
不過我還是修改了save的配置.減少rdb持久化頻率.畢竟每分鐘持久化一次,寫6G多檔案,沒有什麼必要.
修改之後,習慣性的檢視配置.
狗血的事情來了...
1) "dbfilename"
2) "authorized_keys"
。。。。。
91) "dir"
92) "/root/.ssh"
這是什麼鬼?這臺Redis是以root執行的..
當時晚上11點,倒抽一口涼氣...
馬拉個雞..這駭客是要砸我飯碗嗎?
由於我們伺服器都有ACL保護,所以這個漏洞原來也沒有太當回事.
終於都弄完了...
回顧一下Redis的幾個重要引數.
slave-serve-stale-data yes
當slave丟失master或者同步正在進行時,如果發生對slave的服務請求:
slave-serve-stale-data設定為yes則slave依然正常提供服務
slave-serve-stale-data設定為no則slave返回client錯誤:"SYNC with master in progress"
repl-ping-slave-period 10
slave傳送PINGS到master的時間間隔
repl-timeout 60
IO超時時間
repl-disable-tcp-nodelay no
解釋:
在slave和master同步後(傳送psync/sync),後續的同步是否設定成TCP_NODELAY
假如設定成yes,則redis會合並小的TCP包從而節省頻寬,但會增加同步延遲(40ms),造成master與slave資料不一致
假如設定成no,則redis master會立即傳送同步資料,沒有延遲
前者關注效能,後者關注一致性
repl-backlog-size 1mb
避免slave斷開重連之後,全量的資料同步
maxmemory-policy volatile-lru
noeviction: 不進行置換,表示即使記憶體達到上限也不進行置換,所有能引起記憶體增加的命令都會返回error
allkeys-lru: 優先刪除掉最近最不經常使用的key,用以儲存新資料
volatile-lru: 只從設定失效(expire set)的key中選擇最近最不經常使用的key進行刪除,用以儲存新資料
allkeys-random: 隨機從all-keys中選擇一些key進行刪除,用以儲存新資料
volatile-random: 只從設定失效(expire set)的key中,選擇一些key進行刪除,用以儲存新資料
volatile-ttl: 只從設定失效(expire set)的key中,選出存活時間(TTL)最短的key進行刪除,用以儲存新資料
maxmemory-samples 5
Redis中的LRU不是嚴格意義上的LRU演算法實現,是一種近似的LRU實現,主要是為了節約記憶體佔用以及提升效能。
Redis的LRU是取出配置的數目的key,然後從中選擇一個最近最不經常使用的key進行置換,maxmemory-samples預設的5
可以透過調整樣本數量來取得LRU置換演算法的速度或是精確性方面的優勢。
Redis不採用真正的LRU實現的原因是為了節約記憶體使用。雖然不是真正的LRU實現,但是它們在應用上幾乎是等價的
如果你將maxmemory-samples設定為10,那麼Redis將會增加額外的CPU開銷以保證接近真正的LRU效能,可以透過檢查命中率來檢視有什麼不同。
no-appendfsync-on-rewrite no
重寫 aof檔案的時候,是否呼叫fsync
還有一些引數,先整理這麼多吧。
先是昨天壁掛爐管子崩了,家裡發大水.
小花狸還把鑰匙扔廁所裡了,沒注意直接給沖走了..
晚上,有郵件報警.
才發現家裡鍵盤還讓小花狸玩壞了...
這孩子.太淘氣了
晚上9點半,叫車去單位處理.
發現Redis記憶體使用接近上限.已經使用了10G左右.
我調整了一下上限,解除了報警.
但是檢視top的時候,發現Redis-server cpu使用率達到100%.
昨天是崩潰的一天..
當時每秒執行400左右,設定並檢視慢日誌.沒有明顯問題.
後來想起,這個Redis有大量寫入.觸發了rdb持久化儲存.每分鐘fork一個子程式,進行轉儲匯出.那個CPU使用率達到100%的程式,應該是fork的子程式.
對業務應該沒有影響.畢竟Redis rdb是透過 Copy-on-write 寫時複製機制的.(好像就是修改請求,寫記憶體的新頁,不會修改原來的資料頁,讓fork的子程式做持久化.)
不過我還是修改了save的配置.減少rdb持久化頻率.畢竟每分鐘持久化一次,寫6G多檔案,沒有什麼必要.
修改之後,習慣性的檢視配置.
狗血的事情來了...
1) "dbfilename"
2) "authorized_keys"
。。。。。
91) "dir"
92) "/root/.ssh"
這是什麼鬼?這臺Redis是以root執行的..
當時晚上11點,倒抽一口涼氣...
馬拉個雞..這駭客是要砸我飯碗嗎?
由於我們伺服器都有ACL保護,所以這個漏洞原來也沒有太當回事.
終於都弄完了...
回顧一下Redis的幾個重要引數.
- #在預設情況下,如果RDB快照持久化操作被啟用(至少一個條件被啟用)並且持久化操作失敗,Redis則會停止接受更新操作。
- #這樣會讓使用者瞭解到資料沒有被正確的儲存到磁碟上。否則沒人會注意到這個問題,可能會造成災難。
- #
- #如果後臺儲存(持久化)操作程式再次工作,Redis會自動允許更新操作。
- #
- #然而,如果你已經恰當的配置了對Redis伺服器的監視和備份,你也許想關掉這項功能。
- #如此一來即使後臺儲存操作出錯,redis也仍然可以繼續像平常一樣工作。
- stop-writes-on-bgsave-error yes
- #是否在匯出.rdb資料庫檔案的時候採用LZF壓縮字串和物件?
- #預設情況下總是設定成‘yes’, 他看起來是一把雙刃劍。
- #如果你想在儲存的子程式中節省一些CPU就設定成'no',
- #但是這樣如果你的kye/value是可壓縮的,你的到處資料接就會很大。
- rdbcompression yes
- #從版本RDB版本5開始,一個CRC64的校驗就被放在了檔案末尾。
- #這會讓格式更加耐攻擊,但是當儲存或者載入rbd檔案的時候會有一個10%左右的效能下降,
- #所以,為了達到效能的最大化,你可以關掉這個配置項。
- #
- #沒有校驗的RDB檔案會有一個0校驗位,來告訴載入程式碼跳過校驗檢查。
- rdbchecksum yes
slave-serve-stale-data yes
當slave丟失master或者同步正在進行時,如果發生對slave的服務請求:
slave-serve-stale-data設定為yes則slave依然正常提供服務
slave-serve-stale-data設定為no則slave返回client錯誤:"SYNC with master in progress"
repl-ping-slave-period 10
slave傳送PINGS到master的時間間隔
repl-timeout 60
IO超時時間
repl-disable-tcp-nodelay no
解釋:
在slave和master同步後(傳送psync/sync),後續的同步是否設定成TCP_NODELAY
假如設定成yes,則redis會合並小的TCP包從而節省頻寬,但會增加同步延遲(40ms),造成master與slave資料不一致
假如設定成no,則redis master會立即傳送同步資料,沒有延遲
前者關注效能,後者關注一致性
repl-backlog-size 1mb
避免slave斷開重連之後,全量的資料同步
maxmemory-policy volatile-lru
noeviction: 不進行置換,表示即使記憶體達到上限也不進行置換,所有能引起記憶體增加的命令都會返回error
allkeys-lru: 優先刪除掉最近最不經常使用的key,用以儲存新資料
volatile-lru: 只從設定失效(expire set)的key中選擇最近最不經常使用的key進行刪除,用以儲存新資料
allkeys-random: 隨機從all-keys中選擇一些key進行刪除,用以儲存新資料
volatile-random: 只從設定失效(expire set)的key中,選擇一些key進行刪除,用以儲存新資料
volatile-ttl: 只從設定失效(expire set)的key中,選出存活時間(TTL)最短的key進行刪除,用以儲存新資料
maxmemory-samples 5
Redis中的LRU不是嚴格意義上的LRU演算法實現,是一種近似的LRU實現,主要是為了節約記憶體佔用以及提升效能。
Redis的LRU是取出配置的數目的key,然後從中選擇一個最近最不經常使用的key進行置換,maxmemory-samples預設的5
可以透過調整樣本數量來取得LRU置換演算法的速度或是精確性方面的優勢。
Redis不採用真正的LRU實現的原因是為了節約記憶體使用。雖然不是真正的LRU實現,但是它們在應用上幾乎是等價的
如果你將maxmemory-samples設定為10,那麼Redis將會增加額外的CPU開銷以保證接近真正的LRU效能,可以透過檢查命中率來檢視有什麼不同。
no-appendfsync-on-rewrite no
重寫 aof檔案的時候,是否呼叫fsync
還有一些引數,先整理這麼多吧。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2099173/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- redis - 學習筆記回顧Redis筆記
- Filecoin上海區塊鏈周重要內容回顧區塊鏈
- oracle重要初始引數Oracle
- JavaScript 回顧學習:變數JavaScript變數
- 2013年Linux領域重要事件回顧Linux事件
- Mysql重要配置引數的整理MySql
- ORACLE最重要的引數資訊 (轉)Oracle
- redis info引數詳解Redis
- redis 3.0 引數說明Redis
- 2013年Linux和開源界重要事件回顧Linux事件
- 基礎回顧
- Git指令回顧Git
- linux核心引數優化重要項Linux優化
- postgresql資料庫重要引數說明SQL資料庫
- setInterval 回撥函式傳引數函式
- 蝦米窮逼 VIP 事件回顧和由此引發的思考事件
- 回顧 Flutter 2021 重要時刻,奉上虎年紅包封面喜迎新年!Flutter
- 活動精彩回顧|GopherChina 2019乾貨回顧!Go
- 伺服器中的幾個重要引數伺服器
- 幾個重要的 ASM Disk Groups 引數ASM
- DSP晶片效能引數有哪些重要指標?晶片指標
- js回顧:原型鏈JS原型
- PHP 回顧之 cookiePHPCookie
- 回顧 crash log 分析
- javascript知識回顧JavaScript
- flex知識回顧Flex
- 5. SQL回顧SQL
- SpringMVC 回顧servletSpringMVCServlet
- GoogleDeveloperDay 回顧GoDeveloper
- 回顧工作5年
- PLSQL儲存回顧SQL
- mybatis---回顧jdbcMyBatisJDBC
- 關於Callback回撥,傳遞引數
- Redis日常運維-引數詳解Redis運維
- Redis配置檔案引數說明Redis
- redis配置檔案引數詳解Redis
- Mysql優化系列(1)--Innodb重要引數優化MySql優化
- 《Linux shell變數總結回顧》RHEL6(轉)Linux變數