1. 程式人生 > >neutron之負載均衡LBaas

neutron之負載均衡LBaas

一、LBaaS 邏輯架構
這裡寫圖片描述

1、VIP

VIP(Virturl IP address)就是負載均衡對外提供服務的地址。VIP 有自己的 IP 地址,而且一般都能通過公網進行訪問。在 Neutron 中,VIP 對應著二層虛擬裝置 br-int 上的一個 port。當負載均衡 Pool 裡面至少有一個 member 時,VIP 才有存在的意義,因為這時至少有一個實際的 OpenStack 例項在處理網路請求。VIP 負責將網路流量分發到各個 member,Neutron LBaaS 中支援以下三種網路流量的分發方式。

● Round robin:在多個例項之間均勻地分發請求。

● Least connections:分配到例項的請求,以最後活躍的連線數為準。

有的 member 連線數一樣,則遵循 Round robin 的方式。
Neutron 中,VIP 還支援設定最大連線數(connection-limit),這樣在網路流量大時,可以保護負載均衡池。最大連線數可以設定成-1,這時不限制連線數。

2、Pool
Pool 是 LBaaS V1 中的 root resource。所有的其他資源都是基於 pool 來建立的。Neutron LBaaS 預設以 HAProxy 為 Driver 實現。在預設情況下,一個 pool 對應著一個獨立的 HAProxy 程序,一個獨立的 namespace。目前一個 pool 只能有一個 VIP,在 LBaaS V2 裡面,可以允許一個 pool 對應多個 VIP。

3、Member
Member 對應的是 pool 裡面處理網路請求的 OpenStack 例項。在 OpenStack Neutron 中,member 是一個邏輯關係,表示著例項與 pool 的對應關係。這也就是說,一個 OpenStack 例項,可以對應不同的 pool,在 Neutron 的 LBaaS 裡面建立多個 member。在建立 member 時所選擇的例項,必須與 pool 處於同一個 subnet,否則將不能工作。

4、Health monitor(健康監控)
Health monitor 只有在關聯 pool 時才有意義。它用來監測 pool 裡面 member 的狀態。它會以輪詢的方式,去查詢各個 member,如果 member 未作出響應,它會更新 member 的狀態至 INACTIVE,這樣在 VIP 分發網路請求時,就不會考慮這個 member 了。如果 member 恢復了響應,它會更新 member 的狀態至 ACTIVE。這時,member 會重新出現在 VIP 的分發列表中。

與其他的概念不同,Health monitor 在 Neutron 的負載均衡中不是必須的。也就是說,沒有 Health monitor,也能組成一個負載均衡池。但是,如果沒有 Health monitor,pool 會一直認為所有的 member 都是 ACTIVE 狀態,這樣所有的 member 會一直出現在 VIP 的分發列表中,哪怕 member 對應的例項不能響應網路請求。這在實際應用中會造成負載均衡的響應異常。

二、Neutron Load Balance 的實現

Neutron LBaaS 是基於 Neutron 實現的,pythone-neutronclient 中包含了 LBaaS 相關的命令,LBaaS 的資料也是儲存在 Neutron 的資料庫中。LBaaS 的程式架構也遵循著 Neutron 對 service plugin 的要求。

這裡寫圖片描述

從圖中可以看出,程式碼主要由三部分組成:
● Extension:負責處理 REST API 請求,並將 REST API 請求轉發到 Plugin。
● Plugin:處理核心邏輯,管理 DB 的讀寫。
● Agent:處理並響應由 Plugin 發來的請求,管理 Driver。前面說過,OpenStack Neutron 預設採用 HAProxy 作為 driver。

三、安裝部署
1、安裝軟體:

# yum install centos-release-openstack-mitaka
# yum install *neutron-lbaas-agent haproxy -y

2、在 /etc/neutron/neutron.conf檔案中使用service_provider 屬性,來啟用HAProxy 外掛:

 service_provider = LOADBALANCER:Haproxy:neutron_lbaas.services.loadbalancer.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default

注意:
在基於紅帽的系統下,service_provider屬性在/usr/share/neutron/neutron-dist.conf檔案中已經定義好了。不要再在neutron.conf中定義了,否則網路服務會重啟失敗,
紅帽系列配置方法,在/etc/neutron/neutron_lbaas.conf檔案[service_providers]中加入

service_provider = LOADBALANCER:Haproxy:neutron_lbaas.services.loadbalancer.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default

3、在/etc/neutron/neutron.conf檔案DEFAULT中通過使用 service_plugins屬性來啟用負載均衡外掛:

service_plugins = lbaas

如果此屬性已經定義過了,將lbaas新增到列表,使用逗號分隔。例如:

service_plugins = router,lbaas

4、在/etc/neutron/lbaas_agent.ini檔案DEFAULT中啟用HAProxy負載均衡器:

device_driver = neutron_lbaas.services.loadbalancer.drivers.haproxy.namespace_driver.HaproxyNSDriver

5、在檔案/etc/neutron/lbaas_agent.ini中[DEFAULT]選擇所需要的驅動:
啟用Open vSwitch 負載均衡即服務驅動:

interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver

或者,啟用Linux網橋負載均衡即服務驅動:

interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver

配置haproxy

[haproxy]
user_group = haproxy

6、在資料庫中建立所要求的表:

# neutron-db-manage --service lbaas upgrade head

7、重啟neutron-server 和 neutron-lbaas-agent服務以使設定生效。

# systemctl restart  neutron-serve   neutron-lbaas-agent
# systemctl enable neutron-serve   neutron-lbaas-agent

8、在面板的專案 選項卡下啟用負載均衡。
在local_settings檔案中修改enable_lb 的屬性為True (
Fedora, RHEL,和 CentOS: /etc/openstack-dashboard/local_settings,
Ubuntu 和 Debian: /etc/openstack-dashboard/local_settings.py,
openSUSE 和 SLES: /srv/www/openstack-dashboard/openstack_dashboard/local/local_settings.py):

OPENSTACK_NEUTRON_NETWORK = {
    'enable_lb': True,
    ...
}

重啟web伺服器以使設定生效。此時可以在圖形面板中的專案中看到負載均衡器的管理項了。

四、實踐
1、建立另個虛擬機器,由於本次在虛擬機器上操作,資源有限,只通過ssh驗證
這裡寫圖片描述
2、建立資源池
這裡寫圖片描述

這裡寫圖片描述
3、將倆虛擬機器加入成員中
這裡寫圖片描述

4、新增監控
這裡寫圖片描述

成功後:
這裡寫圖片描述

5、分別新增vip和關聯監控
這裡寫圖片描述
成功後:
這裡寫圖片描述

測試:
第一次ssh浮動IP
這裡寫圖片描述

第二次ssh浮動IP
這裡寫圖片描述

登入後臺發現,neutron將配置檔案寫在 /var/lib/neutron/lbaas/
haproxy配置檔案
這裡寫圖片描述
程序ID
這裡寫圖片描述