docker 部署nginx 使用keepalived 部署高可用
一.體系架構
在Keepalived + Nginx高可用負載均衡架構中,keepalived負責實現High-availability (HA) 功能控制前端機VIP(虛擬網絡地址),當有設備發生故障時,熱備服務器可以瞬間將VIP自動切換過來,實際運行中體驗只有2秒鐘切換時間,DNS服務可以負責前端VIP的負載均衡。
nginx負責控制后端web服務器的負載均衡,將客戶端的請求按照一定的算法轉發給后端Real Server處理,而Real Server將響應直接返回給客戶端。
二.簡單原理
NGINX_MASTER、NGINX_BACKUP兩臺服務器均通過keepalived軟件把ens32網卡綁上一個虛擬IP(VIP)地址192.168.2.242,此VIP當前由誰承載著服務就綁定在誰的ens32上,當NGINX_MASTER發生故障時,NGINX_BACKUP會通過/etc/keepalived/keepalived.conf文件中設置的心跳時間advert_int 1檢查,無法獲取NGINX_MASTER正常狀態的話,NGINX_BACKUP會瞬間綁定VIP來接替nginx_master的工作,當NGINX_MASTER恢復后keepalived會通過priority參數判斷優先權將虛擬VIP地址192.168.2.242重新綁定給NGINX_MASTER的ens32網卡。
使用此方案的優越性
1.實現了可彈性化的架構,在壓力增大的時候可以臨時添加web服務器添加到這個架構里面去;
2.upstream具有負載均衡能力,可以自動判斷后端的機器,并且自動踢出不能正常提供服務的機器;
3.相對于lvs而言,正則分發和重定向更為靈活。而Keepalvied可保證單個nginx負載均衡器的有效性,避免單點故障;
4.用nginx做負載均衡,無需對后端的機器做任何改動。
5.nginx部署在docker容器里,即大量地節約開發、測試、部署的時間,又可以在出現故障時通過鏡像快速恢復業務。
三、系統環境
兩臺負載機器安裝:centos7.5+docker+nginx+keepalived,分別命名為:NGINX_MASTER,NGINX_BACKUP。
后端web服務器,可以是提供web服務的任何架構,分別命名為:WEB_1,WEB_2。
后端數據庫機器可任意架構,只要能提供數據庫服務即可。
| NGINX_MASTER | Centos 7.5 64位 | 192.168.2.228 | docker+nginx+keepalived |
| NGINX_BACKUP | Centos 7.5 64位 | 192.168.2.229 | docker+nginx+keepalived |
| WEB_1 | Centos 7.5 64位 | 192.168.2.226 | docker+springboot |
| WEB_2 | Centos 7.5 64位 | 192.168.2.227 | docker+springboot |
| 數據庫集群 | Centos 7.5 64位 | ? | mysql集群 |
?
四、安裝配置nginx
分別在NGINX_MASTER、NGINX_BACKUP兩臺服務器上操作
1、部署docker環境
(1)安裝docker
注:安裝的是docker社區版本
(2)修改配置文件,添加私有倉庫地址和阿里云鏡像地址,并指定docker數據存儲目錄
mkdir -p /data/docker mkdir -p /etc/docker vim /etc/docker/daemon.json {"registry-mirrors": ["https://registry.docker-cn.com"], "graph": "/data/docker","insecure-registries": ["192.168.2.225:5000"] }(3)啟動docker,并加入開機啟動
systemctl start docker systemctl enable docker2、配置nginx容器
(1)下載nginx鏡像
docker pull nginx
(2)復制nginx主配置文件到本地
(4)創建運行nginx鏡像的腳本
vim docker_nginx.sh
注:--restart=always是重啟策略,當docker服務重啟后,容器也會自動啟動
(5)啟動nginx容器
sh docker_nginx.sh
(6)修改nginx主配置文件
vim /data/docker/nginx/conf/nginx.conf
(7)創建upstream配置文件
vim /data/docker/nginx/conf/conf.d/myhost.conf
(8)創建虛擬主機配置文件
vim /data/docker/nginx/conf/conf.d/xuad.conf
(9)重啟nginx容器
docker restart nginx
五、安裝配置keepalived
分別在NGINX_MASTER、NGINX_BACKUP兩臺服務器上操作
離線并安裝keepalived:下載的rpm包
安裝有失敗提示:
?編譯:
?
在線并安裝keepalived
注:keepalived安裝在實體機上
如果報以下警告:
*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.
不用擔心,我們只需要用到VRRP功能,不需要用IPVS功能,所以請確保以下三項是yes就行了。
Use VRRP Framework : Yes
Use VRRP VMAC : Yes
Use VRRP authentication : Yes
2、將keepalived 以服務方式啟動
mkdir /etc/keepalived cp /data/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ systemctl enable keepalived3、修改keepalived配置文件
vim /etc/keepalived/keepalived.conf
4、添加檢查nginx狀態的腳本
vim /etc/keepalived/nginx_pid.sh
腳本說明:當nginx進程不存在時,會自動重啟docker服務,docker服務啟動時會自動啟動nginx容器;再次檢查nginx進程,如果不存在,就停止keepalived服務,然后NGINX_BACKUP主機會自動接替NGINX_MASTER的工作。
chmod +x /etc/keepalived/nginx_pid.sh
5、配置firewalld防火墻允許vrrp協議
VRRP(Virtual Router Redundancy Protocol,虛擬路由器冗余協議)
如果是backup服務器,source address改成master服務器的IP
6、啟動keepalived
systemctl start keepalived
七、測試
1、當NGINX_MASTER、NGINX_BACKUP服務器nginx均正常工作時
在NGINX_MASTER上:
?
在NGINX_BACKUP上:
?
master服務器ens192網卡正常綁定VIP,而backup卻沒有綁定,通過瀏覽器可正常訪問網站。
2、關閉NGINX_MASTER的nginx容器
?
當nginx容器停止后,馬上就又啟起來了,nginx啟動腳本沒問題
3、關閉NGINX_MASTER的keepalived服務
在NGINX_MASTER上:
?
在NGINX_BACKUP上:
?
NGINX_BACKUP的ens192網卡已瞬間綁定VIP,通過瀏覽器訪問網站正常。
4、將NGINX_MASTER的keepalived服務啟動
在NGINX_MASTER上:
?
在NGINX_BACKUP上:
?
NGINX_MASTER的ens192網卡重新綁定VIP,通過瀏覽器訪問網站正常。
5、關閉WEB_1服務器,通過瀏覽器訪問網站正常。
附1:配置時間同步
1、在NGINX_MASTER和NGINX_BACKUP上安裝ntp
yum -y install ntp
2、在NGINX_MASTER上修改ntp配置文件
添加以下兩行
3、在NGINX_MASTER上啟動ntp服務,并加入開機啟動
systemctl start ntpd systemctl enable ntpd4、在NGINX_MASTER上添加防火墻策略
只允許192.168.2.229訪問ntp服務
5、在NGINX_BACKUP上同步NGINX_MASTER的時間
ntpdate 192.168.2.228
6、在NGINX_BACKUP上設置計劃任務,每天凌晨5點01分同步時間
轉載于:https://www.cnblogs.com/caozengling/p/10136232.html
總結
以上是生活随笔為你收集整理的docker 部署nginx 使用keepalived 部署高可用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最适合程序猿的笔记软件
- 下一篇: Servlet是什么