openstack octavia 是 openstack lbaas的支持的一种后台程序,提供为虚拟机流量的负载均衡。实质是类似于trove,调用 nove 以及neutron的api生成一台安装好haproxy软件的虚拟机,并连接到要目标网路。具体原理和devstack安装方法 参考
http://lingxiankong.github.io/blog/2016/03/30/octavia/?utm_source=tuicool&utm_medium=referral
http://docs.openstack.org/developer/devstack/guides/devstack-with-lbaas-v2.html
目前官方不提供安装文档。谷歌了下似乎也没人写过具体的安装步骤,只推荐用devstack来进行安装。本人尝试根据devstack的安装脚本总结了下安装octavia的步骤,不当之处请各位指正。
1、创建数据库
mysql> CREATE DATABASE octavia; mysql> GRANT ALL PRIVILEGES ON octavia.* TO ‘octavia‘@‘localhost‘ IDENTIFIED BY ‘OCTAVIA_DBPASS‘;mysql> GRANT ALL PRIVILEGES ON octavia.* TO ‘octavia‘@‘%‘ \ IDENTIFIED BY ‘OCTAVIA_DBPASS‘;
2 创建用户 角色 endpoint
openstack user create --domain default --password-prompt octavia openstack role add --project service --user cinder admin openstack endpoint create octavia public http://10.1.65.58:9876/ --region RegionOne openstack endpoint create octavia admin http://10.1.65.58:9876/ --region RegionOne openstack endpoint create octavia internal http://10.1.65.58:9876/ --region RegionOne
3 安装软件包
yum install openstack-octavia-worker openstack-octavia-api python-octavia openstack-octavia openstack-octavia openstack-octavia
4 导入镜像 镜像是从devstack 生成的系统中导出来的
openstack --os-cloud=devstack-admin --os-region-name=RegionOne image create amphora-x64-haproxy --public --container-format=bare --disk-format qcow2
5 创建管理网络,并在主机创建ovs端口,使octavia-worker,octavia-housekeeping,octavia-health-manager能和生成的虚拟机实例通讯
5.1 生成管理网络,网段
openstack network create lb-mgmt-net openstack subnet create --subnet-range 192.168.0.0/24 --allocation-pool start=192.168.0.2,end=192.168.0.200 --network lb-mgmt-net lb-mgmt-subnet
5.2 生成管理端口防火墙规则
5555端口是管理网络,考虑到octavia组件尚不成熟,开启了22端口,镜像本身也是开启了22端口,这点吐槽下trove,同样是不成熟的模块,默认不开启22端口,还得去改源码。
openstack security group create lb-mgmt-sec-grp openstack security group rule create --protocol udp --dst-port 5555 lb-health-mgr-sec-grp openstack security group rule create --protocol tcp --dst-port 22 lb-mgmt-sec-grp
5.3 在管理网络创建一个端口用于连接宿主机中的octavia health_manager
neutron port-create --name octavia-health-manager-standalone-listen-port --security-group lb-health-mgr-sec-grp --device-owner Octavia:health-mgr --binding:host_id=controller lb-mgmt-net
5.4 创建宿主机的ovs端口 并连接至5.1生成的网络
ovs-vsctl -- --may-exist add-port br-int o-hm0 -- set Interface o-hm0 type=internal -- set Interface o-hm0 external-ids:iface-status=active -- set Interface o-hm0 external-ids:attached-mac=fa:16:3e:6f:9f:9a -- set Interface o-hm0 external-ids:iface-id=457e4953-b2d6-49ee-908b-2991506602b2
其中iface-id 和attached-mac 为 5.3生成的port的 属性
ip link set dev o-hm0 address fa:16:3e:6f:9f:9a
5.5 在宿主机上创建dhcp (为啥不用传统的dnsmasq呢?)
dhclient -v o-hm0 -cf /etc/octavia/dhcp/dhclient.conf