3.Nginx的高可用叢集
阿新 • • 發佈:2022-05-26
高可用示意圖如下:
可以使用ipconfig,檢視虛擬Ip的繫結 5、最終測試 (1)在瀏覽器位址列輸入 虛擬 ip 地址 192.168.17.50(虛擬ip:這就是keepalive的強大處,統一了nginx叢集的統一入口) (2)把主伺服器上的(192.168.17.129)Nginx 和 keepalived 停止,再輸入 192.168.17.50,依舊可以訪問Nginx。NGINX主從備份 NGINX實現主從備份目前主流方案是Keepalived+Nginx實現雙機熱備。 Keepalived介紹: Keepalived是一個基於VRRP協議來實現的服務高可用方案,可以利用其來避免IP單點故障,類似的工具還有heartbeat、corosync、pacemaker。 但是它一般不會單獨出現,而是與其它負載均衡技術(如lvs、haproxy、nginx)一起工作來達到叢集的高可用 VRRP協議: 虛擬路由冗餘協議 可以認為它是實現路由器高可用的容錯協議,即將N臺提供相同功能的路由器組成一個路由器組(Router Group),這個組裡面有一個master和多個backup, 但在外界看來就像一臺一樣,構成虛擬路由器,擁有一個虛擬IP(vip,也就是路由器所在區域網內其他機器的預設路由), 佔有這個IP的master實際負責ARP相應和轉發IP資料包,組中的其它路由器作為備份的角色處於待命狀態。 master會發組播訊息,當backup在超時時間內收不到vrrp包時就認為master宕掉了, 這時就需要根據VRRP的優先順序來選舉一個backup當master,保證路由器的高可用 具體實現原理: 1)Master沒掛,則Master佔有vip且nginx執行在Master上 2)Master掛了,則backup搶佔vip且在backup上執行nginx服務 3)如果master伺服器上的nginx服務掛了,則vip資源轉移到backup伺服器上 4)檢測後端伺服器的健康狀態 Master和Backup兩邊都開啟nginx服務,無論Master還是Backup,當其中的一個keepalived服務停止後,vip都會漂移到keepalived服務還在的節點上 開始部署實現: 1.準備工作 1.1有兩臺伺服器:wmd01 wmd02 1.2各自安裝nginx和keepalived 1.keepalived 通過yum安裝: yum install keepalived –y 安裝後,keepalive的配置檔案路徑:/etc/keepalived/keepalivec.conf 2.nginx的配置檔案: 兩個伺服器的nginx配置檔案都相同,沒有什麼變動,做主備節點 3.keepalive的配置:/etc/keepalived/keepalivec.conf 主節點(Master節點配置) (1)修改/etc/keepalived/keepalivec.conf 配置檔案 global_defs { notification_email { [email protected] [email protected] [email protected] } notification_email_from [email protected] #當前主機ip smtp_server 192.168.17.129 smtp_connect_timeout 30 # 重點1:通過它,可以訪問到主機,在hosts檔案中,要做對映關係,類似於 127.0.0.1 LVS_DEVEL,host檔案路徑:/etc/hosts router_id LVS_DEVEL } #重點2:檢測指令碼,目的是定時執行,檢測nginx的狀態,如果掛了嘗試重啟,如果啟動失敗,則停止該節點的nginx和keepaive vrrp_script chk_http_port { script "/usr/local/src/nginx_check.sh" # 執行指令碼所在的位置,自定義指令碼後面會提及 interval 2 #檢測指令碼執行的間隔,單位秒,每個2秒執行一次指令碼 weight 2 #指令碼執行滿足,權重加2,這裡其實沒搞明白.. } #重點3:主備節點的區別配置 vrrp_instance VI_1 { state MASTER # 備份伺服器上將 MASTER 改為 BACKUP interface ens33 # 繫結的網絡卡,通過ipconfig檢視 virtual_router_id 51 # 主、備機的 virtual_router_id 必須相同 priority 100 # 主、備機取不同的優先順序,主機值較大,備份機值較小(比如主機100,備機90) advert_int 1 #每隔一秒傳送一次心跳,確保從伺服器(keepalive)是否還活著 authentication { # 心跳檢測需要的密碼 auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.17.50 # VRRP H 虛擬地址(重點:虛擬ip配置,客戶端通過該ip進行訪問,主節點和備用節點誰佔有這個ip,誰提供反向代理服務) } } (2)在/usr/local/src 新增檢測指令碼nginx_check.sh,檢查Nginx是否還活著 #!/bin/bash #檢視ningx的程序號,並統計數量 A=`ps -C nginx –no-header |wc -l` #等於0時,即nginx掛了,嘗試重啟 if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx #Nginx啟動命令的位置 sleep 2 #啟動失敗,殺掉keepalive if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi (3)把兩臺伺服器上 nginx 和 keepalived 啟動 啟動 nginx: ./nginx 啟動 keepalived: systemctl start keepalived.service