octavia
octavia 作为openstack的负载均衡方案,实现4层和7层的负载,自Pike版本替换了neutron自带的LB方案(Neutorn LBaaS)。
基本对象
- loadbalancer:负载均衡器的服务对象,所有的配置、操作、客户端命令等等
- vip:作用在loadbalancer上,用于外部对内部的业务集群的访问入口
- listener:监听器对象就是一组负载规则,通过其配置外部对VIP访问的端口,算法,类型等等(haproxy的frontend 配置)
- pool:后端业务真实服务器集群(haproxy的backend配置)
- member:业务云服务器的统称(backend 配置中的一个 member)
- Health monitor :周期性检查成员的状态,用于负载调度
- L7 Policy :数据包转发动作
- L7 Rule :数据包转发匹配域
frontend指的是前端,定义一系列监听套字节,接收客户端请求;backend指的是后端,定义一系列后端服务器,请求转发
组件
- octavia_api:接收api请求,简单处理后转发给Worker
- octavia_worker:完成整个LB功能,通过nova和octavia agent对amphora生命周期管理,neutron完成subnet的接入。
- octavia_housekeeping:保障octavia运行,负责维护amphora备选池大小,清理数据库中amphora记录,更新amphora中的证书
- octavia_health_manager:监控amphora状态(amphora与octavia_health_manager心跳),负责amphora故障转移
网络
- manage-network:用于登入amphora云主机进行管理的网络
- tenant-network :租户网络
- vip-network:vip网络
amphora
amphora是实现lb功能的云主机,负载均衡的载体,包含了amphora agent服务和实现底层lb底层功能的haproxy和keepalived。
镜像构建:https://github.com/openstack/octavia/tree/master/diskimage-create
1、知识点
amphora实现
- octavia_worker与agent安全通讯(ca)
- 定义心跳协议
基于flask+gunicorn实现amphora_agent_service(提供amphora agent API)
- amphora初始化状态只有一个接口就是manage-network,用于登入使用
- 创建amphora-haproxy命名空间,实现keepalived功能,地址配置是由vip-network提供
cat /usr/lib/systemd/system/octavia-keepalived.service
[Unit]
Description=Keepalive Daemon (LVS and VRRP)
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
KillMode=process
ExecStart=/sbin/ip netns exec amphora-haproxy /usr/sbin/keepalived -D -d -f /var/lib/octavia/vrrp/octavia-keepalived.conf -p /var/lib/octavia/vrrp/octavia-keepalived.pid
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/var/lib/octavia/vrrp/octavia-keepalived.pid
#keepalived 是在amphora-haproxy命名空间中运行
keepalived配置文件路径
- check_script.sh 用于状态检测,提供地址漂移的依据
#!/bin/sh
status=0
for file in /var/lib/octavia/vrrp/check_scripts/*
do
echo "Running check script: " $file
sh $file
status=$(( $status + $? ))
done
exit $status
- haproxy在创建监听器(listener)后启动服务
systemctl status haproxy-a6ffe831-861a-4956-b9ce-ae13545bd6d5.service
可以查看到haproxy配置文件
cat /var/lib/octavia/a6ffe831-861a-4956-b9ce-ae13545bd6d5/haproxy.cfg
# Configuration for test
global
daemon
user nobody
log /dev/log local0
log /dev/log local1 notice
stats socket /var/lib/octavia/a6ffe831-861a-4956-b9ce-ae13545bd6d5.sock mode 0666 level user
defaults
log global
retries 3
option redispatch
timeout connect 5000
timeout client 50000
timeout server 50000
peers a6ffe831861a4956b9ceae13545bd6d5_peers
peer Oo21ZS_S-5TtQEuuCxjr7Hn6-TE 192.168.1.6:1025
peer 2iKM7qifw7QqBTZvEmYmG0ed0_k 192.168.1.9:1025
frontend a6ffe831-861a-4956-b9ce-ae13545bd6d5 #监听器配置
option tcplog
bind 192.168.1.8:22
mode tcp
default_backend d3107c81-8e0f-493c-b4df-c9bc8f63f7f9
backend d3107c81-8e0f-493c-b4df-c9bc8f63f7f9 #后端pool和member成员
mode tcp
balance leastconn
timeout check 5s
server 4bf01008-84a6-4a8d-a1c9-2e8f6f1d9163 192.168.1.10:22 weight 1 check inter 5s fall 3 rise 3
amphora_client通过api PUT请求进行haproxy的配置更新和服务重启
- PUT /0.5/listeners/0454ef72-e491-4b05-9c7d-fcba609c9771/a6ffe831-861a-4956-b9ce-ae13545bd6d5/haproxy 更新配置
- PUT /0.5/listeners/a6ffe831-861a-4956-b9ce-ae13545bd6d5/reload 重启服务