通過Portworx在AWS上運(yùn)行高可用SQLServer容器-創(chuàng)新互聯(lián)

通過Portworx云原生存儲(chǔ),在Amazon EKS里運(yùn)行高可用SQL Server容器

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比三明網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式三明網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋三明地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。

在本文我們將分析,如何使用Amazon Elastic Container Service for Kubernetes (Amazon EKS, https://amazonaws-china.com/eks/),來在容器中部署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/)來運(yùn)行SQL Server生產(chǎn)負(fù)載。

Microsoft SQL Server是被廣泛使用的數(shù)據(jù)庫。SQL Server提供一系列很不錯(cuò)的功能,也有很不錯(cuò)的開發(fā)者社區(qū)。但是它需要比較多的運(yùn)維,也比開源的或者云端的數(shù)據(jù)庫成本要更高。很多為了降低成本的用戶會(huì)轉(zhuǎn)向開源方案來降低軟件授權(quán)的成本。另一些用戶會(huì)遷移工作負(fù)載到關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)服務(wù)里,比如Amazon RDS for Microsoft SQL Server或者Amazon Aurora。

但也有許多情況,用戶無法離開SQL Server。這有很多可能的原因,比如需要重新部署和開發(fā)的成本,以及需要配置具備相關(guān)技能的開發(fā)工程師和運(yùn)維工程師資源的成本等。用戶可能無法使用云服務(wù),可能是軟件授權(quán)和支持的問題,或者一些技術(shù)問題。

在這樣的情況下,可以通過把SQL Server數(shù)據(jù)庫部署到Amazon Elastic Compute Cloud (Amazon EC2, https://amazonaws-china.com/ec2/)實(shí)例上,來使用云服務(wù)。這種方式保持了需要滿足特定需要的靈活性,也提供了云的各種好處。這些好處包括對于物理硬件層的抽象,以及按需付費(fèi)的模式,以及其他的云端服務(wù)能力。雖然這種方式比本地部署SQL Server要更有優(yōu)勢,但管理額外的數(shù)據(jù)庫實(shí)例的管理成本仍然有可提升的空間。

使用Kubernetes來運(yùn)行SQL Server會(huì)有更多優(yōu)勢:

  • 簡化:在容器中部署和運(yùn)維SQL Server會(huì)很簡單和快捷,比起傳統(tǒng)的部署模式會(huì)大幅降低工作量。這是因?yàn)椴渴鸩恍枰惭b,而是通過上載新的鏡像來完成。容器提供了一個(gè)可以任何環(huán)境運(yùn)行的抽象層。
  • 更優(yōu)化的資源使用:容器化的SQL Server提供了高密度,允許內(nèi)部負(fù)載共享一個(gè)通用的資源池(內(nèi)存、CPU、存儲(chǔ))。因此減少了閑置的資源,增加了基礎(chǔ)架構(gòu)資源的利用率。
  • 降低軟件授權(quán)的成本:在容器中運(yùn)行SQL Server的一些場景,不論是高密度還是低密度,都會(huì)降低軟件授權(quán)的成本。我們會(huì)在本文后面詳細(xì)介紹軟件授權(quán)的成本。

容器服務(wù)

目前,AWS里有四種容器服務(wù):

  • Amazon      Elastic Container Service (Amazon ECS,https://amazonaws-china.com/ecs/):一個(gè)高度可擴(kuò)展的,高性能的調(diào)度服務(wù),與AWS的多項(xiàng)服務(wù)原生集成。
  • Amazon Elastic Container Service for Kubernetes (Amazon EKS):一個(gè)AWS提供的管理服務(wù),可以方便的使用Kubernetes部署、管理和擴(kuò)展容器應(yīng)用。
  • AWS      Fargate (https://amazonaws-china.com/fargate/):一個(gè)Amazon ECS的計(jì)算引擎,可以幫助用戶在不需要管理服務(wù)器/集群的情況下,來運(yùn)行容器。
  • Amazon Elastic Container Registry (Amazon ECR,https://amazonaws-china.com/ecr/):一個(gè)完整的被管理的Docker容器注冊表,便于用戶來存儲(chǔ)、管理和部署Docker容器鏡像。

在AWS上作架構(gòu)的一個(gè)重要原則是 Multi-AZ部署,來產(chǎn)生高可用的和高性能的負(fù)載。你可以直接使用Amazon Elastic Block Storage (Amazon EBS, https://amazonaws-china.com/ebs/) 卷作為SQL Server容器的存儲(chǔ)解決方案,但這會(huì)限制這些容器只能在單一的可用區(qū)域內(nèi)。Portworx可以用來解決這個(gè)問題。

Portworx是AWS全球的合作伙伴,也是微軟的高可用和容災(zāi)方案合作伙伴。Portworx使得SQL Server能夠以高可用的方式,跨多個(gè)AWS可用區(qū)域,作為EKS集群來運(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 卷)來在生產(chǎn)環(huán)境中運(yùn)行SQL Server負(fù)載。我們也提供了一份樣例腳本( https://github.com/awslabs/aws-eks-portworx-sql)  ,來自動(dòng)地在幾分鐘內(nèi)完成SQL Server實(shí)例的部署過程。

在容器中運(yùn)行SQL Server的好處

使用容器大的好處是簡單和有效。不需要安裝SQL Server或者配置容錯(cuò)集群。使用簡單的命令就可以部署SQL Server容器,然后Kubernetes會(huì)提供SQL Server部署的高可用。在一些情況下,Kubernetes中部署的SQL Server的容器實(shí)例,可用性甚至高于那些部署在容錯(cuò)集群上的。后面“高可用性”部分我們會(huì)介紹更多細(xì)節(jié)。

在容器中運(yùn)行SQL Server的主要好處來自于高密度部署和資源共享。容器和虛擬機(jī)(VMs)的根本性的不同是:在運(yùn)行過程中,與虛擬機(jī)不同,容器并不是被限定到一系列固定的資源上的。一個(gè)共享的資源池經(jīng)常被一組容器在同一個(gè)主機(jī)上共享來使用。這使得容器可以隨時(shí)調(diào)整使用更多或者更少的資源。只要資源的總消耗不高于總資源池的資源容量,所有的容器都能有足夠的資源來運(yùn)行。

通過Portworx在AWS上運(yùn)行高可用SQL Server容器

如圖中所示,一個(gè)按照自身配置滿負(fù)荷資源運(yùn)行的VM,無法在使用主機(jī)上閑余的資源。在這個(gè)例子中,資源池有兩臺(tái)物理主機(jī),包括8個(gè)CPU核。盡管有3個(gè)CPU核仍然閑余未被使用,VM4和VM7仍然在自身滿資源的狀態(tài)下運(yùn)行,而無法擴(kuò)展使用閑余的資源。

讓我們來看一下能夠更有效利用資源的另一種方式。假設(shè)存在一種情況,你不需要擔(dān)心物理主機(jī)資源的數(shù)量。你只需部署一個(gè)滿資源的VM來運(yùn)行一組應(yīng)用,比如一些SQL Server實(shí)例。假設(shè)你可以讓你的應(yīng)用共享所有資源,并且確?;ハ嘀g沒有沖突。圖右側(cè)的部分就是這樣的解決方案:使用Amazon EC2實(shí)例上的容器服務(wù)。

使用這種解決方案。沒有容器存在資源限制,總體的CPU核資源從8個(gè)減少到了6個(gè)。對于內(nèi)存資源來說也是一樣的。容器化,可以增加底層架構(gòu)的使用效率和有效性。這對于運(yùn)行SQL Server這樣的有峰值使用量的應(yīng)用來說尤其合適。

另一個(gè)在容器中運(yùn)行SQL Server的好處是可以減少軟件授權(quán)的成本。SQL Server是一個(gè)商業(yè)產(chǎn)品,使用授權(quán)的限制會(huì)影響我們從技術(shù)角度的決策,或者可能大幅推高我們的商業(yè)成本。微軟授權(quán)SQL Server在容器中使用的方式,會(huì)很大程度上緩解這些問題。在后續(xù)“SQL Server容器軟件授權(quán)”部分有更多的細(xì)節(jié)。

Amazon EKS架構(gòu)上的SQL Server

Kubernetes是一個(gè)開源軟件,可以用來部署和管理可擴(kuò)展的容器化應(yīng)用。它是一個(gè)中心化管理的分布式系統(tǒng),用來運(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,用戶可以調(diào)用AWS API進(jìn)行部署和管理。作為響應(yīng),用戶會(huì)收到一個(gè)上游Kubernetes api-server端點(diǎn),這個(gè)端點(diǎn)允許用戶連接到新的Kubernetes集群并使用。

通過Portworx在AWS上運(yùn)行高可用SQL Server容器

SQL Server在每一個(gè)Pod (一組總是一起運(yùn)行的容器)中,被部署為一個(gè)單獨(dú)的容器。多個(gè)SQL Server的實(shí)例可以被部署為多個(gè)Pods。Kubernetes調(diào)度這些位于集群的節(jié)點(diǎn)上的Pods,確保有足夠的資源來運(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í)例來達(dá)到高密度。

存儲(chǔ)的使用也進(jìn)行了抽象化。對Kubernetes來說,持久卷(PV)是一個(gè)封裝了存儲(chǔ)解決方案實(shí)施細(xì)節(jié)的對象。這可能是Amazon EBS卷,一個(gè)網(wǎng)絡(luò)五年間系統(tǒng)(NFS)共享,或者其他解決方案。PV的生命周期跟使用它的Pod的生命周期互相獨(dú)立不相干。

要使用PV,另一個(gè)對象 – 持久卷聲明(PVC, Persistent Volume Claim)需要被創(chuàng)建。PVC是一個(gè)使用請求,用來請求使用定義了大小和訪問模式(讀/寫)的存儲(chǔ)。一個(gè)PVC也可以定義存儲(chǔ)類(Storage Class)的值。存儲(chǔ)類是另一類抽象,允許用戶定義存儲(chǔ)解決方案的一些參數(shù),比如延遲(latency)和IOPS。

管理員需要定義一個(gè)存儲(chǔ)類,例如AWS標(biāo)準(zhǔn)目的GP2 EBS卷,或者Portworx高(中) I/O卷。管理員然后可以基于這個(gè)存儲(chǔ)類來創(chuàng)建PV,或者允許用戶基于PVCs來動(dòng)態(tài)的創(chuàng)建PV。而后應(yīng)用可以Include一個(gè)PVC,把PV分配給某個(gè)特定的pod。為了讓這個(gè)過程更加簡單,你可以定義一個(gè)默認(rèn)的存儲(chǔ)類。例如,假設(shè)一個(gè)Amazon EBS標(biāo)準(zhǔn)目的SSD (gp2)卷,被定義成Kubernetes集群上的默認(rèn)存儲(chǔ)類,即使一個(gè)PVC沒有Include某一個(gè)特定的存儲(chǔ)類注解,Kubernetes將會(huì)自動(dòng)注解它到AWS GP2 EBS存儲(chǔ)類上。

通過Portworx在AWS上運(yùn)行高可用SQL Server容器

存儲(chǔ)的選擇

存儲(chǔ)是SQL Server部署中的一個(gè)關(guān)鍵部分。在AWS上部署SQL Server最常用的存儲(chǔ)方式是使用EBS卷。在Kubernetes集群中有兩種存儲(chǔ)類可以直接用來使用EBS卷。

  • Aws-gp2 (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) 提供了一個(gè)平衡成本和性能的解決方案。
  • Aws-io1 (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html),適用于需要穩(wěn)定的IOPS和通道速度的生產(chǎn)環(huán)境負(fù)載。

你可以直接在EBS卷上存儲(chǔ)SQL Server文件。然而,在許多情況下,一個(gè)單獨(dú)的EBS卷并不能滿足要求。例如,你也許需要在Multi – AZ架構(gòu)下的高可用性,需要超出單獨(dú)EBS卷限制的存儲(chǔ)容量,或者需要單獨(dú)卷無法達(dá)到的IOPS和通道速度。你可以嘗試使用SQL Server Always On可用性組來解決高可用性問題,但是它無法解決存儲(chǔ)容量、IOPS、和通道速度問題。同時(shí)針對SQL Server容器的Always On可用性組功能,目前也僅在SQL Server 2019是Preview發(fā)布。

你可以滿足所有這些要求,包括高可用性、IOPS和通道速度,通過把幾個(gè)EBS卷合并成存儲(chǔ)池,在每一個(gè)EC2實(shí)例里Striping卷,并且把存儲(chǔ)池延展到不同可用性區(qū)域的多個(gè)實(shí)例里。你可以部署一個(gè)獨(dú)立的存儲(chǔ)集群,并且通過NFS存儲(chǔ)類在Kubernetes集群中使用該存儲(chǔ)集群。但這些操作會(huì)增加一些管理復(fù)雜度。

Portworx云原生存儲(chǔ)

Portworx是一個(gè)存儲(chǔ)集群解決方案,可以在Kubernetes集群中服務(wù)應(yīng)用和部署。Portworx是部署在Kubernetes之上的。Portworx使用Kubernetes來抽象化所有復(fù)雜的管理存儲(chǔ)集群的操作。Portworx提供一個(gè)簡單的存儲(chǔ)類,可以被Kubernetes集群里的所有的有狀態(tài)應(yīng)用來使用。

在AWS里,Portworx通過對附加在Kubernetes集群(EC2實(shí)例)上的Worker Node上的EBS卷進(jìn)行聲明,來提供存儲(chǔ)類。Portworx會(huì)把所有卷放進(jìn)一個(gè)抽象的存儲(chǔ)池里,然后從存儲(chǔ)池里創(chuàng)建邏輯卷。當(dāng)SQL Server的應(yīng)用創(chuàng)建一個(gè)包括Portworx存儲(chǔ)類的PVC,并且限定卷大小,一個(gè)包括具體大小的Portworx PV就被分配給了應(yīng)用。

Portworx可以創(chuàng)建快照,稱為3DSnaps。通過這個(gè)功能,你可以在SQL Server不停機(jī)的情況下,或者把SQL Server調(diào)成 read-only模式的情況下,來創(chuàng)建SQL Server卷的連續(xù)快照。Portworx的另一個(gè)功能是可以導(dǎo)入已有的EBS卷到Portworx邏輯集群卷里。這使得負(fù)載的遷移變得很容易。通過Portworx,集群可以變得密度很高,意味著你可以在一個(gè)主機(jī)上運(yùn)行更多的容器。針對Kubernetes的一般性建議是每個(gè)VM/100個(gè)Pods。Portworx有一些客戶甚至可以在每個(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在AWS上運(yùn)行高可用SQL Server容器

Portworx在EBS卷之上,使用自己最佳顆粒度的快照層。

Portworx快照的創(chuàng)建和存儲(chǔ)都是實(shí)時(shí)的。這是因?yàn)镻ortworx的快照是re-direct-on-write快照,實(shí)際上,Portworx可以通過書簽方式(bookmark)即時(shí)地創(chuàng)建一個(gè)卷的實(shí)時(shí)快照。因?yàn)閷?shí)際上的存儲(chǔ)塊并沒有被copy,不論作多少次快照,都沒有由于寫入帶來的資源使用。你可以創(chuàng)建一個(gè)每15分鐘一次的快照組,而不影響到任何使用性能。快照可以跨多個(gè)EBS卷,集群,并且以應(yīng)用一致持續(xù)的狀態(tài)。

Portworx也支持重新定義虛擬卷的尺寸。你可以使用這個(gè)功能,結(jié)合EBS彈性卷,動(dòng)態(tài)的來擴(kuò)大或者縮小存儲(chǔ),來避免由于過度部署帶來的額外成本損失。Portworx快照并不消耗額外的空間,這是因?yàn)榇鎯?chǔ)方式是redirect-on-write,包括一個(gè)B-tree–based的文件系統(tǒng),這樣Portworx可以保持追蹤同一個(gè)塊的不同版本的數(shù)據(jù)。因此,這些快照非常節(jié)省空間。

你可以使用Portworx云快照策略來自動(dòng)上載所有的快照到Amazon Simple Storage Service (S3, https://amazonaws-china.com/s3/),并且刪除本地的快照。這個(gè)功能幫助防止本地不斷增加的快照來消耗EBS卷空間。Portworx也有一個(gè)本地快照保留策略,來幫助在本地保存一些特定的快照。這個(gè)策略可以基于每個(gè)卷,也可以在卷被創(chuàng)建或者卷被更新的時(shí)候動(dòng)態(tài)的來配置。Amazon S3是一個(gè)對象存儲(chǔ)服務(wù),提供99.999999999百分比的可用性。被上載到S3的Portworx快照,包括實(shí)際的存儲(chǔ)塊,而不僅僅是書簽。因此它提供了預(yù)防數(shù)據(jù)丟失的另一個(gè)保護(hù)層。

對本地的快照來說,恢復(fù)操作也是即時(shí)的,對于cloudsnaps (https://docs.portworx.com/cloud/backups.html) 來說,恢復(fù)操作也幾乎是即時(shí)的,因?yàn)镻ortworx僅僅在Amazon S3中存儲(chǔ)快照的不同部分。

關(guān)于性能和延遲,Portworx邏輯卷被每個(gè)Pod在本地訪問。在后臺(tái),Portworx把block復(fù)制到其他可用性區(qū)域的其他worker node上。這樣,當(dāng)pod意外恢復(fù)到其他可用性區(qū)域后,可以快速的重新訪問本地?cái)?shù)據(jù),繼續(xù)運(yùn)行。

Portworx有客戶運(yùn)行大規(guī)模數(shù)據(jù)庫比如Cassandra和Elasticsearch (https://portworx.com/ge-mesosphere-dcos-portworx/),在AWS上成功運(yùn)行上百T的數(shù)據(jù)。這些客戶認(rèn)可在EBS上運(yùn)行Portworx帶來的成本節(jié)省收益。需要了解更多Portworx的功能,可以訪問Portworx的網(wǎng)站 (https://portworx.com/products/features/)。

以上我們解釋了,你可以結(jié)合使用Amazon EKS和Portworx存儲(chǔ),作為一個(gè)運(yùn)行SQL Server的可靠的并且靈活的解決方案。接下來,我們將描述把SQL Server部署到Amazon EKS上的具體步驟。你可以按照下面的說明,在自己的環(huán)境里快速部署并驗(yàn)證解決方案。

一些前置條件

本文描述的解決方案基于PowerShell腳本??梢允荳indows PowerShell或者PowerShell Core。如果你希望在Windows 10或者Windows Server 2016來運(yùn)行腳本,你可以使用自帶的Windows PowerShell。你也可以在MacBook或者Linux機(jī)器上來運(yùn)行這些腳本。首先你需要在你的目標(biāo)設(shè)備上安裝PowerShell Core (https://docs.microsoft.com/en-us/powershell/scripting/setup/installing-powershell?view=powershell-6)。另一種選擇,Mac的用戶可以使用ReadMe文件里的說明來部署一個(gè)本地的Docker容器,來包括所有這些前置條件。

這個(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)工具來調(diào)用Amazon EKS APIs。確保你安裝了最新版本的AWS CLI (https://docs.aws.amazon.com/cli/latest/userguide/installing.html)。

最后,你需要必須的AWS賬戶的權(quán)限來運(yùn)行腳本。這包括運(yùn)行AWS CloudFormation模板、創(chuàng)建虛擬私有云(VPCs)、子網(wǎng)、安全組、以及EC2實(shí)例,并且部署和訪問EKS集群。你可以使用一個(gè)IAM用戶(在你的計(jì)算機(jī)上保存一對可長期使用的Keys)。這種情況下,你需要允許AWS在PowerShell 和 AWS CLI上使用這些Keys。

另一種方式,你可以使用IAM角色,它具有被分配給EC2實(shí)例的所有必須的權(quán)限,可以用來運(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來setup環(huán)境,不論是在MacOS、Linux或者Windows上,只要你安裝了Docker。

在Amazon EKS上部署SQL Server

你可以通過運(yùn)行被include的腳本,傳遞必須的參數(shù),來部署SQL Server。腳本包括許多參數(shù),最重要的一些參數(shù)已經(jīng)有默認(rèn)的值,來幫助不熟悉的用戶。反復(fù)運(yùn)行同樣參數(shù)的腳本也是安全的,它會(huì)檢查底層的資源是不是已經(jīng)存在,如果已經(jīng)存在,會(huì)復(fù)用它們。

以下是腳本運(yùn)行的所有步驟:

1.   首先,它為Amazon EKS創(chuàng)建一個(gè)IAM服務(wù)角色。這個(gè)角色會(huì)允許AWS來創(chuàng)建必要的資源。

2.   你需要一個(gè)VPC來運(yùn)行你的集群。腳本會(huì)接收一個(gè)AWS CloudFormation VPC Stack的名稱作為一個(gè)參數(shù)。如果Stack已經(jīng)存在,它就會(huì)復(fù)用這個(gè)Stack,否則,它就通過AWS提供的模板創(chuàng)建一個(gè)新的Stack。Stack包括VPC、子網(wǎng)和安全組,這些必須的內(nèi)容來運(yùn)行集群。

3.   你使用一個(gè)客戶端工具kubectl來配置和與Kubernetes交互。腳本會(huì)下載AWS版本的Kubectl,并且安裝到你的本地計(jì)算機(jī)。

4.   當(dāng)你使用Kubectl來查詢Amazon EKS,你正在使用的AWS PowerShell工具的身份信息也會(huì)被傳遞給Amazon EKS。這個(gè)任務(wù)是被另一個(gè)工具aws-iam-authenticator來完成的,這個(gè)工具也會(huì)被腳本下載并安裝。

5.   它創(chuàng)建了一個(gè)新的EKS集群。這個(gè)EKS集群包括被管理的一組3個(gè) Master節(jié)點(diǎn),分布在3個(gè)AWS可用區(qū)域上。

6.   它配置Kubectl來連接到上面步驟創(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卷,供用戶選擇其中一種或者全部。

10.  它為Portworx卷創(chuàng)建了一個(gè)存儲(chǔ)類,其中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ǔ)類。

12.  它在EKS集群內(nèi)創(chuàng)建了一個(gè)新的Persistent Volume聲明(PVC)。PVC允許Portworx來部署由Amazon EBS卷支持的持久卷(PV)。

13.  它提示你輸入SQL Server SA用戶的密碼。輸入符合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)的名稱,在連接字符串里使用來連接到SQL Server實(shí)例里。

運(yùn)行腳本會(huì)部署EKS集群,以及一個(gè)單獨(dú)的SQL Server實(shí)例。你也可以在同一個(gè)EKS集群上部署另一個(gè)SQL Server實(shí)例,只需要再次運(yùn)行同一個(gè)腳本即可。然后為appName參數(shù)傳遞一個(gè)不同的名稱。

高可用性

腳本部署SQL Server使用Multi-AZ Kubernetes集群,和一個(gè)有Portworx卷支持的存儲(chǔ)類(Storage Class)。由于Portworx在SQL Server容器里保護(hù)和復(fù)制數(shù)據(jù),部署針對下列情況具備高可用:

  • 容器錯(cuò)誤
  • Pod錯(cuò)誤
  • EC2實(shí)例錯(cuò)誤
  • EC2主機(jī)錯(cuò)誤
  • EBS磁盤錯(cuò)誤
  • EC2網(wǎng)絡(luò)分區(qū)
  • AWS有效性區(qū)域錯(cuò)誤

如果一個(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ū)域里。相對于本地部署時(shí):通常一個(gè)SQL Server錯(cuò)誤恢復(fù)集群實(shí)例(FCI)是部署在同一個(gè)數(shù)據(jù)中心里的,很大的進(jìn)步就是Kubernetes和Portworx集群是分布在多個(gè)可用性區(qū)域里的。因此,可用性更高。

在Portworx存儲(chǔ)集群上的Kubernetes里運(yùn)行SQL Server容器,類似在跨多個(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)對可能出現(xiàn)的可用性區(qū)域的錯(cuò)誤,達(dá)到極高的可用性。區(qū)別是在EKS里運(yùn)行容器,比起在Windows Server容錯(cuò)恢復(fù)集群上配置和維護(hù)SQL Server要更加容易。

如果你運(yùn)行SQL Server標(biāo)準(zhǔn)版,你也可以通過使用容器和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è)版可以超過兩個(gè)節(jié)點(diǎn)。取決于你的軟件授權(quán)協(xié)議,你可能要為每個(gè)額外的實(shí)例購買新的授權(quán)。這不是容器的使用方式。你可以只支付一個(gè)容器的費(fèi)用,不論你在集群上有多少standby的實(shí)例。

也可以把SQL Server容器和Always On可用性組(SQL Server 2019 preview版本)一起部署。這樣的配置類似部署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)說明:“SQL Server 2017使用授權(quán)給虛擬機(jī)和容器,為客戶的部署提供靈活性。有兩種可選的給虛擬機(jī)和容器的授權(quán)方式,為每個(gè)虛擬機(jī)和容器授權(quán),以及為高度虛擬化或高密度容器環(huán)境的大密度授權(quán)(每物理主機(jī)授權(quán))”。

有機(jī)會(huì)通過把SQL Server負(fù)載容器化來降低軟件授權(quán)成本。你可以基于不同的實(shí)際場景,使用每容器授權(quán)的模式,或者使用每物理主機(jī)授權(quán)的模式(高密度),來降低軟件授權(quán)的數(shù)量。

如果你有一些應(yīng)用在EC2實(shí)例上運(yùn)行,并且希望在同一個(gè)主機(jī)上運(yùn)行應(yīng)用的同時(shí),也運(yùn)行SQL Server,你可以使用每容器授權(quán)的模式。如果沒有容器,是在虛擬機(jī)上直接運(yùn)行SQL Server,包括EC2實(shí)例,你就需要為VM包括的所有vCPU購買授權(quán),不論SQL Server到底使用了多少vCPU資源。然而,如果你是在VM之上的容器里運(yùn)行SQL Server,你只需要為容器訪問到的vCPU數(shù)量購買授權(quán)。你可以僅僅為能訪問到的核數(shù)量購買授權(quán),這樣你最小的情況可以只夠買4核的授權(quán),或者6核,8核這樣,視情況而定。

通過Portworx在AWS上運(yùn)行高可用SQL Server容器通過Portworx在AWS上運(yùn)行高可用SQL Server容器

如果你的SQL Server實(shí)例存在突發(fā)峰值的使用情況,你可以在高密度環(huán)境的容器內(nèi)運(yùn)行它們。這種情況下,你可以選擇每物理機(jī)授權(quán)的模式。只要所有的物理核資源得到了正確的授權(quán),就會(huì)允許你運(yùn)行物理核資源之上的不限數(shù)量的容器,以及不限數(shù)量的vCPU。

通過Portworx在AWS上運(yùn)行高可用SQL Server容器

在上面的圖里,有12個(gè)vCPU核和20個(gè)容器。但因?yàn)檫@些容器都運(yùn)行在一個(gè)6核的物理機(jī)器上,只需要為這6個(gè)物理機(jī)的核授權(quán)。這對那些已經(jīng)在本地物理環(huán)境里過度部署了SQL Server虛擬機(jī)的情況非常有用。EC2實(shí)例有一個(gè)固定的hyperthreading比例:2vCPU對應(yīng)一個(gè)物理主機(jī)核。這樣遷移過度部署的負(fù)載(3:1,4:1,5:1或者更高)到EC2實(shí)例里會(huì)帶來更高的成本問題。容器化解決成本問題,相應(yīng)也會(huì)帶來更好的收益。

Portworx授權(quán)

Portworx支持高密度容器環(huán)境的授權(quán)模式。Kubernetes本身推薦一個(gè)節(jié)點(diǎn)最多不要超過100個(gè)pod(https://kubernetes.io/docs/setup/cluster-large/)。這樣理論上,你可以在每個(gè)EC2實(shí)例里運(yùn)行不超過100個(gè)SQL Server Pods,這樣可以大量節(jié)省SQL Server授權(quán)。Portworx針對每個(gè)EC2實(shí)例只需要一個(gè)授權(quán),不論運(yùn)行多少容器,或者消耗多少存儲(chǔ)。這樣對于集群,你并不是簡單的用一個(gè)授權(quán)來換另外一個(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ù)庫到SQL Server2017實(shí)例里(包括在容器里運(yùn)行的SQL Server 2017里),用兼容模式來運(yùn)行即可。

雖然SQL Server on Linux支持與Microsoft Active Directory的集成,SQL Server容器目前不支持Active Directory集成。

SQL Server一個(gè)經(jīng)常使用的功能是horizontal read-scaling,它在Always on可用性組里。這個(gè)功能對容器目前只是Preview版本,不能用在生產(chǎn)環(huán)境。

另一個(gè)云帶來的可能的好處是License Included services模式。對于許多商業(yè)來說,管理已購買的授權(quán)和實(shí)際軟件授權(quán)使用是非常復(fù)雜的工作。經(jīng)常會(huì)不一致,導(dǎo)致客戶要么為未使用的軟件授權(quán)多花錢,要么合規(guī)地軟件授權(quán)不足。SQL Server容器支持Bring Your Own License (BYOL)模式,因此在決策前好好考慮下授權(quán)的問題。

也有其他一些功能目前還不能使用,比如Distributed Transaction Coordinator (DTC)和custom CLR user types。如果你的SQL Server負(fù)載是一個(gè)比較靜態(tài)平穩(wěn)的資源消耗模式,也許傳統(tǒng)的部署模式更加適用。

結(jié)論

在本篇文章中,我們討論了為什么要考慮在容器中使用SQL Server和Portworx,并且討論了需要考慮的各個(gè)方面。

這樣的方式有下面的好處:

  • 簡單,而且會(huì)幫助你降低一些管理的復(fù)雜度。
  • 可以通過釋放閑置的資源給需要的負(fù)載,來增加應(yīng)用的性能。
  • 可以增加數(shù)據(jù)保護(hù),以及部署的容災(zāi)恢復(fù)。
  • 可以減少基礎(chǔ)架構(gòu)的成本。
  • 可以減少SQL Server軟件授權(quán)的成本。

這篇文章演示了在Amazon EKS上與Portworx一起部署SQL Server是比較簡單的。你可以部署基礎(chǔ)架構(gòu)和EKS集群,并且通過使用一個(gè)簡單的腳本來調(diào)用AWS API,從而來運(yùn)行SQL Server容器。基于你的情況,你可以使用兩種存儲(chǔ)方案:

  • 使用單獨(dú)的EBS卷作為一個(gè)PVC,在一個(gè)單一的高可用區(qū)域里提供高可用性,最少的存儲(chǔ)成本。
  • 使用一個(gè)集群化的存儲(chǔ)解決方案Portworx來跨多個(gè)可用性區(qū)域,提供支持可用性區(qū)域錯(cuò)誤恢復(fù)級別的高可用。

當(dāng)前題目:通過Portworx在AWS上運(yùn)行高可用SQLServer容器-創(chuàng)新互聯(lián)
鏈接URL:http://www.muchs.cn/article28/piccp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、網(wǎng)站制作動(dòng)態(tài)網(wǎng)站、定制開發(fā)標(biāo)簽優(yōu)化、營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司