HAProxy基於KeepAlived實現Web高可用及動靜分離

2022-01-29 高效運維

歡迎關注「高效運維」公眾號,以免費參加「運維講壇」每月一次的線下交流活動;並搶先賞閱乾貨滿滿的各種原創文章(詳見文末)。

編輯作者介紹

馬哥Linux運維
馬哥linux運維專注於linux運維培訓近八年,基礎課程之外,還涉及hadoop、openstack、python、docker、ELK等眾多領域,直接或間接受益學員已逾百萬人次。

前言

軟體負載均衡一般通過兩種方式來實現:

基於作業系統的軟負載實現

基於第三方應用的軟負載實現

LVS是基於Linux作業系統實現的一種軟負載,而HAProxy則是基於第三方應用實現的軟負載。

HAProxy相比LVS的使用要簡單很多,但跟LVS一樣,HAProxy自己並不能實現高可用,一旦HAProxy節點故障,將會影響整個站點。

本文帶來的是HAProxy基於KeepAlived實現Web高可用及動靜分離。

相關介紹HAProxy

HAProxy是一款提供高可用性、負載均衡以及基於TCP和HTTP應用的代理軟體,HAProxy是完全免費的、藉助HAProxy可以快速並且可靠的提供基於TCP和HTTP應用的代理解決方案。

HAProxy適用於那些負載較大的web站點,這些站點通常又需要會話保持或七層處理。

HAProxy可以支持數以萬計的並發連接,並且HAProxy的運行模式使得它可以很簡單安全的整合進架構中,同時可以保護web伺服器不被暴露到網絡上。

KeepAlived

Keepalived採用VRRP(virtual router redundancy protocol,虛擬路由冗餘協議)熱備份協議,以軟體的方式實現linux伺服器的多機熱備功能。

VRRP是針對路由器的一種備份解決方案——由多臺路由器組成一個熱備組。

通過共用的虛擬IP位址對外提供服務;每個熱備組內同一時刻只有一臺主伺服器提供服務,其他伺服器處於冗餘狀態,若當前在線的伺服器失敗,其他伺服器會自動接替(優先級決定接替順序)虛擬IP位址,以繼續提供服務。

高可用解決方案

實驗拓撲

#系統環境:CentOS6.6#Static Server:httpd#Dynamic Servicer:LAMP

配置過程

HA集群配置前提

時間同步,可用ntpdate向時間伺服器同步

[root@node1 ~]# ntpdate cn.pool.ntp.org

基於主機名互相通信

[root@node1 ~]# vim /etc/hosts172.16.10.123 node1.scholar.com node1172.16.10.124 node2.scholar.com node2[root@node1 ~]# vim /etc/sysconfig/networkHOSTNAME=node1.scholar.com[root@node1 ~]# uname -nnode1.scholar.com#兩個節點都需如上操作

SSH互信

[root@node1 ~]# ssh-keygen -t rsa -P ''[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node2[root@node2 ~]# ssh-keygen -t rsa -P ''[root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1[root@node1 ~]# date; ssh node2 'date' #測試Wed Jun 24 15:58:46 CST 2015Wed Jun 24 15:58:46 CST 2015

安裝所需程序

[root@node1 ~]# yum install keepalived haproxy -y#兩個節點都安裝

配置KeepAlived

[root@node1 ~]# vim /etc/keepalived/keepalived.confvrrp_instance VI_1 { #定義VRRP實例,實例名自定義 state MASTER #指定Keepalived的角色,MASTER為主伺服器,BACKUP為備用伺服器 interface eth0 #指定HA監測的接口 virtual_router_id 51 #虛擬路由標識(1-255),在一個VRRP實例中主備伺服器ID必須一樣 priority 100 #優先級,數字越大越優先,主伺服器優先級必須高於備伺服器 advert_int 1 #設置主備之間同步檢查時間間隔,單位秒 authentication { #設置驗證類型和密碼 auth_type PASS #驗證類型 auth_pass ab007 #設置驗證密碼,同一實例中主備密碼要保持一致 } virtual_ipaddress { #定義虛擬IP位址 192.168.12.21 }}vrrp_instance VI_2 { state BACKUP interface eth0 virtual_router_id 61 priority 99 advert_int 1 authentication { auth_type PASS auth_pass sr200 } virtual_ipaddress { 192.168.12.22 }}

將配置文件同步給另一個節點

[root@node1 ~]# scp /etc/keepalived/keepalived.conf node2:/etc/keepalived/keepalived.conf 100% 787 0.8KB/s 00:00

修改另一個節點配置文件

[root@node2 ~]# vim /etc/keepalived/keepalived.confvrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 99 advert_int 1 authentication { auth_type PASS auth_pass ab007 } virtual_ipaddress { 192.168.12.21 }}vrrp_instance VI_2 { state MASTER interface eth0 virtual_router_id 61 priority 100 advert_int 1 authentication { auth_type PASS auth_pass sr200 } virtual_ipaddress { 192.168.12.22 }}

配置HAProxy

[root@node1 ~]# vim /etc/haproxy/haproxy.cfg global # to have these messages end up in /var/log/haproxy.log you will # need to: # by adding the '-r' option to the SYSLOGD_OPTIONS in # /etc/sysconfig/syslog # # 2) configure local2 events to go to the /var/log/haproxy.log # file. A line like the following can be added to # /etc/sysconfig/syslog # # local2.* /var/log/haproxy.log log 127.0.0.1 local2 #日誌將通過rsyslog進行歸檔記錄 chroot /var/lib/haproxy #運行的安裝路徑 pidfile /var/run/haproxy.pid #pid文件存放的位置 maxconn 4000 #最大連接 user haproxy #運行haproxy的用戶 group haproxy #運行haprixy的組 daemon #以後臺模式運行haproxy # turn on stats unix socket stats socket /var/lib/haproxy/stats#----# common defaults that all the 'listen' and 'backend' sections will# use if not designated in their block#----defaults mode http #工作模式 log global #記錄日誌 option httplog #詳細記錄http日誌 option dontlognull #不記錄健康檢查的日誌信息 option http-server-close #啟用伺服器端主動關閉 option forwardfor except 127.0.0.0/8 #傳遞客戶端IP retries 3 #請求重試次數 timeout http-request 10s #http請求超時時間 timeout queue 1m #一個請求在隊列裡的超時時間 timeout connect 10s #連接伺服器超時時間 timeout client 1m #客戶端超時時間 timeout server 1m #客戶端超時時間 timeout http-keep-alive 10s #持久連接超時時間 timeout check 10s #心跳檢測超時時間 maxconn 3000 #最大連接數#----# main frontend which proxys to the backends#----frontend proxy *:80 #定義ACL acl url_static path_beg -i /static /images /javascript /stylesheets acl url_static path_end -i .jpg .gif .png .css .js acl url_dynamic path_end _i .php .jsp use_backend dynamic if url_dynamic #調用後端伺服器並檢查ACL規則是否被匹配 default_backend static#----# static backend for serving up images, stylesheets and such#----backend static #後端調度 balance source #調度算法 server s1 172.16.10.125:80 inter 1500 rise 2 fall 3 check #listen statistics mode http #http 7 層模式 bind *:8080 #監聽地址 stats enable #啟用狀態監控 stats auth admin:admin #驗證的用戶與密碼 stats uri /admin?status #訪問路徑 stats hide-version #隱藏狀態頁面版本號 stats admin if TRUE #如果驗證通過了就允許登錄 stats refresh 3s #每3秒刷新一次 acl allow src 192.168.12.0/24 #允許的訪問的IP位址 tcp-request content accept if allow #允許的地址段就允許訪問 tcp-request content reject #拒絕非法連接#----# round robin balancing between the various backends#----backend dynamic balance source server s2 172.16.10.12:80 check inter 1500 rise 2 fall 3 #check inter 1500是檢測心跳頻率#rise2 2次正確認為伺服器可用#fall3 3次失敗認為伺服器不可用

將配置文件同步至另一節點

[root@node1 ~]# scp /etc/haproxy/haproxy.cfg node2:/etc/haproxy/haproxy.cfg 100% 4471 4.4KB/s 00:00

WEB端配置

準備測試頁面

#static server[root@scholar ~]# vim /var/www/html/index.html <h1>172.16.10.125</h1>[root@scholar ~]# service httpd startStarting httpd: [ OK ]#dynamic server[root@scholar ~]# vim /var/www/html/index.php<h1>172.16.10.20</h><?php $link = mysql_connect('127.0.0.1','root',''); if ($link) echo "Success..."; else echo "Failure..."; mysql_close(); phpinfo();?>[root@scholar ~]# service httpd startStarting httpd: [ OK ][root@scholar ~]# service mysqld startStarting mysqld: [ OK ]

啟動服務

[root@node1 ~]# service haproxy start; ssh node2 'service haproxy start'Starting haproxy: [ OK ]Starting haproxy: [ OK ][root@node1 ~]# service keepalived start; ssh node2 'service keepalived start'Starting keepalived: [ OK ]Starting keepalived: [ OK ]

動靜分離及高可用測試

查看各節點IP情況

靜態頁面

動態頁面

靜態頁面

動態頁面

查看狀態頁面

模擬一個節點故障

[root@node1 ~]# service haproxy stopStopping haproxy: [ OK ][root@node1 ~]# service keepalived stopStopping keepalived: [ OK ]

查看各節點IP信息

VIP轉移了,繼續訪問測試

訪問不受任何影響,至此高可用及動靜分離目的實現。

HAProxy基於KeepAlived實現Web高可用及動靜分離實驗就先說到這裡了。

本次實驗因資源有限只提供了兩臺web伺服器,如有多臺可設置輪詢實現負載均衡,這裡就不做多介紹了。

部署過程遇到問題可留言交流。也可以通過掃描如下二維碼,以了解更多精彩文章。

好消息:歡迎加入開放運維聯盟

開放運維聯盟(OOPSA)成立於2015年10月31日,是運維行業第一個全國性、非盈利的正式組織,由資深運維從業人員聯合發起,指導單位為工信部電信研究院數據中心聯盟(DCA)。

開放運維聯盟旨在融合運維行業最佳實踐、推動行業進步,減少公司運維重複投入,建設運維人員共有的家園,讓運維不再「苦逼」。

目前會員註冊開放中(個人會員免費)。熱衷歡迎作為運維同仁的您(無論從業年限),加入我們,共謀發展。OPPSA,已有全國各地大量運維同仁匯聚。關於更多介紹及會員報名辦法,詳見如下連結:

開放運維聯盟(OOPSA),誠邀您的加入

如何一起愉快地發展

「高效運維」公眾號(如下二維碼)值得您的關注,作為高效運維繫列微信群的唯一官方公眾號,每周發表多篇乾貨滿滿的原創好文:來自於系列群的討論精華、運維講壇線上精彩分享及群友原創。「高效運維」也是網際網路專欄《高效運維最佳實踐》及運維2.0官方公眾號。

提示:目前高效運維新群已經建立,歡迎加入。您可添加蕭田國個人微信號 xiaotianguo8 為好友,進行申請,請備註「申請入群」。

重要提示:除非事先獲得授權,請在本公眾號發布2天後,才能轉載本文。尊重知識,請必須全文轉載,並包括本行。

相關焦點

  • haproxy+keepalived實現高可用負載均衡
    軟體負載均衡一般通過兩種方式來實現:基於作業系統的軟負載實現和基於第三方應用的軟負載實現。
  • Nginx+keepalived 實現高可用,防盜鏈及動靜分離配置詳解(值得收藏)
    動靜分離是什麼Nginx動靜分離是讓動態網站裡的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以後,我們就可以根據靜態資源的特點將其做緩存操作,這就是網站靜態化處理的核心思路。2. 動靜分離原理圖
  • Nginx+keepalived 實現高可用,防盜鏈及動靜分離配置,寫得太好了!
    1.動靜分離是什麼Nginx動靜分離是讓動態網站裡的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以後,我們就可以根據靜態資源的特點將其做緩存操作,這就是網站靜態化處理的核心思路。
  • 詳解Keepalived和HAProxy高可用負載均衡
    本文將介紹基於開源軟體HAProxy實現負載均衡並且通過Keepalived實現高可用的配置方法,希望讀者通過參考本文的探索成果可以快速實現高可用的軟體負載均衡,也希望讀者能夠舉一反三、觸類旁通,通過自我驅動進行更深入的研究來配置更多的功能來滿足自身需求。
  • Haproxy+keepalived高可用集群實戰
    Haproxy+Keepalived企業高性能WEB能夠支持千萬級並發網站,實現Haproxy高性能WEB網站架構配置步驟如下:Haproxy安裝配置Haproxy安裝配置步驟相對比較簡單,跟其他源碼軟體安裝方法大致相同,如下為Haproxy配置方法及步驟: 1.Haproxy編譯及安裝
  • 0656-6.2.0-如何配置Haproxy高可用
    》《如何使用HAProxy實現Impala的負載均衡》集群採用了haproxy保證了集群服務的高可用,但是Haproxy本身並沒有實現熱備,在Haproxy伺服器出現問題時,需要手動切換。本文主要介紹如何採用keepalived解決實在Haproxy高可用。1.RedHat7.22.CDH6.2.0兩個節點都安裝Haproxy兩個節點配置Haproxy
  • MySQL+Haproxy+Keepalived高可用
    第二種:haproxy宕機出發VIP漂移的高可用。這兩種模式的底層資料庫均為雙主模式或者MGR的多主模式,mariadb的galera模式,percona的pxc模式;也就是底層的資料庫每一個都可寫。在雙主的模式下,如果添加了haproxy這一層,那麼就可以實現了資料庫讀寫的負載均衡,VIP隨著haproxy的狀態而漂移,即上面提到的第一種情況。
  • Mysq+Haproxy+Keepalived高可用
    第二種:haproxy宕機出發VIP漂移的高可用。這兩種模式的底層資料庫均為雙主模式或者MGR的多主模式,mariadb的galera模式,percona的pxc模式;也就是底層的資料庫每一個都可寫。在雙主的模式下,如果添加了haproxy這一層,那麼就可以實現了資料庫讀寫的負載均衡,VIP隨著haproxy的狀態而漂移,即上面提到的第一種情況。
  • Nginx + Keepalived 實現站點高可用
    (nginx做反向代理,實現後端應用伺服器的負載均衡)快速搭建請直接跳至 第2節。1. Keepalived介紹Keepalived是一個基於VRRP協議來實現的服務高可用方案,可以利用其來避免IP單點故障,類似的工具還有heartbeat、corosync、pacemaker。
  • keepalived+nginx+nfs 實現web集群高可用
    keepalived+nginx+nfs 實現web集群高可用
  • Linux運維:搭建HAProxy+Keepalived高可用負載均衡系統
    圖1  高可用HAProxy集群系統拓撲結構此結構要實現的功能是:通過HAProxy實現三個站點的負載均衡,即當用戶通過域名www.zb.com訪問網站時,HAProxy要將請求發送到webapp1主機;當用戶通過域名static.zb.com訪問網站時,HAProxy要將請求發送到webapp2主機;當用戶通過域名video.zb.com訪問網站時,HAProxy
  • 超詳細的Galera Cluster For Mysql部署,千萬別點進來(+Haproxy+Keepalived)
    galera]# systemctl restart haproxy;systemctl restart rsyslog[root@galera1 galera]# systemctl status haproxyKeepalived高可靠部分環境當然了環境還是原來的環境,在三臺節點上安裝keepalived就可以了!!
  • Nginx+keepalived+LVS實現高可用
    該項目的主要目標是為Linux系統和基於Linux的基礎架構提供負載均衡和高可用性功能。負載均衡的實現依賴於Linux虛擬伺服器(IPVS)內核模塊提供的網絡協議第4層負載均衡。Keepalived實現了一系列的檢查,根據伺服器運行健康狀態,動態地維持伺服器之間的負載均衡。另一方面,keepalived通過VRRP協議實現高可用性。為了提供最快的網絡故障檢測,Keepalived採用BFD協議。
  • 實踐 | Centos 7搭建LVS+Keepalived高可用Web服務群集群
    LVS + Keepalived 高可用集群Keepalived的設計目標是構建高可用的LVS負載均衡的集群,可以調用ipvsadm工具創建虛擬機,不僅僅用作雙機熱備,還可以使用keepalived構建更加方便快捷的節點,進行相關的健康檢查,自動移除失效節點,恢復後再重新加入。
  • 企業實戰(22)基於Haproxy負載均衡+Keepalived高可用集群實戰詳解
    一、Haproxy概述 一種高效、可靠、免費的高可用及負載均衡軟體,非常適合於高負載站點的七層數據請求
  • 在Ubuntu 20.04上使用Keepalived配置高可用性HAProxy
    在 Fedora 30(Fedora 29)上設置 HAProxy 負載均衡器[4]在 Ubuntu 18.04(Debian 10 或 9)上使用 SSL 配置 HAProxy 負載均衡器[5]在本教程中,我們將使用兩臺具有 Keepalived 的 HAProxy 伺服器以實現高可用性
  • 專業負載均衡器Haproxy(擴展)
    HAProxy將保存真實伺服器的Session以及伺服器標識,實現會話保持。(HAProxy只要求後端伺服器能夠在網絡聯通,也沒有像LVS那樣繁瑣的ARP配置)3)HAProxy 負載均衡算法HAProxy的balance8種負載均衡算法:roundrobin : 基於權重輪循。static-rr : 基於權重輪循。
  • HAProxy從零開始到掌握
    /Prefix Cookie,以及上述的多種Hash方式實現會話保持SSL:HAProxy可以解析HTTPS協議,並能夠將請求解密為HTTP後向後端傳輸監控與統計:HAProxy提供了基於Web的統計信息頁面,展現健康狀態和流量數據。
  • nginx實現請求的負載均衡 + keepalived實現nginx的高可用
    實現nginx高可用(HA)注意點參考前言使用集群是網站解決高並發、海量數據問題的常用手段。摘自《大型網站技術架構_核心原理與案例分析》另外,大家可以看我的這兩篇博客:LVS + keepalived + nginx + tomcat 實現主從熱備 + 負載均衡http://www.cnblogs.com/youzhibing/p/5061786.html和主從熱備+負載均衡(LVS + keepalived)http://www.cnblogs.com/youzhibing
  • 從零開始掌握 HAProxy 負載均衡器,詳細
    Hash方式實現會話保持SSL:HAProxy可以解析HTTPS協議,並能夠將請求埠為HTTP後向傳輸HTTP請求重建與目的監控與統計:HAProxy提供了基於Web的統計信息頁面、狀態狀態和流量數據。