005.HAProxy+Keepalived高可用負載均衡

来源:https://www.cnblogs.com/itzgr/archive/2018/12/23/10163677.html
-Advertisement-
Play Games

一 基礎準備 1.1 部署環境及說明 系統OS:CentOS 6.8 64位 HAProxy軟體:HA-Proxy version 1.5.18 Keepalived軟體:keepalived-1.3.6.tar.gz 官方鏈接:http://www.haproxy.org/ (國內可能無法打開) ...


一 基礎準備

1.1 部署環境及說明

系統OS:CentOS 6.8 64位 HAProxy軟體:HA-Proxy version 1.5.18 Keepalived軟體:keepalived-1.3.6.tar.gz 官方鏈接:http://www.haproxy.org/ (國內可能無法打開) 下載連接:http://pkgs.fedoraproject.org/repo/pkgs/haproxy/ 部署說明:當用戶訪問對應的功能變數名稱時,HAProxy能將請求發送到對應的後端主機上,同時當主HAProxy伺服器發生故障後,能立刻將負載均衡服務切換到備用HAProxy伺服器上。
主機名 主機IP地址 集群角色 虛機IP/功能變數名稱
master 172.24.8.10 主HAProxy伺服器 172.24.8.100
backup 172.24.8.11 備HAProxy伺服器
webapp1 172.24.8.30 後端web伺服器 www.lz.com
webapp2 172.24.8.31 static.lz.com
webapp3 172.24.8.32 video.lz.com

1.2 架構規劃

002

二 後端httpd集群部署

2.1 部署httpd集群

  1 [root@webapp1 ~]# yum -y install httpd
  2 [root@webapp1 ~]# vi /var/www/html/index.html
  3 This is my www.lz.com!
  4 [root@webapp1 ~]# vi /var/www/html/index.html
  5 This is my static.lz.com!
  6 [root@webapp1 ~]# vi /var/www/html/index.html
  7 This is my video.lz.com!
  8 [root@webapp1 ~]# systemctl start httpd.service
  9 [root@webapp1 ~]# systemctl enable httpd.service
 10 [root@webapp1 ~]# systemctl stop firewalld.service
 11 [root@webapp1 ~]# systemctl disable firewalld.service
 12 [root@webapp1 ~]# vi /etc/selinux/config
 13 SELINUX=disabled
 14 [root@webapp1 ~]# setenforce 0			#關閉SELinux及防火牆
  註意:後端real server節點都需要安裝,本環境針對httpd簡單安裝即可,無需過多配置。

三 基礎NTP部署

3.1 NTP部署

  1 [root@webapp1 ~]# yum -y install ntp
  2 [root@webapp1 ~]# systemctl start  ntpd.service
  建議:替換附件中的ntp配置文件,建議採用阿裡雲時鐘進行同步。 註意:為了保證集群的穩定性,強烈建議在所有節點均部署NTP同步服務,保證所有時鐘一致。

四 Keepalived部署

4.1 編譯環境

安裝基礎環境及依賴:
  1 # yum -y install gcc gcc-c++ make kernel-devel kernel-tools kernel-tools-libs kernel libnl libnl-devel libnfnetlink-devel openssl-devel wget openssh-clients

4.2 安裝Keepalived

  1 [root@haproxy_master ~]# wget http://www.keepalived.org/software/keepalived-1.3.6.tar.gz
  2 [root@haproxy_master ~]# tar -zxvf keepalived-1.3.6.tar.gz
  3 [root@haproxy_master ~]# cd keepalived-1.3.6/
  4 [root@lvsmaster keepalived-1.3.6]# ./configure --prefix=/usr/local/keepalived
  5 [root@haproxy_master keepalived-1.3.6]# make && make install
  註意:CentOS6.8安裝高於1.3.6版本會出現未知錯誤。

4.3 添加Keepalived啟動相關服務

  1 [root@haproxy_master ~]# mkdir /etc/keepalived
  2 [root@haproxy_master ~]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
  3 [root@haproxy_master ~]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  4 [root@haproxy_master ~]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
  5 [root@haproxy_master ~]# vi /etc/init.d/keepalived	#創建Keepalived啟動腳本,見附件
  6 [root@haproxy_master ~]# chmod u+x /etc/rc.d/init.d/keepalived
 

4.4 配置Keepalived

  1 [root@haproxy_master ~]# vi /etc/keepalived/keepalived.conf
  2 global_defs {
  3    notification_email {
  4 #……
  5    }
  6    notification_email_from [email protected]
  7    smtp_server 192.168.200.1
  8    smtp_connect_timeout 30
  9    router_id LVS_DEVEL
 10 }
 11 
 12 vrrp_script check_haproxy {
 13     script "/usr/bin/killall -0 haproxy"
 14     interval    2
 15     weight      21
 16     }
 17 
 18 vrrp_instance HAProxy_HA {
 19     state BACKUP			#在HAProxy主備均設置為BACKUP
 20     interface eth0
 21     virtual_router_id 80
 22     priority 100
 23     advert_int 2
 24     nopreempt				#不搶占模式
 25     authentication {
 26         auth_type PASS
 27         auth_pass 1111
 28     }
 29 
 30     notify_master "/etc/keepalived/master.sh"
 31     notify_backup "/etc/keepalived/backup.sh"
 32     notify_fault "/etc/keepalived/fault.sh"
 33 
 34     track_script {
 35     check_haproxy
 36     }
 37 
 38     virtual_ipaddress {
 39         172.24.8.100 dev eth0
 40     }
 41 }
 

4.5 編寫Keepalived腳本

  1 [root@haproxy_master ~]# vi /etc/keepalived/master.sh
  2 #!/bin/bash
  3 LOGFILE=/var/log/keepalived-mysql-state/log
  4 date >>$LOGFILE
  5 echo "[Master]" >>$LOGFILE
  6 [root@haproxy_master ~]# vi /etc/keepalived/backup.sh
  7 #!/bin/bash
  8 LOGFILE=/var/log/keepalived-mysql-state/log
  9 date >>$LOGFILE
 10 echo "[BACKUP]" >>$LOGFILE
 11 [root@haproxy_master ~]# vi /etc/keepalived/fault.sh
 12 #!/bin/bash
 13 LOGFILE=/var/log/keepalived-mysql-state/log
 14 date >>$LOGFILE
 15 echo "[FAULT]" >>$LOGFILE
 16 [root@haproxy_master ~]# chmod u+x /etc/keepalived/backup.sh
 17 [root@haproxy_master ~]# chmod u+x /etc/keepalived/master.sh
 18 [root@haproxy_master ~]# chmod u+x /etc/keepalived/fault.sh
  提示:本環境採用測試腳本,真實環境建議採用自動發送郵件通知運維員的腳本。

4.5 Bakcup節點配置

  1 [root@haproxy_master ~]# scp /etc/keepalived/keepalived.conf 172.24.8.11:/etc/keepalived/keepalived.conf    #將配置好的Master節點的配置文件複製到Backup節點
  2 [root@haproxy_slave ~]# vi /etc/keepalived/keepalived.conf
  3 state BACKUP
  4 priority 80
  註意:在HAProxy備節點也設置為BACKUP,priority修改為低於HAProxy主角色的優先順序即可,同時去掉nopreempt。
  1 [root@haproxy_master ~]# scp /etc/keepalived/*.sh 172.24.8.11:/etc/keepalived/
  2 #將對應的腳本也複製至backup節點。
 

五 HAProxy部署

5.1 HAProxy安裝

  1 [root@haproxy_master ~]# yum -y install haproxy
提示:需要在主備HAProxy節點都安裝。

5.2 HAProxy配置

  1 [root@haproxy_master ~]# vi /etc/haproxy/haproxy.cfg
  2 global
  3     log         127.0.0.1 local0 info
  4     chroot      /var/lib/haproxy
  5     pidfile     /var/run/haproxy.pid
  6     maxconn     4096
  7     user        haproxy
  8     group       haproxy
  9     daemon
 10     nbproc      1
 11 defaults
 12     mode                    http
 13     log                     global
 14     retries                 3
 15     timeout connect         5s
 16     timeout client          30s
 17     timeout server          30s
 18     timeout check           2s
 19 frontend        www
 20     bind        172.24.8.100:80
 21     mode        http
 22     option      httplog
 23     option      forwardfor
 24     log         global
 25 
 26     acl host_www        hdr_dom(host)   -i  www.lz.com	#配置不同功能變數名稱分發不同後端策略
 27     acl host_static     hdr_dom(host)   -i  static.lz.com
 28     acl host_video      hdr_dom(host)   -i  video.lz.com
 29 
 30     use_backend     server_www      if      host_www	#配置不同功能變數名稱分發不同後端策略
 31     use_backend     server_static   if      host_static
 32     use_backend     server_video    if      host_video
 33 backend         server_www		#後端真是伺服器
 34     mode        http
 35     option      redispatch
 36     option      abortonclose
 37     balance     roundrobin
 38     option      httpchk GET /index.html
 39     server      webapp1 172.24.8.30:80  weight 6 check inter 2000 rise 2 fall 3
 40 backend         server_static		#後端真是伺服器
 41     mode        http
 42     option      redispatch
 43     option      abortonclose
 44     balance     roundrobin
 45     option      httpchk GET /index.html
 46     server      webapp2 172.24.8.31:80  weight 6 check inter 2000 rise 2 fall 3
 47 backend         server_video		#後端真是伺服器
 48     mode        http
 49     option      redispatch
 50     option      abortonclose
 51     balance     roundrobin
 52     option      httpchk GET /index.html
 53     server      webapp3 172.24.8.32:80  weight 6 check inter 2000 rise 2 fall 3
 54 [root@haproxy_master ~]# scp /etc/haproxy/haproxy.cfg [email protected]:/etc/haproxy/haproxy.cfg		#將配置文件複製至HAProxy備節點
 

5.3 打開轉發

  1 [root@haproxy_master ~]# vi /etc/sysctl.conf
  2 net.ipv4.ip_nonlocal_bind = 1
  3 [root@haproxy_master ~]# sysctl -p
  註意:綁定非本機的IP必須在sysctl.conf文件中配置。

六 啟動服務

  1 [root@webapp1 ~]# systemctl start httpd
提示:三個節點的httpd服務均啟動。
  1 [root@haproxy_master ~]# service haproxy start
提示:必須先啟動HAProxy服務,之後啟動Keepalived,因為Keepalived會先檢測HAProxy服務進程。
  1 [root@haproxy_master ~]# service keepalived start

七 驗證測試

7.1 高可用驗證

  1 [root@haproxy_master ~]# ip add
003
  1 [root@haproxy_master ~]# service haproxy stop		#停止HAProxy主節點的HAProxy進程
  2 [root@haproxy_master ~]# tail -f /var/log/messages	#觀察HAProxy主節點日誌
  004
  1 [root@haproxy_slave ~]# ip addr				#查看備HAProxy節點的IP
005 結論:通過測試可知當主HAProxy節點服務異常,Keepalived會檢測到,同時HAProxy會將vip從主節點移除,備HAProxy會接管。
  1 [root@haproxy_master ~]# service haproxy start
006 結論:由於配置了非搶占模式,主HAProxy恢復進程之後,依舊由備HAProxy提供服務,vip不會切回至主HAProxy。

7.2 負載均衡測試

主機hosts中添加如下解析:
  1 172.24.8.100	www.lz.com
  2 172.24.8.100	static.lz.com
  3 172.24.8.100	video.lz.com
  瀏覽器分別訪問不用的三個功能變數名稱: 007008009        
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 結果顯示如圖: 要點: 多項式函數:polyld(),詳解見圖書p96頁 ...
  • 詳細講解SpringBoot利用註解創建靜態定時任務,利用介面創建動態定時任務,利用@EnableAsync和@Async創建多線程定時任務 ...
  • 質數,質因數 應該都瞭解,在這裡不過多解釋,直接上代碼: ...
  • 關於IdentityServer4與ocelot博客園裡已經有很多介紹我這裡就不再重覆了。 ocelot與IdentityServer4組合認證博客園裡也有很多,但大多使用ocelot內置的認證,而且大多都是用來認證API的,查找了很多資料也沒看到如何認證oidc,所以這裡的ocelot實際只是作為 ...
  • 代理認證 proxy代理服務被廣泛的使用,為了安全起見,可以在伺服器上增加一層安全認證機制。這裡使用htpasswd建立認證賬號和密碼 1、創建認證賬號和密碼 [root@localhost wj]# htpasswd -c /etc/squid/passwd david New password: ...
  • 一 Keepalived 定義 Keepalived 是一個基於VRRP協議來實現的LVS服務高可用方案,可以解決靜態路由出現的單點故障問題。一個LVS服務會有2台伺服器運行Keepalived,一臺為主伺服器(MASTER),一臺為備份伺服器(BACKUP),但是對外表現為一個虛擬IP,主伺服器會 ...
  • Cygwin配置總結 Cygwin是 大量GNU和開放源碼工具的集合,它們提供了類似於Windows上的Linux發行版的功能 DLL(cygwin1.dll),它提供了大量的POSIX API功能。 Cygwin不是 一種在Windows上運行本地Linux應用程式的方法。如果希望應用程式在Win ...
  • rsync詳細參數 1、-v,--verbose 詳細模式輸出,傳輸是的進度信息 2、-z,--compress 傳輸是進行壓縮以提高傳輸效率,--comperess -level = NUM可以按級別壓縮 3、-a,--archive 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性(等於-r ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...