<form id="tznrh"><form id="tznrh"><th id="tznrh"></th></form></form>

            RDS平臺|云原生RDS在k8s中的實現

            發布時間:2020-10-27 | 信息來源: | 發布作者:


            沃趣科技作為服務國內B端企業的數據庫產品和解決方案的國產廠商,多年與傳統企業打交道,深知傳統企業目前正面臨著互聯網應用和數字化全面轉型的挑戰。我們了解到CIO眼里最重要的規劃之一,就是如何根據企業自身的業務特點打造合適的私有云平臺,來適應日新月異的應用場景變化,快速推出滿足市場需求的應用。

            近些年云計算最火的領域圍繞PaaS層級,向下PaaS平臺能部署標準云計算IaaS資源或者自建機房的基礎硬件建設,向上利用PaaS微服務架構特點快速構建SaaS應用。而基于容器編排技術的Kubernetes,已然成為業界事實標準,容器化,云原生一躍成為近幾年云計算領域最火的關鍵字,是企業數字化轉型過程中的重要技術選型環節。

            利用k8s平臺快速部署應用大體上分為5步:

            1、開發應用

            2、利用Docker技術打包應用

            3、創建一個kubernetes集群

            4、部署容器化應用到k8s集群中

            5、服務暴露、按需擴展集群

            粗粒度上我們可以根據應用類型分為無狀態應用(Stateless Services)和有狀態應用(Stateful Services)。無狀態應用較于容易橫向擴展,如下圖橫向增加配置好的Web服務并注冊到Nginx代理,即可增加客戶端訪問流量。

            有狀態服務通常是云平臺建設的難點,例如分布式的關系型數據庫一般大于3節點,某個時間段內Primary node提供可讀寫的權限,其他節點只提供只讀權限,當Primary Node發生異常就需要進行高可用切換或者選主過程。

            過去很長一段時間,B端企業的應用一般由各大ISV(軟件獨立開發商)提供或共同開發,用于存儲數據的關系型數據庫更是種類繁多,最為常見的有Oracle、MySQL、SQL Server、Postgresql等。數據庫這類型的服務我們統稱為有狀態的服務或者RDS平臺服務。如何利用K8S平臺特性,運行有狀態的RDS平臺服務?主要解決以下三點問題:

            規格配置一致

            數據一致

            訪問入口一致

            K8S自身機制保證規格配置一致性

            配置規格一致交由k8s集群保證,kubernetes通俗來講是一個分布式的資源管理平臺,不管是文件還是進程,k8s都將它以資源的形式進行對待,然后對它進行管理。

            容器資源(Docker或者rkt),容器就是一個進程,只是這個進程被隔離起來了,可以根據需要來限制它對其它資源的訪問。

            podK8S最小調度單元,一個Pod內部客戶包含多個Docker容器(Pod內的容器不可以跨物理節點),由于單個容器功能單一,一般都需要多個容器進行組合共享網絡或者命名空間來完成一個完整功能。

            service服務發現pod在集群內部的ip是變化的,給對外服務提供代理。

            configmap資源類型,由于容器往往會用到一些秘鑰、配置文件、環境變量進行統一管理方便做靈活的組合

            statefulSetk8s提供的用來管理pod的資源,它將pod進行規范的管理,比如pod的啟動有明確的順序,pod與它對應的資源一旦綁定就會一直維持這個綁定關系,不會和其它pod混淆。數據庫是強狀態的服務,它也正是需要這些特征。

            計算存儲分離保證RDS平臺的數據一致

            數據一致是有狀態服務的基礎,在沒有DockerK8S平臺的時期,計算存儲分離是早期IOE的經典架構,計算和存儲節點之間利用高速網絡互聯,如10GB萬兆以太網,16GB FC channel,將計算節點的數據下沉至集中式存儲做數據保護。

            為了不被昂貴的小機和存儲廠商綁定,繳納高額的商業費用,阿里率先引領去IOE浪潮。MySQL開源數據庫成為去“O”的數據庫的首選,相繼推出分布式架構解決方案,比如早期的主從復制架構,半同步和強一致性的MGR。

            但是作為企業本身,希望在私有平臺上構建一個同時支持多類型的集群,如果為每個數據庫集群單獨提供物理硬件和基礎架構,那又是煙囪式的管理方式。

            我們采用計算和存儲分離方式,對于任何有狀態的RDS應用我們會從底層存儲給他分配數據卷,帶來的好處不言而喻。

            計算資源 / 存儲資源獨立擴展, 架構更清晰, 部署更容易

            將有狀態的數據下沉到存儲層, Scheduler 調度時, 無需感知計算節點的存儲介質, 只需調度到滿足計算資源要求的 Node, 數據庫實例啟動時, 只需在分布式文件系統掛載mapping volume 即可. 可以顯著的提高數據庫實例的部署密度和計算資源利用率

            對于數據庫平臺來說,計算資源所用即所需,即應用需要一個4C16G計算規格的數據庫實例,平臺就提供滿足計算規格的數據庫。通過平臺的可用性檢測及分布式存儲卷的編排和調度能力,保證數據庫高可用和數據不丟的同時,計算資源節省2/3。

            CSI插件實現外部卷管理

            K8s社區在1.13版本同時release 1.10CSI插件,正式在生產環境可用(參考:https://kubernetes.io/blog/2019/01/15/container-storage-interface-ga/)我們可以利用CSI類型的PVC資源配合外部存儲的driver組件,實現掛載不同類型的分布式存儲/集中式SAN存儲,保護數據安全。

            服務暴露

            如何將RDS平臺實例通過k8s集群暴露到真實生產環境供業務訪問?通常對于RDS平臺實例資源的使用方式,通過應用/客戶端指定ip地址、端口和服務密碼的方式訪問數據庫實例。K8s官方提供的ingressingress controller組件則是通過http七層轉發無法滿足需求。

            我們通過容器化方式打包部署keepalived+keepalived-controller組件,提供RDS平臺訪問入口。

            · Keepalived態配置更新

            RDS平臺實例服務暴露的IP對應real serverIP(rs),當一個RDS應用異常退出,會新建一個RDS平臺實例來替代它。但有個特點,就是新RDS應用的IP會和之前不一樣。而對應的結果就是要更新keepalived配置文件中的realserver(rs)。

            · keepalived-controller

            監聽RDS平臺實例服務的變化 ,如果有變化則更新keepalived的配置,并通知keepalived重新加載配置。Keepalived重新加載配置后,會更新IPVS規則,定時檢測新RDS平臺實例是否正常,管理新的ipvs規則。

            利用Operator構建數據庫業務應用

            通過上文我們已知如何解決容器RDS平臺資源配置一致、數據一致和訪問入口一致,看起來似乎已經滿足容器化云平臺建設的需求,但是很遺憾k8s只認得自身的資源類型,比如pod、service、PVC,statefulset等,它并不知道什么資源類型叫做“MySQL” 或者MySQL讀寫分離集群的業務場景和模式。

            OperatorCoreOS開發,使用了Kubernetes的自定義資源擴展API機制,如使用CRDCustomResourceDefinition)來創建。它用來創建、配置和管理復雜的有狀態應用,如數據庫。

            如上圖我們實現K8s擴展API創建的名為“MySQLCluster”的operator,告訴k8s MySQL”資源的創建方式是通過statefulset、pvc、configmapservice等創建出來,數據庫中間件也用類似的operator方式創建完畢。

            operator內的mysqlcluster控制器,再組建成如下圖的MySQL一主多從,通過暴露中間件服務進行訪問方式達到讀寫分離的業務模型。

            通過k8s擴展API創建的Operator, 會不斷的觀察“業務模型和運行狀態”

            偽代碼:

            for{

            desired := getDesiredState()

            current := getCurrentState()

            makeChanges(desired,current)

            }

            Operator不間斷獲取“當前運行狀態”和“目標狀態”做對比,一旦發生前后狀態不一致情況(異?;蛘呤謩有薷臉I務狀態),Operator自動觸發k8s資源管理機制,通過自動化編排調度保障業務的正常運行。






            沃趣科技,讓客戶用上更好的數據庫技術!
            三分快3