<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在web伺服器中,高可用是指伺服器可以正常存取的時間,衡量的標準是在多長時間內可以提供正常服務(99.9%、99.99%、99.999%等等)。
但是在Redis語境中,高可用的含義似乎要寬泛一些,除了保證提供正常服務( 如主從分離、快速容災技術),還需要考慮資料容量的擴充套件、資料安全不會丟失等。
Redis的高可用
Redis中,實現高可用的技術主要包括持久化、主從複製、哨兵和cluster叢集
持久化:持久化是最簡單的高可用方法(有時甚至不被歸為高可用的手段),主要作用是資料備份,即將資料儲存在硬碟,保證資料不會因程序退出而丟失。
主從複製:主從複製是高可用Redis的基礎,哨兵和叢集都是在主從複製基礎上實現高可用的。主從複製主要實現了資料的多機備份(和同步),以及對於讀操作的負載均衡和簡單的故障恢復。
缺陷:故障恢復無法自動化,寫操作無法負載均衡,儲存能力受到單機的限制。
哨兵:在主從複製的基礎上,哨兵實現了自動化的故障恢復。(主掛了,找一個從成為新的主,哨兵節點進行監控)
缺陷:寫操作無法負載均衡,儲存能力受到單機的限制;哨兵無法對從節點進行自動故障轉移,在讀寫分離場景下,從節點故障會導致讀服務不可用,需要對從節點做額外的監控、切換操作。
Cluster叢集:通過叢集,Redis解決了寫操作無法負載均衡,以及儲存能力受到單機限制的問題,實現了較為完善的高可用方案(6臺起步,成雙成對,3主3從)
Redis是記憶體資料庫,資料都是儲存在記憶體中,為了避免伺服器斷電等原因導致Redis程序異常退出後資料的永久丟失,需要定期將Redis中的資料以某種形式(資料或命令)從記憶體儲存到硬碟;當下次Redis重啟時,利用持久化檔案實現資料恢復。除此之外,為了進行災難備份,可以將持久化檔案拷貝到一個遠端位置。
災難備份:一般做異地備份,發生災難後切換節點。
Redis提供兩種方式進行持久化
由於AOF持久化的實時性更好,即當程序意外退出時丟失的資料更少,因此AOF是目前主流的持久化方式,不過RDB持久化仍然有其用武之地。(RDB體積小,恢復速度更快。對效能影響較小。
RDB持久化是指在指定的時間間隔內將記憶體中當前程序中的資料生成快照儲存到硬碟(因此也稱作快照持久化),用二進位制壓縮儲存,儲存的檔案字尾是rdb;當Redis重新啟動時,可以讀取快照檔案恢復資料。
RDB持久化的觸發分為手動觸發和自動觸發
手動觸發
save命令和bgsave命令都可以生成RDB檔案
save命令阻塞Redis伺服器程序,直到RDB檔案建立完畢為止,在Redis伺服器阻塞期間,伺服器不能處理任何命令請求。
bgsave命令會建立一個子程序,由子程序來負責建立RDB檔案,父程序(即Redis主程序)則繼續處理請求。
bgsave命令執行過程中,只有fork子程序時會阻塞伺服器,而對於save命令,整個過程都會阻塞伺服器,因此save已基本被廢棄,線上環境要杜絕save的使用。
自動觸發
在自動觸發RDB持久化時,Redis也會選擇bgsave而不是save來進行持久化。
自動觸發最常見的情況是在組態檔中通過save m n 指定當m秒內發生n次變化時,會觸發bgsave。
vim /etc/redis/6379.conf219行以下三個save條件滿足任意一個時,都會引起bgsave的呼叫save 900 1 #當時間到900秒時,如果redis資料發生了至少1次變化,則執行bgsavesave 300 10 #當時間到300秒時,如果redis資料發生了至少10次變化,則執行bgsavesave 60 10000 #當時間到60秒時,如果redis資料發生了至少10000次變化,則執行bgsave242行開啟RDB檔案壓縮rdbcompression yes254行 指定RDB檔名dbfilename dump.rdb264行 指定RDB檔案和AOF檔案所在目錄dir /var/lib/redis/6379
由此可見RDB時效性不夠,最快也需60秒備份一次,如果50幾秒伺服器宕了,則備份失敗
其他觸發機制
除savemn以外,還有其他情況也會觸發
1、Redis父程序首先判斷:當前是否在執行save,或 bgsave/ bgrewriteaof 的子程序,如果在執行則bgsave命令直接返回。
2、父程序執行fork操作建立子程序,這個過程中父程序是阻塞的,Redis不能執行來自使用者端的任何命令。
3、父程序fork後,bgsave 命令返回"Background saving started" 資訊並不再阻塞父程序,並可以響應其他命令。
4、子程序建立RDB檔案,根據父程序記憶體快照生成臨時快照檔案,完成後對原有檔案進行原子替換。(原子替換:檔案整體替換,要麼都發生,要麼都不發生)
5、子程序傳送訊號給父程序表示完成,父程序更新統計資訊。
啟動時載入
開啟AOF
Redis伺服器預設開啟RDB,在/etc/redis/6379.conf組態檔中
/etc/init.d/redis_6379 restart
#重啟redis
由於需要記錄Redis的每條寫命令,因此AOF不需要觸發。
流程包括:
Redis提供了多種AOF快取區的同步檔案策略,策略涉及到作業系統的write函數和fsync函數,說明如下:
AOF快取區的同步檔案策略存在三種同步方式
檔案重寫之所以能夠壓縮AOF檔案,是因為
rewrite之後aof檔案會儲存keys的最後狀態,清除掉之前冗餘的,來縮小這個檔案。
由此可以看出,由於重寫後AOF執行的命令減少了,檔案重寫既可以減少檔案佔用的空間,也可以加快恢復速度。
檔案重寫的觸發方式
只有當這兩個選項同時滿足,才會自動觸發AOF重寫
auto-aof-rewrite-percentage 100
#檔案的大小超過基準百分之多少後觸發bgrewriteaof。預設這個值設定為100,意味著當前aof是基準大小的兩倍的時候觸發bgrewriteaof。把它設定為0可以禁用自動觸發的功能。 即當前AOF檔案大小(即aof_current_size)是上次紀錄檔重寫時AOF檔案大小(aof_base_size)兩倍時,發生BGREWRITEAOF操作。 注意:例如上次檔案達到100M進行重寫,那麼這次需要達到200M時才進行重寫。檔案需要越來越大,所以一般不使用自動重寫。如果使用自動重寫,需要定期手動重寫干預一次,讓檔案要求恢復到100M。
auto-aof-rewrite-min-size 64mb
#當檔案大於64M時才會進行重寫 #當前aof檔案大於多少位元組後才觸發。當前AOF檔案執行BGREWRITEAOF命令的最小值,避免剛開始啟動Reids時由於檔案尺寸較小導致頻繁的BGREWRITEAOF
(1)Redis父程序首先判斷當前是否存在正在執行bgsave/bgrewriteaof的子程序,如果存在則bgrewriteaof命令直接返回,如果存在bgsave命令則等bgsave執行完成後再執行。(正常情況下使用AOF就會使用AOF進行記錄,不會使用RDB。主從複製時會自動觸發bgsave命令)
(2)父程序執行fork操作建立子程序,這個過程中父程序是阻塞的(無法接受任何使用者端的請求)。
(3.1)父程序fork後,bgrewriteaof 命令返回"Background append only file rewrite started" 資訊並不再阻塞父程序,並可以響應其他命令。Redis的所有寫命令依然寫入AOF緩衝區,並根據appendfsync策略同步到硬碟,保證原有AOF機制的正確。
(3.2)由於fork操作使用寫時複製技術,子程序只能共用fork操作時的記憶體資料。由於父程序依然在響應命令,因此Redis使用AOF重寫緩衝區(aof_rewrite_ buf)儲存這部分資料,防止新AOF檔案生成期間丟失這部分資料。也就是說,bgrewriteaof執行期間,Redis的寫命令同時追加到aof_ buf和aof_rewirte_ buf兩個緩衝區。 (保證新寫入的資料不丟失)
(4)子程序根據記憶體快照,按照命令合併規則寫入到新的AOF檔案。
(5.1)子程序寫完新的AOF檔案後,向父程序發訊號,父程序更新統計資訊,具體可以通過info persistence檢視。
(5.2)父程序把AOF重寫緩衝區的資料寫入到新的AOF檔案,這樣就保證了新AOF檔案所儲存的資料庫狀態和伺服器當前狀態一致。
(5.3)使用新的AOF檔案替換老檔案,完成AOF重寫。(替換是原子性的)
啟動時載入
RDB檔案緊湊,體積小,網路傳輸快,適合全量複製;恢復速度比AOF快很多。當然,與AOF相比, RDB最重要的優點之一是對效能的影響相對較小。
(體積小,恢復速度更快,對效能影響較小。)
(實時性差、相容性差、在fork子程序時會阻塞父程序。)
方式一:進入資料庫檢視
方法二:命令列檢視
記憶體碎片率計算方式
記憶體碎片率=Redis向作業系統申請的記憶體 / Redis中的資料佔用的記憶體
mem_fragmentation_ratio = used_memory_rss / used_memory
mem_fragmentation_ratio:記憶體碎片率。
used_memory_rss:是Redis向作業系統申請的記憶體。
used_memory:是Redis中的資料佔用的記憶體。
used_memory_peak:redis記憶體使用的峰值。
跟蹤記憶體碎片率,對理解Redis範例的資源效能是非常重要的:
config set activedefrag yes #自動碎片清理
memory purge #手動碎片清理
redis範例的記憶體使用率超過可用最大記憶體,作業系統將開始進行記憶體與swap空間交換。
避免記憶體交換髮生的方法
記憶體清理策略,保證合理分配redis有限的記憶體資源。
當記憶體使用達到設定的最大閾值時,需選擇一種key的回收策略,預設情況下回收策略是禁止刪除(noenviction)。
修改 /etc/redis/6379.conf 檔案中maxmemory-policy屬性
設定使用者端連線超時時間
使用者端最大連線數
自動碎片清理
最大記憶體閥值
key回收策略。
控制key的長度
控制元素的大小
資料結構:Redis支援多種資料結構,包括字串、雜湊表、列表、集合和有序集合。選擇正確的資料結構可以提高效能並減少記憶體使用量。
設定過期key:強制要求所有的key必須設定過期時間,以優化redis記憶體。
冷熱分離:熱key需要單獨存放並分配合理的資源,防止大流量下直接沖垮整個快取系統。
資料壓縮:可以採用snappy、gzip 等壓縮演演算法來先將資料壓縮後再存入快取中,來節約redis的記憶體空間,但這種方法會使使用者端在讀取時還需要解壓縮,在這期間會消耗更多CPU資源,你需要根據實際情況進行權衡。建議,只是在redis匱乏時的一種方案。
記憶體淘汰優化:杜絕使用預設的記憶體淘汰策略,避免在業務擴充套件下Redis的記憶體持續膨脹,需要根據你的業務設定對應記憶體淘汰策略。
過期策略優化:由於redis採用的是定期刪除+懶載入刪除策略,且這個過程在redis 6.0之前是在主執行緒上執行的,建議所有key的過期時間用亂數打散,杜絕大批次的資料同時過期,拉胯redis的效能和造成快取雪崩。強制規範。
持久化優化:Redis支援兩種持久化選項:RDB和AOF。選擇正確的持久化選項可以提高效能並確保資料安全。
架構優化:讀寫分離能最大限度提高redis的效能,其中主庫負責資料寫入,從庫負責資料讀取;分片叢集是解決超大量資料導致效能瓶頸方案,如rediscluster。以上是在大流量下提高redis效能在架構上的優化。
lazy-free:在redis4.0+中支援,開啟lazy-free機制後,由主執行緒刪除bigkey,而較耗時的記憶體釋放會在後臺執行緒中執行,不會影響到主執行緒。
叢集:使用Redis叢集:如果Redis伺服器無法滿足效能需求,可以使用Redis叢集來擴充套件Redis伺服器。Redis叢集可以將資料分片並分佈在多個Redis伺服器上,從而提高效能和可延伸性。
使用管道:Redis支援管道操作,可以將多個命令一次性傳送到Redis伺服器,從而減少網路延遲。
以上就是Redis高可用之持久化的詳細內容,更多關於Redis持久化的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45