1. 程式人生 > >Haproxy+Keepalived(雙機熱備)搭建高可用web架構

Haproxy+Keepalived(雙機熱備)搭建高可用web架構

ise mark 高可用web keepalive email protocol rip 火墻 詳情

1、目的
搭建web高可用架構,用haproxy作為前段負載均衡分攤後端web服務器壓力,Keepalived保證haproxy的存活(雙機熱備:一臺haproxy掛了,自動切換到另外一臺haproxy上)
2、環境(系統均為centos7,防火墻與selinux都關閉)
192.168.0.100:web1(端口7000)、web2(端口8000)
192.168.0.101:haproxy1、keepalived(MASTER)
192.168.0.102:haproxy2、keepalived(BACKUP)
虛擬ip(VIP):192.168.0.11(端口8600)
3、搭建web1與web2
在192.168.0.100上安裝docker,運行兩個容器分別是web1與web2
4、分別在master和backup節點上安裝haproxy與keepalived
直接yum安裝,過程省略。。。
5、配置haproxy(在master與backup節點配置相同)

  • 編輯配置文件/etc/haproxy/haproxy.cfg
  • 在最後添加後端web主機的訪問地址
    backend webapp
    balance roundrobin
    server web1 192.168.0.101:7000 check inter 2000 fall 3 weight 1
    server web2 192.168.0.101:8000 check inter 2000 fall 3 weight 1
    //check啟動對此server執行健康狀態檢查
    //inter<count>設定健康狀態檢查的時間間隔
    //fall<count>確認server從正常狀態轉為不可用狀態需要檢查的次數
    //rise<count>確認server從不可用狀態到正常狀態需要檢查的次數
    //maxcount<count>指此服務器接受的最大並打連接數
    //weight<count>設置server訪問權重
    //更多詳細參數參考:http://www.ttlsa.com/linux/haproxy-study-tutorial/
  • 在default_backend處將app修改為webapp

6、配置keepalived(master節點)

  • 編輯配置文件/etc/keepalived/keepalived.conf
    global_defs {
    notification_email {
     [email protected]
     [email protected]
     [email protected]
    }
    notification_email_from [email protected]
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id LVS_DEVEL
    }
    //以下部分是檢查haproxy進程的腳本
    vrrp_script chk_haproxy {
    script "killall -0 haproxy"
    interval 1
    weight   -5
    fall     3
    rise     5
    }
    vrrp_instance VI_1 {
    state MASTER //此為主節點所以設置為master
    interface ens33 //指定網卡來映射虛擬ip
    virtual_router_id 51 //backup節點應與此id一致,否則vip無法漂移
    priority 200 //值越大優先權越高,所以backup節點要低於此值
    advert_int 1
    authentication { //與backup節點認證的方式,需一致
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress { //虛擬節點的ip(vip)
        192.168.0.11
    }
    track_script { //指定haproxy腳本的名稱
        chk_haproxy
    }
    }
    virtual_server 192.168.0.11 8600 { //指定vip的端口為8600
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP
    real_server 192.168.0.101 5000 { //指定haproxy的地址與端口
        weight 1
        }
    }
  • 在backup(192.168.0.102)節點上需修改三處
  • MASTER 改為BACKUP
  • priority 200 改為 priority 199
  • real_server 192.168.0.101 5000 改為real_server 192.168.0.102 5000
  • 另,查看系統網卡並修改interface
    7、按順序啟動服務並測試
  • 測試web1與web2是否可以訪問
  • 分別在master與backup上啟動haproxy服務,測試ip+5000是否能訪問
  • 先啟動master上的keepalived服務,用systemctl status keepalived查看啟動詳情(以下情況是正常啟動)
    技術分享圖片
  • 在master上查看vip
    技術分享圖片
  • 在瀏覽器上輸入192.168.0.11:8600(點擊刷新兩個web1與web2會交替顯示出來)
  • 啟動backup上的keepalived服務,用systemctl status keepalived查看啟動詳情(vip未漂移過來)
    技術分享圖片
  • 關閉master上的haproxy服務,檢查vip是否漂移到backup上,查看backup上keepalived的狀態(vip已漂移過來)
    技術分享圖片
  • 在瀏覽器上輸入192.168.0.11:8600(點擊刷新兩個web1與web2會交替顯示出來)
    8、總結
  • vip不產生和不漂移:
  • 查看網卡是否開啟轉發
  • 在網絡暢通,防火墻關閉前提下,原因基本上是keepalived的配置有錯誤
  • vip能漂移,但無法訪問:
  • 系統是否一致(系統不一致可能會造成vip漂移後不能訪問)

Haproxy+Keepalived(雙機熱備)搭建高可用web架構