Neutron分析(7)—— neutron-l3-agent HA solutions
Posted on 2014-07-18 11:35 feisky 阅读(1704) 评论(0) 编辑 收藏 举报1. keepalived vrrp/conntrackd
High availability features will be implemented as extensions or drivers.A first extension/driver will be based on VRRP.
A new scheduler will be also added in order to be able to spawn multiple instances of a same router in many places.
Conntrackd will be used to maintain the TCP sessions going through the router. One instance of conntrackd per virtual router, then one per namespace.
Blueprints: https://blueprints.launchpad.net/neutron/+spec/l3-high-availability
wiki: https://wiki.openstack.org/wiki/Neutron/L3_High_Availability_VRRP
analysis: http://blog.csdn.net/quqi99/article/details/18799877
2. neutron DVR based multi-host l3-agent
Provide Distributed Virtual Routing functionality with OVS, to improve the performance.
在Openstack中L3router会造成流量集中的问题。不论东西向还是南北向的流量都需要流过网络节点的虚拟路由器。为了解决流量集中的问题,社区正在开打分布式虚拟路由器(DVR)的feature。
https://blueprints.launchpad.net/neutron/+spec/neutron-ovs-dvr
https://wiki.openstack.org/wiki/Neutron/DVR_L2_Agent
http://m.blog.csdn.net/blog/maoliping455mlp455/36899391
http://blog.csdn.net/quqi99/article/details/20711303
3. Neutron Multi-host DHCP and L3
Goal here is to have a DHCP implementation that provides the same properties as nova-network's "multi_host" functionality, where the DHCP server for a particular VM runs directly on the same hypervisor as the VM itself (with the exception of when a VM migrates).
This blueprints is in drafting, and will not merge in upstream.
https://blueprints.launchpad.net/neutron/+spec/quantum-multihost
4. crontab using neutron-client
http://m.blog.csdn.net/blog/maoliping455mlp455/23428897
So this when we neutron-l3-agent is down, we can see that it will not affect the existed VMs. And we can easily use monitd to make process "neutron-l3-agent" is always alive. We can use the following script, and run a crontab(every 10 sec) on the server which installed neutronclient (But not on the controller nodes):
#!/usr/bin/python from neutronclient.v2_0 import client as neutronclient TENANT_NAME="admin" USERNAME="admin" PASSWORD="admin" AUTH_URL="https://10.224.159.107:443/v2.0/" neutron = neutronclient.Client(auth_url=AUTH_URL, username=USERNAME, password=PASSWORD, tenant_name=TENANT_NAME) agents = neutron.list_agents() alive_l3_agents = [] dead_l3_agents = [] for agent in agents['agents']: if agent['binary'] == 'neutron-l3-agent' and agent['alive'] == True: alive_l3_agents.append(agent) if agent['binary'] == 'neutron-l3-agent' and agent['alive'] != True: dead_l3_agents.append(agent) if len(alive_l3_agents) == 0 : print "No active L3" if len(dead_l3_agents) == 0 : print "No dead L3" routers = neutron.list_routers() dead_routers = [] for dead_l3_agent in dead_l3_agents: dead_routers = neutron.list_routers_on_l3_agent(dead_l3_agent['id']) for dead_router in dead_routers['routers']: neutron.remove_router_from_l3_agent(dead_l3_agent['id'], dead_router['id']) print "remove_router_from_l3_agent : L3 id is %s, router id is %s" %(dead_l3_agent['id'], dead_router['id']) # Currently, only add to the first alive agent neutron.add_router_to_l3_agent(alive_l3_agents[0]['id'], {"router_id":dead_router['id']}) print "add_router_to_l3_agent : L3 id is %s, router id is %s" %(alive_l3_agents[0]['id'], dead_router['id'])
5. HA of other components
(1) Database: active-passive (pacemarker + DRBD); active-active (Galera)
http://blog.csdn.net/quqi99/article/details/9392789
(2) MQ: MQ cluster
http://blog.csdn.net/quqi99/article/details/9394121
(3) Cinder: Local File System (Raid10 + LVM); Distrubte File System (Ceph)
http://blog.csdn.net/quqi99/article/details/9396413
http://blog.csdn.net/quqi99/article/details/10894833
(4) All stateless services, like (keystone|glance|nova|neutron)-api, nova-schedule etc (haproxy + pacemarker)
(5) l3-agent: VRRP + keeplived + ip conntracked
https://blueprints.launchpad.net/neutron/+spec/l3-high-availability
http://blog.csdn.net/quqi99/article/details/18799877