天天看點

HAProxy+Keepalived高可用負載均衡web服務搭建

一.高可用

1.1.什麼是高可用?

計算機系統的可用性(availability)是通過系統的可靠性(reliability)和可維護性(maintainability)來度量的。 工程上通常用平均無故障時間(MTTF)來度量系統的可靠性,用平均維修時間(MTTR)來度量系統的可維護性。 于是可用性被定義為: MTTF/(MTTF+MTTR)*100%

1)負載均衡伺服器的高可用性

為了屏蔽負載均衡伺服器的失效,需要建立一個備份機。主伺服器和備份機上都運作High Availability監控程式,通過傳送諸如“I am alive”這樣的資訊來監控對方的運作狀況。當備份機不能在一定的時間内收到這樣的資訊時,它就接管主伺服器的服務IP并繼續提供服務;當備份管理器又從主管理器收到“I am alive”這樣的資訊是,它就釋放服務IP位址,這樣的主管理器就開開始再次進行叢集管理的工作了。為在主伺服器失效的情況下系統能正常工作,我們在主、備份機之間實作負載叢集系統配置資訊的同步與備份,保持二者系統的基本一緻。

2)HA的容錯備援運作過程

自動偵測(Auto-Detect)階段 由主機上的軟體通過備援偵測線,經由複雜的監聽程式。邏輯判斷,來互相偵測對方運作的情況,所檢查的項目有:主機硬體(CPU和周邊)、主機網絡、主機作業系統、資料庫引擎及其它應用程式、主機與磁盤陣列連線。為確定偵測的正确性,而防止錯誤的判斷,可設定安全偵測時間,包括偵測時間間隔,偵測次數以調整安全系數,并且由主機的備援通信連線,将所彙集的訊息記錄下來,以供維護參考。 自動切換(Auto-Switch)階段 某一主機如果确認對方故障,則正常主機除繼續進行原來的任務,還将依據各種容錯備援模式接管預先設定的備援作業程式,并進行後續的程式及服務。 自動恢複(Auto-Recovery)階段 在正常主機代替故障主機工作後,故障主機可離線進行修複工作。在故障主機修複後,透過備援通訊線與原正常主機連線,自動切換回修複完成的主機上。整個回複過程完成由EDI-HA自動完成,亦可依據預先配置,選擇回複動作為半自動或不回複。

1.2.HA三種工作方式:

(1)主從方式 (非對稱方式)工作原理:主機工作,備機處于監控準備狀況;當主機當機時,備機接管主機的一切工作,待主機恢複正常後,按使用者的設定以自動或手動方式将服務切換到主機上運作,資料的一緻性通過共享存儲系統解決。

(2)雙機雙工方式(互備互援)工作原理:兩台主機同時運作各自的服務工作且互相監測情況,當任一台主機當機時,另一台主機立即接管它的一切工作,保證工作實時,應用服務系統的關鍵資料存放在共享存儲系統中。

(3)叢集工作方式(多伺服器互備方式)工作原理:多台主機一起工作,各自運作一個或幾個服務,各為服務定義一個或多個備用主機,當某個主機故障時,運作在其上的服務就可以被其它主機接管。

二.叢集

2.1 什麼是叢集?

簡單的說,叢集(cluster)就是一組計算機,它們作為一個整體向使用者提供一組網絡資源。這些單個的計算機系統就是叢集的節點(node)。 更詳細的說,叢集(一組協同工作的計算機)是充分利用計算資源的一個重要概念,因為它能夠将工作負載從一個超載的系統(或節點)遷移到叢集中的另一個系統上。其處理能力是與專用計算機(小型機,大型機)可相比,但其成本效益高于專用計算機. 常見的硬體有:結點,網絡,存儲,軟體有:機群系統,節點系統,應用支撐軟體。 Cluster叢集技術可如下定義:一組互相獨立的伺服器在網絡中表現為單一的系統,并以單一系統的模式加以管理。此單一系統為客戶工作站提供高可靠性的服務。大多數模式下,叢集中所有的計算機擁有一個共同的名稱,叢集内任一系統上運作的服務可被所有的網絡客戶所使用。Cluster必須可以協調管理各分離的元件的錯誤和失敗,并可透明地向Cluster中加入元件。一個Cluster包含多台(至少二台)擁有共享資料存儲空間的伺服器。任何一台伺服器運作一個應用時,應用資料被存儲在共享的資料空間内。每台伺服器的作業系統和應用程式檔案存儲在其各自的本地儲存空間上。Cluster内各節點伺服器通過一内部區域網路互相通訊。當一台節點伺服器發生故障時,這台伺服器上所運作的應用程式将在另一節點伺服器上被自動接管。當一個應用服務發生故障時,應用服務将被重新啟動或被另一台伺服器接管。當以上的任一故障發生時,客戶都将能很快連接配接到新的應用服務上。

2.2 叢集系統的主要優點:
  • (1)高可擴充性:
  • (2)高可用性HA:叢集中的一個節點失效,它的任務可傳遞給其他節點。可以有效防止單點失效。
  • (3)高性能:負載平衡叢集允許系統同時接入更多的使用者。
  • (4)高成本效益:可以采用廉價的符合工業标準的硬體構造高性能的系統。
2.3 叢集系統的分類

雖然,根據叢集系統的不同特征可以有多種分類方法,但是一般把叢集系統分為兩類:

  • (1)高可用(High Availability)叢集,簡稱HA叢集。 這類叢集緻力于提供高度可靠的服務。就是利用叢集系統的容錯性對外提供7*24小時不間斷的服務,如高可用的檔案伺服器、資料庫服務等關鍵應用。 負載均衡叢集:使任務可以在叢集中盡可能平均地分攤不同的計算機進行處理,充分利用叢集的處理能力,提高對任務的處理效率。 在實際應用中這幾種叢集類型可能會混合使用,以提供更加高效穩定的服務。如在一個使用的網絡流量負載均衡叢集中,就會包含高可用的網絡檔案系統、高可用的網絡服務。
  • (2)、性能計算(High Perfermance Computing)叢集,簡稱HPC叢集,也稱為科學計算叢集。 在這種叢集上運作的是專門開發的并行應用程式,它可以把一個問題的資料分布到多台的計算機上,利用這些計算機的共同資源來完成計算任務,進而可以解決單機不能勝任的工作(如問題規模太大,單機計算速度太慢)。 這類叢集緻力于提供單個計算機所不能提供的強大的計算能力。如天氣預報、石油勘探與油藏模拟、分子模拟、生物計算等。

三.Keepalived

3.1簡介

Keepalived的作用是檢測伺服器的狀态,如果有一台web伺服器當機,或工作出現故障,Keepalived将檢測到,并将有故障的伺服器從系統中剔除,同時使用其他伺服器代替該伺服器的工作,當伺服器工作正常後Keepalived自動将伺服器加入到伺服器群中,這些工作全部自動完成,不需要人工幹涉,需要人工做的隻是修複故障的伺服器。

3.2原理

Layer3,4&5工作在IP/TCP協定棧的IP層,TCP層,及應用層,原理分别如下: Layer3:Keepalived使用Layer3的方式工作式時,Keepalived會定期向伺服器群中的伺服器發送一個ICMP的資料包(既我們平時用的Ping程式),如果發現某台服務的IP位址沒有激活,Keepalived便報告這台伺服器失效,并将它從伺服器群中剔除,這種情況的典型例子是某台伺服器被非法關機。Layer3的方式是以伺服器的IP位址是否有效作為伺服器工作正常與否的标準。 Layer4:如果您了解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的狀态來決定伺服器工作正常與否。如web server的服務端口一般是80,如果Keepalived檢測到80端口沒有啟動,則Keepalived将把這台伺服器從伺服器群中剔除。 Layer5:Layer5對指定的URL執行HTTP GET。然後使用MD5算法對HTTP GET結果進行求和。如果這個總數與預期值不符,那麼測試是錯誤的,伺服器将從伺服器池中移除。該子產品對同一服務實施多URL擷取檢查。如果您使用承載多個應用程式伺服器的伺服器,則此功能很有用。此功能使您能夠檢查應用程式伺服器是否正常工作。

3.3作用

主要用作RealServer的健康狀态檢查以及LoadBalance主機和BackUP主機之間failover的實作。

四.實作架構

HAProxy+Keepalived高可用負載均衡web服務搭建

場景說明:

1.伺服器作業系統

5台伺服器均為centos7.3作業系統

2.應用軟體
  1. [root@node01 ~]# rpm -qa | grep haproxy
  2. haproxy-1.5.18-7.el7.x86_64  
  3. [root@node01 /]# rpm -qa | grep keepalived
  4. keepalived-1.3.5-6.el7.x86_64  
  5. [root@node01 /]#
  6. [root@web01 ~]# httpd -v
  7. Server version: Apache/2.4.6 (CentOS)  
  8. Server built:   Apr 20 2018 18:10:38      
3.伺服器IP規劃

負載均衡器2台:

192.168.150.71/24

192.168.150.72/24

虛拟IP: 192.168.150.70/24

Web伺服器3台:

192.168.150.73/24

192.168.150.74/24

192.168.150.75/24

五.系統軟體安裝與部署

本次主要配置haproxy+keepalived實作高可用負載均衡的功能。 2台haproxy提供負載均衡和應用代理服務。 其中node01作為主伺服器MASTER,node02作為備份伺服器BACKUP。 對外表現為一個虛拟IP,主伺服器會發送特定的消息給備份伺服器,當備份伺服器收不到這個消息的時候,即主伺服器當機的時候,備份伺服器就會接管虛拟IP,繼續提供服務,進而保證了高可用性。Keepalived是VRRP的完美實作。

1.安裝前的準備工作

1)分别在5台伺服器上安裝CENTOS7.3系統; 2)更改主機名并按規劃的IP位址進行位址配置設定; 3)關閉防火牆和SElinux

  1. [root@node01 ~]# systemctl disable firewalld
  2. [root@node01 ~]# systemctl stop firewalld
  3. [root@node01 ~]#
  4. [root@node01 ~]# vi /etc/sysconfig/selinux
  5. This file controls the state of SELinux on the system.  
  6. # SELINUX= can take one of these three values:
  7. #     enforcing - SELinux security policy is enforced.
  8. #     permissive - SELinux prints warnings instead of enforcing.
  9. #     disabled - No SELinux policy is loaded.
  10. SELINUX=disabled  
  11. # SELINUXTYPE= can take one of three two values:
  12. #     targeted - Targeted processes are protected,
  13. #     minimum - Modification of targeted policy. Only selected processes are protected.
  14. #     mls - Multi Level Security protection.
  15. SELINUXTYPE=targeted  

在備份節點上node02進行同樣的操作。

2.yum方式安裝haproxy和keepalived軟體

在兩台負載均衡伺服器node01和node02上安裝:

  1. [root@node01 /]# yum install haproxy keepalived -y
  2. 已加載插件:fastestmirror, langpacks  
  3. base                                                                                                                                                                      | 3.6 kB  00:00:00       
  4. extras                                                                                                                                                                    | 3.4 kB  00:00:00       
  5. updates                                                                                                                                                                   | 3.4 kB  00:00:00       
  6. updates/7/x86_64/primary_db                                                                                                                                               | 2.0 MB  00:00:00       
  7. Loading mirror speeds from cached hostfile  
  8.  * base: mirrors.aliyun.com  
  9.  * extras: mirrors.huaweicloud.com  
  10.  * updates: mirrors.huaweicloud.com  
  11. 軟體包 haproxy-1.5.18-7.el7.x86_64 已安裝并且是最新版本  
  12. 軟體包 keepalived-1.3.5-6.el7.x86_64 已安裝并且是最新版本  
  13. 無須任何處理  
  14. [root@node01 /]#
3.配置keepalived主節點和備份節點及通知腳本

1)主節點配置檔案

  1. [root@node01 keepalived]# pwd
  2. /etc/keepalived  
  3. [root@node01 keepalived]# cat keepalived.conf
  4. ! Configuration File for keepalived  
  5. global_defs {  
  6.    notification_email {  
  7.     root@localhost  
  8.    }  
  9.    notification_email_from keepalived@localhost  
  10.    smtp_server 127.0.0.1  
  11.    smtp_connect_timeout 30  
  12.    router_id node01  
  13.    vrrp_macst_group4 224.0.100.19  
  14. }  
  15. vrrp_instance http {  
  16.     state MASTER  
  17.     interface enp2s0  
  18.     virtual_router_id 51  
  19.     priority 100  
  20.     advert_int 1  
  21.     authentication {  
  22.         auth_type PASS  
  23.     auth_pass haopython  
  24.     }  
  25.     virtual_ipaddress {  
  26.         192.168.150.70/24 dev enp2s0  
  27.     }  
  28. }  
  29. notify_master "/etc/keepalived/notify.sh master"  
  30. notify_backup "/etc/keepalived/notify.sh backup"  
  31. notify_fault "/etc/keepalived/notify.sh fault"  
  32. }  
  33. [root@node01 keepalived]#

2)備份節點配置檔案:

  1. [root@node02 keepalived]# pwd
  2. /etc/keepalived  
  3. [root@node02 keepalived]# ls
  4. keepalived.conf  notify.sh  
  5. [root@node02 keepalived]# cat keepalived.conf
  6. ! Configuration File for keepalived  
  7. global_defs {  
  8.    notification_email {  
  9.     root@localhost  
  10.    }  
  11.    notification_email_from keepalived@localhost  
  12.    smtp_server 127.0.0.1  
  13.    smtp_connect_timeout 30  
  14.    router_id inode2  
  15.    vrrp_macst_group4 224.0.100.19  
  16. }  
  17. vrrp_instance http {  
  18.     state BACKUP  
  19.     interface enp2s0  
  20.     virtual_router_id 51  
  21.     priority 98  
  22.     advert_int 1  
  23.     authentication {  
  24.         auth_type PASS  
  25.     auth_pass haopython  
  26.     }  
  27.     virtual_ipaddress {  
  28.         192.168.150.70/24 dev enp2s0  
  29.     }  
  30. }  
  31. notify_master "/etc/keepalived/notify.sh master"  
  32. notify_backup "/etc/keepalived/notify.sh backup"  
  33. notify_fault "/etc/keepalived/notify.sh fault"  
  34. }  
  35. [root@node02 keepalived]#

3)編寫通知腳本在主備份伺服器上編寫如下腳本 主備一樣:

  1. [root@node01 keepalived]# cat notify.sh
  2. #!/bin/bash
  3. #
  4. contact='root@localhost'  
  5. notify() {  
  6.  mailsubject="$(hostname) to be $1, vip floating"  
  7.  mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"  
  8.  echo "$mailbody" | mail -s "$mailsubject" $contact  
  9. }  
  10. case $1 in
  11. master)  
  12.  notify master  
  13.  ;;  
  14. backup)  
  15.  notify backup  
  16.  ;;  
  17. fault)  
  18.  notify fault  
  19.  ;;  
  20. *)  
  21.  echo "Usage: $(basename $0) {master|backup|fault}"  
  22.  exit 1  
  23.  ;;  
  24. esac  
  25. [root@node01 keepalived]#

備份節點

  1. [root@node02 keepalived]# cat notify.sh
  2. #!/bin/bash
  3. #
  4. contact='root@localhost'  
  5. notify() {  
  6.  mailsubject="$(hostname) to be $1, vip floating"  
  7.  mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"  
  8.  echo "$mailbody" | mail -s "$mailsubject" $contact  
  9. }  
  10. case $1 in
  11. master)  
  12.  notify master  
  13.  ;;  
  14. backup)  
  15.  notify backup  
  16.  ;;  
  17. fault)  
  18.  notify fault  
  19.  ;;  
  20. *)  
  21.  echo "Usage: $(basename $0) {master|backup|fault}"  
  22.  exit 1  
  23.  ;;  
  24. esac  
  25. [root@node02 keepalived]# pwd
  26. /etc/keepalived  
  27. [root@node02 keepalived]#
4.配置haproxy

Node01和node02兩個節點的配置是一樣的

  1. [root@node01 haproxy]# pwd
  2. /etc/haproxy  
  3. [root@node01 haproxy]# cat haproxy.cfg
  4. #---------------------------------------------------------------------
  5. # Example configuration for a possible web application.  See the
  6. # full configuration options online.
  7. #
  8. #   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
  9. #
  10. #---------------------------------------------------------------------
  11. #---------------------------------------------------------------------
  12. # Global settings
  13. #---------------------------------------------------------------------
  14. global
  15. # to have these messages end up in /var/log/haproxy.log you will
  16. # need to:
  17. #
  18. # 1) configure syslog to accept network log events.  This is done
  19. #    by adding the '-r' option to the SYSLOGD_OPTIONS in
  20. #    /etc/sysconfig/syslog
  21. #
  22. # 2) configure local2 events to go to the /var/log/haproxy.log
  23. #   file. A line like the following can be added to
  24. #   /etc/sysconfig/syslog
  25. #
  26. #    local2.*                       /var/log/haproxy.log
  27. #
  28.     log         127.0.0.1 local2  
  29.     chroot      /var/lib/haproxy  
  30.     pidfile     /etc/haproxy/haproxy.cfg  
  31.     maxconn     4000  
  32. user        haproxy  
  33.     group       haproxy  
  34.     daemon  
  35. # turn on stats unix socket
  36.     stats socket /var/lib/haproxy/stats  
  37. #---------------------------------------------------------------------
  38. # common defaults that all the 'listen' and 'backend' sections will
  39. # use if not designated in their block
  40. #---------------------------------------------------------------------
  41. defaults  
  42. mode                    http  
  43.     log                     global
  44.     option                  httplog  
  45.     option                  dontlognull  
  46.     option http-server-close
  47.     option forwardfor       except 127.0.0.0/8  
  48.     option                  redispatch  
  49.     retries                 3  
  50.     timeout http-request    10s  
  51.     timeout queue           1m  
  52.     timeout connect         10s  
  53.     timeout client          1m  
  54.     timeout server          1m  
  55.     timeout http-keep-alive 10s  
  56.     timeout check           10s  
  57.     maxconn                 3000  
  58. #---------------------------------------------------------------------
  59. # main frontend which proxys to the backends
  60. #---------------------------------------------------------------------
  61. frontend  web *:80  
  62.     acl url_static       path_beg       -i /static /images /javascript /stylesheets  
  63.     acl url_static       path_end       -i .jpg .gif .png .css .js  
  64.     use_backend static          if url_static  
  65.     default_backend             app  
  66. #---------------------------------------------------------------------
  67. # static backend for serving up images, stylesheets and such
  68. #---------------------------------------------------------------------
  69. backend static  
  70.     balance     roundrobin  
  71.     server      static1 192.168.150.73:80 check  
  72.     server      static2 192.168.150.74:80 check  
  73. #---------------------------------------------------------------------
  74. # round robin balancing between the various backends
  75. #---------------------------------------------------------------------
  76. backend app  
  77.     balance     roundrobin  
  78.     server  app1 192.168.150.73:80 check  
  79.     server  app2 192.168.150.74:80 check  
  80. listen stats  
  81.     bind :10086  
  82.     stats   uri     /admin?stats  
  83.     stats   auth    admin:admin  
  84.     stats   admin   if TRUE  
  85. [root@node01 haproxy]#

六.啟動服務

  1. [root@node01 /]# systemctl start haproxy
  2. [root@node01 /]# systemctl start keepalived
  3. [root@node01 /]#
  4. [root@node02 /]# systemctl start haproxy
  5. [root@node02 /]# systemctl start keepalived
  6. [root@node02 /]#

七.測試服務啟動情況

Node01節點:

  1. [root@node01 /]# systemctl start keepalived
  2. [root@node01 /]# systemctl status -l keepalived
  3. ● keepalived.service - LVS and VRRP High Availability Monitor  
  4.    Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)  
  5.    Active: active (running) since 二 2018-05-29 08:49:17 CST; 55min ago  
  6.   Process: 27208 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)  
  7.  Main PID: 27211 (keepalived)  
  8.    CGroup: /system.slice/keepalived.service  
  9.            ├─27211 /usr/sbin/keepalived -D  
  10.            ├─27212 /usr/sbin/keepalived -D  
  11.            └─27213 /usr/sbin/keepalived -D  
  12. 5月 29 08:49:18 node01 Keepalived_vrrp[27213]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  13. 5月 29 08:49:18 node01 Keepalived_vrrp[27213]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  14. 5月 29 08:49:18 node01 Keepalived_vrrp[27213]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  15. 5月 29 08:49:18 node01 Keepalived_vrrp[27213]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  16. 5月 29 08:49:23 node01 Keepalived_vrrp[27213]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  17. 5月 29 08:49:23 node01 Keepalived_vrrp[27213]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on enp2s0 for 192.168.150.70  
  18. 5月 29 08:49:23 node01 Keepalived_vrrp[27213]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  19. 5月 29 08:49:23 node01 Keepalived_vrrp[27213]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  20. 5月 29 08:49:23 node01 Keepalived_vrrp[27213]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  21. 5月 29 08:49:23 node01 Keepalived_vrrp[27213]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  22. [root@node01 /]#

NODE02節點:

  1. [root@node02 /]# systemctl status -l keepalived
  2. ● keepalived.service - LVS and VRRP High Availability Monitor  
  3.    Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)  
  4.    Active: active (running) since 六 2018-05-26 10:26:44 CST; 2 days ago  
  5.   Process: 3143 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)  
  6.  Main PID: 3144 (keepalived)  
  7.    CGroup: /system.slice/keepalived.service  
  8.            ├─3144 /usr/sbin/keepalived -D  
  9.            ├─3145 /usr/sbin/keepalived -D  
  10.            └─3146 /usr/sbin/keepalived -D  
  11. 5月 29 08:48:36 node02 Keepalived_vrrp[3146]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  12. 5月 29 08:48:41 node02 Keepalived_vrrp[3146]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  13. 5月 29 08:48:41 node02 Keepalived_vrrp[3146]: VRRP_Instance(http) Sending/queueing gratuitous ARPs on enp2s0 for 192.168.150.70  
  14. 5月 29 08:48:41 node02 Keepalived_vrrp[3146]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  15. 5月 29 08:48:41 node02 Keepalived_vrrp[3146]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  16. 5月 29 08:48:41 node02 Keepalived_vrrp[3146]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  17. 5月 29 08:48:41 node02 Keepalived_vrrp[3146]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  18. 5月 29 08:49:17 node02 Keepalived_vrrp[3146]: VRRP_Instance(http) Received advert with higher priority 100, ours 98  
  19. 5月 29 08:49:17 node02 Keepalived_vrrp[3146]: VRRP_Instance(http) Entering BACKUP STATE  
  20. 5月 29 08:49:17 node02 Keepalived_vrrp[3146]: VRRP_Instance(http) removing protocol VIPs.  
  21. [root@node02 /]#

NODE01節點:

  1. [root@node01 /]# systemctl status -l haproxy
  2. ● haproxy.service - HAProxy Load Balancer  
  3.    Loaded: loaded (/usr/lib/systemd/system/haproxy.service; disabled; vendor preset: disabled)  
  4.    Active: active (running) since 二 2018-05-29 08:49:08 CST; 58min ago  
  5.  Main PID: 27195 (haproxy-systemd)  
  6.    CGroup: /system.slice/haproxy.service  
  7.            ├─27195 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid  
  8.            ├─27197 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds  
  9.            └─27199 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds  
  10. 5月 29 08:49:08 node01 systemd[1]: Started HAProxy Load Balancer.  
  11. 5月 29 08:49:08 node01 systemd[1]: Starting HAProxy Load Balancer...  
  12. 5月 29 08:49:08 node01 haproxy-systemd-wrapper[27195]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds  
  13. [root@node01 /]#

NODE02節點:

  1. [root@node02 /]# systemctl status -l haproxy
  2. ● haproxy.service - HAProxy Load Balancer  
  3.    Loaded: loaded (/usr/lib/systemd/system/haproxy.service; disabled; vendor preset: disabled)  
  4.    Active: active (running) since 二 2018-05-29 08:46:45 CST; 1h 2min ago  
  5.  Main PID: 8945 (haproxy-systemd)  
  6.    CGroup: /system.slice/haproxy.service  
  7.            ├─8945 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid  
  8.            ├─8946 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds  
  9.            └─8947 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds  
  10. 5月 29 08:46:45 node02 systemd[1]: Started HAProxy Load Balancer.  
  11. 5月 29 08:46:45 node02 systemd[1]: Starting HAProxy Load Balancer...  
  12. 5月 29 08:46:45 node02 haproxy-systemd-wrapper[8945]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds  
  13. [root@node02 /]#

下面停掉NODE01節點,然後在NODE02上檢視NODE02的狀态變化

  1. [root@node01 /]# systemctl stop haproxy
  2. [root@node01 /]# systemctl stop keepalived
  3. [root@node01 /]#
  4. [root@node02 /]# systemctl status -l keepalived
  5. ● keepalived.service - LVS and VRRP High Availability Monitor  
  6.    Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)  
  7.    Active: active (running) since 六 2018-05-26 10:26:44 CST; 2 days ago  
  8.   Process: 3143 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)  
  9.  Main PID: 3144 (keepalived)  
  10.    CGroup: /system.slice/keepalived.service  
  11.            ├─3144 /usr/sbin/keepalived -D  
  12.            ├─3145 /usr/sbin/keepalived -D  
  13.            └─3146 /usr/sbin/keepalived -D  
  14. 5月 29 10:00:52 node02 Keepalived_vrrp[3146]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  15. 5月 29 10:00:52 node02 Keepalived_vrrp[3146]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  16. 5月 29 10:00:52 node02 Keepalived_vrrp[3146]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  17. 5月 29 10:00:52 node02 Keepalived_vrrp[3146]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  18. 5月 29 10:00:57 node02 Keepalived_vrrp[3146]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  19. 5月 29 10:00:57 node02 Keepalived_vrrp[3146]: VRRP_Instance(http) Sending/queueing gratuitous ARPs on enp2s0 for 192.168.150.70  
  20. 5月 29 10:00:57 node02 Keepalived_vrrp[3146]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  21. 5月 29 10:00:57 node02 Keepalived_vrrp[3146]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  22. 5月 29 10:00:57 node02 Keepalived_vrrp[3146]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  23. 5月 29 10:00:57 node02 Keepalived_vrrp[3146]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  24. [root@node02 /]# 
  25. [root@node02 /]# 
  26. [root@node02 /]# systemctl status -l haproxy
  27. ● haproxy.service - HAProxy Load Balancer  
  28.    Loaded: loaded (/usr/lib/systemd/system/haproxy.service; disabled; vendor preset: disabled)  
  29.    Active: active (running) since 二 2018-05-29 08:46:45 CST; 1h 14min ago  
  30.  Main PID: 8945 (haproxy-systemd)  
  31.    CGroup: /system.slice/haproxy.service  
  32.            ├─8945 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid  
  33.            ├─8946 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds  
  34.            └─8947 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds  
  35. 5月 29 08:46:45 node02 systemd[1]: Started HAProxy Load Balancer.  
  36. 5月 29 08:46:45 node02 systemd[1]: Starting HAProxy Load Balancer...  
  37. 5月 29 08:46:45 node02 haproxy-systemd-wrapper[8945]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds  
  38. [root@node02 /]#

Node01節點:

  1. [root@node01 /]# systemctl status -l keepalived
  2. ● keepalived.service - LVS and VRRP High Availability Monitor  
  3.    Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)  
  4.    Active: inactive (dead)  
  5. 5月 29 08:49:23 node01 Keepalived_vrrp[27213]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  6. 5月 29 08:49:23 node01 Keepalived_vrrp[27213]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  7. 5月 29 08:49:23 node01 Keepalived_vrrp[27213]: Sending gratuitous ARP on enp2s0 for 192.168.150.70  
  8. 5月 29 10:00:51 node01 Keepalived[27211]: Stopping  
  9. 5月 29 10:00:51 node01 systemd[1]: Stopping LVS and VRRP High Availability Monitor...  
  10. 5月 29 10:00:51 node01 Keepalived_vrrp[27213]: VRRP_Instance(VI_1) sent 0 priority  
  11. 5月 29 10:00:51 node01 Keepalived_vrrp[27213]: VRRP_Instance(VI_1) removing protocol VIPs.  
  12. 5月 29 10:00:52 node01 Keepalived_vrrp[27213]: Stopped  
  13. 5月 29 10:00:52 node01 Keepalived[27211]: Stopped Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2  
  14. 5月 29 10:00:52 node01 systemd[1]: Stopped LVS and VRRP High Availability Monitor.  
  15. [root@node01 /]#

八.在浏覽器中檢視和修改haproxy的相關參數

HAProxy+Keepalived高可用負載均衡web服務搭建
HAProxy+Keepalived高可用負載均衡web服務搭建