摘要:正文以下,我將闡述一下,怎么樣在多主機(jī)網(wǎng)絡(luò)中運(yùn)行。舉個例子,當(dāng)你在主機(jī)上運(yùn)行發(fā)現(xiàn)服務(wù)的時候,你可以這樣啟動節(jié)點這個節(jié)點就會自己把自己注冊到發(fā)現(xiàn)服務(wù)中去,并且加入名為的集群中。
譯者前言
Percona 所維護(hù)的XtraDB 是mysql的一個分支,使用了性能比innodb更加出色的xtrodb驅(qū)動,XtraDB-Cluster產(chǎn)品,是其集群化的方案,方案內(nèi)容,請自行g(shù)oogle。最近XtraDB-Cluster的5.7版本的推出,跟上了mysql主分支的腳步,更加吸引mysql愛好者轉(zhuǎn)移到Percona上來。
正文以下,我將闡述一下,怎么樣在多主機(jī)Docker網(wǎng)絡(luò)中運(yùn)行Percona XtraDB Cluster。
隨著我們的Pecrona XtraDB Cluster 5.7 beta版本的發(fā)布,我們亦決定提供Pecrona XtraDB Cluster 5.6 和 Pecrona XtraDB Cluster 5.7 的鏡像文件。
啟動一個單點的Percona XtraDB Cluster 是很方便的,基本和Percona Server的鏡像相同。唯一的不同就是需要指定CLUSTER_NAME環(huán)境變量. 啟動容器的命令如下
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD= Theistareyk -e CLUSTER_NAME= Theistareykjarbunga -e XTRABACKUP_PASSWORD=Theistare percona/percona-xtradb-cluster
你應(yīng)該會注意到我們提供了可選的參數(shù) XTRABACKUP_PASSWORD,這個參數(shù)是用戶xtradbbackup@localhost 執(zhí)行xtrabackup-SST 同步的用戶密碼。
運(yùn)行單點的Percona XtraDB Cluster 需要迎合Cluster啟動所需要的 CLUSTER_NAME 參數(shù),單點其實也無所謂這個。在我們提供的鏡像中,需要解決以下任務(wù):
1.運(yùn)行在多主機(jī)的環(huán)境(多主機(jī)環(huán)境上一般跑Docker Swarm 和Kubernetes) 2.如我們所需的,在某個Cluster中啟動多個節(jié)點 3.在服務(wù)發(fā)現(xiàn)的服務(wù)端口上,注冊所有的節(jié)點,這樣,所有的客戶端就能知道有多少個節(jié)點以及他們運(yùn)行的狀態(tài) 4.集成 ProxySQL
讓我們一個一個看。
隨著Docker網(wǎng)絡(luò)協(xié)議的完善,可以使用多主機(jī)環(huán)境部署Percona XtraDB了。 最近的Docker 版本帶來了網(wǎng)絡(luò)overlay驅(qū)動,我們將使用這個特性建立一個虛擬網(wǎng)絡(luò)。安裝和啟動Docker 的overlay 網(wǎng)絡(luò)超出了本問的范圍,這里給出個鏈接,感興趣的人可以看下這個非常好的介紹資料了解下這個虛擬網(wǎng)絡(luò)是如何運(yùn)行的。
好了,等你overlay網(wǎng)絡(luò)驅(qū)動裝好,我們要在這上創(chuàng)建一個虛擬網(wǎng)絡(luò):
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點在于,你隨便在哪臺服務(wù)器啟動這個節(jié)點,只要是基于同一個網(wǎng)絡(luò)的相同的 CLUSTER_NAME,他們都會自動的進(jìn)行通信。
如果你處在單一Docker主機(jī)的環(huán)境中,譬如做個測試什么的,你還可以創(chuàng)建一個網(wǎng)橋網(wǎng)絡(luò),在一個單主機(jī)的環(huán)境中使用他。
好吧,以上這個腳本,怎么說呢,基本可以執(zhí)行。問題在于每個新加入的節(jié)點需要知道運(yùn)行的cluster的地址。
為了讓實例知道這個地址,我們可以使用 CLUSTER_JOIN 這個變量,這個變量的值為某一個運(yùn)行中的節(jié)點的ip地址,(如果是一個新的群,那么就是空)
在本例中,這個腳本應(yīng)該像這樣:
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地址在我看來完全是一個額外的工作,尤其是要在一個動態(tài)的環(huán)境中起停一個節(jié)點的時候,真是有夠麻煩的。所以我們決定使用一個發(fā)現(xiàn)服務(wù)。現(xiàn)在我們使用的是Etcd發(fā)現(xiàn)服務(wù),當(dāng)然,使用其他的發(fā)現(xiàn)服務(wù)也沒啥問題,譬如Consul。
舉個例子,當(dāng)你在主機(jī) 10.20.2.4:2379上運(yùn)行發(fā)現(xiàn)服務(wù)的時候,你可以這樣啟動節(jié)點:
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
這個節(jié)點就會自己把自己注冊到發(fā)現(xiàn)服務(wù)中去,并且加入名為$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主機(jī)上啟動任意多個數(shù)據(jù)庫節(jié)點了。現(xiàn)在我們可以在數(shù)據(jù)庫集群前端放置SQL Proxy了,這個下回再討論了。
譯者附我在實施該XtraDB Cluster的時候,發(fā)現(xiàn)腳本有問題,同時發(fā)現(xiàn)該文的后方,亦有人發(fā)現(xiàn)相同的問題,現(xiàn)貼出該bug并給出解決辦法:
發(fā)言人為Roma Cherepanov
他在啟動節(jié)點的時候發(fā)現(xiàn)了一些error,我也發(fā)現(xiàn)了這些問題,導(dǎo)致容器一直啟動不起來,之后經(jīng)過調(diào)試,解決該問題,并在下放給出了答復(fù)
kevin:
在跑這個鏡像的時候,我有相同的問題。
pxc-entry.sh腳本有些問題
line 125: (應(yīng)該是125,之前數(shù)錯了,帖子上面寫的也錯了?)
i=$(curl http://$DISCOVERY_SERVICE/v2/keys/pxc-cluster/queue/$CLUSTER_NAME | jq -r ".node.nodes[].value")
應(yīng)該是
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)}")
應(yīng)該是
i=(curl http://$DISCOVERY_SERVICE/v2/keys/pxc-cluster/$CLUSTER_NAME/?quorum=true | jq -r ".node.nodes[]?.key" | awk -F"/" "{print $(NF)}")
腳本要給i 賦值一個數(shù)組,那么shell的數(shù)組賦值形式應(yīng)該是i=(a b c d) ,而不是i=$(a b c d) 不知道作者的腳本解釋語言是啥,反正在我這里應(yīng)該是這樣的,改了之后就OK啦!
作者信息
原文作者: Vadim Tkachenko
原文鏈接:https://www.percona.com/blog/...
翻譯自Maxleap團(tuán)隊_Service&Infra:Kevin
首發(fā)地址:https://blog.maxleap.cn/archi...
作者往期佳作
快速部署Test-Driven Development/Debug環(huán)境
Amazon和Mysql之間的那點事兒
歡迎關(guān)注微信公眾號:MaxLeap_yidongyanfa
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/26802.html
摘要:正文以下,我將闡述一下,怎么樣在多主機(jī)網(wǎng)絡(luò)中運(yùn)行。舉個例子,當(dāng)你在主機(jī)上運(yùn)行發(fā)現(xiàn)服務(wù)的時候,你可以這樣啟動節(jié)點這個節(jié)點就會自己把自己注冊到發(fā)現(xiàn)服務(wù)中去,并且加入名為的集群中。 譯者前言 Percona 所維護(hù)的XtraDB 是mysql的一個分支,使用了性能比innodb更加出色的xtrodb驅(qū)動,XtraDB-Cluster產(chǎn)品,是其集群化的方案,方案內(nèi)容,請自行g(shù)oogle。最近X...
摘要:本文將以多主機(jī)網(wǎng)絡(luò)環(huán)境為基礎(chǔ),探討如何利用內(nèi)置編排工具模式對各主機(jī)上的容器加以管理。在本文中,我們將立足于臺主機(jī)與在負(fù)載均衡之上部署應(yīng)用程序容器,同時將其接入一套覆蓋網(wǎng)絡(luò)。管理節(jié)點會利用負(fù)載均衡以將服務(wù)公布至集群之外。 本文將以多主機(jī)網(wǎng)絡(luò)環(huán)境為基礎(chǔ),探討如何利用內(nèi)置編排工具 Docker Swarm模式對各主機(jī)上的容器加以管理。 Docker Engine – Swarm模式 在...
本文實驗的環(huán)境參數(shù) 阿里云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...
閱讀 2613·2021-11-02 14:39
閱讀 4338·2021-10-11 10:58
閱讀 1465·2021-09-06 15:12
閱讀 1850·2021-09-01 10:49
閱讀 1334·2019-08-29 18:31
閱讀 1889·2019-08-29 16:10
閱讀 3343·2019-08-28 18:21
閱讀 876·2019-08-26 10:42