在OpenStack Grizzly版本中,Quantum組件引入了一個新的網絡服務:LoadBalancer(LBaaS),服務的架構遵從Service Insertion框架。LoadBalancer為租戶提供到一組虛擬機的流量的負載均衡,其基本實現為:在neutron-lbaas-agent中生成Haproxy的配置文件然后啟動Haproxy。
Neutron LBaaS Service Architecture
LBaaS主要由以下幾個模塊構成,如下圖所示
- Loadbalancer 處理Restful API
- LoadBalancerPlugin,This class manages the workflow of LBaaS request/response. Most DB related works are implemented in class loadbalancer_db.LoadBalancerPluginDb
- Scheduler: loadbalancer_pool_scheduler_driver = neutron.services.loadbalancer.agent_scheduler.ChanceScheduler 負責為vip分配相應的agent
- lbaas-agent 接收plugin消息,並將請求轉發給device_driver(HaproxyNSDriver)執行
- HaproxyNSDriver 實現負載均衡的device driver,生成Haproxy的配置文件然后啟動Haproxy
LBaaS數據模型
如上圖所示,數據模型主要由Pool,VIP,Member,HealthMonitor等四個對象組成。
- 處在核心位置的是Pool(我傾向於把它命名成loadballancer), 它代表一個負載均衡器。
- 一個負載均衡器擁有一個VIP,也就是虛擬IP。虛擬IP中的虛擬其實是相對后面的Member而言,也就是說這個VIP不固定在任何一個Member上。用戶訪問這個VIP,有時由這個成員提供服務,有時由那個成員提供服務。
- Member是后台提供服務的服務器。
- HealthMonitor用來監控和檢查后台服務器的聯通情況。當檢查到某個服務器不能使用時,負載均衡器就不會用它來向用戶提供服務。一個pool可對應多個health monitor。有四種類型:PING、TCP、HTTP、HTTPS。每種類型就是使用相應的協議對member進行檢測。
除了以上四個對象,Session Persistence和Connection Limits這兩個特性也比較重要:
- Session Persistence規定session相同的連接或請求轉發的行為。目前支持三種類型:
-
- SOURCE_IP:指從同一個IP發來的連接請求被某個member接收處理;
- HTTP_COOKIE:該模式下,loadbalancer為客戶端的第一次連接生成cookie,后續攜帶該cookie的請求會被某個member處理
- APP_COOKIE:該模式下,依靠后端應用服務器生成的cookie決定被某個member處理
- Connection Limits 這個特性主要用來抵御DDoS攻擊
LBaaS部署方法
1. DevStack中,增加 ENABLED_SERVICES+=,q-lbaas 選項即可;
2. RDO部署: packstack --allinone --neutron-lbaas-hosts=192.168.1.10 (具體步驟參考:http://openstack.redhat.com/LBaaS)
3. 也可以使用Openstack Heat來部署LBaaS,具體見http://blog.csdn.net/lin_victor/article/details/23060467
For LBaaS to be configured properly, various configuration files must have the following changes. The service_provider parameter should be set in /usr/share/neutron/neutron-dist.conf: service_provider = LOADBALANCER:Haproxy:neutron.services.loadbalancer.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default The service_plugin should be set in /etc/neutron/neutron.conf: service_plugins = neutron.services.loadbalancer.plugin.LoadBalancerPlugin The interface_driver and device_driver should be set in /etc/neutron/lbaas_agent.ini. Since the load balancer will be haproxy, set the device_driver accordingly: device_driver = neutron.services.loadbalancer.drivers.haproxy.namespace_driver.HaproxyNSDriver The interface_driver will depend on the core L2 plugin being used. For OpenVSwitch: interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver For linuxbridge: interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver If the above configuration files were changed manually, restart the neutron-server service and neutron-lbaas-agent service.
LBaaS使用方法
基本的使用步驟為:
- 租戶創建一個pool,初始時的member個數為0;
- 租戶在該pool內創建一個或多個member
- 租戶創建一個或多個health monitor
- 租戶將health monitors與pool關聯
- 租戶使用pool創建vip
UnitedStack博客中整理一個詳細的使用步驟:https://www.ustack.com/2013/10/08/neutron_loadbalance/
參考文獻
https://wiki.openstack.org/wiki/Neutron_LBaaS_Arch
https://wiki.openstack.org/wiki/Neutron/LBaaS/Architecture/Scheduler
http://openstack.redhat.com/LBaaS
https://www.ustack.com/2013/10/08/neutron_loadbalance/
http://blog.csdn.net/matt_mao/article/details/12982963
http://blog.csdn.net/lynn_kong/article/details/8528512