星期五, 9月 25, 2015

認識 Docker + HAProxy (Software Load Balancing)

首先當然要裝好 Docker,再來是準備一台以上的 WebServer,以 Nginx 為例:
  • docker run --name nginx1 -d -p 8081:80 nginx
  • docker run --name nginx2 -d -p 8082:80 nginx
其中 -p 是表示將 Docker Host 的埠對應到 container 裏,所以在 Docker Host 上的 http://localhost:8081、http://localhost:8082 就會分別導到 nginx1、nginx2 的 80 埠,可以檢查一下是否能看到 Nginx 預設的首頁。

為了要知道這些 WebServer 的位址,可以下指令:
  • docker inspect nginx1 | grep IPAddress
  • docker inspect nginx2 | grep IPAddress
假設得到的結果是 nginx1: 172.17.0.1;nginx2: 172.17.0.2。接下來準備 HAProxy,因為官網說「沒有兩個人的設定一樣」,所以他們索性就不放一個入門級的設定範例了。沒關係,自己寫一個:
  • listen balanceGroup1 :80
    • server nginx1 172.17.0.1:80
    • server nginx2 172.17.0.2:80
  • listen stats :1936
    • mode http
    • stats enable
    • stats uri /
以上內容存檔在 /var/docker/haproxy.cfg,接著是重點:
  • docker run --name haproxy1 -d -p 80:80 -p 1936:1936 -v /var/docker:/usr/local/etc/haproxy:Z haproxy
如此就可以在 Docker Host 上訪問 localhost(會輪流導向 nginx1、nginx2),也可以在 localhost:1936 監控。因為瀏覽器的快取做得好,有時候反而不利於觀察 HAProxy 的行為,可以改用 curl 命令列工具。

[2018/05/12]
事隔多年,設定檔必須小改以符合新版的規定,如原先:
  • listen balanceGroup1 :80
要拆成兩行
  • listen balanceGroup1
    • bind :80
[2018/08/31]
服務與監控使用同一個埠似乎比較簡潔,就是整併上述 listen stats 段落,改為:
  • listen balanceGroup1
    • mode http
    • bind :80
    • stats enable
    • stats uri /admin?stats
    • server nginx1 172.17.0.1:80
    • server nginx2 172.17.0.2:80

沒有留言:

張貼留言