在上一篇文章中,我们和您一起了解了vRouter的内部结构和进程,今天继续Tungsten Fabric其它组件的内部探秘旅程。
作者:Tatsuya Naganawa 译者:TF编译组

- control内部 -

IFMAP-SERVER弃用

在R4.0之后,不建议使用ifmap-server,当前控制节点直接从cassandra接收配置信息。

  • https://github.com/tungstenfabric/tf-specs/blob/master/deprecating-discovery-4.0.md

话虽如此,但是在内部,它仍然使用ifmap结构来存储vrf、interface、logical-router等的拓扑数据。

为了直接从cassandra中拾取数据,对ifmap客户端进行了一些更改,这些更改由control使用。

  • https://bugs.launchpad.net/juniperopenstack/+bug/1632470

最初,ifmap客户端包含很多逻辑来从ifmap-server提取数据,但是目前它仅包含一种逻辑,从cassandra获取json文件,并用该数据填充ifmap结构。

  • https://github.com/Juniper/contrail-controller/tree/R2002/src/ifmap/client
  • https://github.com/Juniper/contrail-controller/tree/R3.2/src/ifmap/client

因此,它现在将ifmap用作内部使用的结构,而不是用作一个wire协议。

NAMED和DNS的区别

contrail-dns和contrail-named是不同的进程,实际上有着不同的用途。
contrail-dns具有与contrail-control类似的功能,它通过XMPP提供vDNS信息,vRouter将基于该输入执行一些DNS任务。

  • https://github.com/Juniper/contrail-controller/tree/master/src/dns
  • https://github.com/Juniper/contrail-controller/wiki/DNS-and-IPAM

contrail-named实际上并不使用XMPP,而是使用ISC绑定来提供DNS数据,用于对vDNS条目进行外部DNS查询。

  • https://github.com/tungstenfabric/tf-container-builder/blob/master/containers/controller/control/named/entrypoint.sh#L10

- config内部

CRUD操作REST API和MSGBUS更新

Config-api将提供REST API,以实现每个配置对象的CRUD操作,例如virtual-network、network-policy等。

为此,它基于架构(schema)文件动态创建URL。

  • _generate_resource_crud_methods和_generate_resource_crud_uri创建通用方法和URL

这种方法的默认行为是执行Cassandra更新,并且Rabbitmq交换也填充了一些信息,以供其它进程使用,例如schema-transformer、svc-monitor、device-manager。

  • https://github.com/Juniper/contrail-controller/blob/master/src/config/api-server/vnc_cfg_api_server/vnc_db.py#L1595-L1606
def dbe_create(self, obj_type, obj_uuid, obj_dict):(ok, result) = self._object_db.object_create(obj_type, obj_uuid,obj_dict)if ok:# publish to msgbusself._msgbus.dbe_publish('CREATE', obj_type, obj_uuid,obj_dict['fq_name'], obj_dict=obj_dict)self._dbe_publish_update_implicit(obj_type, result)return (ok, result)# end dbe_create

其它任务(例如检查输入数据或使用默认值填充)将由pre_dbe_create或post_dbe_create(此创建可以删除,更新,读取等)完成,并且按资源定义。

  • https://github.com/Juniper/contrail-controller/tree/master/src/config/api-server/vnc_cfg_api_server/resources

DEPENDENCY_TRACKER

schema-transformer、svc-monitor和device-manager使用dependency tracker来处理config-api中的amqp消息,并递归地评估更新对象所引用的对象。

  • https://github.com/Juniper/contrail-controller/blob/master/src/config/common/cfgm_common/dependency_tracker.py

在内部,如果reaction_map包含amqp消息中的对象的键(key),它将开始评估该对象。这里reaction_map其实是一个已更新对象名称的python dict,而其它对象名称需要评估。

举例来说,如果virtual-machine-interface已更新,

  • https://github.com/Juniper/contrail-controller/blob/master/src/config/schema-transformer/schema_transformer/to_bgp.py#L92-L94

如果它具有最初更新的virtual-machine-interface引用,还将评估virtual-machine、port-tuple、virtual-network和bgp-as-a-service。

- config database内部

读取CONFIG_DB_UUID键空间内容

当cqlsh看到Cassandra的内容时(例如cql> select * from config_db_uuid.obj_fq_name_table;),它将返回一些人类无法理解的输出。

关键是config-api内部使用pycassa的ColumnFamily(https://github.com/pycassa/pycassa#basic-usage),类似于Cassandra的ORM映射器。

要读取此信息,通过backup / restore程序创建的json文件是很方便的。

  • https://github.com/tnaganawa/tungstenfabric-docs/blob/master/TungstenFabricPrimer.md#backup-and-restore

尽管该结果与config-api的HTTP GET输出大部分相似。

TUNGSTEN FABRIC配置数据库中 ZOOKEEPER的使用

使用Cassandra计算下一个整数并不容易,为此Tungsten Fabric使用了Zookeeper。

https://stackoverflow.com/questions/53702288/is-increment-integer-in-cassandra-possible-in-some-cases

数据在各种Zookeeper的path中,可以使用以下命令查看。

docker exec -it config_database_zookeeper_1 bash./bin/zkCli.sh -server config-database-ip[zk: 172.31.12.209(CONNECTED) 0] ls /
[analytics-discovery-, api-server-election, device-manager, fq-name-to-uuid, id, schema-transformer, svc-monitor, zookeeper]
[zk: 172.31.12.209(CONNECTED) 1] ls /id
[bgp, security-groups, tags, virtual-networks]
[zk: 172.31.12.209(CONNECTED) 2] ls /id/bgp
[route-targets]
[zk: 172.31.12.209(CONNECTED) 3] ls /id/bgp/route-targets
[type0]
[zk: 172.31.12.209(CONNECTED) 4] ls /id/bgp/route-targets/type0
[0008000000, 0008000001, 0008000002, 0008000003, 0008000004, 0008000005, 0008000006]
[zk: 172.31.12.209(CONNECTED) 5] [zk: 172.31.12.209(CONNECTED) 11] get /id/bgp/route-targets/type0/0008000000
default-domain:default-project:default-virtual-network:default-virtual-network
[zk: 172.31.12.209(CONNECTED) 12]

备份脚本也可以用于转储所有Zookeeper数据。

https://github.com/tnaganawa/tungstenfabric-docs/blob/master/TungstenFabricPrimer.md#backup-and-restore

- analytics内部

REDIS、CASSANDRA和KAFKA

Analytics有多个后端数据库,最主要的是notabliy、redis和cassandra,如果安装了alarmgen,那么还包括kafka。

这些数据库由collector分别更新,当vRouter之类的sandesh更新时,control就已经到达了该进程。

收到之后,到达ruleeng.cc,

  • https://github.com/tungstenfabric/tf-analytics/blob/master/contrail-collector/ruleeng.cc#L900

并根据收到的sandesh数据类型执行一些任务。

  • 如果收到的是UVE,则填充redis和kafka,如果安装了Cassandra,还将填充此数据库的统计表。

因此,redis和kafka将仅处理UVE,当Cassandra未安装时,除UVE之外的所有数据都不会导入到analytics数据库中。

UVEUPDATE.LUA

在UVE到达collector时,collector目录中的一些lua文件将用于更新Redis。

  • https://github.com/tungstenfabric/tf-analytics/blob/master/contrail-collector/uveupdate.lua

在内部,它在编译时通过xxd命令转换为cpp文件。

  • https://github.com/tungstenfabric/tf-analytics/blob/master/contrail-collector/SConscript#L155-L160

- 补充一些配置knob

转发模式(FORWARDING MODE)

vRouter具有几种转发模式。

  • https://bugs.launchpad.net/juniperopenstack/+bug/1471637

默认情况下,它将使用L2/L3模式。L3模式和L2模式也有一些用例。

未知单播泛洪(FLOOD UNKNOWN UNICAST)

当使用L2 BMS连接时使用此knob。

  • https://bugs.launchpad.net/juniperopenstack/+bug/1424523

默认情况下,由于控制器知道虚拟机的所有mac地址,因此vRouter将丢弃未知的单播,尽管使用L2 BMS时并非如此。

因此,在这种情况下需要启用此knob。

允许传递(ALLOW TRANISIT)

此knob与服务链功能一起使用。

  • https://bugs.launchpad.net/opencontrail/+bug/1365277

当VM1 - VN1 - VNF1 - VN2 - VNF2 - VN3 - VM2已创建,并且VN1-VN2,VN2-VN3服务链已配置时,由于ServiceChain前缀不可传递,因此默认情况下VM1无法ping通VM2。

在VN2中启用此knob后,VN1中的前缀将导入到VN3,反之亦然,因此VM1可以ping通到VM3。

多重服务链(MULTIPLE SERVICE CHAIN)

我实际上从未尝试过此knob。

此URL中描述了详细信息:

  • https://bugs.launchpad.net/juniperopenstack/+bug/1505023

往期精选

Tungsten Fabric知识库丨vRouter内部运行探秘


Tungsten Fabric入门宝典系列文章——
1.首次启动和运行指南
2. TF组件的七种“武器”
3. 编排器集成
4.关于安装的那些事(上)
5.关于安装的那些事(下)
6.主流监控系统工具的集成
7.开始第二天的工作
8.8个典型故障及排查Tips
9.关于集群更新的那些事
10.说说L3VPN及EVPN集成
11.关于服务链、BGPaaS及其它
12.关于多集群和多数据中心
13.多编排器用法及配置

Tungsten Fabric知识库丨更多组件内部探秘相关推荐

  1. Tungsten Fabric知识库丨关于OpenStack、K8s、CentOS安装问题的补充

    作者:Tatsuya Naganawa 译者:TF编译组 多kube-master部署 3个Tungsten Fabric控制器节点:m3.xlarge(4 vcpu)-> c3.4xlarge ...

  2. Tungsten Fabric知识库丨测试2000个vRouter节点部署

    作者:Tatsuya Naganawa 译者:TF编译组 由于GCP允许启动多达5k个节点:),因此vRouter的规模测试程序主要针对该平台来介绍. 话虽如此,AWS也可以使用相同的程序 第一个目标 ...

  3. Tungsten Fabric知识库丨vRouter内部运行探秘

    原文链接: https://github.com/tnaganawa/tungstenfabric-docs/blob/master/TungstenFabricKnowledgeBase.md 作者 ...

  4. Tungsten Fabric入门宝典丨8个典型故障及排查Tips

    Tungsten Fabric入门宝典系列文章,来自技术大牛倾囊相授的实践经验,由TF中文社区为您编译呈现,旨在帮助新手深入理解TF的运行.安装.集成.调试等全流程.如果您有相关经验或疑问,欢迎与我们 ...

  5. TF实战丨使用Vagrant安装Tungsten Fabric

    本文为苏宁网络架构师陈刚的原创文章. 01 准备测试机 在16G的笔记本没跑起来,就干脆拼凑了一台游戏工作室级别的机器:双路E5-2860v3 CPU,24核48线程,128G DDR4 ECC内存, ...

  6. TF Live 直播回放丨Frank Wu:当OpenStack遇到Tungsten Fabric

    10岁的OpenStack,已经是开源IaaS世界里的"成年人",自从遇到开源SDN小伙伴Tungsten Fabric,两人便成为闯荡混合多云世界的好搭档. 5月26日,在TF中 ...

  7. 如何在OpenStack Kolla上部署Tungsten Fabric(附14个常见的配置问题)

    首先,使用contil-kolla-ansible-deployer容器在OpenStack Kolla上部署Tungsten Fabric(注:原文为Contrail,本文以功能一致的Tungste ...

  8. 云聚创新力量,助力多云互联:Tungsten Fabric在联通沃云峰会2019上分享开源SDN

    2019年12月20日,联通沃云峰会(WCS)2019在北京国际会议中心举行.本次峰会以"峯云5G"为主题,探讨在5G的时代大背景下,云计算技术如何作为强大基座,助力企业屹立峰顶翱 ...

  9. 在K8s上轻松部署Tungsten Fabric的两种方式

    第一种:在AWS的K8s上部署TF 首先介绍下如何在AWS上使用Kubernetes编排的Tungsten Fabric集群部署沙盒,15分钟就可以搞定.Tungsten Fabric集群由部署节点. ...

  10. Tungsten Fabric SDN — 软件项目编译与打包

    目录 文章目录 目录 tf-dev-env 编译 打包 分发 tf-dev-env tf-dev-env 是编译.打包 Tungsten Fabric 的工具集合,区别于 contrail-dev-e ...

最新文章

  1. Linux下的I/O复用与epoll详解
  2. 2.5.jieba分词工具、Jieba安装、全模式/精确模式、添加自定义词典、关键词抽取、词性标注、词云展示
  3. leetcode 164. Maximum Gap | 164. 最大间距(桶排序)
  4. UML+模式设计概述
  5. 在XX公司工作第二天,维护已有代码
  6. HDU 3342 Legal or Not(拓扑排序)
  7. 封包时发现的关于QIODevice类write函数的坑
  8. sizeof(class)分析
  9. another app is currently holding the yum lock;waiting for it to exit...
  10. charts 画折线图
  11. 如何下载vue.js
  12. smobiler中实现页面切换_.Net语言Smobiler开发之如何在手机上实现表单设计
  13. ac管理器管理员密码忘记了_你应该使用密码管理器吗
  14. 字符串按照ASCII排序
  15. 量化交易入门阶段——欧奈尔的CANSLIM模型(S 供需关系)
  16. 目标转化出价多少_头条信息流广告目标转化出价(ocpc出价)常见问题讲解
  17. 流水账之 QQ农场 (VS) 农民伯伯的农场
  18. 传奇服务器文件,【教程】传奇服务端(版本)的结构以及重要文件功能的概述-A02...
  19. jquery设置input不可编辑,背景变灰,鼠标变禁止
  20. 队列-线性表-数据结构和算法(Java)

热门文章

  1. 全球名校课程作业分享系列(6)--斯坦福计算机视觉与深度学习CS231n之神经网络细解与优化尝试
  2. 网易交互设计师微专业 目录
  3. 阳光长跑(阳光体育服务平台)
  4. word把选择答案弄到题目里_将Word解答中的答案项批量填入题干
  5. 转:量化投资新手指南-初识量化交易
  6. 智能合约审计之整形溢出攻击
  7. 每日一词20190301——比例尺和地图比例尺
  8. 计算机网络路由交换技术运用,计算机网络路由交换的技术应用与发展趋势研究...
  9. 操作系统概念第八章部分作业题答案
  10. 关于C语言中数组输入与打印