摘要:正文以下,我將闡述一下,怎么樣在多主機網絡中運行。舉個例子,當你在主機上運行發現服務的時候,你可以這樣啟動節點這個節點就會自己把自己注冊到發現服務中去,并且加入名為的集群中。
譯者前言
Percona 所維護的XtraDB 是mysql的一個分支,使用了性能比innodb更加出色的xtrodb驅動,XtraDB-Cluster產品,是其集群化的方案,方案內容,請自行google。最近XtraDB-Cluster的5.7版本的推出,跟上了mysql主分支的腳步,更加吸引mysql愛好者轉移到Percona上來。
正文以下,我將闡述一下,怎么樣在多主機Docker網絡中運行Percona XtraDB Cluster。
隨著我們的Pecrona XtraDB Cluster 5.7 beta版本的發布,我們亦決定提供Pecrona XtraDB Cluster 5.6 和 Pecrona XtraDB Cluster 5.7 的鏡像文件。
啟動一個單點的Percona XtraDB Cluster 是很方便的,基本和Percona Server的鏡像相同。唯一的不同就是需要指定CLUSTER_NAME環境變量. 啟動容器的命令如下
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD= Theistareyk -e CLUSTER_NAME= Theistareykjarbunga -e XTRABACKUP_PASSWORD=Theistare percona/percona-xtradb-cluster
你應該會注意到我們提供了可選的參數 XTRABACKUP_PASSWORD,這個參數是用戶xtradbbackup@localhost 執行xtrabackup-SST 同步的用戶密碼。
運行單點的Percona XtraDB Cluster 需要迎合Cluster啟動所需要的 CLUSTER_NAME 參數,單點其實也無所謂這個。在我們提供的鏡像中,需要解決以下任務:
1.運行在多主機的環境(多主機環境上一般跑Docker Swarm 和Kubernetes) 2.如我們所需的,在某個Cluster中啟動多個節點 3.在服務發現的服務端口上,注冊所有的節點,這樣,所有的客戶端就能知道有多少個節點以及他們運行的狀態 4.集成 ProxySQL
讓我們一個一個看。
隨著Docker網絡協議的完善,可以使用多主機環境部署Percona XtraDB了。 最近的Docker 版本帶來了網絡overlay驅動,我們將使用這個特性建立一個虛擬網絡。安裝和啟動Docker 的overlay 網絡超出了本問的范圍,這里給出個鏈接,感興趣的人可以看下這個非常好的介紹資料了解下這個虛擬網絡是如何運行的。
好了,等你overlay網絡驅動裝好,我們要在這上創建一個虛擬網絡:
docker network create -d overlay cluster1_net
然后我們可以這樣啟動容器:
docker run -d -p 3306 --net=cluster1_net -e MYSQL_ROOT_PASSWORD=Theistareyk -e CLUSTER_NAME=cluster1 ... -e XTRABACKUP_PASSWORD=Theistare percona/percona-xtradb-cluster
這玩意兒很cool,cool點在于,你隨便在哪臺服務器啟動這個節點,只要是基于同一個網絡的相同的 CLUSTER_NAME,他們都會自動的進行通信。
如果你處在單一Docker主機的環境中,譬如做個測試什么的,你還可以創建一個網橋網絡,在一個單主機的環境中使用他。
好吧,以上這個腳本,怎么說呢,基本可以執行。問題在于每個新加入的節點需要知道運行的cluster的地址。
為了讓實例知道這個地址,我們可以使用 CLUSTER_JOIN 這個變量,這個變量的值為某一個運行中的節點的ip地址,(如果是一個新的群,那么就是空)
在本例中,這個腳本應該像這樣:
docker run -d -p 3306 --net=cluster1_net -e MYSQL_ROOT_PASSWORD=Theistareyk -e CLUSTER_NAME=cluster1 -e CLUSTER_JOIN=10.0.5.5 -e XTRABACKUP_PASSWORD=Theistare percona/percona-xtradb-cluster
手動追蹤一個ip地址在我看來完全是一個額外的工作,尤其是要在一個動態的環境中起停一個節點的時候,真是有夠麻煩的。所以我們決定使用一個發現服務。現在我們使用的是Etcd發現服務,當然,使用其他的發現服務也沒啥問題,譬如Consul。
舉個例子,當你在主機 10.20.2.4:2379上運行發現服務的時候,你可以這樣啟動節點:
docker run -d -p 3306 --net=cluster1_net -e MYSQL_ROOT_PASSWORD=Theistareyk -e CLUSTER_NAME=cluster1 -e DISCOVERY_SERVICE=10.20.2.4:2379 -e XTRABACKUP_PASSWORD=Theistare percona/percona-xtradb-cluster
這個節點就會自己把自己注冊到發現服務中去,并且加入名為$CLUSTER_NAME的集群中。
下面是顯示 CLUSTER_NAME 為 $CLUSTER_NAME 集群的一個簡單的方法:
curl http://$ETCD_HOST/v2/keys/pxc-cluster/$CLUSTER_NAME/?recursive=true | jq { "action": "get", "node": { "key": "/pxc-cluster/cluster4", "dir": true, "nodes": [ { "key": "/pxc-cluster/cluster4/10.0.5.2", "dir": true, "nodes": [ { "key": "/pxc-cluster/cluster4/10.0.5.2/ipaddr", "value": "10.0.5.2", "modifiedIndex": 19600, "createdIndex": 19600 }, { "key": "/pxc-cluster/cluster4/10.0.5.2/hostname", "value": "2af0a75ce0cb", "modifiedIndex": 19601, "createdIndex": 19601 } ], "modifiedIndex": 19600, "createdIndex": 19600 }, { "key": "/pxc-cluster/cluster4/10.0.5.3", "dir": true, "nodes": [ { "key": "/pxc-cluster/cluster4/10.0.5.3/ipaddr", "value": "10.0.5.3", "modifiedIndex": 26420, "createdIndex": 26420 }, { "key": "/pxc-cluster/cluster4/10.0.5.3/hostname", "value": "cfb29833f1d6", "modifiedIndex": 26421, "createdIndex": 26421 } ], "modifiedIndex": 26420, "createdIndex": 26420 } ], "modifiedIndex": 19600, "createdIndex": 19600 } }
用這個方法,你就可以在任意個Docker主機上啟動任意多個數據庫節點了。現在我們可以在數據庫集群前端放置SQL Proxy了,這個下回再討論了。
譯者附我在實施該XtraDB Cluster的時候,發現腳本有問題,同時發現該文的后方,亦有人發現相同的問題,現貼出該bug并給出解決辦法:
發言人為Roma Cherepanov
他在啟動節點的時候發現了一些error,我也發現了這些問題,導致容器一直啟動不起來,之后經過調試,解決該問題,并在下放給出了答復
kevin:
在跑這個鏡像的時候,我有相同的問題。
pxc-entry.sh腳本有些問題
line 125: (應該是125,之前數錯了,帖子上面寫的也錯了?)
i=$(curl http://$DISCOVERY_SERVICE/v2/keys/pxc-cluster/queue/$CLUSTER_NAME | jq -r ".node.nodes[].value")
應該是
i=(curl http://$DISCOVERY_SERVICE/v2/keys/pxc-cluster/queue/$CLUSTER_NAME | jq -r ".node.nodes[].value")
line 139:
i=$(curl http://$DISCOVERY_SERVICE/v2/keys/pxc-cluster/$CLUSTER_NAME/?quorum=true | jq -r ".node.nodes[]?.key" | awk -F"/" "{print $(NF)}")
應該是
i=(curl http://$DISCOVERY_SERVICE/v2/keys/pxc-cluster/$CLUSTER_NAME/?quorum=true | jq -r ".node.nodes[]?.key" | awk -F"/" "{print $(NF)}")
腳本要給i 賦值一個數組,那么shell的數組賦值形式應該是i=(a b c d) ,而不是i=$(a b c d) 不知道作者的腳本解釋語言是啥,反正在我這里應該是這樣的,改了之后就OK啦!
作者信息
原文作者: Vadim Tkachenko
原文鏈接:https://www.percona.com/blog/...
翻譯自Maxleap團隊_Service&Infra:Kevin
首發地址:https://blog.maxleap.cn/archi...
作者往期佳作
快速部署Test-Driven Development/Debug環境
Amazon和Mysql之間的那點事兒
歡迎關注微信公眾號:MaxLeap_yidongyanfa
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/11777.html
摘要:正文以下,我將闡述一下,怎么樣在多主機網絡中運行。舉個例子,當你在主機上運行發現服務的時候,你可以這樣啟動節點這個節點就會自己把自己注冊到發現服務中去,并且加入名為的集群中。 譯者前言 Percona 所維護的XtraDB 是mysql的一個分支,使用了性能比innodb更加出色的xtrodb驅動,XtraDB-Cluster產品,是其集群化的方案,方案內容,請自行google。最近X...
摘要:本文將以多主機網絡環境為基礎,探討如何利用內置編排工具模式對各主機上的容器加以管理。在本文中,我們將立足于臺主機與在負載均衡之上部署應用程序容器,同時將其接入一套覆蓋網絡。管理節點會利用負載均衡以將服務公布至集群之外。 本文將以多主機網絡環境為基礎,探討如何利用內置編排工具 Docker Swarm模式對各主機上的容器加以管理。 Docker Engine – Swarm模式 在...
本文實驗的環境參數 阿里云ECS Centos7.5 Docker version 18.06.0-ce percona/percona-xtradb-cluster:5.7 Percona XtraDB Cluster的鏡像下載地址:https://hub.docker.com/r/percona/percona-xtradb-cluster/ 怎么使用Docke和下載鏡像,請查看Docke...
閱讀 2299·2021-09-30 09:47
閱讀 2218·2021-09-26 09:55
閱讀 2945·2021-09-24 10:27
閱讀 1539·2019-08-27 10:54
閱讀 966·2019-08-26 13:40
閱讀 2493·2019-08-26 13:24
閱讀 2418·2019-08-26 13:22
閱讀 1726·2019-08-23 18:38