您好,登錄后才能下訂單哦!
小編給大家分享一下怎么用Rancher創(chuàng)建產(chǎn)品質(zhì)量數(shù)據(jù)庫設(shè)置,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
數(shù)據(jù)庫對業(yè)務(wù)至關(guān)重要,無論是數(shù)據(jù)丟失還是泄露,都會為企業(yè)帶來嚴(yán)重的風(fēng)險(xiǎn)。操作錯(cuò)誤或體系結(jié)構(gòu)故障都可能導(dǎo)致重大事件和資源的損失,這就需要故障轉(zhuǎn)移系統(tǒng)/過程來減少數(shù)據(jù)丟失的可能。在將數(shù)據(jù)庫體系結(jié)構(gòu)遷移到Kubernetes之前,必須完成在容器體系結(jié)構(gòu)以及裸機(jī)上運(yùn)行數(shù)據(jù)庫集群的成本效益分析對比,這包括評估恢復(fù)時(shí)間目標(biāo)(Recovery Time Objective,RTO)以及恢復(fù)數(shù)據(jù)目標(biāo)(Recovery Point Objective,RPO)的災(zāi)難恢復(fù)要求。這些分析在面對數(shù)據(jù)敏感的應(yīng)用程序是非常重要,尤其當(dāng)程序需要真正高可用、針對大規(guī)模和冗余需要地理分離、以及應(yīng)用程序恢復(fù)要低延遲時(shí)。
在下文的步驟中,我們將分析在Rancher高可用和Kubernetes中可供使用的各種選項(xiàng),給大家設(shè)計(jì)產(chǎn)品質(zhì)量數(shù)據(jù)庫提供參考。
A.有狀態(tài)系統(tǒng)容器架構(gòu)的缺點(diǎn)
部署在類似Kubernetes的集群中的容器自然是無狀態(tài)而且短暫的,這意味著它們不會保持固定的身份,并且當(dāng)發(fā)生錯(cuò)誤或重新啟動時(shí)會發(fā)生數(shù)據(jù)丟失和遺忘。在設(shè)計(jì)分布式數(shù)據(jù)庫環(huán)境時(shí),需要提供高可用性以及容錯(cuò),這對Kubernetes的無狀態(tài)體系結(jié)構(gòu)提出了挑戰(zhàn),因?yàn)闊o論是復(fù)制還是擴(kuò)展都需要維護(hù)下面的狀態(tài):
(1)存儲;(2)身份;(3)會話;(4)集群角色。
考慮到我們的容器化應(yīng)用程序,我們馬上就可以看出無狀態(tài)架構(gòu)面臨的挑戰(zhàn),我們的應(yīng)用程序需要滿足一系列的要求:
我們的數(shù)據(jù)庫需要將數(shù)據(jù)(Data)和事務(wù)(Transactions)存儲在文件中,這些文件對每個(gè)數(shù)據(jù)庫容器來說都是持久且獨(dú)有的;
數(shù)據(jù)庫應(yīng)用程序中的每個(gè)容器都需要維護(hù)一個(gè)固定的身份作為數(shù)據(jù)庫節(jié)點(diǎn),以便我們可以通過名稱、地址或者索引將流量路由給它;
需要數(shù)據(jù)庫客戶端會話來維護(hù)狀態(tài),為保證一致性,需確保在狀態(tài)更改之前,讀寫事務(wù)已經(jīng)終止,而且出現(xiàn)持久性故障時(shí)狀態(tài)轉(zhuǎn)換不受影響。
個(gè)數(shù)據(jù)庫節(jié)點(diǎn)都需要在其數(shù)據(jù)庫集群中有持久化的角色,比如主機(jī)、副本或者分片,除非它們被特定的應(yīng)用程序的事件更改,或者由于模式更改了而必須更改。
針對這些挑戰(zhàn),目前的解決方案可能是將PersistentVolume附加到我們Kubernetes pods上,它的生命周期獨(dú)立于使用它的任何一個(gè)pod。但是,PersistentVolume不會向集群節(jié)點(diǎn)(即父節(jié)點(diǎn)、子節(jié)點(diǎn)或種子節(jié)點(diǎn))提供一致的角色分配。集群不能保證在整個(gè)應(yīng)用程序的生命周期中維護(hù)數(shù)據(jù)庫狀態(tài),說的具體一點(diǎn)就是,新的容器會由非確定的隨機(jī)名稱創(chuàng)建,并且pods可以設(shè)置在任何時(shí)間按照任何的順序啟動、終止或者縮放。所以我們的挑戰(zhàn)依然存在。
B.K8s部署分布式數(shù)據(jù)庫的優(yōu)點(diǎn)
有這么多在Kubernetes集群中部署分布式數(shù)據(jù)庫的挑戰(zhàn),我們是否還值得付出努力呢?Kubernetes開辟了許多優(yōu)勢和可能性,包括管理大量的數(shù)據(jù)庫服務(wù)以及常見的自動化操作,從可恢復(fù)性、可靠性和可擴(kuò)展性來支持其生命周期健康。即使在虛擬化環(huán)境中,部署數(shù)據(jù)庫集群的所需的時(shí)間和成本也遠(yuǎn)低于部署裸機(jī)集群。
Stateful Sets提供了前一節(jié)中所述挑戰(zhàn)的前進(jìn)方向。在1.5版本引入了Stateful Sets之后,Kubernetes現(xiàn)在為存儲和身份實(shí)現(xiàn)了有狀態(tài)質(zhì)量,保證了下面的內(nèi)容:
每個(gè)pod都附有一個(gè)持久卷,從pod鏈接到存儲,這解決了A中的存儲狀態(tài)問題;
每個(gè)pod都以相同的順序開始并以相反的順序終止,這解決了A的會話狀態(tài)問題;
每個(gè)pod都有一個(gè)唯一且可確定的名稱、地址和序號索引,用于解決A中的身份和集群角色問題。
C.部署帶有Headless服務(wù)的有狀態(tài)集
注意:這部分我們會使用到kubectl服務(wù)。關(guān)于如何使用Rancher來部署kubectl服務(wù)可以參考這里:
https://rancher.com/docs/rancher/v2.x/en/k8s-in-rancher/kubectl/。
Stateful Set Pods需要headless服務(wù)來管理Pods的網(wǎng)絡(luò)身份。實(shí)際上,headless服務(wù)具有未定義的集群IP地址,這意味著在服務(wù)上沒有定義集群IP。相反的,該服務(wù)定義具有選擇器,當(dāng)服務(wù)被訪問的時(shí)候,DNS被配置成返回多個(gè)地址記錄或者地址。此時(shí),服務(wù)fqdn將使用相同的選擇器映射到服務(wù)后面的所有pod IP的所有IP。
現(xiàn)在我們按照這個(gè)模板來為Cassandra創(chuàng)建一個(gè)Headless服務(wù):
使用get svc命令列出cassandra服務(wù)的屬性:
用describe svc可以將cassandra服務(wù)的屬性按照verbose格式輸出:
D.為持久卷創(chuàng)建存儲類別
在Rancher中,通過本機(jī)的Kubernetes API資源、PersistentVolume和PersistentVolumeClaim,我們可以使用各種選項(xiàng)來管理持久存儲。Kubernetes中的存儲類別告訴了我們哪些存儲類別是我們的集群所支持的。我們可以為持久存儲設(shè)置動態(tài)配置來自動創(chuàng)建卷,并將其附加到pod。例如,下面的存儲類將AWS作為它的存儲提供者,使用類型是gp2,可用區(qū)是us-west-2a。
如果需要,還可以創(chuàng)建一個(gè)新的存儲類,例如:
在創(chuàng)建有狀態(tài)集時(shí),將根據(jù)它的存儲類為有狀態(tài)集pod啟動PersistentVolumeClaim。使用動態(tài)供應(yīng),可以根據(jù)PersistentVolumeClaim中請求的存儲類為pod動態(tài)供應(yīng)PersistentVolume。
您可也以通過靜態(tài)供應(yīng)手動創(chuàng)建持久卷。可以在這里閱讀關(guān)于靜態(tài)供應(yīng)的更多信息:
https://rancher.com/docs/rancher/v2.x/en/k8s-in-rancher/volumes-and-storage/。
注意:對于靜態(tài)供應(yīng),要求它具有與Cassandra服務(wù)器中的Cassandra節(jié)點(diǎn)數(shù)量相同的持久卷數(shù)量。
E.創(chuàng)建有狀態(tài)集
現(xiàn)在我們可以創(chuàng)建有狀態(tài)集,它將提供我們想要的屬性:有序的部署和終止、唯一的網(wǎng)絡(luò)名稱和有狀態(tài)的處理。我們調(diào)用下面命令,啟動一個(gè)Cassandra服務(wù)器:
F.驗(yàn)證有狀態(tài)集
接著,我們調(diào)用下面命令驗(yàn)證是否在Cassandra服務(wù)器中部署了有狀態(tài)集:
在創(chuàng)建了有狀態(tài)集之后,DESIRED和CURRENT應(yīng)該是相等的,調(diào)用get pods命令來查看經(jīng)有狀態(tài)集創(chuàng)建的pods的順序列表。
在節(jié)點(diǎn)創(chuàng)建期間,你可以執(zhí)行nodetool state來查看Cassandra節(jié)點(diǎn)是否啟動。
G.有狀態(tài)集的擴(kuò)縮容
將F步驟中的設(shè)置復(fù)制x次,調(diào)用縮放命令就可以增加或者減少有狀態(tài)集的大小。在下面的示例中,我們按照x=3進(jìn)行操作。
調(diào)用get statefulsets可以驗(yàn)證是否有狀態(tài)集已經(jīng)部署到了Cassandra服務(wù)器上。
再次調(diào)用get pods來查看有狀態(tài)集創(chuàng)建的pods順序。需要注意的是,在部署Cassandra pods時(shí),它們是按照順序創(chuàng)建的。
我們可以在5分鐘后執(zhí)行nodetool 狀態(tài)檢查,驗(yàn)證Cassandra節(jié)點(diǎn)是否已經(jīng)加入并且形成了一個(gè)Cassandra集群。
一旦nodetool中節(jié)點(diǎn)的狀態(tài)變更為Up/Normal,我們就可以通過調(diào)用CQL來執(zhí)行大量的數(shù)據(jù)庫操作。
H.調(diào)用CQL進(jìn)行數(shù)據(jù)庫訪問和操作
當(dāng)我們看到狀態(tài)是U/N,我們就可以調(diào)用cqlsh來訪問Cassandra容器。
I.使用Cassandra作為高可用無狀態(tài)數(shù)據(jù)庫服務(wù)的持久層
在前面的練習(xí)中,我們在K8s集群中部署了一個(gè)Cassandra服務(wù),并通過PersistentVolume提供持久存儲。然后,我們使用有狀態(tài)集為Cassandra集群提供有狀態(tài)處理的屬性,并將集群擴(kuò)展到其他節(jié)點(diǎn)。我們現(xiàn)在可以在Cassandra集群中使用CQL模式進(jìn)行數(shù)據(jù)庫訪問和操作。CQL模式的優(yōu)點(diǎn)是,我們可以輕松地使用自然類型和流暢的api實(shí)現(xiàn)無縫數(shù)據(jù)建模,特別是在設(shè)計(jì)擴(kuò)展和時(shí)間序列數(shù)據(jù)模型(如欺詐檢測)的解決方案中。此外,CQL利用分區(qū)和集群keys來提高數(shù)據(jù)建模場景中的操作速度。
以上是“怎么用Rancher創(chuàng)建產(chǎn)品質(zhì)量數(shù)據(jù)庫設(shè)置”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。