与Nova、Trove相似,Designate不是DNS服务器,而是对DNS服务器进行管理。
图12-9给出了Designate的功能模块图,各模块之间通过消息队列进行通信。
图12-9 Designate的功能模块
Designate主要部件如下。
1.API
沿袭了OpenStack其他项目,Designate支持通过Rest API对DNS进行管理。API模块接收用户HTTP请求,在通过Keystone的用户角色合法性认证后,HTTP/HTTPS请求经由AMQP消息总线被转移到中心模块。
尽管API也可以处理HTTPS请求,但是一般是由其他部件处理。例如在API前部署Nginx,或者由外部负载均衡器响应HTTPS请求。
2.中心(Central)
中心模块是业务逻辑处理核心模块,利用消息队列响应RPC请求。中心模块通过驱动或者Agents操控后端DNS服务器,并将业务逻辑处理所产生的数据进行持久化存储。存储以插件方式提供,目前主要支持SQLAlchemy,后续MongoDB等其他存储驱动也会陆续支持。
3.池管理器(Pool Manager)
Designate从Kilo版本开始,软件架构发生了重大变化,具体表现为Designate引入了池管理器机制,对DNS服务器进行池化管理。池管理器管理DNS服务器状态。通过配置,池管理器知道哪些DNS服务器受其管辖,以及DNS服务器的后端驱动类型,如PowerDNS、BIND9等。对于后端驱动,池管理器支持完全的添加、删除定制流程。池管理器将DNS服务器划分到多个池中,以此对DNS服务器进行细粒度管理。此外,池管理器负责保证后端DNS服务器与Designate数据库的最终一致性同步。
4.MiniDNS
MiniDNS是一个很小型的可水平扩展的DNS服务器,实现标准的DNS Notify和Zone Transfer处理。大部分情况下,MiniDNS扮演主人的角色,向DNS服务器发送DNS Notify和响应Zone Transfer(AXFR)请求,进行DNS区域和资源记录同步。MiniDNS对Notify和AXFR协议的支持,使得Designate可以与任何支持标准通信方法的DNS服务器集成。MiniDNS也封装了多种格式的DNS协议。例如,发送SOA查询,验证更改是否生效。
5.后端
每一个类型DNS服务器对应一款后端驱动。Designate目前已经支持多款DNS后端服务器,包括BIND、PowerDNS、NSD、DynECT等。用户也可以根据需要实现新的驱动,或者对已有驱动进行扩展,以提供更丰富的功能。
6.Sink
Sink是一个可选的监听服务,监听来自Nova、Neutron以及其他发送事件的服务的通知信息。Sink将事件转化为DNS操作,触发域名资源记录的自动创建、删除或更新。事件所对应的DNS操作由通知处理器定义。例如,当监听到Nova的compute.instance.create.end事件后,Designate自动创建一条对应于刚创建的实例的记录;当监听到Nuetron的floatingip.update.end事件通知后,Designate自动更新对应记录。Sink也采用了可插拔结构,每个组织可以根据自己特定的使用场景编写相应的插件。
7.存储
Designate的存储驱动,同时也是SQL/NOSQL数据库服务器的驱动。Designate要求持久化数据存储支持SQLAlchemy引擎,并推荐使用MySQL驱动。
Designate各模块间采用AMQP消息队列机制进行通信。AMQP作为消息中枢,消息队列接收来自各个部件的RPC请求,并将其发送到各目标功能模块。