《阿里云(謝桂起)最新版RDS PostgreSQL數據遷移與版本升級全攻略(1).pdf》由會員分享,可在線閱讀,更多相關《阿里云(謝桂起)最新版RDS PostgreSQL數據遷移與版本升級全攻略(1).pdf(20頁珍藏版)》請在三個皮匠報告上搜索。
1、PostgreSQL中文社區第13屆PostgreSQL中國技術大會聚焦云端創新匯聚智慧共享謝桂起阿里云RDS PostgreSQL數據遷移與版本升級全攻略PostgreSQL中文社區PostgreSQL中文社區目錄contentsRDS PostgreSQL上的數據遷移和版本升級工作原理02深入了解PostgreSQL的復制與升級01數據遷移與版本升級示例0301深入了解PostgreSQL的復制和升級PostgreSQL中文社區PostgreSQL中文社區PostgreSQL復制演進及各大版本差異2001,PostgreSQL 7.1:write-ahead log 被引入,解決事務提交前
2、必須 fsync 的問題2005,PostgreSQL 8.0:支持 wal 文件歸檔以及 Point-In-Time Recovery2010,PostgreSQL 9.0:Streaming Replication:支持高效低延遲的主備復制Hot Standby:支持備節點執行只讀查詢2014,PostgreSQL 9.4:Logical Decoding:支持數據庫的修改以自定義的格式傳輸Replication Slots:支持主節點保留未被備節點應用的 wal 文件2017,PostgreSQL 10.0:pgoutput插件發布邏輯復制支持發布/訂閱模型2017-至今:PG14:邏輯
3、復制支持流復制PG15:邏輯復制支持兩階段事務PG16:邏輯復制支持從備節點復制PG17:1.支持原生 failover slot2.大版本升級保留 slot 和 subscription3.PostgreSQL中文社區物理復制的原理物理復制:使用精確的塊地址進行逐字節復制,把對文件塊的改動發送到接收端物理復制的流程流程:(1)initdb初始化并啟動主節點(2)pg_basebackup備份并啟動備節點(3)備節點walreceiver進程啟動(4)備節點walreceiver進程發送連接請求(5)主節點接收請求并啟動walsender進程(6)主備節點進行握手(7)walreceiver不
4、停接收回放數據,追趕主節點(8)主備數據同步完成,建立流復制特點:1.實例級別數據復制2.數據強一致3.無DDL限制,無對象類型限制4.實時同步,無大事務限制5.primary和standby必須相同大版本6.standby只能讀不能寫7.不支持數據庫級別、schema級別、部分表級別復制PostgreSQL中文社區邏輯復制的原理邏輯復制:相對于物理復制的概念,把對數據的改動(一般是修改前/修改后的行)發送給接收端邏輯復制的架構存量數據復制:1.Replication launcher進程為每個subscription啟動Apply worker進程2.Apply worker進程為subsc
5、ription中的每個表啟動Table Sync worker進程3.Table Sync worker進程在publication端創建對應的slot并同步存量數據增量數據復制:1.客戶端在publication端寫入數據,publication端的Backend進程將數據寫入緩沖區并將增量數據寫入到WAL中2.WAL Sender進程從WAL中獲取增量數據,并通過指定的邏輯解碼插件將增量數據解碼之后發送給接收端3.Apply worker進程獲取到增量數據并進行應用PostgreSQL中文社區邏輯復制的原理邏輯解碼整體流程:1.Wal Sender進程讀取WAL記錄并使用rmgr模塊解析,
6、并將解析好的數據放入內存中的RecorderBuffer2.當解析到commit/abort時,將對應的事務通過預先設定的邏輯解碼插件解析和輸出3.PG14及以上支持流式邏輯復制,通過在創建subscription時指定streaming=on開啟流式邏輯復制,支持publication端將進行中的事務發送給subscription端常見邏輯解碼插件:test_decoding:社區內置的邏輯解碼示例插件,支持將WAL中的增量數據解碼成文本數據pgoutput:社區內置的邏輯解碼插件,也是PG原生邏輯復制的默認插件,從PG10版本開始引入pglogical:由2ndQuadrant團隊開發和維
7、護第三方邏輯解碼插件,和pgoutput相比支持行級別過濾、沖突解決、DDL語句復制等,同時支持PG9.4及以上的版本wal2json:第三方邏輯解碼插件,支持將INSERT/UPDATE/DELETE的數據以json的格式輸出,常用于數據同步、事件處理等場景邏輯復制特點:1.跨版本兼容,支持源和目的大版本不同2.選擇性復制,支持庫級別、schema級別、表級別復制3.源和目的實例均可讀可寫4.DDL限制,不支持復制DDL5.不支持視圖、物化視圖、外表、SequencesPostgreSQL中文社區pg_upgrade的原理預檢查(源)用戶檢查 參數檢查 插件檢查 數據類型檢查 pg_dump
8、 dump全局對象 解析用戶對象間依賴并生成dump文件預處理(目標)clog處理 XID處理 重置WAL文件 pg_restore restore全局對象 restore每個數據庫數據文件處理 拷貝或link數據文件 設置nextOID Sync數據目錄RDS PostgreSQL優化:預檢查前置多數據庫并行syncfs替換fsync大版本升級流程:02RDS PostgreSQL上的數據遷移和版本升級工作原理PostgreSQL中文社區PostgreSQL中文社區RDS PostgreSQL整體架構控制面接入層Web控制臺OpenAPITerraform業務層生命周期管理安全性增強任務流實
9、現資源適配層通用資源描述符資源調度層統一資源調度K8S Cluster(ACK/ASI)數據面資源池化計算彈性宕機熱遷移ECS容量彈性IO加速ESSD數據冷熱分層OSS網絡安全隔離VPC基礎服務備份恢復高可用DAS性能采集監控報警計量計費日志采集安全容器操作系統安全隔離 依托ECS+ESSD實現計算與存儲解耦,計算和存儲分別可以獨立彈性 基于OSS實現數據的冷熱分層 基于VPC實現數據面與控制面網絡安全隔離,同時數據面VPC內服務互通 依托安全容器技術實現操作系統層的安全強隔離 抽象通用資源描述符實現資源的統一調度 通過K8S屏蔽IAAS層資源差異,實現IAAS層資源統一調度PostgreSQ
10、L中文社區數據遷移的方式方案一:基于DTS+alidecoding插件實現PostgreSQL 9.X遷移到RDS PostgreSQL三階段遷移1.結構遷移:DTS讀取和解析源數據庫的元數據并生成DDL語句在目標數據庫執行2.全量遷移:DTS讀取并拆分源數據庫的全量數據并寫入到目的數據庫3.增量遷移:DTS通過ali_decoding插件實時解析增量數據并格式化然后寫入到目標數據庫三階段校驗:1.結構校驗:保證源和目標的對象結構保持一致2.全量校驗:全量數據比對3.增量校驗:增量數據實時校驗PostgreSQL中文社區數據遷移的方式方案二:基于原生邏輯復制實現PostgreSQL 10以上遷
11、移到RDS PostgreSQLPublisher InstancePublisher DatabasePublicationtablestemporary replication slotlogical replication slotWAL Sender processWALdecodeWAL Sender processCOPY TO STDOUTPublisher DatabaseSubscriptiontablesSubscriber InstanceInitial Sync WorkerAppy Workerdecoded messagemessageinitial datatra
12、nsaction dataconnectpg_dump/DTS 結構遷移DTS 數據校驗支持數據回流支持數據校驗支持部分庫/表/schema遷移支持跨版本遷移方案優勢PostgreSQL中文社區數據遷移的方式源PostgreSQL上云評估階段全量同步階段增量同步階段切換上云階段方案三:基于一鍵上云功能實現PostgreSQL 10以上遷移到RDS PostgreSQL1.目標實例空檢查2.網絡連接性檢查3.版本一致性檢查4.賬號權限檢查5.插件一致性檢查6.1.pg_basebackup全量數據同步2.目標實例表空間目錄標準化3.內核參數標準化1.原生物理復制2.復制延遲檢查1.源實例禁止寫入
13、2.目標實例升主3.賬號權限標準化4.應用連接串修改RDS PostgreSQL實例級別數據同步數據強一致數據結構無限制無感DDL變更方案優勢:PostgreSQL中文社區大版本升級-預檢查在線無感升級預檢查升級預檢查流程升級預檢查結果空間使用量檢查inode使用量檢查數據庫對象數檢查目標實例存儲空間推薦目標實例計算規格推薦PostgreSQL中文社區大版本升級-正式升級 藍綠部署克隆模式:非割接升級,提前驗證大版本兼容性,源實例無感割接模式:升級并交換連接地址,應用零改動,出錯可回滾 高效升級速度快:link模式升級,無數據文件拷貝,升級時間與數據大小無關影響?。簯脽o需停服,大多數場景下僅
14、秒級到分鐘級只讀時間 安全穩定物理升級:實例級別大版本升級,數據強一致兼容性好:無DDL限制,無對象結構限制,無數據類型限制03數據遷移與版本升級示例PostgreSQL中文社區PostgreSQL中文社區PostgreSQL 9.4遷移到RDS PostgreSQL創建賬號修改參數放行DTS服務編譯安裝ali_decoding插件開始遷移等待延遲追平源實例只讀,開始切換PostgreSQL中文社區在RDS PostgreSQL 16上搭建active-active架構如何解決循環復制問題?1.WAL 記錄對于從其它節點接收的事務會帶上 origin 標識記錄事務來自哪個節點2.PostgreSQL 16 create subscription語法支持指定origin=none請求publication只發送本地事務注意點:1.對于單個表不同節點使用的自增id沒有交集2.原始數據所在節點創建subscription時需要指定copy_data=false方案優勢:1.multi-master 多點寫2.RDS PG failover slot 保證 HA 之后鏈路不斷開PostgreSQL中文社區感謝聆聽!