案例研究:Healthcheck

wongchaofan發表於2024-06-29

作為示例,我們可以介紹以下 LVS 拓撲:

首先,您需要一個配置良好的 LVS 拓撲。在本文件的其餘部分,我們將假設已完成所有系統配置。這種拓撲通常在 DMZ 架構中實現。有關 LVS NAT 拓撲和系統配置的更多資訊,請閱讀 Joseph Mack LVS HOWTO。

主要架構元件

  • LVS 路由器:擁有負載平衡 IP 類路由(192.168.100.0/24)。
  • 網路路由器 :整個內部網路的預設路由器。所有 LAN 工作站都透過此 IP 地址進行處理。
  • 網路DNS伺服器:參考內網IP拓撲。
  • SMTP 伺服器:接收郵件提醒的 SMTP 伺服器。
  • 伺服器池:託管負載平衡服務的伺服器集合。

伺服器池規格

在此示例配置中,我們有 2 個伺服器池:

  • 伺服器池 1:託管 HTTP 和 SSL 服務。每臺伺服器擁有兩臺應用伺服器(IBM WEBSPHERE 和 BEA WEBLOGIC)
  • 伺服器池 2:託管 SMTP 服務。

Keepalived 配置

現在,您可以根據 LVS 拓撲配置 Keepalived 守護程式。整個配置在 /etc/keepalived/keepalived.conf 檔案中完成。在我們的案例研究中,此檔案如下所示:

# Configuration File for keepalived
global_defs {
    notification_email {
        admin@domain.com
        0633225522@domain.com
    }
    notification_email_from keepalived@domain.com
    smtp_server 192.168.200.20
    smtp_connect_timeout 30
    lvs_id LVS_MAIN
}
virtual_server 192.168.200.15 80 {
    delay_loop 30
    lb_algo wrr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    sorry_server 192.168.100.100 80

    real_server 192.168.100.2 80 {
        weight 2
        HTTP_GET {
            url {
                path /testurl/test.jsp
                digest ec90a42b99ea9a2f5ecbe213ac9eba03
            }
            url {
                path /testurl2/test.jsp
                digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            retry 3
            delay_before_retry 2
        }
    }
    real_server 192.168.100.3 80 {
        weight 1
        HTTP_GET {
            url {
                path /testurl/test.jsp
                digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            retry 3
            delay_before_retry 2
        }
    }
}
virtual_server 192.168.200.15 443 {
    delay_loop 20
    lb_algo rr
    lb_kind NAT
    persistence_timeout 360
    protocol TCP
    real_server 192.168.100.2 443 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
        }
    }
    real_server 192.168.100.3 443 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
        }
    }
}
virtual_server 192.168.200.15 25 {
    delay_loop 15
    lb_algo wlc
    lb_kind NAT
    persistence_timeout 50
    protocol TCP
    real_server 192.168.100.4 25 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
        }
    }
    real_server 192.168.100.5 25 {
        weight 2
        TCP_CHECK {
            connect_timeout 3
        }
    }
}

根據此配置示例,Keepalived守護程序將使用以下資訊驅動核心:

  • LVS 伺服器將擁有名稱:LVS_MAIN

通知:

  • SMTP 伺服器為:192.168.200.20
  • SMTP 連線超時設定為:30 秒
  • 通知電子郵件傳送admin@domain.com & 0633225522@domain.com
  • 負載平衡服務:

    • HTTP: VIP 192.168.200.15 埠 80

      • 負載平衡:使用加權輪詢排程程式和 NAT 轉發。每個 TCP 服務的連線永續性設定為 50 秒。如果您使用的是 Linux 核心 2.2,則需要指定 NAT 網路掩碼來定義 IPFW 偽裝粒度(nat_mask 關鍵字)。延遲迴圈設定為 30 秒
      • 抱歉伺服器:如果所有真實伺服器都從 VS 的伺服器池中刪除,我們會新增抱歉伺服器 192.168.100.100 埠 80 來滿足客戶端請求。
      • 真實伺服器 192.168.100.2 埠 80 的權重將為 2。故障檢測將基於 2 個 URL 上的 HTTP_GET。服務連線超時將設定為 3 秒。真實伺服器在重試 3 次後將被視為已關閉。守護程序將等待 2 秒後再重試。
      • 真實伺服器 192.168.100.3 埠 80 的權重將為 1。故障檢測將基於 1 個 URL 上的 HTTP_GET。服務連線超時將設定為 3 秒。真實伺服器在重試 3 次後將被視為已關閉。守護程序將等待 2 秒後再重試。
    • SSL: VIP 192.168.200.15 埠 443

      • 負載平衡:使用帶 NAT 轉發的 Round Robin 排程程式。每個 TCP 服務上的連線永續性設定為 360 秒。延遲迴圈設定為 20 秒
      • 真實伺服器 192.168.100.2 埠 443 的權重將為 2。故障檢測將基於 TCP_CHECK。3 秒連線超時後,真實伺服器將被視為已關閉。
      • 真實伺服器 192.168.100.3 埠 443 的權重將為 2。故障檢測將基於 TCP_CHECK。3 秒連線超時後,真實伺服器將被視為已關閉。
    • SMTP:VIP 192.168.200.15 埠 25

      • 負載平衡:在 NAT 拓撲中使用加權最小連線排程演算法,連線永續性設定為 50 秒。延遲迴圈設定為 15 秒
      • 真實伺服器 192.168.100.4 埠 25 的權重將為 1。故障檢測將基於 TCP_CHECK。3 秒連線超時後,真實伺服器將被視為已關閉。
      • 真實伺服器 192.168.100.5 埠 25 的權重將為 2。故障檢測將基於 TCP_CHECK。3 秒連線超時後,真實伺服器將被視為已關閉。

對於 SSL 伺服器健康檢查,我們可以使用 SSL_GET 檢查器。相應真實伺服器的配置塊將如下所示:

virtual_server 192.168.200.15 443 {
    delay_loop 20
    lb_algo rr
    lb_kind NAT
    persistence_timeout 360
    protocol TCP
    real_server 192.168.100.2 443 {
        weight 1
        SSL_GET
        {
            url {
                path /testurl/test.jsp
                digest ec90a42b99ea9a2f5ecbe213ac9eba03
            }
            url {
                path /testurl2/test.jsp
                digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            retry 3
            delay_before_retry 2
        }
    }
    real_server 192.168.100.3 443 {
        weight 1
        SSL_GET
        {
            url {
                path /testurl/test.jsp
                digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            retry 3
            delay_before_retry 2
        }
    }
}

要透過 URL 生成總和,只需按以下步驟操作:

[root@lvs /root]# genhash –s 192.168.100.2 –p 80 –u /testurl/test.jsp
--------------------------[ HTTP Header Buffer ]--------------------------
0000 48 54 54 50 2f 31 2e 31 - 20 34 30 31 20 55 6e 61 HTTP/1.1 401 Una
0010 75 74 68 6f 72 69 7a 65 - 64 0d 0a 44 61 74 65 3a uthorized..Date:
0020 20 4d 6f 6e 2c 20 32 33 - 20 41 70 72 20 32 30 30 Mon, 23 Apr 200
0030 31 20 31 35 3a 34 31 3a - 35 34 20 47 4d 54 0d 0a 1 15:41:54 GMT..
0040 41 6c 6c 6f 77 3a 20 47 - 45 54 2c 20 48 45 41 44 Allow: GET, HEAD
0050 0d 0a 53 65 72 76 65 72 - 3a 20 4f 72 61 63 6c 65 ..Server: Oracle
0060 5f 57 65 62 5f 4c 69 73 - 74 65 6e 65 72 2f 34 2e _Web_Listener/4.
0070 30 2e 38 2e 31 2e 30 45 - 6e 74 65 72 70 72 69 73 0.8.1.0Enterpris
0080 65 45 64 69 74 69 6f 6e - 0d 0a 43 6f 6e 74 65 6e eEdition..Conten
0090 74 2d 54 79 70 65 3a 20 - 74 65 78 74 2f 68 74 6d t-Type: text/htm
00a0 6c 0d 0a 43 6f 6e 74 65 - 6e 74 2d 4c 65 6e 67 74 l..Content-Lengt
00b0 68 3a 20 31 36 34 0d 0a - 57 57 57 2d 41 75 74 68 h: 164..WWW-Auth
00c0 65 6e 74 69 63 61 74 65 - 3a 20 42 61 73 69 63 20 enticate: Basic
00d0 72 65 61 6c 6d 3d 22 41 - 43 43 45 53 20 20 20 20 realm="ACCES
00e0 22 0d 0a 43 61 63 68 65 - 2d 43 6f 6e 74 72 6f 6c "..Cache-Control
00f0 3a 20 70 75 62 6c 69 63 - 0d 0a 0d 0a : public....
------------------------------[ HTML Buffer ]-----------------------------
0000 3c 48 54 4d 4c 3e 3c 48 - 45 41 44 3e 3c 54 49 54 <HTML><HEAD><TIT
0010 4c 45 3e 55 6e 61 75 74 - 68 6f 72 69 7a 65 64 3c LE>Unauthorized<
0020 2f 54 49 54 4c 45 3e 3c - 2f 48 45 41 44 3e 0d 0a /TITLE></HEAD>..
0030 3c 42 4f 44 59 3e 54 68 - 69 73 20 64 6f 63 75 6d <BODY>This docum
0040 65 6e 74 20 69 73 20 70 - 72 6f 74 65 63 74 65 64 ent is protected
0050 2e 20 20 59 6f 75 20 6d - 75 73 74 20 73 65 6e 64 . You must send
0060 0d 0a 74 68 65 20 70 72 - 6f 70 65 72 20 61 75 74 ..the proper aut
0070 68 6f 72 69 7a 61 74 69 - 6f 6e 20 69 6e 66 6f 72 horization infor
0080 6d 61 74 69 6f 6e 20 74 - 6f 20 61 63 63 65 73 73 mation to access
0090 20 69 74 2e 3c 2f 42 4f - 44 59 3e 3c 2f 48 54 4d it.</BODY></HTM
00a0 4c 3e 0d 0a - L>..
-----------------------[ HTML MD5 final resulting ]-----------------------
MD5 Digest : ec90a42b99ea9a2f5ecbe213ac9eba03

唯一要做的就是複製生成的 MD5 摘要值並將其貼上到您的 Keepalived 配置檔案中作為摘要值關鍵字。

相關文章