Octavia 使用

 

 

Step 1. 准备租户网络,用户的业务云主机在该网络内。

这里写图片描述

Step 2. 选定 Load Balancer 服务的 Subnet。

这里写图片描述

Step 3. 设定 Load Balancer 下属的 Listener,指定监听 HTTP Port: 80 访问请求。

这里写图片描述

Step 4. 设定 Listener 下属的 Pool,配置 SOURCE_IP 策略,来自同一客户端的请求会持续被分发到指定的一个 Member。

这里写图片描述

Step 5. 设定 Pool 下属的 Members,添加 Member 的本质是将业务云主机的 IP/MAC 地址绑定到 Pool,HAProxy 是通过主机 IP/MAC 地址来进行分发的,这些 IP 地址将会被作为 server 配置项写入到 haproxy.cfg 文件。

这里写图片描述

Step 6. 设定 Pool 下属的 Health Monitor,配置使用 PING 方式来检查下属 Member 的健康状态。

这里写图片描述

测试分析

这里写图片描述

创建 Load Balancer 的同时会自动创建 Amphora 实例,因为配置了 loadbalancer\_topology = ACTIVE_STANDBY 所以创建了一个 Master Amphora 和一个 Backup Amphora,避免了单点故障。否则就是 Single Amphora,Pike 版本暂不支持 ActiveActive 主主模式。

这里写图片描述

lb-mgmt-net 是 LB Network,Octavia Controller 与 Amphora 使用该网络进行通信,所以 lb-mgmt-net 也需要接入 OpenStack API/Management Network。

这里写图片描述

在 Sunbet 中自动创建了 3 个 Port,两个 lb-vrrp 分别是两个 Amphora 的 Port,一个 loadbalance 是 VIP 的 Port。VIP 由运行在 Amphora 上的 Keepalived 维护,遵守 VRRP 虚拟路由冗余协议,支持着 VIP 的高可用。

这里写图片描述

可以将 VIP 绑定到浮动 IP 从外网进行访问。

这里写图片描述

创建 LB 时,还会自动创建 Amphora 实例(VIP)的安全组 lb-<Load Balancer ID>,该安全会随着 LB 下属的 Listeners 的变化(增加/删除了 L4/L7 的 Listener,octavia-worker 会自动增加/删除相应的 Port 的安全组规则)。因为上面设定的 Listener 监听 HTTP Port: 80,所以会自动添加 80(HTTP) 规则。但如果想 Ping/SSH VIP 的话,还需要手动添加 ICMP/SSH 规则。

 

$ ip netns exec qdhcp-6fd0afdc-c683-4157-8354-dcdd43011dad ssh -i /etc/octavia/.ssh/octavia_ssh_key ubuntu@192.168.0.11 -p 22

 

可以通过 LB Network 的 DHCP namespace SSH 进入 Amphora。

这里写图片描述

 

如图:

这里写图片描述

上图可以看见 Amphora 只有一张 LB Network 的网卡(通过 IP 地址判断),那接入 Subnet 的网卡呢?

这里写图片描述

Amphora 会启动一个 namespace amphora-haproxy,Sunbet 的网卡、HAProxy 和 Keepalived 的服务进程都在该 namespace 中运行。

Amphora 中最重要的几个服务进程

 

# HAProxy
usr/sbin/haproxy -f /var/lib/octavia/b45ed46d-ec04-421b-a0e0-a3268ccea61e/haproxy.cfg -f /var/lib/octavia/haproxy-default-user-group.conf
/usr/sbin/haproxy-systemd-wrapper -f /var/lib/octavia/b45ed46d-ec04-421b-a0e0-a3268ccea61e/haproxy.cfg -f /var/lib/octavia/haproxy-default-user-group.conf

# Keepalived
/usr/sbin/keepalived -D -d -f /var/lib/octavia/vrrp/octavia-keepalived.conf

# Amphora Agent,北接 Controller 南对 Member
/usr/bin/python2 /usr/local/bin/amphora-agent --config-file /etc/octavia/amphora-agent.conf
 
# 动态获取/释放 IP 地址
/sbin/dhclient -1 -v -pf /run/dhclient.ens3.pid -lf /var/lib/dhcp/dhclient.ens3.leases -I -df /var/lib/dhcp/dhclient6.ens3.leases ens3

 

查看 Keepalived 的配置文件:

 

vrrp_script check_script {
  script /var/lib/octavia/vrrp/check_script.sh
  interval 5
  fall 2
  rise 2
}

vrrp_instance 09f967f9355b498cb56f11d5bfe32f19 {
 state BACKUP                  # 该 Amphora 充当 Backup 路由器
 interface eth1                # VIP 对接 Subnet
 virtual_router_id 1           # VRID
 priority 90
 nopreempt
 garp_master_refresh 5
 garp_master_refresh_repeat 2
 advert_int 1
 authentication {
  auth_type PASS
  auth_pass 2d2cd51
 }

 unicast_src_ip 192.168.0.10   # 与 Master 路由器的对盯方式
 unicast_peer {
       192.168.0.16

 }

 virtual_ipaddress {
  192.168.0.3                  # VIP 地址
 }
 track_script {
    check_script
 }
}

 

查看 HAProxy 的配置文件:

 

# Configuration for test_lb1
global
    daemon
    user nobody
    log /dev/log local0
    log /dev/log local1 notice
    stats socket /var/lib/octavia/b45ed46d-ec04-421b-a0e0-a3268ccea61e.sock mode 0666 level user

defaults
    log global
    retries 3
    option redispatch
    timeout connect 5000
    timeout client 50000
    timeout server 50000

peers b45ed46dec04421ba0e0a3268ccea61e_peers
    peer qenPC2HfzYBAclR9HimRSWmYznU 192.168.0.10:1025
    peer yKL51Z6MZq1lHKxajQ4sXXuWZmM 192.168.0.16:1025


frontend b45ed46d-ec04-421b-a0e0-a3268ccea61e             # 前端服务器
    option httplog
    bind 192.168.0.3:80                                   # 前端服务器绑定 VIP
    mode http
    default_backend 209f2923-f8b1-476b-80e9-6ac2a5145ca1  # 默认后端服务器

backend 209f2923-f8b1-476b-80e9-6ac2a5145ca1              # 后端服务器
    mode http
    balance source                                        # 负载均衡服务器
    timeout check 5s                                      # Health Check 间隔
    server 34e36204-48dc-4c2c-95dc-bb9e6a3f9fbd 192.168.0.8:80 weight 1 check inter 5s fall 3 rise 3                   # Real Server,用户业务云主机 instance1
    server 97cba054-4f8c-4a9f-91e2-56973efcb417 192.168.0.9:80 weight 2 check inter 5s fall 3 rise 3                   # Real Server,用户业务云主机 instance2

 

 

如图:

这里写图片描述

修改 Health Monitor 为 HTTP GET URI 方式的话,haproxy.cfg 变更为:

 

backend 209f2923-f8b1-476b-80e9-6ac2a5145ca1
    mode http
    balance source
    timeout check 5s
    option httpchk GET /api
    http-check expect rstatus 200
    server 34e36204-48dc-4c2c-95dc-bb9e6a3f9fbd 192.168.0.8:80 weight 1 check inter 5s fall 3 rise 3
    server 97cba054-4f8c-4a9f-91e2-56973efcb417 192.168.0.9:80 weight 2 check inter 5s fall 3 rise 3

 

可以通过指令 openstack loadbalancer l7policy createopenstack loadbalancer l7rule create 来创建七层的 Policy 和 Rule。当创建 L7 Rule 时,会为 frontend 添加 ACL 规则。e.g.

 

frontend b45ed46d-ec04-421b-a0e0-a3268ccea61e
    option httplog
    bind 192.168.0.3:80
    mode http
        acl dc6f6294-b7ca-4684-8f15-8f1dbf86185a path -m reg /
    #  满足 acl 规则的请求重定向至 http://www.baidu.com
    redirect location http://www.baidu.com if dc6f6294-b7ca-4684-8f15-8f1dbf86185a
    default_backend 209f2923-f8b1-476b-80e9-6ac2a5145ca1

 

最后

除了上述提到功能外,Ocatvia 还支持许多更加细致的七层负载均衡分发配置,比如:最大连接数、会话保持类型、附加 HTTP Header 字段、TLS Termination、L7 策略动作类型、L7 规则类型等等,都是非常精彩的负载均衡分发实现。碍于篇幅的原因,我们下次再聊。

参考:https://blog.csdn.net/jmilk/article/details/81279795

 

posted @ 2021-05-08 12:54  钟桂耀  阅读(496)  评论(0编辑  收藏  举报