国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

立足Docker運行MySQL:多主機網絡下Docker Swarm模式的容器管理

20171112 / 1292人閱讀

摘要:本文將以多主機網絡環境為基礎,探討如何利用內置編排工具模式對各主機上的容器加以管理。在本文中,我們將立足于臺主機與在負載均衡之上部署應用程序容器,同時將其接入一套覆蓋網絡。管理節點會利用負載均衡以將服務公布至集群之外。

本文將以多主機網絡環境為基礎,探討如何利用內置編排工具 Docker Swarm模式對各主機上的容器加以管理。

Docker Engine – Swarm模式

在多臺主機之上運行MySQL容器擁有一定程度的復雜性,而具體水平則取決于您所選擇的集群技術。

在嘗試利用容器加多主機網絡運行MySQL之前,我們首先需要理解鏡像的起效原理、各資源的分配方式(包括磁盤、內存與CPU)、網絡(覆蓋網絡驅動因素,默認情況下包括flannel與weave等)以及容錯機制(容器如何實現重新定位、故障轉移以及負載均衡等)。

這一切都會給數據庫的整體運行、正常運行時間以及性能表現造成影響。我們建議大家使用編排工具保證Docker引擎集群擁有更出色的可管理性與可擴展性。最新的Docker Engine(版本為1.12,發布于2016年7月14日)當中包含有Swarm模式,專門用于以原生方式管理名為Swarm的Docker Engine集群。

需要注意的是,Docker Engine Swarm模式與Docker Swarm是兩個不同的項目,二者雖然工作原理類似,但卻擁有不同的安裝步驟。

下面我們來看看著手進行之前,首先需要完成的準備工作:

必須首先打開以下端口:

2377 (TCP) – 集群管理

7946 (TCP 與UDP) – 節點通信

4789 (TCP與UDP) – 覆蓋網絡流量

節點類型分為2種:

管理節點 - 管理節點負責執行維護Swarm必要狀態所必需的編排與集群管理功能。管理節點會選擇單一主管理方執行編排任務。

工作節點 - 工作節點負責從管理節點處接收并執行各項任務。在默認情況下,管理節點本身同時也作為工作節點存在,但大家可以通過配置保證其僅執行管理任務。

在本文中,我們將立足于3臺Docker主機(docker1、docker2與docker3)在負載均衡Galera Cluster之上部署應用程序容器,同時將其接入一套覆蓋網絡。我們將利用Docker Engine Swarm模式作為編排工具。

集群構建

首先讓我們將Docker節點納入Swarm集群當中。Swarm模式要求利用奇數臺管理節點(當然不止一臺)以維持容錯能力。因此,我們在這里需要讓三臺節點全部作為管理節點。需要注意的是,在默認情況下,管理節點同時亦作為工作節點。

首先在docker1上對Swarm模式進行初始化。完成之后,該節點將成為管理節點及當前管理方:

[root@docker1]$ docker swarm init --advertise-addr 192.168.55.111
Swarm initialized: current node (6r22rd71wi59ejaeh7gmq3rge) is now a manager.
To add a worker to this swarm, run the following command:

docker swarm join 
--token SWMTKN-1-16kit6dksvrqilgptjg5pvu0tvo5qfs8uczjq458lf9mul41hc-dzvgu0h3qngfgihz4fv0855bo 
192.168.55.111:2377

To add a manager to this swarm, run "docker swarm join-token manager" and follow the instructions.

我們還需要將其它兩個節點添加為管理節點。使用join命令將這兩臺節點注冊為管理節點:

[docker1]$ docker swarm join-token manager
To add a manager to this swarm, run the following command:

docker swarm join 
--token SWMTKN-1-16kit6dksvrqilgptjg5pvu0tvo5qfs8uczjq458lf9mul41hc-7fd1an5iucy4poa4g1bnav0pt 
192.168.55.111:2377

在docker2與docker3上,運行以下命令以進行節點注冊:

$ docker swarm join

--token SWMTKN-1-16kit6dksvrqilgptjg5pvu0tvo5qfs8uczjq458lf9mul41hc-7fd1an5iucy4poa4g1bnav0pt 
192.168.55.111:2377

驗證是否全部節點都已經正確添加:

[docker1]$ docker node ls

ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
5w9kycb046p9aj6yk8l365esh docker3.local Ready Active Reachable
6r22rd71wi59ejaeh7gmq3rge * docker1.local Ready Active Leader
awlh9cduvbdo58znra7uyuq1n docker2.local Ready Active Reachable

到這里,我們的docker1.local作為主管理節點。

覆蓋網絡

要讓不同主機之上的運行的容器彼此實現對接,惟一的方式就是使用覆蓋網絡。大家可以將其視為一套構建于另一網絡(在本示例中為物理主機網絡)之上的容器網絡。Docker Swarm模式提供一套默認覆蓋網絡,其負責配合libnetwork與libkv實現一套基于VxLAN的解決方案。當然,大家也可以選擇Flannel、Calico或者Weave等其它覆蓋網絡驅動方案,但需要執行額外的安裝步驟。

在Docker Engine Swarm模式當中,大家可以單純立足管理節點創建一套覆蓋網絡,而且其不需要etcd、consul或者Zookeeper等額外的鍵值存儲機制。

這套Swarm僅為集群內的各節點提供覆蓋網絡。當大家創建一項需要用到覆蓋網絡的服務時,管理節點會自動將覆蓋網絡延伸至運行該服務任務的節點處。


下面讓我們為各容器創建一套覆蓋網絡。在這里,我們需要將Percona XtraDB集群與應用程序容器分別部署在各Docker主機之上,用以實現容錯性。這些容器必須運行在同一覆蓋網絡當中,從而確保其能夠彼此通信。

這里我們將網絡命名為“mynet”。大家只能在管理節點上完成這一創建工作:

[docker1]$ docker network create --driver overlay mynet

下面來看我們的現有網絡:

[docker1]$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
213ec94de6c9        bridge              bridge              local
bac2a639e835        docker_gwbridge     bridge              local
5b3ba00f72c7        host                host                local
03wvlqw41e9g        ingress             overlay             swarm
9iy6k0gqs35b        mynet               overlay             swarm
12835e9e75b9        none                null                local

現在Swarm當中擁有2套覆蓋網絡。其中“mynet”網絡正是我們在部署容器時所創建的成果。而ingress覆蓋網絡則為默認提供。Swarm管理節點會利用ingress負載均衡以將服務公布至集群之外。

利用服務與任務實現部署

接下來我們將通過服務與任務進行Galera集群容器部署。當大家創建一項服務時,需要指定使用哪套容器鏡像并在容器內執行哪些命令。服務類型共分為兩種:

復制服務——將一系列復制任務分發至各節點當中,具體取決于您所需要的設置狀態,例如“——replicas 3”。

全局服務——適用于集群內全部可用節點上的服務任務,例如“——mode global”。如果大家在Swarm集群中設有7臺Docker節點,則全部節點之上都將存在對應容器。

Docker Swarm模式在管理持久數據存儲方面功能有限。當一臺節點發生故障時,管理節點會繞過各相關容器并創建新容器,用于繼續保持原有運行狀態。由于容器在下線后會被丟棄,因此我們會失去其中的全部數據分卷。幸運的是,Galera集群允許各MySQL容器以自動方式在加入時利用狀態/數據接受配置。

部署鍵-值存儲

我們在這里使用的docker鏡像為Percona-Lab。這套鏡像要求各MySQL容器訪問一套鍵-值存儲(僅支持etcd)以實現集群初始化與引導過程中的IP地址發現。各容器將在etcd當中搜索其它IP地址,從而利用正確的wsrep_cluster_address完成MySQL啟動。否則,首套容器將使用gcomm://作為引導地址。

首先部署我們的etcd服務。大家可以點擊此處獲取我們使用的etcd鏡像。其要求我們根據所需部署的etcd節點數量使用一條發現URL。在這種情況下,我們需要設置多帶帶的etcd容器,其具體命令為:

[docker1]$ curl -w "
" "https://discovery.etcd.io/new?size=1"
https://discovery.etcd.io/a293d6cc552a66e68f4b5e52ef163d68

在此之后,使用生成的URL作為“-discovery”值,同時為etcd創建該服務:

[docker1]$ docker service create 
--name etcd 
--replicas 1 
--network mynet 
-p 2379:2379 
-p 2380:2380 
-p 4001:4001 
-p 7001:7001 
elcolio/etcd:latest 
-name etcd 
-discovery=https://discovery.etcd.io/a293d6cc552a66e68f4b5e52ef163d68

到這里,Docker Swarm模式將編排其中一臺Docker主機上的容器部署工作。

檢索etcd服務虛擬IP地址。我們需要在下一步部署集群時使用此IP地址:

[docker1]$ docker service inspect etcd -f "{{ .Endpoint.VirtualIPs }}"
[{03wvlqw41e9go8li34z2u1t4p 10.255.0.5/16} {9iy6k0gqs35bn541pr31mly59 10.0.0.2/24}]

到這里,我們的架構如下圖所示:

部署數據庫集群

利用以下命令為etcd指定虛擬IP地址,用于部署Galera(Percona XtraDB集群)容器:

[docker1]$ docker service create
--name mysql-galera
--replicas 3
-p 3306:3306
--network mynet
--env MYSQL_ROOT_PASSWORD=mypassword
--env DISCOVERY_SERVICE=10.0.0.2:2379
--env XTRABACKUP_PASSWORD=mypassword
--env CLUSTER_NAME=galera
perconalab/percona-xtradb-cluster:5.6

整個部署流程需要耗費一段時間,包括將鏡像下載至對應的工作/管理節點。大家可以使用以下命令驗證其部署狀態:

[docker1]$ docker service ps mysql-galera
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
8wbyzwr2x5buxrhslvrlp2uy7 mysql-galera.1 perconalab/percona-xtradb-cluster:5.6 docker1.local Running Running 3 minutes ago
0xhddwx5jzgw8fxrpj2lhcqeq mysql-galera.2 perconalab/percona-xtradb-cluster:5.6 docker3.local Running Running 2 minutes ago
f2ma6enkb8xi26f9mo06oj2fh mysql-galera.3 perconalab/percona-xtradb-cluster:5.6 docker2.local Running Running 2 minutes ago

可以看到,mysql-galera服務目前已經開始運行。下面列出全部現有服務:

[docker1]$ docker service ls
ID NAME REPLICAS IMAGE COMMAND
1m9ygovv9zui mysql-galera 3/3 perconalab/percona-xtradb-cluster:5.6
au1w5qkez9d4 etcd 1/1 elcolio/etcd:latest -name etcd -discovery=https://discovery.etcd.io/a29...

Swarm模式包含一項內部DNS組件,其負責自動為Swarm中的每項服務分配一條DNS入口。因此,大家可以使用該服務名稱以解析至對應的虛擬IP地址:

[docker2]$ docker exec -it $(docker ps | grep etcd | awk {"print $1"}) ping mysql-galera
PING mysql-galera (10.0.0.4): 56 data bytes
64 bytes from 10.0.0.4: seq=0 ttl=64 time=0.078 ms
64 bytes from 10.0.0.4: seq=1 ttl=64 time=0.179 ms

或者直接使用“docker service inspect”命令檢索該虛擬IP地址:

[docker1]# docker service inspect mysql-galera -f "{{ .Endpoint.VirtualIPs }}"
[{03wvlqw41e9go8li34z2u1t4p 10.255.0.7/16} {9iy6k0gqs35bn541pr31mly59 10.0.0.4/24}]

到這里,我們的架構如下圖所示:

部署應用程序

最后,大家可以創建應用程序服務并將MySQL服務名稱(mysql-galera)作為數據庫主機值進行交付:

[docker1]$ docker service create 
--name wordpress 
--replicas 2 
-p 80:80 
--network mynet 
--env WORDPRESS_DB_HOST=mysql-galera 
--env WORDPRESS_DB_USER=root 
--env WORDPRESS_DB_PASSWORD=mypassword 
wordpress

部署完成之后,我們隨后能夠通過“docker service inspect”命令檢索wordpress服務的虛擬IP地址:

[docker1]# docker service inspect wordpress -f "{{ .Endpoint.VirtualIPs }}"
[{p3wvtyw12e9ro8jz34t9u1t4w 10.255.0.11/16} {kpv8e0fqs95by541pr31jly48 10.0.0.8/24}]

現在再來看目前的架構示意圖:


我們的分布式應用程序與數據庫設置已經由Docker容器部署完成。

接入服務與負載均衡

到這里,以下端口都已經在集群中的全部Docker節點上被打開(基于每條“docker service create”命令上的-p標記),而無論各節點目前是否正在運行該服務任務:

etcd - 2380, 2379, 7001, 4001

MySQL - 3306

HTTP - 80

如果我們直接利用簡單循環接入PublishedPort,則可看到MySQL服務已經在各容器之上實現負載均衡:

[docker1]$ while true; do mysql -uroot -pmypassword -h127.0.0.1 -P3306 -NBe "select @@wsrep_node_address"; sleep 1; done
10.255.0.10
10.255.0.8
10.255.0.9
10.255.0.10
10.255.0.8
10.255.0.9
10.255.0.10
10.255.0.8
10.255.0.9
10.255.0.10
^C

現在,Swarm管理節點負責負載均衡的內部管理,而且我們無法配置該負載均衡算法。在此之后,我們可以利用外部負載均衡器將外部流量路由至各Docker節點當中。一旦任何Docker節點發生故障,該服務將被重新定位至其它可用節點。

作者:Severalnines
原文鏈接:
http://severalnines.com/blog/...

基于最新 Docker SwarmKit 技術的數人云容器管理面板Crane發布新版本啦,點擊下方了解更多:

十一生快!數人云開源項目Crane攜新版本獻禮啦

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26728.html

相關文章

  • 基于 Docker 1.12 Swarm 集群管理開發實踐

    摘要:由于沒有了中心化的負載均衡器,集群不會因某臺機器異常而導致整個服務對外不可用,很好的避免了單點問題,同時也帶了可擴展性。 Mesos/Marathon 折騰久了,我們一直希望有機會深入到 Swarm 內部一探究竟。 另外, Mesos 這一套東西雖然是久經企業級考驗的, 但是安裝、部署和使用相對復雜,上手有門檻。同時,在今年的 DockerCon 上,內置了Swarm 功能的 Dock...

    My_Oh_My 評論0 收藏0
  • Docker Swarm介紹

    摘要:后續將其他節點加入集群都會用到這個值將節點加入集群查看節點信息相關命令創建服務更新服務刪除服務減少服務實例增加服務實例查看所有服務查看服務的容器狀態查看服務的詳細信息。前言本篇是Docker第十三篇,Docker的使用至此就介紹完成,接下來繼續Kubernetes。Docker系列文章:為什么要學習DockerDocker基本概念Docker鏡像基本原理Docker容器數據卷Dockerfi...

    番茄西紅柿 評論0 收藏2637
  • Docker技術淺談:私有化部署優勢以及在頂象內部應用實踐

    摘要:本文主要和大家分享下容器技術和頂象風控系統私有化部署的優勢以及容器技術在頂象內部的應用實踐。容器技術在頂象內部的應用目前容器技術已在頂象內部大規模推行,所有應用均通過容器實現部署交付與更新。 頂象全景式業務安全風控體系基于新一代風控體系構建,并采用Docker技術進行私有云和公有云部署。本文主要和大家分享下Docker容器技術和頂象風控系統私有化部署的優勢以及Docker容器技術在頂象...

    andong777 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<