概述
在9月M$發(fā)布了其首個 Linux 網絡操作系統(tǒng) ACS 之后胚嘲,HP 也不甘寂寞地在 2015/10/5 發(fā)布了其基于 Linux 的開源網絡操作系統(tǒng) OpenSwitch椿胯,主要參與者包括 Accton, Arista, Broadcom, Intel周荐,QOSMOS, Vmware,參與者相對于其他的開源項目而言甚淡,略顯不足蜕青,特別是 ODM 廠商只有 Accton 一家钧敞。
OpenSwitch NOS 聚焦于數據中心交換機,支持 OCP 兼容交換機谅阿,通過 ONIE 安裝/卸載半哟,系統(tǒng)提供完備的 L2 與 L3 層網絡協(xié)議。
OpenSwitch 與著名的 Open vSwitch 只差了個v
签餐,說明這兩者是頗有淵源的镜沽,具體的見后文描述。
開發(fā)環(huán)境需求
最低硬件要求
- 2 core CPU
- 4 GB 內存
- 30 GB 硬盤空間
推薦硬件要求
- 4 core CPU
- 8 GB 內存
- 50 GB 硬盤空間
開發(fā)環(huán)境
官網提供了基于 Vagrant 的開發(fā)環(huán)境安裝指導贱田,如果沒有使用過 Vagrant缅茉,官方推薦在 Ubuntu 平臺上部署開發(fā)環(huán)境。
OpenSwitch 還支持在主流的 Linux 平臺上部署開發(fā)環(huán)境男摧,包括 Debian, Fedora, Suse 等蔬墩,具體見官網的部署指導。
OpenSwtich 的源碼可以從官網下載耗拓,代碼并沒有托管在官方的 github 上拇颅,這個在當下的開源社區(qū)中略顯得有點非主流,估計后續(xù)會遷過去乔询。 源碼中包含了多個工程樟插,如果只想編譯出 image 的話,不需要 clone 源碼竿刁,只需要 clone openswitch/ops-build 庫即可黄锤。
具體的開發(fā)環(huán)境配置指導可以參看官網的 Step-by-step Guide.
軟件架構
系統(tǒng)狀態(tài)數據庫(System state database)
System state database 即系統(tǒng)級的 OVSDB,是集中式的數據庫食拜,用于存儲所有用戶進程的配置鸵熟、狀態(tài)以及統(tǒng)計數據等信息。
狀態(tài)數據庫雖然簡化了配置以及數據存儲的實現负甸,但其主要的目標并非如此流强,集中式的數據庫是被設計來用于各個功能進程間信息交互,各功能進程不允許通過其他的方式交互呻待,只能夠使用狀態(tài)數據庫打月。
OpenSwtich 通過狀態(tài)數據庫以及功能進程業(yè)務交互的實現約束,解決多業(yè)務進程間的控制時序依賴的問題蚕捉。
OVSDB-Server 是個成熟的內存數據庫奏篙,其實現遵從于 OVSDB 協(xié)議(RFC 7047),數據庫實現提供一套完善的事務處理機制以及靈活數據變化的訂閱功能鱼冀。
OVSDB作為系統(tǒng)的基礎架構报破,還提供了數據一致性管理以及垃圾回收機制悠就。
系統(tǒng)中的各業(yè)務進程均通過 OVSDB 協(xié)議與 OVSDB-Server 進行通訊,同時也支持外部系統(tǒng)通過 OVSDB 協(xié)議與 OVSDB-Server 進行數據交互充易。
ops-switchd
ops-switchd 是系統(tǒng)中唯一允許訪問 SDK 的進程梗脾,其主要作用是將 OVSDB 的數據模型轉換為 ASIC 的數據并調用相應的 API,其為 Open vSwitch 中的 ovs-switchd 的擴展盹靴,SDK-Ind 層與 SDK-Spec 層之間的接口按 Open vSwitch 的 OFProto Provider
與 NetDev Provider
接口擴展設計炸茧,API 定義參看源文件 netdev-provider.h 與 ofproto-provider.h .
ops-switchd 的內部設計需求是為適配不同的芯片廠商的 SDK 服務,對于非 Broadcom 方案的硬件平臺上稿静,只需要移植 ops-switchd 中 SDK-Spec Plugin 即可梭冠,當前已實現的 SDK-Spec Plugin 支持:
- OpenNSL plugin: 基于 OpenNSL SDK 接口,支持 Broadcom Trident II 系列芯片
- Docker container plugin: 支持在 Docker 容器中運行 OpenSwtich改备。
硬件管理進程
OpenSwitch 提供了一系列硬件管理相關的進程控漠,其中工作在內核外設驅動與 OVSDB 之間,主要包括:
- 風扇管理進程
- 溫度管理進程
- 電源管理進程
- LED 管理進程
- 模塊熱插拔管理進程
虛接口管理進程
交換的每個物理端口以及邏輯接口(VLAN悬钳、LAG盐捷、Tunnel)等在內核中都有對應的虛接口(virtual port),通過這種實現默勾,控制面的協(xié)議收包時(如L2 BPDU碉渡、L3 協(xié)議報文)不需要遍歷 OVSDB 中的信息。
對于交換機的物理端口是通過 SDK 驅動的方式在內核中創(chuàng)建接口母剥,之后交換機即可以在這些接口上進行報文的收發(fā)滞诺。
L2/L3協(xié)議進程
每個協(xié)議都有自己獨立的守護進程(daemon),守護進程通過raw,UDP或TCP的sock從內核中相應的接口上收幀环疼。
OpenSwitch的LLDP組件源于 Vincent Bernat习霹, LACP 組件則是由 HP 自行開發(fā)。
OpenSwitch的L3協(xié)議來源于開源項目 Quagga 秦爆。
系統(tǒng)進程
OpenSwitch 中還存在許多與外部業(yè)務無關的進程序愚,其主要工作是管理 OVSDB 中的相關數據信息,主要包括:
- 初始化以及部署子系統(tǒng)的 ops-sysd
- 保存并加載配置文件的 ops-cfgd
- 管理系統(tǒng)接口速率/雙工/流控的 ops-intfd
- 等等
管理/監(jiān)控進程
雖然 OVSDB 是個強大的協(xié)議等限,通過此協(xié)議也能夠對系統(tǒng)的狀態(tài)進行管理與監(jiān)控,但 OVSDB 協(xié)議當前并未被廣泛使用芬膝,OpenSwitch 提供了多種的用戶管理代理進程,主要包括:CLI、REST API挠铲、Ansible甜橱、Chef 等等。
硬件設計
OpenSwitch 官網提供 硬件設計指導 的鏈接癣缅,不過當前打開里頭沒有內容(也有可能是我打開的姿勢不對吧 -_-!)厨剪。
最后
在交換機的開源硬件哄酝、軟件項目中 Broadcom 玩得不亦樂乎,但始終沒有見到 Marvell 身影祷膳,這位同學在 DC 領域失蹤很久了陶衅,目測再出現的可能性也不大了。
[end]
—