天天看點

德歌:阿裡雲RDS PG最佳實踐

<b>直播視訊:</b>

德歌:阿裡雲RDS PG最佳實踐

(點選圖檔檢視視訊)

5月27日雲栖社群《雲資料庫rds for postgresql最佳實踐》的直播分享順利結束,來自阿裡雲的進階技術專家德歌與大家分享阿裡雲雲資料庫postgresql的最佳技術實戰,包括上雲實戰、資料遷移與同步、阿裡雲rds相關周邊元件用法、插件使用等内容。直播中德歌還就部分操作線上進行了示範。本次視訊直播的整理文章、視訊、幻燈片整理完畢,如下内容。

<b>上雲實踐</b>

在上雲之前,首先需要評估rds的規格,這是因為線下使用的硬體可能與線上的硬體不能一一對應,并且線上的rds可能還做了一定的優化。在評估rds規格的時候,需要考慮以下幾個方面:

可用區:

 盡量與應用伺服器在同一可用區;

 否則隻能通過公網位址通路。

資料庫版本:根據業務需求選擇,建議選擇新版本;

網絡:與應用伺服器在同一vpc,或者都在經典網絡,否則隻能通過公網位址通路;

容量:根據實際的需求購買,最後留有足夠餘量(用于存儲xlog,已經運作sql時可能産生的臨時檔案)。餘量建議不低于1gb、同時不低于實際資料空間的20%;

記憶體:建議大于活躍資料的實際占用空間;

cpu:根據購買的記憶體規格設定;

iops:根據購買的記憶體規格設定。

德歌:阿裡雲RDS PG最佳實踐

<b>圖一</b><b> rds pg性能評測與瓶頸分析</b><b></b>

對于評測所選的rds規格是否可以滿足業務需求,可采用tpc-b、tpc-c以及自定義評測模型對rds pg進行性能評測與瓶頸分析。其中自定義模型評測中,可以使用sysbench測試阿裡雲rds postgresql性能或者通過并行copy 或寫大對象測試網絡吞吐率。

德歌:阿裡雲RDS PG最佳實踐

<b>圖二</b><b> tpc-b執行個體診斷</b><b></b>

在上雲實踐中,資料的遷移也至關重要,資料的遷移主要分為同構全量遷移、同構增量遷移、異構全量遷移、異構增量遷移四種方式。

<b>同構全量遷移</b><b></b>

德歌:阿裡雲RDS PG最佳實踐

<b>圖三</b><b> 同構全量遷移</b><b></b>

<b></b>

從使用者端postgresql 遷移到阿裡雲 postgresql主要有兩種方法:第一種方法是在雲端資料庫建立與線下資料庫一緻的使用者、資料庫名。采用pg_dump 依次導出線下資料庫,然後再采用pg_restore 依次還原線下資料庫,整個遷移過程資料是不落地的,是通過管道過去的;另一種方法是借助阿裡雲提供的資料遷移工具dts,通過簡單的操作即可完成線上線下的資料遷移。

<b>同構增量遷移</b><b></b>

如果是使用者端postgresql 遷移到 阿裡雲 postgresql的同構增量遷移,可以使用xdb增量遷移插件,該插件由enterprisedb預設提供。

<b>異構全量遷移</b><b></b>

如果線下是一個oracle或者sql server資料庫,可以采用dts将資料遷移到線上的 postgresql。

<b>異構增量遷移</b><b></b>

德歌:阿裡雲RDS PG最佳實踐

<b>圖四</b><b> 異構增量遷移</b><b></b>

異構增量的遷移實作的方法比較多。首先可以使用xdb增量遷移插件,該插件支援從oracle、sql server遷移到edb和postgresql,反之同樣可行。除此之外,oracle goldengate(oracle的商業産品)和symmetricds(基于觸發器實作的開源軟體)同樣可支援異構增量遷移。

<b>rds pg使用最佳實踐</b>

接下來将介紹rds pg使用最佳實踐,主要包括備份與恢複、rt的優化、插件用法、參數最佳實踐、安全與審計、規格升降級、資料分片的用法、讀寫分離、一主多備、異地容災、診斷實踐、事件通知等。

<b>備份與恢複</b><b></b>

德歌:阿裡雲RDS PG最佳實踐

<b>圖五</b><b> 備份與恢複</b><b></b>

rds的備份與恢複可在pg的管理控制台進行實作,使用者隻需将需要備份的時間點等排程資訊在管理控制台配置好之後,就可以自動地在背景實作全量以及歸檔的備份。備份恢複到任意時間點的操作也很簡單,隻需要在控制管理台中建立一個臨時執行個體,并輸入需要恢複到的時間點即可。但有一點值得注意的是,如果将線上的資料庫恢複到某個具體的時間點,首先需要建立一個臨時執行個體,然後再從該臨時執行個體中當時資料庫中的資料導入到線上資料庫中,臨時執行個體是目前無法替換線上的資料庫的。

<b>rt的優化</b><b></b>

一個請求的rt大約在2ms左右,是以網絡的rt會嚴重影響系統的性能,比如在幾條sql語句的rt就可以達到十幾毫秒,而由這幾條sql語句組成的事物在資料庫中執行時間僅需1ms甚至更短的時間。針對這種情況,可以采用udf進行rt的優化,使用者自己将業務邏輯下降到資料庫層面處理,充分地利用資料庫的計算能力,以減輕網絡延遲帶來的瓶頸。

<b>插件用法</b><b></b>

postgresql可以查詢目前rds pg版本支援的插件名,具體的sql語句見下圖所示。建立插件的過程也很簡單,隻需要采用create extension+插件名的方式即可建立對應的插件。

德歌:阿裡雲RDS PG最佳實踐

<b>圖六 插件用法</b><b></b>

具體的插件用法,使用者可以參看插件對應的手冊進行操作。這裡簡單介紹兩種插件:

   auto_explain 插件用法:使用者可以通過此插件檢視某些sql語句在執行過程中是否出現異常;

   pg_hint_plan 插件:該插件是一個強制使用者使用使用者提供的執行計劃的插件。

<b>安全與審計</b><b></b>

德歌:阿裡雲RDS PG最佳實踐

<b>圖七</b><b> 安全和審計</b><b></b>

使用者可以登陸rds管理控制台來設定安全和設計,其中通白名單為允許連接配接資料庫的來源ip;同時sql設計也是需要使用者主動開啟的,開啟之後可以看到資料庫之間的每條sql語句。

<b>規格升降級</b><b></b>

使用者可登陸rds管理控制器檢視基本資訊和變更配置,完成規格升降級。

<b>分布式用法</b><b></b>

德歌:阿裡雲RDS PG最佳實踐

<b>圖八</b><b> 分布式用法</b><b></b>

盡管目前rds pg是多節點配置,但是整體對使用者提供通路服務的還是一個節點,這一個節點就有可能成為整個系統的瓶頸。雖然rds pg現在還不支援分布式,但對于使用者而言,實作分布式其實很簡單。使用者通過在ecs上安裝分布式中間件即可實作分布式用法。比如說使用者購買了8個rds,然後在中間件上配置好,然後就可以将資料均衡地打散到8個rds中。目前支援的中間件包括:plproxy、oneproxy for pgsql、pgpool-ii、pg_shard、citusdb、fdw。

<b>讀寫分離</b><b></b>

由于目前rds尚未開放隻讀節點,使用者在做讀寫分離時,需要将rds同步一份到ecs上,然後再通過中間件來實作讀寫分離。讀寫分離的插件也相當多,包括pgpool-ii、oneproxy for pgsql和pg-jdbc,可以實作使用者自定義函數、黑名單、白名單的配置。

<b>一主多備</b><b></b>

目前,rds pg内部一主多備功能正在建設。使用者如果自建rds pg備庫有兩種方法:

<b>   自建rds pg邏輯備庫:</b>使用者可以使用rds pg提供的alidecode插件,在異地建立rds pg的邏輯備庫;

<b>   自建rds pg的實體備庫:</b>如果使用者需要建構一個和rds postgresql一模一樣的備庫,則可以通過流複制或者歸檔來完成。

異地容災的操作類似于一主多備,是以此處不再贅述。

<b>診斷實踐</b><b></b>

德歌:阿裡雲RDS PG最佳實踐

<b>圖九</b><b> 診斷實踐</b><b></b>

使用者可以登入rds管理控制台,進行設定報警閥值、設定監控間隔和查詢慢sql;同時控制台也提供了檢視日志的接口;此外,還可以使用auto explain和debug 分别實作檢視目前的執行計劃是否異常和列印sql的parse, rewritten, plan日志,分析計劃相關的問題。  

<b>事件通知</b><b></b>

通過在管控平台設定好閥值,接收通知,同時當資料庫可用性狀态變化時也會自行通知。

<b>阿裡雲rds相關周邊元件用法</b>

德歌:阿裡雲RDS PG最佳實踐

<b>圖十</b><b> </b><b>阿裡雲rds相關周邊元件用法</b><b></b>

<b> </b>

阿裡雲rds相關周邊元件中最為重要的就是oss(對象存儲),oss的使用方法較多,其中比較重要的一點就是實作資料的冷熱分離。下面一個執行個體來展示下其實作過程:使用者購買rds pg之後,會連續不斷地有資料插進來,并且不斷地有資料變成冷資料,新插進來的資料成為熱資料。如果将所有的資料都保留線上上的pg裡,資料庫會越來越大,但是這些冷資料的通路頻率并不高。針對該類應用場景,阿裡rds提供了一個名為oss_fdw的插件,可以将曆史資料(冷資料)導入oss中,然後通過建web表的方式直接讀取之前導入的曆史資料。經過上述操作可以實作冷熱資料分離,熱資料放在關系資料庫中,冷資料放在oss中,需要使用冷資料時,可以将其導入一個臨時庫中,也就是一個預熱過程,預熱之後和通路本地資料相同。

另外一個就是管理,管理主要是冷資料和oss對象存儲的url對應關系,包括時間片。這些對應關系可以存儲在rds pg中,使用者隻需維護好url的中繼資料資訊,定時将冷資料導出至oss,實作冷熱資料的分離。應用在通路rds時,通路的是熱資料,如果通路冷資料,需要一個過讀中繼資料,然後将對應的oss導入到rds pg中的預熱過程。性能上,每天新增的資料插入oss,對于每個執行個體,可以實作100mb/s速度。

此外,postgresql也可以和 mongodb結合使用,将 mongodb作為一個計算單元,postgresql 作為 一個sql的接口來實作mongodb bi功能。

<b>資料同步</b>

德歌:阿裡雲RDS PG最佳實踐

<b>圖十一</b><b> 資料同步</b><b></b>

資料同步又分為rds pg到線下單向同步、線下到rds pg單向同步、線上線下雙向同步三種。

<b>rds pg到線下單向同步</b><b></b>

從rds pg到線下單向同步有兩種方式,一是通過使用rds pg提供的alidecode插件,在異地建立rds pg的邏輯備庫。在使用者端的資料庫可以是和rds pg不一樣的資料庫,隻同步部分資料;另一種方式是建立完全一緻的實體備庫。該過程需要申請一定的權限,可以線上下做一個雲端資料庫的鏡像。<b></b>

<b>線下到rds pg單向同步</b><b></b>

德歌:阿裡雲RDS PG最佳實踐

<b>圖十二</b><b> 線下到rds pg單向同步</b><b></b>

如果線下資料庫版本大于等于9.4,就可以使用 lgical decode實作;如果版本小于9.4,可以采用增量的資料同步,如xdb、goldengate、 smmetricds。

<b>線上線下雙向同步</b><b></b>

線上線下雙向同步用到的技術與之前的提到的技術類似,如xdb和logical decode都是支援雙向同步的。

<b>文章内所提到的所有案例的詳細介紹文章連結如下:</b>

tpc-c 測試軟體

oltp 性能評測

<a href="https://yq.aliyun.com/articles/35517">https://yq.aliyun.com/articles/35517</a>

<a href="https://github.com/digoal/sysbench">https://github.com/digoal/sysbench</a>

postgresql

同構全量遷移:

同構增量遷移

異構全量遷移

<a href="https://help.aliyun.com/knowledge_list/8314900.html">https://help.aliyun.com/knowledge_list/8314900.html</a>

<a href="https://dts.console.aliyun.com/">https://dts.console.aliyun.com/</a>

rt的優化

<a href="https://yq.aliyun.com/articles/35176">https://yq.aliyun.com/articles/35176</a>

插件用法

自建rds pg的實體備庫

<a href="https://yq.aliyun.com/articles/7255">https://yq.aliyun.com/articles/7255</a>

openapi

<a href="https://help.aliyun.com/document_detail/rds/openapi-manual/rds-openapi-invoke/rquest-structure.html">https://help.aliyun.com/document_detail/rds/openapi-manual/rds-openapi-invoke/rquest-structure.html</a>

<b>關于分享者</b><b> </b>

德歌 postgresql中國社群發起人、阿裡雲飛天八部資料庫技術組技術專家

相關系列文章: