OpenStackNeturon组件DHCP部分介绍

1.简单介绍

OpenStack负责管理网络的组件是Neutron。Neutron中提供了管理租户网络DHCP服务器的组件Neutron-dhcp-agent,通过对具体的dhcp driver进行配置和管理,使得Neutron可以实现为虚拟机/裸金属提供DHCP服务,dhcp-agent默认的dhcp driver由dnsmasq软件实现,即由该软件充当dhcp server。

Neutron概述

Neutron 为整个 OpenStack 环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙,DHCP和 VPN 等。Neutron 提供了一个灵活的框架,通过配置,无论是开源还是商业软件都可以被用来实现这些功能。
Neutron 采用分布式架构,由多个组件(子服务)共同对外提供网络服务。
在这里插入图片描述
Neutron由如下组件构成:

  1. Neutron Server:对外提供 OpenStack 网络 API,接收请求,并调用 Plugin 处理请求。
  2. Plugin:处理 Neutron Server 发来的请求,维护 OpenStack 逻辑网络状态, 并调用 Agent 处理请求。
  3. Agent:处理 Plugin 的请求,负责在 network provider 上真正实现各种网络功能。
  4. network provider:提供网络服务的虚拟或物理网络设备,例如 Linux Bridge,Open vSwitch 或者其他支持 Neutron 的物理交换机。
  5. Queue:Neutron Server,Plugin 和 Agent 之间通过 Messaging Queue 通信和调用
  6. Database:存放 OpenStack 的网络状态信息,包括 Network, Subnet, Port, Router 等
Neutron dhcp

在Openstack Pike版本,Neutron中主要通过DHCP模块对外提供租户的DHCP服务。

Neutron完整的DHCP服务由neutron-server和dhcp-agent、dhcp-driver配合实现,其中neutron-server负责接收请求并向agent发送网络、子网、端口等数据;dhcp-agent接收数据,创建、配置dhcp driver。

DHCP模块主要由DHCP agent scheduler、DHCP agent、DHCP driver构成:
DHCP agent scheduler:负责DHCP agent与network的调度,即哪些agent为network服务
DHCP agent:管理和对接DHCP server。
DHCP driver:用做DHCP server,目前环境中是采用的dnsmasq。

整个DHCP处理的流程架构图如下
在这里插入图片描述
对应架构图中数字,有以下几个操作:
1.当dashboard上执行network/subnet/port的操作时,会调用neutron-api通知CorePlugin(如linux bridge plugin,ovs plugin等),创建相应虚拟network/subnet/port。
2.agent management/agent scheduler里面会通过调度算法调度DHCP agent
3.network/subnet/port操作会发送rpc请求到DHCP agent
4.agent scheduler db发送rpc请求到DHCP agent。
5. DHCP agent通过DhcpPluginApi发送rpc请求到core plugin,操作相应的数据库。
6. DHCP agent调用dhcp driver实现DHCP server的管理

架构及部署

dhcp agent可以安装在任何节点上(控制节点、网络节点、计算节点),Neturon支持dhcp agent集群(系统中运行多个dhcp agent实例),并且可以通过配置文件指定dhcp agent的调度策略。

在这里插入图片描述
在网络节点中,我们项目中使用openvswitch实现br-int、bi-ext、br-tun网桥,这些网桥都是 Neutron 自动为我们创建,具体网桥的作用如下:
br-ext:连接外部(external)网络的网桥
br-int:集成(integration)网桥,所有虚机实例的虚拟网卡和其他虚拟网络设备都将连接到该网桥。
br-tun:隧道(tunnel)网桥,基于隧道技术的 VxLAN 和 GRE 网络将使用该网桥进行通信。

Neutron-server

主要包括Neutron-API和Plugins.
Neutron-API 对外提供了业务 API,这些 API 是面向资源的 RESTful API,分为两大类:Core Service 和 Extension Service。Core Service 包括 networks, subnets, ports等资源的 RESTful APIs,Extension Service 包括 routers, segments, trunks, policies, availability_zones, agents 等等其他各种资源的 RESTful APIs。
Neutron-plugins负责将相关模型数据存入到对应的数据库表中;并通知相应的 Agents,让 Agents 做对应的动作。

RabbitMQ

Neutron-server和dhcp-agent之间通信的消息队列。主要包括network、subnet、port资源的新增、修改和删除消息。

Dhcp-agent

处理来自Neutron-server的RPC请求,管理dhcp_driver的生命周期,即创建、启动、停止、删除一个 DHCP Service(根据dhcp_agent.ini 中dhcp_driver的配置,默认是dnsmasq开源软件)。

Dnsmasq

dnsmasq是一个小巧且方便地用于配置DNS和DHCP的工具,一个轻量级进程,适用于小型网络,它提供了DNS功能和可选的DHCP功能(此处只介绍 DHCP)。
dnsmasq通过 UDP 67 端口,对外提供 DHCP Server 相关服务,同时它还有 CLI(命令行)管理接口。dnsmasq 还可以通过配置文件,做它自己的数据持久化。Neutron 在网络节点上提供 DHCP Service。每一个 Network Model,都会对应一个 DHCP Service,而这个 DHCP Service 就是在一个独立的 namespace 中的一个 dnsmasq 进程(每个 Network Model 对应一个 namespace)。

Network namespace

Network namespace主要实现了网络资源的隔离,网络资源包括网络设备、IPv4和IPv6协议栈、IP路由表、防火墙、socket等。给一个或多个进程私有的网络资源。
使用namespace实现dhcp的原因是,使一个dnsmasq进程独立的为一个租户网络提供dhcp服务。Dhcp-agent收到neutron-server的消息后,会构建一个名为qdhcp-networkid的namespace,并使用veth pair将其和ovs br-int网桥相连。上图中展示了一个dhcp namespace,A、B为一对veth pair。

需求

独立部署,用于分配裸金属的IP地址
支持和P版本的OpenStack/Ironic对接
可以同时支持DHCPv4和DHCPv6功能
同时支持IPv4+IPv6双栈(支持同一个网络分配两种IP)
Dnsmasq可以同时支持DHCPv4和DHCPv6功能。
能够基于不同的租户独立管理IP地址池
Neutron-dhcp-agent对每个租户网络均独立启动一个dnsmasq进程,每个dnsmasq进程之间隔离,已经可实现不同租户独立管理IP地址池。

高可用性

高可用性是指提供在本地系统单个组件故障情况下,能继续访问应用的能力,无论这个故障是业务流程、物理设施、IT软/硬件的故障。最好的可用性, 就是你的一台机器宕机了,但是使用你的服务的用户完全感觉不到。
HA 需要使用冗余的服务器组成集群来运行负载,包括应用和服务。这种冗余性也可以将 HA 分为两类(主备、双活):

Active/Passive HA:集群只包括两个节点简称主备。在这种配置下,系统采用主和备用机器来提供服务,系统只在主设备上提供服务。在主设备故障时,备设备上的服务被启动来替代主设备提供的服务。典型地,可以采用集群资源管理软件比如 Pacemaker 来控制主备设备之间的切换,并提供一个虚机 IP 来提供服务。

Active/Active HA:集群只包括两个节点时简称双活,包括多节点时成为多主(Multi-master)。在这种配置下,系统在集群内所有服务器上运行同样的负载。以数据库为例,对一个实例的更新,会被同步到所有实例上。这种配置下往往采用负载均衡软件比如 HAProxy 来提供服务的虚拟 IP。

Neutron DHCP HA

DHCP 协议自身就支持同一个租户网络内部运行多个 DHCP 服务器。因此,只需要在多个网络控制节点上,通过修改配置,为每个租户网络创建多个 DHCP Agent,就能实现 DHCP 的 HA 。
在这里插入图片描述

目前OpenStack neutron已经提供了DHCP HA方案。
如果某些dhcp-agent停服,neutron-server可以通过Dhcp迁移技术,保证可为某租户网络服务的dhcp-agent数量。它的实现方法是:neutron-server启动后会周期检查dhcp-agent的状态,当发现agent down时,则解除该agent与网络的关系,重新调度一个dhcp-agent为网络提供服务。该技术需要将allow_automatic_dhcp_failover设置为True,当dhcp-agentdown时,neutron-server可以分配其他正常的agent为网络提供服务。

Neutron server中的具体配置如下:
文件位置: /etc/neutron/neutron.conf
#Automatically remove networks from offline DHCP agents. (boolean value)
#allow_automatic_dhcp_failover = true
#Number of DHCP agents scheduled to host a tenant network. If this number is
greater than 1, the scheduler automatically assigns multiple DHCP agents for
#a given tenant network, providing high availability for DHCP service.
#(integer value)
#dhcp_agents_per_network = 1

具体分析:当openstack中部署了3个网络节点,都分别启动了1个DHCP-Agnet。
1.当neutron.conf配置 dhcp_agents_per_network = 1时,将随机为开启了DHCP的租户分配1个dhcp-agent提供服务,当分配的这个服务在一定时间间隔内被发现已经失效,neutron将自动为其调度另外一个dhcp-agnet服务,并自动完成相应的配置。
此时的HA属于Active/Passive HA模式
2.当dhcp_agents_per_network = 2时,将随机选择3个可用的DHCP-agent中的2个,这两个DHCP服务器都可以为client提供服务。并且在其中一个失效时,会调度第三个dhcp为此租户提供服务,此功能有Neutron的Agent调度器实现。
此时的HA属于Active/Active HA模式

按照DHCP协议,多个DHCP服务器为同一个租户网络提供服务时,多个DHCP服务器会同时应答客户端请求,此时由客户端决定使用哪个服务器分配的地址。在我们的OpenStack环境中,地址的分配更加特殊,即为VM或裸金属分配的IP地址都是与MAC固定绑定的,在同一个租户的多个DHCP服务器中绑定数据都一样,因此租户的任何一个DHCP服务器对同一台VM或裸金属的地址分配都是相同的。
在一个租户启用多个DHCP服务器,除了可以提高租户DHCP服务的高可用性,也会提高客户端的上线效率。
为了实现DHCP HA的AA模式,可采用部署多个DHCP-Agent(大于等于2),并配置allow_automatic_dhcp_failover = true、dhcp_agents_per_network=2来实现。

并发性能需要达到50/s,100/s最好

裸金属与DHCP服务器交互的DHCP报文将经过TOR、open vSwitch再到DHCP server。TOR硬件对于DHCP不存在转发瓶颈,open vSwitch的性能理论上也不存在瓶颈并且目前无法支撑优化,最大的可优化点还是在DHCP server软件上,即需要对Dnsmasq进行性能优化,包括配置及可能的代码修订

1.2.3.7.层次化绑定需求

Openstack支持多种类型network管理,有flat、local、vlan、vxlan等多种类型需要支持层次化网络绑定,层次化网络支持指用户创建vxlan网络,需要与vlan网络绑定在一起,即用户创建的网络为vxlan与vlan双层网络,双层网络映射由控制器完成。 networking-odl完成neutron对控制器网络的创建/更新/删除

OpenStack的P版本 Neutron组件已经通过部署和配置支持了vDHCP除并发性能外的其他需求,因此对vDCHP的最终只需要提升DHCPserver(Dnsmasq)的并发性能,达到并发上线速率:50/s, 最好100/s。

dnsmasq概述

Dnsmasq为小型网络提供网络基础设施:DNS,DHCP,路由器通告和网络引导的开源软件。它被设计为轻量级且占用空间小,适用于资源受限的路由器和防火墙等。它被广泛用于智能手机和便携式热点的共享,并支持虚拟化框架中的虚拟网络。支持的平台包括Linux(带有glibc和uclibc),Android,* BSD和Mac OS X。 Dnsmasq包含在大多数Linux发行版以及FreeBSD,OpenBSD和NetBSD的移植系统中,并且Dnsmasq提供完整的IPv6支持。
在Openstack中,Neutron默认使用Dnsmasq为租户网络提供DHCP服务。Dnsmasq 进程与 neutron中network是一对一关系,一个 dnsmasq 进程为同一 netowrk 中所有 enable 了 DHCP 的 subnet 提供服务。
Dnsmasq程序主要架构是Linux select编程,通过侦听socket的状态进行操作。
Dnsmasq允许根据使用者情况自行选择采用GPLv2和GPLv3开源协议。

socket

当前Dnsmasq最新版本为2.80,使用Poll方式的Sokcet编程(2.68时还采用select方式),在linux平台,socket编程还有select和epoll方式。select,poll,epoll都是IO多路复用的机制,总体上说,epoll在系统存在多个fd的情况下比select和poll编程方式的系统IO效率更高,限制更少。OpenStack环境下会在创建一个租户network时,就创建一个dnsmasq进程,对于整个系统,是存在较多的fd的应用场景。理论上将select/poll模式修改为epoll编程模式,将提高系统的性能。
Select函数属于POSIX标准,poll函数是POSIX::XSI扩展的一部分,而epoll为Linux所特有的(内核大于2.6)

BC-LINUX

大云企业操作系统(BigCloud Enterprise Linux,简称:BC-Linux)是以CentOS社区操作系统为基础,借助开源社区的开放优势,通过定制化手段研发的企业级Linux操作系统。

neutron dhcp结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过查看setup.cfg文件,查找dhcp服务的启动路径。
[entry_points]
console_scripts =
neutron-db-manage = neutron.db.migration.cli:main
neutron-debug = neutron.debug.shell:main
neutron-dhcp-agent = neutron.cmd.eventlet.agents.dhcp:main

通告系统流

通告都是Neutron server 将消息发送到消息队列,DHCP agent从消息队列得到消息后,进行对应处理。

通告的客户端
DHCPagent对外提供的通告Client在neutron/api/agentnotifiers/dhcp_rpc_agent_api.py实现,当网络信息变化时,比如网络创建/删除,会通告到客户端, 由DHCP agent将调用DHCP driver进行相应处理.

通告的服务端
neutron.agent.dhcp.agent.DhcpAgent类实现了对上述事件的处理逻辑

在这里插入图片描述
Dnsmasq为单进程程序,启动后监听DHCP的67端口,等待客户端的DHCP请求,并按协议与客户端实现协议交互,。

数据结构
Neutron dhcp的类关系

以DhcpAgent为中心,描述DHCP组件相关的类及关系
在这里插入图片描述
Agent初始化
在这里插入图片描述
在这里插入图片描述
创建一个rpc-service对象,rpc-service的manager类的具体实现代码目录在neutron/agent/dhcp/agent.py,文件中DhcpAgentWithStateReport继承自DhcpAgent,DhcpAgentWithStateReport类的作用主要是创建一个协程定时向neutron-server启动时开启的rpc-server上报neutron-dhcp-agent的服务或network状态,然后通过neutron-server的core plugin将状态更新到数据库中。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: DHCP(Dynamic Host Configuration Protocol)是一种网络协议,用于自动分配IP地址以及其他网络参数给网络上的设备。DHCP协议能够在网络上自动分配IP地址,这意味着管理员不需要手动为每个设备配置IP地址,从而减轻了管理工作量。 DHCP协议的工作原理如下: 1. 当设备加入网络时,它会发送一个DHCP请求广播包,请求获取IP地址和其他网络参数。 2. DHCP服务器收到广播包后,会从可用的IP地址池中选择一个地址分配给设备,并告知设备分配的IP地址。 3. DHCP服务器还可以为设备分配其他网络参数,例如子网掩码、默认网关、DNS服务器等。 4. 设备收到DHCP服务器发送的响应后,将使用分配的IP地址和其他网络参数。 总之,DHCP协议是一种自动分配IP地址和其他网络参数的协议,它可以减轻管理员的工作量,提高网络管理的效率。 ### 回答2: DHCP(动态主机配置协议)是一种网络协议,用于自动分配IP地址和其他网络配置参数给连接在网络上的设备。它简化了网络上新设备的配置过程,确保设备能够快速、有效地连接到网络。 DHCP协议使用客户端/服务器模型,其中DHCP客户端设备向网络中的DHCP服务器发送请求,以获取可用的IP地址和其他配置参数。DHCP服务器可以是专用的硬件设备或部署在网络上的服务器软件。 DHCP协议的工作流程如下: 1. DHCP客户端在加入网络时向广播地址发送DHCP发现消息,以查找可用的DHCP服务器。 2. DHCP服务器收到DHCP发现消息后,向客户端发送DHCP提供消息,其中包含可用的IP地址和其他网络配置参数。 3. 客户端接收到DHCP提供消息后,选择其中一个提供的配置,发送DHCP请求消息,请求分配该配置。 4. DHCP服务器收到DHCP请求消息后,向客户端发送DHCP确认消息,其中包含指定的配置信息。 5. 客户端接收到DHCP确认消息后,将配置信息应用于其网络连接,并通知网络上的其他设备。 DHCP协议还支持租约机制,即IP地址和其他配置信息的临时分配。租约可以是有限时间的,设备在租约到期之前需要更新租约以保持网络连接。租约的使用有助于有效管理网络资源,并防止IP地址冲突。 从安全性角度考虑,DHCP协议也提供了一些安全措施,如动态主机配置协议消息认证(DHCP消息验证)和动态主机配置协议报文加密(DHCP报文加密)。这些机制可以确保只有经过授权的DHCP服务器能够为客户端设备提供有效的配置信息,防止网络中的安全威胁。 总之,DHCP协议是一个重要的网络协议,它使得设备连接到网络变得更加简单和高效。通过自动分配IP地址和其他网络配置参数,DHCP协议为网络管理提供了便利,并提供了一些安全机制来保护网络资源免受安全威胁。 ### 回答3: DHCP(Dynamic Host Configuration Protocol)协议是一种网络协议,主要为计算机或其他设备提供IP地址、子网掩码、默认网关和其他相关网络配置信息。DHCP协议实现了自动分配IP地址和配置网络信息的功能。 DHCP协议是在客户端和服务器之间进行通信的,并通过“租约”的方式分配IP地址。当一个设备加入网络时,它会发送一个DHCP请求广播,寻找可用的DHCP服务器。DHCP服务器收到请求后会提供可用的IP地址,并向设备发送一个分配成功的广播消息。设备接收到广播消息后,根据给定的租约时间,使用分配到的IP地址进行通信。 DHCP协议中的一个重要概念是“租约”。租约指定了设备使用IP地址的时间期限。租约分为两种类型:短期租约和长期租约。在短期租约中,设备会定期与DHCP服务器通信,以延续租约的有效期。而在长期租约中,设备会一直使用IP地址,直到租约到期或者被释放。 除了分配IP地址外,DHCP协议还可以提供其他网络配置信息,如DNS(域名系统)服务器的IP地址、默认网关和子网掩码等。这些信息对于设备连接到网络并实现正常通信至关重要。 总而言之,DHCP协议是一种用于自动分配IP地址和配置网络信息的网络协议。它通过租约的方式管理IP地址的分配,并提供给设备配置所需的网络参数。DHCP协议大大简化了网络管理和设备配置的工作,使得设备可以快速、简便地连接到网络。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

举世无双勇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值