Docker 下的 Keepalived + Haproxy 高可用實現 1 實現結果演示


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”;


 

篇幅所限,在繼續編寫實現過程; 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM