此博客收藏与NSX相关的官方或者非官方设计文档、最佳实践、技术白皮书等资料
文中大部分资料可以在 VMware Community 看到,链接:https://communities.vmware.com/community/vmtn/nsx/content
pynsxc 是 VMware 使用 Python 开发的针对于NSX的工具箱。方便用户通过 Python 脚本来查看或配置 NSX 环境,甚至可以做到 NSX 自动化运维。
项目可以在 Github 上看到:https://github.com/vmware/pynsxv
在上面 Github 地址上的 docs 目录中已经有安装文档,推荐使用 pip (Python包管理器)安装。pip安装方式自行搜索,不同系统不一样,Linux 使用系统自带包管理器就可以安装。MacOS 使用 sudo easy_install pip
安装。
然后使用 pip 一键安装 pynsxv:
sudo pip install pynsxv
安装完成后,第一件事是配置 pynsxv的配置文件。
在Linux下,配置文件路径为: /usr/lib/python2.7/site-packages/pynsxv/nsx.ini
MacOS 下,配置文件:/Library/Python/2.7/site-packages/pynsxv/nsx.ini
根据配置文件的提示设置 NSX manager 和 vcenter 信息。
在官方文档中文档有说明如何使用此工具箱。工具箱功能相对比较简单,可以添加逻辑交换机、DLR、ESG、防火墙策略等。下面举例如何查看及创建 LSW :
使用 pynsxv lswitch list
查看所有逻辑交换机
运行命令pynsx lswitch create -n python_cli_LS1
等待命令执行完毕后,即可在vCenter中看到新建的逻辑交换机。
CDO 全称为 Controller Disconnected Operation,中文翻译为控制器断连操作模式。用于解决 Controller Cluster 集群所有节点都宕机时可能带来的VXLAN网络通信故障。一般用于 Cross-VC 环境。
CDO mode 在 Tranport Zone 级别设置,支持 Local Transport Zone 以及 Universal Tranport Zone,如果 Local Tranport Zone 和 Universal Tranport Zone 公用一个 VDS,则 CDO 只会在Universal Tranport Zone 生效。
配置过NSX可能会发现在添加 Logical Switch 时 VNI 是按照设置的 Segment ID(分段ID)自动进行设置的。比如设置 SegmentID 为5000-6000,则第一个创建的 Logical Switch 会使用 VNI 5000;在启动 CDO 模式后,会自动创建一个隐藏的 Logical Switch,会为其设置下一个可用的 VNI。
在启用 CDO 后,所有在这个 Tranport Zone 的主机都会加入创建的 CDO Logical Switch,Controller Cluster 中的某台 Controller 会负责创建一个 Global VTEP List,这个 List 就包含所有在 Tranport Zone 的主机。如果 Controller Cluster 故障,所有主机会将网络中的 BUM(Broadcast,unknown unicast,Multicast)通过 CDO Logical Switch 发给其他所有主机,保证通信正常。
CDO mode 类似于硬件网络中说的软件 Bypass,即软件在检测出自己功能故障导致网络通信中断时,自动放行所有流量,不再通过这些功能来处理流量。
一般来说,Controller Cluster 已经提供了一定的冗余,自身为多节点设计,任意节点的故障不会导致 Controller Cluster 故障。另 NSX 将控制层和数据层分离的机制也保证 Controller Cluster 即使失效,数据层的转发也不受影响。
但是在某些特殊情况下,Controller 集群的故障会带来网络中断,下面看一些场景:
1、在下图场景中,两个虚拟机运行在同一个 Logical Switch 上,运行在同一台主机虚拟机能够正常访问。
当前的灾备系统依然比较复杂,因为灾备包含存储、计算和网络资源,当前的解决方案例如SRM可以完成计算以及存储的恢复,但是网络受限于物理架构,比较难通过SRM实现自动恢复。网络方面具体的问题如下
为了确保灾难发生后两个数据中心都可管理,需要分离管理平面,即两个数据中心都有自己的vCenter管理本地的虚拟机。
SRM依然可以沿用其最佳实践,在使用NSX后,SRM不在需要PortGroup的Mapping,只需要通过NSX创建全局逻辑网络。
在使用SRM时,Storage Replication是必须用到的,可以使用Array-Based Replication或者vSphere Replication。
如果使用 Array-Based Replication,则需要在SRM上安装SRA(Storage Replication Adapter),让SRM可以与存储阵列通信。
两个数据中心分别安装自己的NSX manager,关联到本数据中心的vCenter,这时候需要使用Cross-VC NSX解决方案,使用 Universal 逻辑网络。
使用 Cross-VC NSX 时网络有以下特点:
1、使用裸光纤打通二层网络
摘要:在进行 NSX VXLAN 配置的时候,先决条件是物理承载网络的二层以及三层 MTU ≥ 1600,否则可能出现数据中心内部访问、外部访问 ping 均正常,但是某些高层业务(例如 web服务)不通的情况,以下介绍下如何在不同平台进行大包 ping 测试
命令格式:vmkping ++netstack=vxlan -d -s 1570 Destination-VTEP-IP
使用 ESXi 的 vmkping 时,选择 1570 bytes,1570 代表 ICMP 包载荷大小,加上 ICMP 包头 8 bytes,再加上 IP 包头 20 bytes,总 IP 包大小 1598,刚好小于物理网络设置的 1600。实际最大可以发的包为 1572 bytes,1570 只是为了好记忆。
目的地址必须是其他 ESXi 主机的 VTEP VMkernel 地址。
root@esxcomp-02a ~ # vmkping ++netstack=vxlan -d -s 1570 192.168.250.100
PING 192.168.250.100 (192.168.250.100): 1570 data bytes
1578 bytes from 192.168.250.100: icmp_seq=0 ttl=64 time=1.294 ms
1578 bytes from 192.168.250.100: icmp_seq=1 ttl=64 time=0.686 ms
1578 bytes from 192.168.250.100: icmp_seq=2 ttl=64 time=0.758 ms
--- 192.168.250.100 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.686/0.913/1.294 ms
root@esxcomp-01a ~ # vmkping ++netstack=vxlan -d -s 1570 192.168.250.101
PING 192.168.250.101 (192.168.250.101): 1570 data bytes
1578 bytes from 192.168.250.101: icmp_seq=0 ttl=64 time=0.065 ms
1578 bytes from 192.168.250.101: icmp_seq=1 ttl=64 time=0.118 ms
--- 192.168.250.101 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.065/0.091/0.118 ms
如果ESXI的VTEP在同一段,vmkping 测试不通过,那一定是物理交换机对应物理接口的MTU未设置好。
如果ESXi的VTEP不在同一网段,vmkping 测试不通过,需要逐段去 vmkping 测试沿途哪台交换机设置有问题(ping VTEP网关的IP地址,以及沿途三层网络互连IP)。