通過(guò)Portworx云原生存儲(chǔ),在Amazon EKS里運(yùn)行高可用SQL Server容器
創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比三明網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式三明網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋三明地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴(lài)。在本文我們將分析,如何使用Amazon Elastic Container Service for Kubernetes (Amazon EKS, https://amazonaws-china.com/eks/),來(lái)在容器中部署Microsoft SQL Server。文中討論的方式和與原理,也適用于其他需要高可用和持久性、并符合可復(fù)用的DevOps方式的有狀態(tài)應(yīng)用。例如運(yùn)行MongoDB、Apache Cassandra、MySQL、或者大數(shù)據(jù)處理等。
首先能夠被支持在容器中運(yùn)行的是SQL Server 2017版本。我們可以在Linux容器中,使用Kubernetes (https://amazonaws-china.com/kubernetes/)來(lái)運(yùn)行SQL Server生產(chǎn)負(fù)載。
Microsoft SQL Server是被廣泛使用的數(shù)據(jù)庫(kù)。SQL Server提供一系列很不錯(cuò)的功能,也有很不錯(cuò)的開(kāi)發(fā)者社區(qū)。但是它需要比較多的運(yùn)維,也比開(kāi)源的或者云端的數(shù)據(jù)庫(kù)成本要更高。很多為了降低成本的用戶(hù)會(huì)轉(zhuǎn)向開(kāi)源方案來(lái)降低軟件授權(quán)的成本。另一些用戶(hù)會(huì)遷移工作負(fù)載到關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)服務(wù)里,比如Amazon RDS for Microsoft SQL Server或者Amazon Aurora。
但也有許多情況,用戶(hù)無(wú)法離開(kāi)SQL Server。這有很多可能的原因,比如需要重新部署和開(kāi)發(fā)的成本,以及需要配置具備相關(guān)技能的開(kāi)發(fā)工程師和運(yùn)維工程師資源的成本等。用戶(hù)可能無(wú)法使用云服務(wù),可能是軟件授權(quán)和支持的問(wèn)題,或者一些技術(shù)問(wèn)題。
在這樣的情況下,可以通過(guò)把SQL Server數(shù)據(jù)庫(kù)部署到Amazon Elastic Compute Cloud (Amazon EC2, https://amazonaws-china.com/ec2/)實(shí)例上,來(lái)使用云服務(wù)。這種方式保持了需要滿(mǎn)足特定需要的靈活性,也提供了云的各種好處。這些好處包括對(duì)于物理硬件層的抽象,以及按需付費(fèi)的模式,以及其他的云端服務(wù)能力。雖然這種方式比本地部署SQL Server要更有優(yōu)勢(shì),但管理額外的數(shù)據(jù)庫(kù)實(shí)例的管理成本仍然有可提升的空間。
使用Kubernetes來(lái)運(yùn)行SQL Server會(huì)有更多優(yōu)勢(shì):
容器服務(wù)
目前,AWS里有四種容器服務(wù):
在AWS上作架構(gòu)的一個(gè)重要原則是 Multi-AZ部署,來(lái)產(chǎn)生高可用的和高性能的負(fù)載。你可以直接使用Amazon Elastic Block Storage (Amazon EBS, https://amazonaws-china.com/ebs/) 卷作為SQL Server容器的存儲(chǔ)解決方案,但這會(huì)限制這些容器只能在單一的可用區(qū)域內(nèi)。Portworx可以用來(lái)解決這個(gè)問(wèn)題。
Portworx是AWS全球的合作伙伴,也是微軟的高可用和容災(zāi)方案合作伙伴。Portworx使得SQL Server能夠以高可用的方式,跨多個(gè)AWS可用區(qū)域,作為EKS集群來(lái)運(yùn)行。Portworx也可以配置成跨越AWS Auto Scaling Groups的高可用。當(dāng)使用SQL Server實(shí)例的存儲(chǔ)層的時(shí)候,這些功能確保了存儲(chǔ)的可用性。存儲(chǔ)的可用性是保證容器化SQL Sever實(shí)例高可用性所必須的。
這篇文章介紹了,如何使用Amazon EKS和Portworx云原生存儲(chǔ)(基于Amazon EBS 卷)來(lái)在生產(chǎn)環(huán)境中運(yùn)行SQL Server負(fù)載。我們也提供了一份樣例腳本( https://github.com/awslabs/aws-eks-portworx-sql) ,來(lái)自動(dòng)地在幾分鐘內(nèi)完成SQL Server實(shí)例的部署過(guò)程。
在容器中運(yùn)行SQL Server的好處
使用容器大的好處是簡(jiǎn)單和有效。不需要安裝SQL Server或者配置容錯(cuò)集群。使用簡(jiǎn)單的命令就可以部署SQL Server容器,然后Kubernetes會(huì)提供SQL Server部署的高可用。在一些情況下,Kubernetes中部署的SQL Server的容器實(shí)例,可用性甚至高于那些部署在容錯(cuò)集群上的。后面“高可用性”部分我們會(huì)介紹更多細(xì)節(jié)。
在容器中運(yùn)行SQL Server的主要好處來(lái)自于高密度部署和資源共享。容器和虛擬機(jī)(VMs)的根本性的不同是:在運(yùn)行過(guò)程中,與虛擬機(jī)不同,容器并不是被限定到一系列固定的資源上的。一個(gè)共享的資源池經(jīng)常被一組容器在同一個(gè)主機(jī)上共享來(lái)使用。這使得容器可以隨時(shí)調(diào)整使用更多或者更少的資源。只要資源的總消耗不高于總資源池的資源容量,所有的容器都能有足夠的資源來(lái)運(yùn)行。
如圖中所示,一個(gè)按照自身配置滿(mǎn)負(fù)荷資源運(yùn)行的VM,無(wú)法在使用主機(jī)上閑余的資源。在這個(gè)例子中,資源池有兩臺(tái)物理主機(jī),包括8個(gè)CPU核。盡管有3個(gè)CPU核仍然閑余未被使用,VM4和VM7仍然在自身滿(mǎn)資源的狀態(tài)下運(yùn)行,而無(wú)法擴(kuò)展使用閑余的資源。
讓我們來(lái)看一下能夠更有效利用資源的另一種方式。假設(shè)存在一種情況,你不需要擔(dān)心物理主機(jī)資源的數(shù)量。你只需部署一個(gè)滿(mǎn)資源的VM來(lái)運(yùn)行一組應(yīng)用,比如一些SQL Server實(shí)例。假設(shè)你可以讓你的應(yīng)用共享所有資源,并且確保互相之間沒(méi)有沖突。圖右側(cè)的部分就是這樣的解決方案:使用Amazon EC2實(shí)例上的容器服務(wù)。
使用這種解決方案。沒(méi)有容器存在資源限制,總體的CPU核資源從8個(gè)減少到了6個(gè)。對(duì)于內(nèi)存資源來(lái)說(shuō)也是一樣的。容器化,可以增加底層架構(gòu)的使用效率和有效性。這對(duì)于運(yùn)行SQL Server這樣的有峰值使用量的應(yīng)用來(lái)說(shuō)尤其合適。
另一個(gè)在容器中運(yùn)行SQL Server的好處是可以減少軟件授權(quán)的成本。SQL Server是一個(gè)商業(yè)產(chǎn)品,使用授權(quán)的限制會(huì)影響我們從技術(shù)角度的決策,或者可能大幅推高我們的商業(yè)成本。微軟授權(quán)SQL Server在容器中使用的方式,會(huì)很大程度上緩解這些問(wèn)題。在后續(xù)“SQL Server容器軟件授權(quán)”部分有更多的細(xì)節(jié)。
Amazon EKS架構(gòu)上的SQL Server
Kubernetes是一個(gè)開(kāi)源軟件,可以用來(lái)部署和管理可擴(kuò)展的容器化應(yīng)用。它是一個(gè)中心化管理的分布式系統(tǒng),用來(lái)運(yùn)行和調(diào)度容器。
當(dāng)你手邊已經(jīng)有一個(gè)Kubernetes集群,使用和部署應(yīng)用還是比較直接的。但是部署和運(yùn)維一個(gè)Kubernetes集群本身還是比較復(fù)雜的。
Amazon EKS把復(fù)雜的Kubernetes集群的進(jìn)行抽象。它提供一個(gè)完整的受管理的Kubernetes,用戶(hù)可以調(diào)用AWS API進(jìn)行部署和管理。作為響應(yīng),用戶(hù)會(huì)收到一個(gè)上游Kubernetes api-server端點(diǎn),這個(gè)端點(diǎn)允許用戶(hù)連接到新的Kubernetes集群并使用。
SQL Server在每一個(gè)Pod (一組總是一起運(yùn)行的容器)中,被部署為一個(gè)單獨(dú)的容器。多個(gè)SQL Server的實(shí)例可以被部署為多個(gè)Pods。Kubernetes調(diào)度這些位于集群的節(jié)點(diǎn)上的Pods,確保有足夠的資源來(lái)運(yùn)行它們。
為了在Kubernetes上運(yùn)行SQL Server,你需要?jiǎng)?chuàng)建一個(gè)Kubernetes部署。這個(gè)部署創(chuàng)建了一個(gè)屬于該部署且可以被管理的復(fù)制集(ReplicaSet)。這個(gè)ReplicaSet確保包含一個(gè)單獨(dú)SQL Server容器的一個(gè)單獨(dú)的Pod,可以在集群上運(yùn)行。當(dāng)然,你也可以在同一個(gè)集群上部署SQL Server的多個(gè)實(shí)例來(lái)達(dá)到高密度。
存儲(chǔ)的使用也進(jìn)行了抽象化。對(duì)Kubernetes來(lái)說(shuō),持久卷(PV)是一個(gè)封裝了存儲(chǔ)解決方案實(shí)施細(xì)節(jié)的對(duì)象。這可能是Amazon EBS卷,一個(gè)網(wǎng)絡(luò)五年間系統(tǒng)(NFS)共享,或者其他解決方案。PV的生命周期跟使用它的Pod的生命周期互相獨(dú)立不相干。
要使用PV,另一個(gè)對(duì)象 – 持久卷聲明(PVC, Persistent Volume Claim)需要被創(chuàng)建。PVC是一個(gè)使用請(qǐng)求,用來(lái)請(qǐng)求使用定義了大小和訪問(wèn)模式(讀/寫(xiě))的存儲(chǔ)。一個(gè)PVC也可以定義存儲(chǔ)類(lèi)(Storage Class)的值。存儲(chǔ)類(lèi)是另一類(lèi)抽象,允許用戶(hù)定義存儲(chǔ)解決方案的一些參數(shù),比如延遲(latency)和IOPS。
管理員需要定義一個(gè)存儲(chǔ)類(lèi),例如AWS標(biāo)準(zhǔn)目的GP2 EBS卷,或者Portworx高(中) I/O卷。管理員然后可以基于這個(gè)存儲(chǔ)類(lèi)來(lái)創(chuàng)建PV,或者允許用戶(hù)基于PVCs來(lái)動(dòng)態(tài)的創(chuàng)建PV。而后應(yīng)用可以Include一個(gè)PVC,把PV分配給某個(gè)特定的pod。為了讓這個(gè)過(guò)程更加簡(jiǎn)單,你可以定義一個(gè)默認(rèn)的存儲(chǔ)類(lèi)。例如,假設(shè)一個(gè)Amazon EBS標(biāo)準(zhǔn)目的SSD (gp2)卷,被定義成Kubernetes集群上的默認(rèn)存儲(chǔ)類(lèi),即使一個(gè)PVC沒(méi)有Include某一個(gè)特定的存儲(chǔ)類(lèi)注解,Kubernetes將會(huì)自動(dòng)注解它到AWS GP2 EBS存儲(chǔ)類(lèi)上。
存儲(chǔ)的選擇
存儲(chǔ)是SQL Server部署中的一個(gè)關(guān)鍵部分。在AWS上部署SQL Server最常用的存儲(chǔ)方式是使用EBS卷。在Kubernetes集群中有兩種存儲(chǔ)類(lèi)可以直接用來(lái)使用EBS卷。
你可以直接在EBS卷上存儲(chǔ)SQL Server文件。然而,在許多情況下,一個(gè)單獨(dú)的EBS卷并不能滿(mǎn)足要求。例如,你也許需要在Multi – AZ架構(gòu)下的高可用性,需要超出單獨(dú)EBS卷限制的存儲(chǔ)容量,或者需要單獨(dú)卷無(wú)法達(dá)到的IOPS和通道速度。你可以嘗試使用SQL Server Always On可用性組來(lái)解決高可用性問(wèn)題,但是它無(wú)法解決存儲(chǔ)容量、IOPS、和通道速度問(wèn)題。同時(shí)針對(duì)SQL Server容器的Always On可用性組功能,目前也僅在SQL Server 2019是Preview發(fā)布。
你可以滿(mǎn)足所有這些要求,包括高可用性、IOPS和通道速度,通過(guò)把幾個(gè)EBS卷合并成存儲(chǔ)池,在每一個(gè)EC2實(shí)例里Striping卷,并且把存儲(chǔ)池延展到不同可用性區(qū)域的多個(gè)實(shí)例里。你可以部署一個(gè)獨(dú)立的存儲(chǔ)集群,并且通過(guò)NFS存儲(chǔ)類(lèi)在Kubernetes集群中使用該存儲(chǔ)集群。但這些操作會(huì)增加一些管理復(fù)雜度。
Portworx云原生存儲(chǔ)
Portworx是一個(gè)存儲(chǔ)集群解決方案,可以在Kubernetes集群中服務(wù)應(yīng)用和部署。Portworx是部署在Kubernetes之上的。Portworx使用Kubernetes來(lái)抽象化所有復(fù)雜的管理存儲(chǔ)集群的操作。Portworx提供一個(gè)簡(jiǎn)單的存儲(chǔ)類(lèi),可以被Kubernetes集群里的所有的有狀態(tài)應(yīng)用來(lái)使用。
在AWS里,Portworx通過(guò)對(duì)附加在Kubernetes集群(EC2實(shí)例)上的Worker Node上的EBS卷進(jìn)行聲明,來(lái)提供存儲(chǔ)類(lèi)。Portworx會(huì)把所有卷放進(jìn)一個(gè)抽象的存儲(chǔ)池里,然后從存儲(chǔ)池里創(chuàng)建邏輯卷。當(dāng)SQL Server的應(yīng)用創(chuàng)建一個(gè)包括Portworx存儲(chǔ)類(lèi)的PVC,并且限定卷大小,一個(gè)包括具體大小的Portworx PV就被分配給了應(yīng)用。
Portworx可以創(chuàng)建快照,稱(chēng)為3DSnaps。通過(guò)這個(gè)功能,你可以在SQL Server不停機(jī)的情況下,或者把SQL Server調(diào)成 read-only模式的情況下,來(lái)創(chuàng)建SQL Server卷的連續(xù)快照。Portworx的另一個(gè)功能是可以導(dǎo)入已有的EBS卷到Portworx邏輯集群卷里。這使得負(fù)載的遷移變得很容易。通過(guò)Portworx,集群可以變得密度很高,意味著你可以在一個(gè)主機(jī)上運(yùn)行更多的容器。針對(duì)Kubernetes的一般性建議是每個(gè)VM/100個(gè)Pods。Portworx有一些客戶(hù)甚至可以在每個(gè)主機(jī)上運(yùn)行200~300個(gè)Pod (https://portworx.com/architects-corner-aurea-beyond-limits-amazon-ebs-run-200-kubernetes-stateful-pods-per-host/)。
Portworx在EBS卷之上,使用自己最佳顆粒度的快照層。
Portworx快照的創(chuàng)建和存儲(chǔ)都是實(shí)時(shí)的。這是因?yàn)镻ortworx的快照是re-direct-on-write快照,實(shí)際上,Portworx可以通過(guò)書(shū)簽方式(bookmark)即時(shí)地創(chuàng)建一個(gè)卷的實(shí)時(shí)快照。因?yàn)閷?shí)際上的存儲(chǔ)塊并沒(méi)有被copy,不論作多少次快照,都沒(méi)有由于寫(xiě)入帶來(lái)的資源使用。你可以創(chuàng)建一個(gè)每15分鐘一次的快照組,而不影響到任何使用性能??煺湛梢钥缍鄠€(gè)EBS卷,集群,并且以應(yīng)用一致持續(xù)的狀態(tài)。
Portworx也支持重新定義虛擬卷的尺寸。你可以使用這個(gè)功能,結(jié)合EBS彈性卷,動(dòng)態(tài)的來(lái)擴(kuò)大或者縮小存儲(chǔ),來(lái)避免由于過(guò)度部署帶來(lái)的額外成本損失。Portworx快照并不消耗額外的空間,這是因?yàn)榇鎯?chǔ)方式是redirect-on-write,包括一個(gè)B-tree–based的文件系統(tǒng),這樣Portworx可以保持追蹤同一個(gè)塊的不同版本的數(shù)據(jù)。因此,這些快照非常節(jié)省空間。
你可以使用Portworx云快照策略來(lái)自動(dòng)上載所有的快照到Amazon Simple Storage Service (S3, https://amazonaws-china.com/s3/),并且刪除本地的快照。這個(gè)功能幫助防止本地不斷增加的快照來(lái)消耗EBS卷空間。Portworx也有一個(gè)本地快照保留策略,來(lái)幫助在本地保存一些特定的快照。這個(gè)策略可以基于每個(gè)卷,也可以在卷被創(chuàng)建或者卷被更新的時(shí)候動(dòng)態(tài)的來(lái)配置。Amazon S3是一個(gè)對(duì)象存儲(chǔ)服務(wù),提供99.999999999百分比的可用性。被上載到S3的Portworx快照,包括實(shí)際的存儲(chǔ)塊,而不僅僅是書(shū)簽。因此它提供了預(yù)防數(shù)據(jù)丟失的另一個(gè)保護(hù)層。
對(duì)本地的快照來(lái)說(shuō),恢復(fù)操作也是即時(shí)的,對(duì)于cloudsnaps (https://docs.portworx.com/cloud/backups.html) 來(lái)說(shuō),恢復(fù)操作也幾乎是即時(shí)的,因?yàn)镻ortworx僅僅在Amazon S3中存儲(chǔ)快照的不同部分。
關(guān)于性能和延遲,Portworx邏輯卷被每個(gè)Pod在本地訪問(wèn)。在后臺(tái),Portworx把block復(fù)制到其他可用性區(qū)域的其他worker node上。這樣,當(dāng)pod意外恢復(fù)到其他可用性區(qū)域后,可以快速的重新訪問(wèn)本地?cái)?shù)據(jù),繼續(xù)運(yùn)行。
Portworx有客戶(hù)運(yùn)行大規(guī)模數(shù)據(jù)庫(kù)比如Cassandra和Elasticsearch (https://portworx.com/ge-mesosphere-dcos-portworx/),在AWS上成功運(yùn)行上百T的數(shù)據(jù)。這些客戶(hù)認(rèn)可在EBS上運(yùn)行Portworx帶來(lái)的成本節(jié)省收益。需要了解更多Portworx的功能,可以訪問(wèn)Portworx的網(wǎng)站 (https://portworx.com/products/features/)。
以上我們解釋了,你可以結(jié)合使用Amazon EKS和Portworx存儲(chǔ),作為一個(gè)運(yùn)行SQL Server的可靠的并且靈活的解決方案。接下來(lái),我們將描述把SQL Server部署到Amazon EKS上的具體步驟。你可以按照下面的說(shuō)明,在自己的環(huán)境里快速部署并驗(yàn)證解決方案。
一些前置條件
本文描述的解決方案基于PowerShell腳本??梢允荳indows PowerShell或者PowerShell Core。如果你希望在Windows 10或者Windows Server 2016來(lái)運(yùn)行腳本,你可以使用自帶的Windows PowerShell。你也可以在MacBook或者Linux機(jī)器上來(lái)運(yùn)行這些腳本。首先你需要在你的目標(biāo)設(shè)備上安裝PowerShell Core (https://docs.microsoft.com/en-us/powershell/scripting/setup/installing-powershell?view=powershell-6)。另一種選擇,Mac的用戶(hù)可以使用ReadMe文件里的說(shuō)明來(lái)部署一個(gè)本地的Docker容器,來(lái)包括所有這些前置條件。
這個(gè)腳本會(huì)調(diào)用在AWS Tools for PowerShell ( https://amazonaws-china.com/powershell/) 里的PowerShell cmdlets 。確保你的機(jī)器上安裝了最新版本的 AWS Tools for Windows PowerShell (https://www.powershellgallery.com/packages/AWSPowerShell/3.3.343.0),或者AWS Tools for PowerShell Core (https://www.powershellgallery.com/packages/AWSPowerShell.NetCore/3.3.343.0)
這些腳本有時(shí)候需要AWS 命令行界面(AWS CLI)工具來(lái)調(diào)用Amazon EKS APIs。確保你安裝了最新版本的AWS CLI (https://docs.aws.amazon.com/cli/latest/userguide/installing.html)。
最后,你需要必須的AWS賬戶(hù)的權(quán)限來(lái)運(yùn)行腳本。這包括運(yùn)行AWS CloudFormation模板、創(chuàng)建虛擬私有云(VPCs)、子網(wǎng)、安全組、以及EC2實(shí)例,并且部署和訪問(wèn)EKS集群。你可以使用一個(gè)IAM用戶(hù)(在你的計(jì)算機(jī)上保存一對(duì)可長(zhǎng)期使用的Keys)。這種情況下,你需要允許AWS在PowerShell 和 AWS CLI上使用這些Keys。
另一種方式,你可以使用IAM角色,它具有被分配給EC2實(shí)例的所有必須的權(quán)限,可以用來(lái)運(yùn)行腳本。這個(gè)方式,不需要額外的配置,AWS PowerSheel Tool和AWS CLI會(huì)從EC2實(shí)例的元數(shù)據(jù)那里自動(dòng)獲得臨時(shí)的身份信息。
作為可選,這個(gè)包里面包括一個(gè)Docker文件,它會(huì)直接創(chuàng)建腳本,以及直接創(chuàng)建以上所有的必須的部分(AWS CLI、AWS cmdlets這些)到microsoft/powershell Docker鏡像里。這樣你就可以直接使用docker run來(lái)setup環(huán)境,不論是在MacOS、Linux或者Windows上,只要你安裝了Docker。
在Amazon EKS上部署SQL Server
你可以通過(guò)運(yùn)行被include的腳本,傳遞必須的參數(shù),來(lái)部署SQL Server。腳本包括許多參數(shù),最重要的一些參數(shù)已經(jīng)有默認(rèn)的值,來(lái)幫助不熟悉的用戶(hù)。反復(fù)運(yùn)行同樣參數(shù)的腳本也是安全的,它會(huì)檢查底層的資源是不是已經(jīng)存在,如果已經(jīng)存在,會(huì)復(fù)用它們。
以下是腳本運(yùn)行的所有步驟:
1. 首先,它為Amazon EKS創(chuàng)建一個(gè)IAM服務(wù)角色。這個(gè)角色會(huì)允許AWS來(lái)創(chuàng)建必要的資源。
2. 你需要一個(gè)VPC來(lái)運(yùn)行你的集群。腳本會(huì)接收一個(gè)AWS CloudFormation VPC Stack的名稱(chēng)作為一個(gè)參數(shù)。如果Stack已經(jīng)存在,它就會(huì)復(fù)用這個(gè)Stack,否則,它就通過(guò)AWS提供的模板創(chuàng)建一個(gè)新的Stack。Stack包括VPC、子網(wǎng)和安全組,這些必須的內(nèi)容來(lái)運(yùn)行集群。
3. 你使用一個(gè)客戶(hù)端工具kubectl來(lái)配置和與Kubernetes交互。腳本會(huì)下載AWS版本的Kubectl,并且安裝到你的本地計(jì)算機(jī)。
4. 當(dāng)你使用Kubectl來(lái)查詢(xún)Amazon EKS,你正在使用的AWS PowerShell工具的身份信息也會(huì)被傳遞給Amazon EKS。這個(gè)任務(wù)是被另一個(gè)工具aws-iam-authenticator來(lái)完成的,這個(gè)工具也會(huì)被腳本下載并安裝。
5. 它創(chuàng)建了一個(gè)新的EKS集群。這個(gè)EKS集群包括被管理的一組3個(gè) Master節(jié)點(diǎn),分布在3個(gè)AWS可用區(qū)域上。
6. 它配置Kubectl來(lái)連接到上面步驟創(chuàng)建的EKS集群上。
7. 它創(chuàng)建了新的EC2實(shí)例,并且配置它們加入到EKS集群和Worker nodes上。
8. 它創(chuàng)建了一個(gè)Etcd集群,讓Portworx與之通信。
9. 它然后下載一個(gè)DaemonSet規(guī)格參數(shù),并且應(yīng)用到EKS集群上。這就自動(dòng)安裝了Portworx云原生存儲(chǔ) – 含有GP2和IO1 EBS卷,供用戶(hù)選擇其中一種或者全部。
10. 它為Portworx卷創(chuàng)建了一個(gè)存儲(chǔ)類(lèi),其中EKS集群內(nèi)的復(fù)制因子數(shù)值為3。這樣你就可以在主機(jī)發(fā)生錯(cuò)誤的時(shí)候,維持SQL Server集群的高可用。甚至Kubernetes可以把你的SQL Server Pod調(diào)度到另一個(gè)可用性區(qū)域。
11. 它在EKS集群內(nèi),為gp2 EBS卷創(chuàng)建了一個(gè)存儲(chǔ)類(lèi)。
12. 它在EKS集群內(nèi)創(chuàng)建了一個(gè)新的Persistent Volume聲明(PVC)。PVC允許Portworx來(lái)部署由Amazon EBS卷支持的持久卷(PV)。
13. 它提示你輸入SQL Server SA用戶(hù)的密碼。輸入符合SQL Server密碼要求的強(qiáng)度較高的密碼。腳本會(huì)把密碼作為Secret保存到EKS集群里。
14. 然后它會(huì)創(chuàng)建SQL Server的部署。部署包括一個(gè)復(fù)制集,它會(huì)按順序創(chuàng)建Kubernetes的Pods。Pod是由一個(gè)運(yùn)行SQL Server的單獨(dú)容器組成。PVC卷被Mount到了這個(gè)容器里。SA的密碼也被使用。
15. 最后,它輸出端點(diǎn)的名稱(chēng),在連接字符串里使用來(lái)連接到SQL Server實(shí)例里。
運(yùn)行腳本會(huì)部署EKS集群,以及一個(gè)單獨(dú)的SQL Server實(shí)例。你也可以在同一個(gè)EKS集群上部署另一個(gè)SQL Server實(shí)例,只需要再次運(yùn)行同一個(gè)腳本即可。然后為appName參數(shù)傳遞一個(gè)不同的名稱(chēng)。
高可用性
腳本部署SQL Server使用Multi-AZ Kubernetes集群,和一個(gè)有Portworx卷支持的存儲(chǔ)類(lèi)(Storage Class)。由于Portworx在SQL Server容器里保護(hù)和復(fù)制數(shù)據(jù),部署針對(duì)下列情況具備高可用:
如果一個(gè)容器或者Pod錯(cuò)誤,Kubernetes會(huì)立即調(diào)度另一個(gè)容器或者Pod。甚至Kubernetes把Pod調(diào)度到了另一個(gè)可用性區(qū)域。你也不會(huì)有數(shù)據(jù)損失,因?yàn)镻ortworx自動(dòng)的在可用性區(qū)域之間復(fù)制數(shù)據(jù)。
在前面的部分,我們注意到Portworx復(fù)制因子的數(shù)值被設(shè)定成了3。這意味著除了我們的主PV之外,Portworx會(huì)在集群上的其他地方一直保持兩個(gè)額外的PV副本。因?yàn)锳mazon EBS卷只在一個(gè)單獨(dú)的可用性區(qū)域保持高可用性,默認(rèn)情況下,Portworx把這些復(fù)制擴(kuò)展到多個(gè)可用性區(qū)域里。相對(duì)于本地部署時(shí):通常一個(gè)SQL Server錯(cuò)誤恢復(fù)集群實(shí)例(FCI)是部署在同一個(gè)數(shù)據(jù)中心里的,很大的進(jìn)步就是Kubernetes和Portworx集群是分布在多個(gè)可用性區(qū)域里的。因此,可用性更高。
在Portworx存儲(chǔ)集群上的Kubernetes里運(yùn)行SQL Server容器,類(lèi)似在跨多個(gè)可用性區(qū)域的Storage Spaces Direct 集群(https://docs.microsoft.com/en-us/windows-server/storage/storage-spaces/storage-spaces-direct-overview)上運(yùn)行SQL Server Always On FCI。這樣Recovery Point Objective (RPO)是零,而且Recovery Time Objective (RTO,https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-container-ha-overview?view=sqlallproducts-allversions) 小于10分鐘,這樣可以應(yīng)對(duì)可能出現(xiàn)的可用性區(qū)域的錯(cuò)誤,達(dá)到極高的可用性。區(qū)別是在EKS里運(yùn)行容器,比起在Windows Server容錯(cuò)恢復(fù)集群上配置和維護(hù)SQL Server要更加容易。
如果你運(yùn)行SQL Server標(biāo)準(zhǔn)版,你也可以通過(guò)使用容器和Amazon EKS獲得相比于傳統(tǒng)Windows部署的更高的可用性。這是因?yàn)镾QL Server標(biāo)準(zhǔn)版FCI只能授權(quán)最多兩個(gè)節(jié)點(diǎn)的使用。(一個(gè)第二節(jié)點(diǎn))。然而,容器可以被部署到含有任何數(shù)量節(jié)點(diǎn)的集群上。SQL Server Always On FCI的企業(yè)版可以超過(guò)兩個(gè)節(jié)點(diǎn)。取決于你的軟件授權(quán)協(xié)議,你可能要為每個(gè)額外的實(shí)例購(gòu)買(mǎi)新的授權(quán)。這不是容器的使用方式。你可以只支付一個(gè)容器的費(fèi)用,不論你在集群上有多少standby的實(shí)例。
也可以把SQL Server容器和Always On可用性組(SQL Server 2019 preview版本)一起部署。這樣的配置類(lèi)似部署Always On可用性組(每個(gè)節(jié)點(diǎn)自己就是一個(gè)Always On FCI集群)。這樣,容器就會(huì)擺脫一些Always On可用性組和FCI的限制。例如,這些限制包括從一個(gè)可用性組的節(jié)點(diǎn)自動(dòng)容錯(cuò)恢復(fù)到另一個(gè)節(jié)點(diǎn),和為每一個(gè)節(jié)點(diǎn)設(shè)置FCI的復(fù)雜操作。
SQL Server容器軟件授權(quán)
基于SQL Server 2017軟件授權(quán)說(shuō)明:“SQL Server 2017使用授權(quán)給虛擬機(jī)和容器,為客戶(hù)的部署提供靈活性。有兩種可選的給虛擬機(jī)和容器的授權(quán)方式,為每個(gè)虛擬機(jī)和容器授權(quán),以及為高度虛擬化或高密度容器環(huán)境的大密度授權(quán)(每物理主機(jī)授權(quán))”。
有機(jī)會(huì)通過(guò)把SQL Server負(fù)載容器化來(lái)降低軟件授權(quán)成本。你可以基于不同的實(shí)際場(chǎng)景,使用每容器授權(quán)的模式,或者使用每物理主機(jī)授權(quán)的模式(高密度),來(lái)降低軟件授權(quán)的數(shù)量。
如果你有一些應(yīng)用在EC2實(shí)例上運(yùn)行,并且希望在同一個(gè)主機(jī)上運(yùn)行應(yīng)用的同時(shí),也運(yùn)行SQL Server,你可以使用每容器授權(quán)的模式。如果沒(méi)有容器,是在虛擬機(jī)上直接運(yùn)行SQL Server,包括EC2實(shí)例,你就需要為VM包括的所有vCPU購(gòu)買(mǎi)授權(quán),不論SQL Server到底使用了多少vCPU資源。然而,如果你是在VM之上的容器里運(yùn)行SQL Server,你只需要為容器訪問(wèn)到的vCPU數(shù)量購(gòu)買(mǎi)授權(quán)。你可以?xún)H僅為能訪問(wèn)到的核數(shù)量購(gòu)買(mǎi)授權(quán),這樣你最小的情況可以只夠買(mǎi)4核的授權(quán),或者6核,8核這樣,視情況而定。
如果你的SQL Server實(shí)例存在突發(fā)峰值的使用情況,你可以在高密度環(huán)境的容器內(nèi)運(yùn)行它們。這種情況下,你可以選擇每物理機(jī)授權(quán)的模式。只要所有的物理核資源得到了正確的授權(quán),就會(huì)允許你運(yùn)行物理核資源之上的不限數(shù)量的容器,以及不限數(shù)量的vCPU。
在上面的圖里,有12個(gè)vCPU核和20個(gè)容器。但因?yàn)檫@些容器都運(yùn)行在一個(gè)6核的物理機(jī)器上,只需要為這6個(gè)物理機(jī)的核授權(quán)。這對(duì)那些已經(jīng)在本地物理環(huán)境里過(guò)度部署了SQL Server虛擬機(jī)的情況非常有用。EC2實(shí)例有一個(gè)固定的hyperthreading比例:2vCPU對(duì)應(yīng)一個(gè)物理主機(jī)核。這樣遷移過(guò)度部署的負(fù)載(3:1,4:1,5:1或者更高)到EC2實(shí)例里會(huì)帶來(lái)更高的成本問(wèn)題。容器化解決成本問(wèn)題,相應(yīng)也會(huì)帶來(lái)更好的收益。
Portworx授權(quán)
Portworx支持高密度容器環(huán)境的授權(quán)模式。Kubernetes本身推薦一個(gè)節(jié)點(diǎn)最多不要超過(guò)100個(gè)pod(https://kubernetes.io/docs/setup/cluster-large/)。這樣理論上,你可以在每個(gè)EC2實(shí)例里運(yùn)行不超過(guò)100個(gè)SQL Server Pods,這樣可以大量節(jié)省SQL Server授權(quán)。Portworx針對(duì)每個(gè)EC2實(shí)例只需要一個(gè)授權(quán),不論運(yùn)行多少容器,或者消耗多少存儲(chǔ)。這樣對(duì)于集群,你并不是簡(jiǎn)單的用一個(gè)授權(quán)來(lái)?yè)Q另外一個(gè),實(shí)際上,每個(gè)主機(jī)運(yùn)行的SQL Server數(shù)量越多,你的平均授權(quán)成本越低。Portworx支持每個(gè)集群數(shù)千節(jié)點(diǎn),以及支持每個(gè)節(jié)點(diǎn)數(shù)百個(gè)有狀態(tài)容器(https://portworx.com/architects-corner-aurea-beyond-limits-amazon-ebs-run-200-kubernetes-stateful-pods-per-host/)。
什么情況下不適合使用SQL Server容器
在現(xiàn)有版本的功能上,并不是所有的SQL Server都能夠被容器化。目前僅僅只有SQL Server2017支持容器。2017之前的版本都不能支持容器。但SQL Server本身是兼容SQL Server 2008之后的版本的,這意味著你可以導(dǎo)入從SQL Server 2008(或之后版本)中創(chuàng)建的數(shù)據(jù)庫(kù)到SQL Server2017實(shí)例里(包括在容器里運(yùn)行的SQL Server 2017里),用兼容模式來(lái)運(yùn)行即可。
雖然SQL Server on Linux支持與Microsoft Active Directory的集成,SQL Server容器目前不支持Active Directory集成。
SQL Server一個(gè)經(jīng)常使用的功能是horizontal read-scaling,它在Always on可用性組里。這個(gè)功能對(duì)容器目前只是Preview版本,不能用在生產(chǎn)環(huán)境。
另一個(gè)云帶來(lái)的可能的好處是License Included services模式。對(duì)于許多商業(yè)來(lái)說(shuō),管理已購(gòu)買(mǎi)的授權(quán)和實(shí)際軟件授權(quán)使用是非常復(fù)雜的工作。經(jīng)常會(huì)不一致,導(dǎo)致客戶(hù)要么為未使用的軟件授權(quán)多花錢(qián),要么合規(guī)地軟件授權(quán)不足。SQL Server容器支持Bring Your Own License (BYOL)模式,因此在決策前好好考慮下授權(quán)的問(wèn)題。
也有其他一些功能目前還不能使用,比如Distributed Transaction Coordinator (DTC)和custom CLR user types。如果你的SQL Server負(fù)載是一個(gè)比較靜態(tài)平穩(wěn)的資源消耗模式,也許傳統(tǒng)的部署模式更加適用。
結(jié)論
在本篇文章中,我們討論了為什么要考慮在容器中使用SQL Server和Portworx,并且討論了需要考慮的各個(gè)方面。
這樣的方式有下面的好處:
這篇文章演示了在Amazon EKS上與Portworx一起部署SQL Server是比較簡(jiǎn)單的。你可以部署基礎(chǔ)架構(gòu)和EKS集群,并且通過(guò)使用一個(gè)簡(jiǎn)單的腳本來(lái)調(diào)用AWS API,從而來(lái)運(yùn)行SQL Server容器?;谀愕那闆r,你可以使用兩種存儲(chǔ)方案:
當(dāng)前題目:通過(guò)Portworx在AWS上運(yùn)行高可用SQLServer容器-創(chuàng)新互聯(lián)
鏈接URL:http://jinyejixie.com/article28/piccp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、網(wǎng)站制作、動(dòng)態(tài)網(wǎng)站、定制開(kāi)發(fā)、標(biāo)簽優(yōu)化、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容
移動(dòng)網(wǎng)站建設(shè)知識(shí)