Tungsten Fabric知识库丨更多组件内部探秘

杀马特。学长 韩版系。学妹 提交于 2020-10-07 05:04:31

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

作者:Tatsuya Naganawa 译者:TF编译组

- control内部 -

IFMAP-SERVER弃用

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

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

NAMED和DNS的区别

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

为此,它基于架构(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 msgbus
            self._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(此创建可以删除,更新,读取等)完成,并且按资源定义。

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

- 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映射器

Tungsten Fabric知识库丨更多组件内部探秘

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

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,

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

UVEUPDATE.LUA

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

- 补充一些配置knob -

转发模式(FORWARDING MODE)

vRouter具有几种转发模式。

未知单播泛洪(FLOOD UNKNOWN UNICAST)

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

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

允许传递(ALLOW TRANISIT)

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

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

多重服务链(MULTIPLE SERVICE CHAIN)

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

此URL中描述了详细信息:

往期精选
Tungsten Fabric知识库丨vRouter内部运行探秘


Tungsten Fabric入门宝典系列文章——

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


Tungsten Fabric知识库丨更多组件内部探秘
Tungsten Fabric知识库丨更多组件内部探秘

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!