OpenStack Octavia

Octavia 是 OpenStack 新的 load balancer 專案,也是官方推薦的 lbaas,夠對外提供獨立而穩定的API而 neutron lbaasv2則在 Queens 版本被標為棄用。

  • 因為無法處理大量的流量,也無法擁有 HA 的機制,因此將此專案獨立出來。

  • Octavia 透過建立 HAProxy 的虛擬機,將流量導入所指定的 member,而 HAProxy 的虛擬機的 image 是官方製作的,裡面包含了 haproxy 以及 keepalive,還有 python Flask 的 API,開啟 9443 port,讓 Octavia-worker 服務可以根據使用者所選擇的 load balancer 的 pool 和 member 等等設定,透過 API 方式,修改 HAProxy 虛擬機的設定。

  • Octavia 支援 Active 和 Standby,也就是建立兩台 HAProxy 虛擬機,一台為 Master,另一台為 Slave,兩個是透過 keepalive 做溝通,而 keepalive 的設定也是透過 API 來設定。

安裝步驟

以下步驟安裝至 controller 節點,版本為 Queens

建立所需資源

建立 Octavia 使用者和群組

# addgroup --system octavia 
# adduser --system octavia octavia --home /var/lib/octavia 

建立 octavia 資料夾

# mkdir /var/lib/octavia /etc/octavia /var/cache/octavia /var/log/octavia
# chmod 755 /var/lib/octavia /etc/octavia /var/cache/octavia /var/log/octavia
# chown -R octavia:octavia /var/lib/octavia /etc/octavia /var/cache/octavia /var/log/octavia

安裝 octavia,如果要安裝 Queens 版的,版本為 2.0.3

新增 octavia 使用者

新增 octavia role 權限

新增 octavia 服務

新增 octavia API endpoints

新增 octavia role

建立 CA 證書 資料夾

Clone github Octaiva 專案,裡面已經有建立 CA 證書的腳本

設定 CA 密碼,此範例為 openstack,並取代腳本內預設密碼後,執行腳本

複製到 /etc/octavia/certs

下載 amphora-haproxy image,並上傳

建立 flavor

建立 loadbalancer 的管理網路,這個網段需要 controller 可以抵達,因為需要呼叫 haproxy VM 裡面的 API,去新增設定,因此可以有以下幾種方式:

  • 不建立管理網段,直接將 loadbalancer 建在外網上,但是這樣每建立一個 loadbalancer ,就會占一個 外網 IP,不建議

  • 建立跟 OpenStack 管理網段一樣的網段,就是建一個外網,但是這個外網是通到 OpenStack 的管理網段。

  • 建立一條 neutron 內網和 router,並接上外網,然後再由 controller 節點新增路由,通往 neutron 內網的網段全部通過 neutron 建的 router

此範例為第三種方式,先建立 neutron 內網

建立 router,並接上內外網

在 controller 新增路由,請先查看 lb-router 所拿到的 IP,然後設定 172.16.0.0/24 都經由此 router IP,dev 則指定外網的網卡

設定 service project quota 數為 -1

建立 Octavia VM 的 security group,9443 為 API 的 Port

建立 keypair ,用來 ssh 進 haproxy VM 除錯用的

Config 設定

編輯 /etc/octavia/octavia.conf, IP、帳號、密碼請自行更改,下方有更進一步說明

參數說明:

  • [certificates] 內的 ca_private_key_passphrase 就是建 CA 時所輸入的密碼

  • [controller_worker]

    • amp_flavor_id: 請填入剛剛建立的 flavor ID,haproxy 的 VM 為此規格

    • amp_boot_network_list: haproxy 的 VM 會建在此網段下,填入 network ID

    • loadbalancer_topology: 可以設定 haproxy 的 VM 是否為 HA 模式,選項為 ACTIVE_STANDBY 或 SINGLE,選擇 ACTIVE_STANDBY 會建立 2 個 VM,並透過 keepalived 來實作 HA

修改 /etc/neutron/neutron.conf,增加以下

新增 /etc/neutron/neutron_lbaas.conf

建立資料庫

建立 Octavia 資料庫,密碼請自行更換

建立 Octavia 服務設定

建立服務,以利透過 service 指令啟動 Octavia 建立 Octavia wsgi API 服務,新增 /etc/apache2/sites-available/octavia-api.conf

建立 octavia-health-manager 服務,新增 /lib/systemd/system/octavia-health-manager.service

建立 octavia-housekeeping 服務,新增 /lib/systemd/system/octavia-housekeeping.service

建立 octavia-worker 服務,新增 /lib/systemd/system/octavia-worker.service

啟動服務

Apache2 啟用 Octavia api

啟用 Octavia 相關服務

重啟服務

安裝 Octavia dashboard

安裝 dashboard,Queens 版為 1.X.X,Rocky 版為 2.X.X

複製所需檔案

Django 更新

重啟 Apache2

解說

  • 建立了兩台 web server,並建立了 active standby 的 loadbalancer, 然後 loadbalancer 的 VIP 建在跟 web server 一樣地網段下,連接之後,在 user 端只會看到 loadbalancer 的資訊,不會看見 2 台 haproxy VM

  • 登入 octavia 使用者,可以看到 2 台 haproxy VM 建在 service project,其中一台為 Master,另一台為 Backup

  • VIP 為 private 網段(與 web server 同段),將兩者網路拓樸組合,就變成以下架構

  • VIP 為新建的 vip 網段(與 web server 不同段),將兩者網路拓樸組合,就變成以下架構

Last updated

Was this helpful?