亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Kubernetes上運行高可用的WordPress和MySQL

發布時間:2021-09-16 11:37:58 來源:億速云 閱讀:122 作者:chen 欄目:云計算

本篇內容主要講解“如何在Kubernetes上運行高可用的WordPress和MySQL”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何在Kubernetes上運行高可用的WordPress和MySQL”吧!

架構概述

現在我來簡要介紹一下我們將要使用的技術及其功能:

? WordPress應用程序文件的存儲:具有GCE持久性磁盤備份的NFS存儲

? 數據庫集群:帶有用于奇偶校驗的xtrabackup的MySQL

? 應用程序級別:掛載到NFS存儲的WordPress DockerHub映像

? 負載均衡和網絡:基于Kubernetes的負載均衡器和服務網絡

該體系架構如下所示: 如何在Kubernetes上運行高可用的WordPress和MySQL

在Kubernetes中創建存儲類、服務和配置映射

在Kubernetes中,狀態集提供了一種定義pod初始化順序的方法。我們將使用一個有狀態的MySQL集合,因為它能確保我們的數據節點有足夠的時間在啟動時復制先前pods中的記錄。我們配置這個狀態集的方式可以讓MySQL主機在其他附屬機器之前先啟動,因此當我們擴展時,可以直接從主機將克隆發送到附屬機器上。

首先,我們需要創建一個持久卷存儲類和配置映射,以根據需要應用主從配置。

我們使用持久卷,避免數據庫中的數據受限于集群中任何特定的pods。這種方式可以避免數據庫在MySQL主機pod丟失的情況下丟失數據,當主機pod丟失時,它可以重新連接到帶xtrabackup的附屬機器,并將數據從附屬機器拷貝到主機中。MySQL的復制負責主機-附屬的復制,而xtrabackup負責附屬-主機的復制。

要動態分配持久卷,我們使用GCE持久磁盤創建存儲類。不過,Kubernetes提供了各種持久性卷的存儲方案: 如何在Kubernetes上運行高可用的WordPress和MySQL

創建類,并且使用指令:$ kubectl create -f storage-class.yaml部署它。

接下來,我們將創建configmap,它指定了一些在MySQL配置文件中設置的變量。這些不同的配置由pod本身選擇有關,但它們也為我們提供了一種便捷的方式來管理潛在的配置變量。 創建名為mysql-configmap.yaml的YAML文件來處理配置,如下: 如何在Kubernetes上運行高可用的WordPress和MySQL

創建configmap并使用指令:$ kubectl create -f mysql-configmap.yaml來部署它。

接下來我們要設置服務以便MySQL pods可以互相通信,并且我們的WordPress pod可以使用mysql-services.yaml與MySQL通信。這也為MySQL服務啟動了服務負載均衡器。 如何在Kubernetes上運行高可用的WordPress和MySQL

通過此服務聲明,我們就為實現一個多寫入、多讀取的MySQL實例集群奠定了基礎。這種配置是必要的,每個WordPress實例都可能寫入數據庫,所以每個節點都必須準備好讀寫。

執行命令$ kubectl create -f mysql-services.yaml來創建上述的服務。

到這為止,我們創建了卷聲明存儲類,它將持久磁盤交給所有請求它們的容器,我們配置了configmap,在MySQL配置文件中設置了一些變量,并且我們配置了一個網絡層服務,負責對MySQL服務器請求的負載均衡。上面說的這些只是準備有狀態集的框架, MySQL服務器實際在哪里運行,我們接下來將繼續探討。

配置有狀態集的MySQL

本節中,我們將編寫一個YAML配置文件應用于使用了狀態集的MySQL實例。 我們先定義我們的狀態集:

  • 創建三個pods并將它們注冊到MySQL服務上。

  • 按照下列模版定義每個pod:

    • 為主機MySQL服務器創建初始化容器,命名為init-mysql.

    • 給這個容器使用mysql:5.7鏡像

    • 運行一個bash腳本來啟動xtrabackup

    • 為配置文件和configmap掛載兩個新卷

  • 為主機MySQL服務器創建初始化容器,命名為clone-mysql.

    • 為該容器使用Google Cloud Registry的xtrabackup:1.0鏡像

    • 運行bash腳本來克隆上一個同級的現有xtrabackups

    • 為數據和配置文件掛在兩個新卷

    • 該容器有效地托管克隆的數據,便于新的附屬容器可以獲取它

  • 為附屬MySQL服務器創建基本容器

    • 創建一個MySQL附屬容器,配置它連接到MySQL主機

    • 創建附屬xtrabackup容器,配置它連接到xtrabackup主機

  • 創建一個卷聲明模板來描述每個卷,每個卷是一個10GB的持久磁盤

下面的配置文件定義了MySQL集群的主節點和附屬節點的行為,提供了運行附屬客戶端的bash配置,并確保在克隆之前主節點能夠正常運行。附屬節點和主節點分別獲得他們自己的10GB卷,這是他們在我們之前定義的持久卷存儲類中請求的。 如何在Kubernetes上運行高可用的WordPress和MySQL

將該文件存為mysql-statefulset.yaml,輸入kubectl create -f mysql-statefulset.yaml并讓Kubernetes部署你的數據庫。

現在當你調用$ kubectl get pods,你應該看到3個pods啟動或者準備好,其中每個pod上都有兩個容器。 主節點pod表示為mysql-0,而附屬的pods為mysql-1和mysql-2.

讓pods執行幾分鐘來確保xtrabackup服務在pod之間正確同步,然后進行WordPress的部署。

您可以檢查單個容器的日志來確認沒有錯誤消息拋出。 查看日志的命令為$ kubectl logs -f -c <container_name>

主節點xtrabackup容器應顯示來自附屬的兩個連接,并且日志中不應該出現任何錯誤。

部署高可用的WordPress

整個過程的最后一步是將我們的WordPress pods部署到集群上。為此我們希望為WordPress的服務和部署進行定義。

為了讓WordPress實現高可用,我們希望每個容器運行時都是完全可替換的,這意味著我們可以終止一個,啟動另一個而不需要對數據或服務可用性進行修改。我們也希望能夠容忍至少一個容器的失誤,有一個冗余的容器負責處理slack。

WordPress將重要的站點相關數據存儲在應用程序目錄/var/www/html中。對于要為同一站點提供服務的兩個WordPress實例,該文件夾必須包含相同的數據。

當運行高可用WordPress時,我們需要在實例之間共享/var/www/html文件夾,因此我們定義一個NGS服務作為這些卷的掛載點。

下面是設置NFS服務的配置,我提供了純英文的版本: 如何在Kubernetes上運行高可用的WordPress和MySQL

使用指令$ kubectl create -f nfs.yaml部署NFS服務。 現在,我們需要運行$ kubectl describe services nfs-server獲得IP地址,這在后面會用到。 注意:將來,我們可以使用服務名稱講這些綁定在一起,但現在你需要對IP地址進行硬編碼。

如何在Kubernetes上運行高可用的WordPress和MySQL

我們現在創建了一個持久卷聲明,和我們之前創建的NFS服務建立映射,然后將卷附加到WordPress pod上,即/var/www/html根目錄,這也是WordPress安裝的地方。這里保留了集群中WordPress pods的所有安裝和環境。有了這些配置,我們就可以對任何WordPress節點進行啟動和拆除,而數據能夠留下來。因為NFS服務需要不斷使用物理卷,該卷將保留下來,并且不會被回收或錯誤分配。

使用指令$ kubectl create -f wordpress.yaml部署WordPress實例。

默認部署只會運行一個WordPress實例,可以使用指令$ kubectl scale --replicas=<number of replicas> deployment/wordpress擴展WordPress實例數量。

要獲得WordPress服務負載均衡器的地址,你需要輸入$ kubectl get services wordpress并從結果中獲取EXTERNAL-IP字段來導航到WordPress。

彈性測試

OK,現在我們已經部署好了服務,那我們來拆除一下它們,看看我們的高可用架構如何處理這些混亂。在這種部署方式中,唯一剩下的單點故障就是NFS服務(原因總結在文末結論中)。你應該能夠測試其他任何的服務來了解應用程序是如何響應的。現在我已經啟動了WordPress服務的三個副本,以及MySQL服務中的一個主兩個附屬節點。

首先,我們先kill掉其他而只留下一個WordPress節點,來看看應用如何響應: $ kubectl scale --replicas=1 deployment/wordpress

現在我們應該看到WordPress部署的pod數量有所下降。 $ kubectl get pods

應該能看到WordPress pods的運行變成了1/1。

點擊WordPress服務IP,我們將看到與之前一樣的站點和數據庫。

如果要擴展復原,可以使用$ kubectl scale --replicas=3 deployment/wordpress。

再一次,我們可以看到數據包留在了三個實例中。

下面測試MySQL的狀態集,我們使用指令縮小備份的數量: $ kubectl scale statefulsets mysql --replicas=1

我們會看到兩個附屬從該實例中丟失,如果主節點在此時丟失,它所保存的數據將保存在GCE持久磁盤上。不過就必須手動從磁盤恢復數據。

如果所有三個MySQL節點都關閉了,當新節點出現時就無法復制。但是,如果一個主節點發生故障,一個新的主節點就會自動啟動,并且通過xtrabackup重新配置來自附屬節點的數據。因此,在運行生產數據庫時,我不建議以小于3的復制系數來運行。

到此,相信大家對“如何在Kubernetes上運行高可用的WordPress和MySQL”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

合水县| 临颍县| 岚皋县| 郎溪县| 沙河市| 武陟县| 剑川县| 巴塘县| 衡阳市| 深圳市| 井研县| 利津县| 大英县| 台东市| 玉环县| 湾仔区| 奉化市| 怀化市| 马公市| 科技| 大丰市| 平远县| 外汇| 舟山市| 兰西县| 景德镇市| 湖南省| 绥江县| 武定县| 于田县| 南江县| 冷水江市| 政和县| 盐山县| 惠水县| 韶山市| 甘孜| 张家界市| 巴彦淖尔市| 安达市| 阿坝县|