redis學習筆記(2):

四、redis之RDB和AOF持久化

持久化:將redis存放在內存的數據的更新異步備份到磁盤上

持久化方式:

快照:redis=》rdb、mysql=》dump

寫日誌:redis=》aof、mysql=》binlog

1.RDB(redis detabases)

1.1、同步快照(節省內存資源;redis服務屬於單線程,所以在快照過程中會出現阻塞現象)

    client發送save命令,生成rdb二進制文件

1.2、異步快照(fork一個進程備份數據出現阻塞【很快,可忽略】、消耗內存、但redis服務不會出現阻塞現象)

    client發送bgsave命令,生成rdb二進制文件

1.3、自動快照(不需要客戶端發送命令,redis服務根據在一定時間內改變數量判定是否需要快照。配置文件:save seconds changes)

    save 900 1(900秒有1個數據改變時進行異步備份)

    save 300 10(300秒有10個數據改變時進行異步備份)

    save 60 10000(60秒有10000個數據改變時進行異步備份)

1.4、觸發機制-不容忽略方式

    全量複製

    debug reload

    shutdown

1.5、RDB總結

    rdb時redis內存到硬盤的快照,用於持久化

    save通常會阻塞redis

    bgsave不會阻塞redis,但是會fork新進程

    save自動配置滿足任一就會被執行

    有些觸發機制不容忽視

    耗時耗性能,不可控,丟失數據

2.AOF(append only file)

1、aof三種策略

1.1:always(redis寫命令刷新到緩衝區,每條寫命令都把緩衝區fsync到硬盤,即:aof文件。不會丟失數據、IO開銷大)

1.2:everysec(【默認值】redis寫命令刷新到緩衝區,每秒把緩衝區fsync到硬盤,即:aof文件。宕機只會丟失1秒的數據、)

1.3:no(redis寫命令刷新到緩衝區,根據操作系統決定把緩衝區fsync到硬盤,即:aof文件。不用管,而不可控)

2、aof重寫(把過期、重複、無效進行去除,化簡)=》減少硬盤佔用量,加速回復速度

2.1:bgrewriteaof

客戶端發送bgrewriteaof命令,redis服務fork異步一個子進程進行aof重寫

2.2:aof重寫配置

2.2.1、auto-aof-rewrite-min-size(aof文件重寫需要的尺寸【配置】)

2.2.2、auto-aof-rewrite-percentage(aof文件增長率【配置】)

2.2.3、aof_current_size(aof當前尺寸(單位:字節)【統計】)

2.2.4、aof_base_size(aof上次啓動和重寫的尺寸【單位:字節】【統計】)

    自動觸發時機(同時滿足):

        aof_current_size > auto-aof-rewrite-min-size、

     (aof_current_size - aof_base_size)/ aof_base_size > auto-aof-rewrite-percentage

3、aof配置

appendonly yes|no (打開或關閉aof持久化)

appendfilename ”appendonly-${port}.aof“(設置aof文件名稱)

appendfsync everysec|always|no(aof同步策略)

dir ”保存文件地址(日誌|rdb|aof文件)“

no-appendfsync-on-rewrite yes|no(aof重寫時是否允許正常的aof-append操作)

auto-aof-rewrite-percentage 100(增長率)

auto-aof-rewrite-min-size 64mb(最小尺寸)

aof-load-trunted yes (是否忽略aof錯誤)

3、RDB與AOF區別和抉擇

1.區別

啓動優先級:rdb低、aof高;體積:rdb小、aof大;恢復速度:rdb快、aof慢;數據安全性:rdb丟數據、aof根絕策略而定;輕重:rdb重、aof輕;

2.抉擇

小分片

緩存或者存儲

監控(硬盤、內存、負載、網絡)

足夠的內存

4.開發運維問題

1.fork線程

1.1:同步操作

1.2:與內存息息相關:內存越大,耗時約長(與機器類型有關)

1.3:info:lastest_fork_usec(查詢fork時間)

1.4:改善fork

1.4.1、有限使用物理機或者高校fork操作的虛擬技術

1.4.2、控制redis實例最大可用內存:maxmemory

1.4.3、合理配置linux內存分配策略:vm.overcommit_memory=1

1.4.4、降低fork頻率:例如放跨u你AOF重寫自動觸發時機,不必要的全量複製

2.子進程外開銷與優化

2.1:CPU

~開銷:RDB與AOF文件生成,屬於CPU密集型

~優化:不做CPU綁定,不和CPU密集型部署

2.2:內存

~開銷:fork內存開銷,copy-on-write

~優化:echo never > 

2.3:硬盤

~開銷:AOF和RDB文件寫入,可以i結合iostat,iotop分析

~優化:不要和高硬盤負載服務部署在一起:存儲服務,消息隊列等;no-appendsync-on-rewrite=yes;根據寫入量決定磁盤類型:例如ssd;單機多實例持久化文件目錄可以考慮分盤

3.AOF追加阻塞

3.1:阻塞定位

3.1.1、redis日誌

3.1.2、info Persistent(歷史的累計過程)

3.1.3、通過硬盤查看使用IO情況

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章