天天看點

Redis的運維實戰 ——仲肥

内容簡要:

一、Redis社群

二、阿裡雲Redis

三、企業版Tair

(一)Redis社群發展曆程

Redis的運維實戰 ——仲肥

Redis于2009年誕生,從第一個版本至今已經經曆了12年,目前也是全球最受歡迎的KV資料庫,在各個領域都有大規模的應用。社群基本上每1~2年就會有一個版本推出,大版本為X.0格式,如3.0、4.0、5.0、6.0,小版本如3.2。每一個大版本都會有一些重要的特性,而小版本一般都會有一些局部特性的增強。

從2.8版本開始,Redis就有很多功能完備的特性,已經實作基本的資料集以及一系列使用指令,如簡單的字元串String, List的資料結構,還有字典型的Hash,集合型的Set以及有序集合Sorted Set,十分貼合軟體開發的實際需求。

同時,支援主備複制和持久化,對服務的可用性和資料的可靠性都有一定的保證,而且支援像事務Multi、Exec這種批量操作。還有内置的Lua虛拟機,可以在Redis裡面執行Lua腳本,以及像阻塞操作,比如Blocking的Brpop,還有事件通知等進階特性,此時的Redis已初步具備在生産環境中使用的能力。

2015年社群推出3.0版本,釋出叢集Cluster這一重量級的特性。在2.8版本之前都隻是支援主從版本,即最多一個節點提供服務。叢集版本之後就可以有很多節點共同組成一個叢集來提供服務,這樣可以有效地擴充資料的存儲能力和服務的性能。社群提供了叢集管理的軟體,友善平時對叢集的運維。

2016年推出3.2版本,主要是對Lua複制等方面進行優化。

2017年推出4.0版本,這個版本有很多重量級的特性。如Lazy Free,可以對Big Key進行秒删的,避免業務清理Big Key時造成Latency時延的突增,讓運作更平滑更穩定,業務也就更穩定。

PSYNC2是對原有的PSYNC協定的增強,在各個主從複制的場景下面做了相當多的優化,大大減少了在實際場景中進行全量複制的情況,有效節省了CPU、磁盤還有網絡帶寬等資源。

Modules可以讓使用者自定義資料結構和指令,相比于之前的Lua腳本,Modules更為靈活,可以讓Redis在各種定制的業務中發揮更大的作用。

2018年10月份推出5.0版本,主要是釋出Streams資料結構,結合了List和PubSub的特性,讓Redis可以作為消息中間件使用。

2020年釋出6.0版本,是Redis發展到現在最具有企業特性的版本。其中就包含大家期盼已久的IO多線程,在性能上進行非常大的優化,通過将網絡收發做成多線程化,提升了Redis的處理能力,拓展極限的性能。

另外像ACL開始支援使用者的概念,可以對不同使用者進行指令級别的權限管理。TLS提供網絡傳輸上的安全加密,使得Redis得到更好的安全保障。Client side cache為使用者提供了更強的能力來建構本地緩存。

2020年另外一個大事件就是Redis之父Antirez宣布退出,不再參與Redis的開發和社群的營運,去追求更廣闊的星辰大海。同時Antirez建議一直以來參與Redis社群維護跟建設的核心貢獻者,留下來一起組建Core Team團隊,負責今後Redis的營運。

就這樣, Redis Core team團隊正式成立,開始接管Redis社群的維護和營運。2021年推出了6.2版本,這也是Core Team成立之後釋出的第一個版本,廣泛采納許多使用者的需求和建議。如對Redis指令進行了豐富的擴充,也做了很多性能優化和簡化運維方面的工作,這個版本目前也已經Release,歡迎大家去使用。

(二)Redis社群現狀

目前社群Core team一共有5名成員,3名來自于Redis Labs,1名來自亞馬遜雲服務(AWS),1人來自阿裡雲,這5名成員共同組成了Core team,維護社群的建設。

目前,Core team每兩周會舉行一次線上會議,會議内容如PR要不要合并,然後有沒有一些好的建議能從使用者那邊吸收過來的,有沒有一些使用者的需求可以得到實作,大家提出來的這些Issue要如何解決,同時也會讨論制定未來的發展方向,如7.0版本的Roadmap現在就正在讨論中。

比如要對主從複制、持久化與資源管理等做優化。由于現在管理Redis記憶體的話,資料區跟管理區是沒有區分的,是以7.0版本在這方面也會做出優化。

Redis的運維實戰 ——仲肥

Redis發展到現在,從最初的2萬行代碼,到現在6.2版本已經有12萬行代碼。從代碼量上可以看出,Redis的功能越來越複雜,同時也意味着提供的功能越來越豐富。

(一)阿裡雲Redis産品系列

Redis系列産品主要分為三大系列,分别是标準版、叢集版與讀寫分離版,适用于不同的業務場景。

Redis的運維實戰 ——仲肥

标準版采用主從模式搭建,主節點提供日常的通路需求,備節點是一個熱備,提供HA高可用。Master一旦發生當機或者其它異常,會在30秒内自動切換到備節點,保證業務平穩運作,并且相容社群的協定。

叢集版是多個Redis節點的組合,在容量和性能上都有大幅提升,滿足使用者對容量與高性能的需求,同時支援直連和代理兩種通路模式。

直連模式與社群Cluster協定完全一緻,這同時需要業務使用支援Cluster協定的Smart Client接入通路。代理模式額外開發了Proxy元件,通過Proxy元件通路業務的話,就可以隻通過一個統一的位址通路Redis叢集。用戶端的請求會通過代理伺服器轉發到不同的分片,不需要Smart Client就可以通路整個Redis的叢集,降低了應用開發的難度和業務代碼的複雜度。

讀寫分離闆是由主備節點和隻讀節點以及Proxy代理一起組成的系統。代理節點會自動把讀寫請求路由分發到Master節點和隻讀節點,用來支撐這種寫少讀多的業務場景。

(二)阿裡雲Redis運維體系

Redis的運維實戰 ——仲肥

阿裡雲建立了一套Redis的運維體系,涵蓋日常運維管理各方面的需求,例如執行個體運作狀況實時和曆史的監控,配置告警,修改參數等,以及在接入層提供各種類型的連接配接通路。

資料安全方面開發了賬号體系,在網絡安全方面開發了SSL提供網絡安全傳輸加密,以及定期的備份恢複功能。如果發生誤操作的話,也可以及時恢複資料,并且支援實時的熱點分析以及離線的資料分析,讓使用者對業務的運作狀态有更直覺的了解。

同時我們還提供了審計日志,當業務需要糾察時可以進行溯源,這些功能都可以通過控制台來接入使用。

(三)性能監控

1.标準版

Redis的運維實戰 ——仲肥

性能監控是非常基礎且有用的一環,也是使用者經常使用的功能。

Redis提供了非常豐富的監控項,從執行個體的基礎運作狀态,如CPU、記憶體、QPS和網絡帶寬,以及各種類型Key的數量,如過期key是否被删除,Key的總量等。還有像執行個體運作的最大延遲,平均延遲,支援自定義監控項,對各種資料結構進行監控。

2.叢集版

Redis的運維實戰 ——仲肥

叢集版支援對叢集架構下面各種名額的檢視,如Proxy節點的運作名額,獨立資料節點運作名額等,同時也可以檢視節點聚合的運作狀态。

3.監控頻率

Redis的運維實戰 ——仲肥

使用者對于監控頻率有需求的話,可以設定監控的頻率,預設為60秒/次。如果說需要細粒度監控,可以在控制台上進行修改。目前支援最細粒度為是5秒/次采集。

(四)連接配接管理

Redis的運維實戰 ——仲肥

在連接配接管理方面,我們同時支援内網的VPC網絡通路和公網通路,公網通路一般是做練習或者調試。

在叢集版的話,我們提供直連通路和Proxy普通通路的方式,都可以在控制台連接配接管理進行開通。

(五)賬号管理

1.建立賬号

登入控制台 -> 點選執行個體ID -> 賬号管理 -> 建立賬号

Redis的運維實戰 ——仲肥

關于賬号管理,在實際的業務場景中,有時一個執行個體可能會有多個業務線使用,不同的業務線用法不一樣。

為了避免互相幹擾,需要做好權限控制。目前雲Redis支援設定賬号管理體系,支援讀寫賬号和隻讀賬号,幫助使用者更加靈活地管理執行個體,最大限度避免誤操作,提升資料的安全性。

Redis的運維實戰 ——仲肥

首先進入執行個體的管理頁面,然後點選賬号管理,進入後在右上角點選建立賬号,就可以看到建立一個讀寫或者隻讀的賬号。

2.權限修改

Redis的運維實戰 ——仲肥

另外,使用者可以對已有的賬号進行修改。比如說可以把一個隻讀的賬号改為讀寫賬号。如果賬号不再使用,也可以進行删除,非常友善地滿足日常運維的管理需求。

(六)審計日志

1.開通服務

Redis的運維實戰 ——仲肥

審計日志是對實際的運作操作記錄提供的一站式管理服務,由阿裡巴巴集團經曆了大量大資料場景之後錘煉而成,業務無需額外的開發,就可以在雲端完成運作日志的采集、消費投遞以及查詢分析,是提升運維與營運效率非常有用的工具。

審計日志服務可以幫助使用者時刻掌握産品的運作狀況和安全。

Ø  具體操作步驟如下:

1)登入控制台

2)點選執行個體ID進入執行個體管理頁面

3)點選日志管理->審計日志

4)選擇審計日志設定

5)開通服務

開通審計日志之後,系統會記錄寫操作,也就是對資料進行修改後的操作就都會被記錄下來。審計的操作會有額外的性能消耗,大概有5%~15%的性能損失。

2.查詢日志

Redis的運維實戰 ——仲肥

審計日志開通之後,如果使用者需要檢視資料庫運作的曆史記錄,包括寫請求的記錄,可以在審計日志查詢進行操作,尋找Release的資源突增的這些原因。

例如查找哪些資料被修改、删除的記錄,雲資料庫Redis版的審計日志就可以提供這些線索,通過不同的過濾條件篩選日志,精确的定位目标記錄,可以選擇劃定時間,然後根據關鍵字,如IP,執行過哪些指令,有哪些賬号通路等關鍵字來對審計日志進行過濾,定位到之前的操作記錄。

阿裡雲資料庫Redis企業版叫做阿裡雲Tair,是基于阿裡集團内部使用的Tair産品研發的雲上托管鍵值對緩存服務。

從2009年,阿裡雲Tair就開始承載着阿裡巴巴集團的緩存業務,曆經天貓雙11、優酷春晚、菜鳥、高德等各種業務場景的磨練,是一款真正的企業級緩存産品。如今,基于Tair演進的Redis企業版也是阿裡巴巴集團調用量最大的服務之一,在多年的阿裡巴巴雙11全球狂歡節上也經受住了考驗。

(一)社群版Redis與企業版Tair

Redis的運維實戰 ——仲肥

目前,阿裡雲提供社群版Redis和企業版Tair兩款産品,分别解決不同的業務場景。

社群版主要是根據開源版本的疊代解決使用者基本需求,例如解決Redis自建部署運維的問題,開箱即用。如果業務要擴充,也可支援線上靈活的升降配,同時可以從主備到叢集靈活編配。

當Redis自建時,排查比較困難的話,也可以提供細粒度的監控支援,以及像審計這種溯源的操作。此外,它完全相容社群版的,在安全方面提供像SSL安全通路連接配接和白名單服務。

還有一些對Redis的一些優化,比如在社群版本身早期版本的話,短連結場景是性能不佳,還有一些複雜的操作會導緻執行個體陷入循環,此時容易誤判造成誤切換。還有像Redis本身不提供實時的熱點查詢服務,針對以上問題,我們在雲上的社群版都進行了很多改進。

企業版主要是為了解決使用者的痛點,提升通路性能,擴充應用場景,而且從通路延遲、持久化需求、整體成本這三個核心的次元考量,分别開發了企業版性能增強版,持久記憶體版和容量存儲版,來滿足不同場景下的業務需求。今天我們主要介紹的是跨域複制多活和PITR按時間點恢複這兩個特性。

(二)全球分布式緩存

1.功能簡介

随着業務的發展,在業務分布比較廣的時候,如果還采用跨地域通路,此時延遲就會比較高,影響使用者體驗。阿裡雲推出Redis全球多活分布式緩存功能,可以幫助業務解決這種跨地域通路帶來的延遲問題。

Redis的運維實戰 ——仲肥

Ø  分布式緩存的功能有如下三點優勢:

1)多中心;

2)資料庫多IDC同步,就近讀;

3)高業務擴充性

例如可以直接建立或指定需要同步的子執行個體,不需要通過業務自身的設計就可以實作。可以讓業務更專注與上層的邏輯開發,而且提供了跨越複制的能力,快速地實作異地多活、異地災備。

可以應用于跨地域資料同步場景,像多媒體、遊戲、電商等等各個行業,進行全球化的業務部署。

Redis的全球分布式緩存具體的實施方案為通過建立資料通道,将多個子執行個體組成一個邏輯的分布式執行個體進行操作,所有子執行個體的讀寫都可以保持實時同步,輕松支援異地多個站點,同時對外提供服務的業務場景。

2.實際案例

Redis的運維實戰 ——仲肥

以導航為例,比如有三個資料中心:北京、上海與廣州,某使用者現在從北京開車去往廣州,導航要實時地推送地理位置,這個時候就會遇到DNS漂移的問題。

DNS漂移是一個邊界效應,通常的大概影響5%~7%的使用者。在導航中跨越邊界的時候就會出現大量的交叉通路,導緻使用者獲得不同的資料,此時使用者體驗很差。如果要在業務上解決這個問題的話會很複雜,可靠性也不高。如果通過我們提供的全球分布式緩存,建立三地六向的同步,在北京、廣州和上海三地六向同時發送資料,讓使用者獲得更加流暢的體驗。

3.開通方式

開通方式分為兩種:新購開通和轉化開通。

Redis的運維實戰 ——仲肥

Ø  新購開通操作步驟:

1)控制台左側導航欄,點選全球多活;

2)右上角點選建立執行個體->新購分布式執行個體;

3)根據需求建立執行個體。

Ø  轉化開通操作步驟:

2)右上角點選執行個體建立->已有企業版執行個體轉化;

3)選擇适當執行個體轉化。

在分布式執行個體建立完成之後隻包含一個子執行個體,此時需要為該分布式執行個體添加多個子執行個體才能建立通道,完成整個全球多活分布式執行個體的建立,滿足子實力之間實時資料同步的需求。

Redis的運維實戰 ——仲肥

Ø  添加子執行個體操作步驟:

1)進入全球多活頁面;

2)找到目标分布式執行個體,點選[+]圖示;

3)點選子執行個體清單的添加分布式子執行個體;

4)建立和已有子執行個體規格一緻且不同地域的子執行個體。

4.查詢延遲

Redis的運維實戰 ——仲肥

Ø  名額說明

1)status

同步狀态,1為正常,0為異常。

2)ops

每秒從源執行個體同步的binlog條數。

3)current_binlog_sync_delay_time

同步延遲,機關為秒。

(三)資料閃回

1.功能介紹

Redis的運維實戰 ——仲肥

雲資料庫Redis具有性能卓越、架構靈活、安全性強、可用性高等特點,越來越多的應用開始把雲資料庫Redis作為持久化存儲使用,此時可靠的持久化存儲就顯得尤為重要。

原本社群版隻提供的RDB不能滿足需求,企業版Tair優化了持久化的機制,将AOF增量歸檔,實作友善快捷的秒級恢複,提升運維的便捷性。具體就是PITR按時間點的恢複,PITR按時間點恢複就是Backup/Restore的終極形态,支援秒級的資料恢複,防止删庫跑路。

例如我們記錄了從某一個時間點之後所有的操作資料,如果說需要恢複到某一個時間點的話,以進行克隆建立一個新執行個體,一直恢複到這個時間點即可。具體可以應用在進階的資料安全場景以及遊戲回檔,還有版本降級等等。

Ø  任意時間點的資料恢複:

1)Backup/Restore的終極形态;

2)支援按秒級的資料恢複;

3)防止删庫跑路;

4)Clone & Switching随時回切。

Ø  場景:

1)進階資料安全;

2)遊戲回檔;

3)版本降級。

2.使用方式

Redis的運維實戰 ——仲肥
Redis的運維實戰 ——仲肥

Ø  前提條件:

1)執行個體為企業版(性能增強型);

2)AOF落盤處于開啟狀态。

Ø  操作步驟:

1)在資料閃回頁簽,點選馬上閃回;

2)自動跳轉至克隆執行個體頁面;

3)在建立克隆執行個體時選擇要恢複的時間點。