Skip to content

Latest commit

 

History

History
38 lines (31 loc) · 3.02 KB

tinydns.md

File metadata and controls

38 lines (31 loc) · 3.02 KB

Tinydns

1. 功能简介

作为Lain集群中重要的layer1组件,tinydns 是一个轻量级的域名解析服务,负责集群中应用内部各个proc之间的proc_name-instance_no的地址解析,和use_service时,service_name的地址解析。应用升级,或容器迁移后,proc的各个instance的IP地址有可能发生变化,proc_name-instance_noservice_name是应用内部以及应用与service/resource通信定位的唯一依据,因此tinydns配置的正确性与高可用性是应用能够正常运转的基础。

Lain的tinydns特点如下:

  • 支持主备:当部署的tinydns的实例个数大于1时,Lain的networkd组件会自动监听所有的tinydns实例的工作状态,并将DNS的虚拟IP绑定到某一个正常工作的tinydns实例所在的节点上。如果该实例出现问题,networkd也会及时地将该虚拟IP迁移到正常的容器所在的节点上。tinydns各个实例之间则不会相互影响。
  • 动态配置更新:tinydns会监听Lain的lainlet组件,一旦有应用部署、更新、删除,tinydns会根据更新后的信息更新自己的DNS配置文件。该更新功能是瞬时的,几乎不会被其他应用感知。
  • 低能耗:tinydns占用的系统资源很少,每个容器只需要200MB左右的内存即可正常高效工作。在运行时CPU的占用也较低。
  • 无状态:tinydns是无状态的应用,可以直接迁移。

Tinydns所依赖的lain组件:

  • lainlet
  • networkd(需要负载均衡或HA时依赖)

2. 应用架构与工作流程

Tinydns由Supervisor管理以下两个进程:

  • New djbdns:提供DNS服务的进程。
  • dns-creator:负责监听lainlet,动态更新DNS配置文件,并通知New djbdns重新加载DNS配置文件。

Tinydns中New djbdnsdns-creator与Lain的lainlet架构如下图

tinydns的架构图

当tinydns开始运行后,其工作流程为:

  1. dns-creator监听lainlet/v2/coreinfowatcher/v2/depends接口。当有应用更新时,lainlet/v2/coreinfowatcher接口会推送更新事件;当有use_service的应用更新时,/v2/depends接口会推送更新事件。
  2. dns-creatorlainlet中获得集群的dns_ipdomain的配置信息。
  3. dns-creator根据1和2中的数据生成新的dns配置文件。

生成配置文件的内容包括:

  • 应用内部proc之间的地址解析:=$proc_name-$instance_no.$domain.lain:$container_ip:300
  • 应用到portal的单向地址解析:=$service_name.$app_name.lain:$portal_ip::$node_ip
  • 内部IP反解:.20.172.in-addr.arpa:$dns_ip:a:300
  • 外部域解析:+*.$domain:$dns_ip:300
  • 内部域解析:.lain:$dns_ip:a:300
  • 权威dns配置:.$domain:$dns_ip:a:300
  1. dns-creator通知New djbdns重新加载DNS配置文件,并重新进入监听状态。

配置文件的位置为 /etc/ndjbdns/data

  1. New djbdns重新加载DNS配置文件,DNS配置更新完成。