控制器必须在具有较低延迟的磁盘上运行。群集要求每个节点的磁盘存储系统具有小于 300 毫秒的峰值写入延迟以及小于 100 毫秒的平均写入延迟。

问题

  • 部署的 NSX Controller 与控制器群集断开连接。
  • 由于磁盘分区已满,无法收集任何控制器日志。
  • 如果存储系统不满足这些要求,则群集可能变得不稳定,并且导致系统停机时间。
  • show network connections of-type tcp 命令输出中不再显示适用于正常工作的 NSX Controller 的 TCP 侦听器。
  • 断开连接的控制器尝试使用无效的全零 UUID 加入群集。
  • show control-cluster history 命令显示类似下面的消息:

    INFO.20150530-000550.1774:D0530 13:25:29.452639 1983 zookeeper_client.cc:774] Zookeeper client disconnected!

  • NSX Controller 控制台中运行 show log cloudnet/cloudnet_java-zookeeper*.log 命令将包含类似下面的条目:
    cloudnet_java-zookeeper.20150530-000550.1806.log-2015-05-30
    	 13:25:07,382 47956539 [SyncThread:1] WARN
    	 org.apache.zookeeper.server.persistence.FileTxnLog - fsync-ing the write ahead
    	 log in SyncThread:1 took 3219ms which will adversely effect operation latency.
    	 See the ZooKeeper troubleshooting guide
  • NSX Controller 日志包含类似下面的条目:
    D0525 13:46:07.185200 31975
    	 rpc-broker.cc:369] Registering address resolution for: 20.5.1.11:7777
    D0525 13:46:07.185246 31975
    	 rpc-tcp.cc:548] Handshake complete, both peers support the same
    	 protocol
    D0525 13:46:07.197654 31975
    	 rpc-tcp.cc:1048] Rejecting a connection from peer
    	 20.5.1.11:42195/ef447643-f05d-4862-be2c-35630df39060, cluster
    	 9f7ea8ff-ab80-4c0c-825e-628e834aa8a5, which doesn't match our cluster
    	 (00000000-0000-0000-0000-000000000000)
    D0525 13:46:07.222869 31975
    	 rpc-tcp.cc:1048] Rejecting a connection from peer
    	 20.5.1.11:42195/ef447643-f05d-4862-be2c-35630df39060, cluster
    	 9f7ea8ff-ab80-4c0c-825e-628e834aa8a5, which doesn't match our cluster
    	 (00000000-0000-0000-0000-000000000000)

原因

出现该问题是因为磁盘速度较慢,这会对 NSX Controller 群集造成不利的影响。

  • /var/log/cloudnet/cloudnet_java-zookeeper log 文件中查找 fsync 消息以检查较慢的磁盘。如果 fsync 所需的时间超过 1 秒,Zookeeper 将显示 fsync 警告消息,这清楚地指明了磁盘太慢。VMware 建议将一个逻辑单元号 (Logical Unit Number, LUN) 明确专用于控制群集以及/或者将存储阵列移到离控制群集更近的位置以降低延迟。
  • 您可以查看读取延迟和写入延迟计算结果(默认情况下,计入 5 秒移动平均值),而该结果用于在违反延迟限制时触发警报。在平均值降到低水位线后,将关闭警报。默认情况下,高水位线设置为 200 毫秒,低水位线设置为 100 毫秒。您可以使用 show disk-latency-alert config 命令。输出如下所示:
    enabled=True   low-wm=51      high-wm=150
    nsx-controller # set disk-latency-alert enabled yes
    nsx-controller # set disk-latency-alert low-wm 100
    nsx-controller # set disk-latency-alert high-wm 200
  • 可以使用 GET /api/2.0/vdn/controller/<controller-id>/systemStats REST API 获取控制器节点的延迟警报状态。
  • 可以使用 GET /api/2.0/vdn/controller REST API 指示是否在控制器节点上检测到磁盘延迟警报。

解决方案

  1. 在低延迟磁盘上部署 NSX Controller
  2. 每个控制器应使用自己的磁盘存储服务器。不要在两个控制器之间共享同一磁盘存储服务器。

后续步骤

有关如何查看警报的详细信息,请参阅查看磁盘延迟警报