赞
踩
点击蓝字关注
找到右上角点击 ... 设为 星标置顶
在上一篇文章中,我们和您一起了解了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
https://bugs.launchpad.net/juniperopenstack/+bug/1632470
https://github.com/Juniper/contrail-controller/tree/R2002/src/ifmap/client
https://github.com/Juniper/contrail-controller/tree/R3.2/src/ifmap/client
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
https://github.com/tungstenfabric/tf-container-builder/blob/master/containers/controller/control/named/entrypoint.sh#L10
CRUD操作REST API和msgbus更新
Config-api将提供REST API,以实现每个配置对象的CRUD操作,例如virtual-network、network-policy等。 为此,它基于架构(schema)文件动态创建URL。_generate_resource_crud_methods和_generate_resource_crud_uri创建通用方法和URL
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
https://github.com/Juniper/contrail-controller/blob/master/src/config/schema-transformer/schema_transformer/to_bgp.py#L92-L94
'virtual_machine_interface': {'self': ['virtual_machine', 'port_tuple', 'virtual_network','bgp_as_a_service'],
如果它具有最初更新的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映射器。
def _cassandra_init_conn_pools(self):
(snip)for cf_name in cf_dict:
cf_kwargs = cf_dict[cf_name].get('cf_args', {})self._cf_dict[cf_name] = ColumnFamily(
pool,
cf_name,
read_consistency_level=ConsistencyLevel.QUORUM,
write_consistency_level=ConsistencyLevel.QUORUM,
dict_class=dict,
**cf_kwargs)
要读取此信息,通过backup / restore程序创建的json文件是很方便的。
https://github.com/tnaganawa/tungstenfabric-docs/blob/master/TungstenFabricPrimer.md#backup-and-restore
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/0008000000default-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
如果收到的是UVE,则填充redis和kafka,如果安装了Cassandra,还将填充此数据库的统计表。
// First publish to redis and kafkaif (uveproc) handle_uve_publish(parent, vmsgp, db, header, db_cb);// Check if the message needs to be droppedif (db && db->DropMessage(header, vmsgp)) {return true;
}if (db) {// 1. make entry in OBJECT_VALUE_TABLE if needed// 2. get object-type:name{1-6}
handle_object_log(parent, vmsgp, db, header, &object_names, db_cb);// Insert into the message table
db->MessageTableInsert(vmsgp, object_names, db_cb);if (uveproc) handle_uve_statistics(parent, vmsgp, db, header, db_cb);
handle_session_object(parent, db, header, db_cb);
}
因此,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
https://github.com/tungstenfabric/tf-analytics/blob/master/contrail-collector/SConscript#L155-L160
def RedisLuaBuild(env, scr_name):
env.Command('%s_lua.cpp' % scr_name ,'%s.lua' % scr_name,\'(cd %s ; xxd -i %s.lua > ../../../%s/%s_lua.cpp)' %
(Dir('#src/contrail-analytics/contrail-collector').path,
scr_name, Dir('.').path, scr_name))
env.Depends('redis_processor_vizd.cc','%s_lua.cpp' % scr_name)
-
补充一些配置knob
-
转发模式(forwarding mode)
vRouter具有几种转发模式。https://bugs.launchpad.net/juniperopenstack/+bug/1471637
未知单播泛洪(flood unknown unicast)
当使用L2 BMS连接时使用此knob。https://bugs.launchpad.net/juniperopenstack/+bug/1424523
允许传递(allow tranisit)
此knob与服务链功能一起使用。https://bugs.launchpad.net/opencontrail/+bug/1365277
多重服务链(multiple service chain)
我实际上从未尝试过此knob。 此URL中描述了详细信息:https://bugs.launchpad.net/juniperopenstack/+bug/1505023
原文链接:
https://github.com/tnaganawa/tungstenfabric-docs/blob/master/TungstenFabricKnowledgeBase.md
TF知识库
vRouter内部运行探秘
推荐阅读
Tungsten Fabric入门宝典系列文章——
首次启动和运行指南
TF组件的七种“武器”
编排器集成
关于安装的那些事(上)
多云互联 · 开源开放
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。