1. 程式人生 > >Docker 1.12.0 改進了服務的負載均衡引數

Docker 1.12.0 改進了服務的負載均衡引數

在最新發布的 1.12.0 版本中,當在 叢集中啟動服務時,Docker 通過 DNS 和 IP 虛擬伺服器(IPVS)為服務的負載均衡引入了新的引數。

新版 Docker 引入了內建的 DNS 伺服器,當啟動一個容器時,可以通過它使用 --net-alias 引數來為容器的 IP 地址對映別名。

這個特性 從 1.10 後就可使用。從  1.11 版本之後,Docker 也支援了基於迴圈 DNS 的負載均衡。

在基於 DNS 的負載均衡中,一個服務的名稱(別名)會被對映到多個 IP 地址。在這樣的情形下,服務其實是執行在容器的 IP 地址背後。

當進行 DNS 查詢時,DNS 伺服器將會響應多個 IP 地址,同時,它也會打亂返回的 IP 地址的順序,這使得從不同客戶端傳送的請求將會命中不同的 IP。

但必須通過手動對映一個別名到多個容器的 IP 地址才能實現迴圈負載均衡。

在 1.12.0 版本中,Docker添加了內建的對於服務的負載均衡的支援,原理是使用了稱為 IPVS 的 Linux 特性。

使用 Docker 的叢集引擎,一個服務可以通過命令列和必須的數個複製品(容器)來宣告。再也不用為服務手動地指定別名。

在內部,該服務的 DNS 名稱被對映到了一個虛擬 IP(VIP),在這裡這個特性與 IPVS 聯絡了起來。當進行 DNS 查詢時,VIP 將被返回。

IPVS 是一個  Linux 核心特性,它可以使得第四層(傳輸層) TCP/UDP 流量 被轉發到後端伺服器。

它是基於網路過濾模組的,其形成了在 Linux 核心中的包過濾和網路地址轉換實現的基礎。

當一個服務請求到達了 VIP,它會被轉發到一個託管服務的後端容器中。

通過這樣的方式,流量會被均勻地分發到容器之中。

這種負載均衡服務的方式和  Consul 非常相似,它是服務發現軟體。Consul 也提供一個 DNS 伺服器,它可以在每次查詢完成時 返回多個 IP 地址。