首先當然要裝好 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]
事隔多年,設定檔必須小改以符合新版的規定,如原先:
要拆成兩行
[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