Docker 下的 Keepalived + Haproxy 高可用實現 1 實現結果演示
一. 結果:
1.1 對外虛擬IP “172.16.232.200”,可以訪問5659,5660,5661 三個端口,分別對應不同功能模塊;
1.2 跳過中間過程,實際是訪問的 Haproxy的5659監控界面,再加上負載均衡到“172.18.12.11~12~13”三套Rabbitmq容器的5672(功能端口)和15672(管理界面);
二.高可用演示
通過PIng測試,在宿主機ping Docker內虛擬IP 172.18.12.110,在手工關閉一台Keepalived主機時,IP轉移,耗費2.3ms秒左右;
結果表示高可用成功;
三. 坐好,開始描述實現過程;
3.1 詳細結果
從外部方位宿主機,本次合計實現了 2個IP,15各端口;
3.2 兩個IP
172.16.232.138 是宿主網卡獲取的ip(可以訪問12個端口);
172.16.232.200是虛擬IP(Keepalived)(多了3個端口,合計可以訪問15個端口);
3.3 15個端口;
- 先三個:
5659,5660,5661是虛擬IP專用的3個端口,分別對應了Docker內Keepalived的3個端口(5659,5660,5661)
這3個端口只要不沖突,可以是<65536的任意整數;此次演示項目保持了跟Docker內Keepa的3個端口一致;
這3個端口是通過宿主機的Keepalived虛擬ip 172.16.232.200轉發的,並沒有給宿主機本身,所以這3個端口不能通過物理ip172.16.232.138來訪問;
- 再12個端口:這12個端口,全部是Docker內部的5套容器的端口,分別是:
2套Haproxy容器,每套3個,計6個端口
3套Rabbitmq容器,每套2個,計6個端口
本次演示項目,以上12個端口,可以不用轉發給宿主機,但是為了學習Docker,就全部轉發了;
根據Docker規則,以上必須轉發到宿主12個不同的接口;
示例如下:(學習過程中,Haproxy容器多次創建和刪除,圖上的是Haproxy4~5)
3.4 5套容器
- 先3個簡單的,Rabbitmq 容器,不過多描述;
- 在2個復雜的 Haproxy+Keepalived容器,要多描述
有Haproxy容器,下載和安裝就行;也是下載+安裝;
沒有Keepalived容器,需要自己創建;
3.5 Keeplived 容器的創建
創建Keepalived容器與2中方法,本次測試項目,Keepalived和Haproxy是一體的,所以可以在Haproxy的基礎上創建Keepalived容器;
1是運行Haproxy后,在內部安裝Keepalived,后再保存成鏡像,便於創建第二個Haproxy;體積稍大;
2是通過DockFile生成Keepalived+Haproxy的合體鏡像;
由於直連官方鏈接,這2個方法,都耗費了40多分鍾;
示例如下
通過DockFile生成是209m
運行Haproxy后再安裝,是257m
- 先運行Haproxy,再內部安裝Keepalived,
運行后,命令行,apt-get update,再apt-get install keepalived,再apt-get install nano;
划重點:docker內部默認沒有編輯工具,這里安裝nano,體積小;也可以安裝vim,要大不少;nano用於編輯keepalived的配置文件;
- 通過DockFile生成Keepalived+Haproxy的合體鏡像;
FROM haproxy:latest
RUN apt-get update && apt-get install -y nano keepalived
就這2行,第一行,表示基礎鏡像是 haproxy:lastest, 第二行,表示 運行 “apt-get update && apt-get install -y nano keepalived”命令;
划重點:“&&”符號,在生成Docker時,如果以上命令分成
apt-get update //一行
apt-get install **//二行
的話,會在增加Docker鏡像的“層數”,具體描述看Docker專業知識,本次測試項目不詳細描述;
- bulid命令 sudo docker build -t "新鏡像的名字:版本" .
划重點:最后有個“.” 點字符;要在Dockerfile文件所在的目錄下執行命令;不錯,文件名就是“Dockerfile”;
篇幅所限,在繼續編寫實現過程;