我有 5 台专用服务器(相同的机器:32 核、96GB RAM、RAID 中的 SSD 驱动器和千兆以太网链路),配置了 Percona XtraDB Cluster。
存在一个反复出现的问题,导致集群严重减速,通常持续约 30 到 60 秒,但有时会卡住长达 5-10 分钟。
该系统用于繁忙的网站网络,我在每个网络服务器上使用 mysql-proxy 来平衡数据库的流量负载。
如果只启用一个节点,则不会出现此问题。相反,随着每个节点的增加,问题的严重程度(查询变慢/锁定的时间量)会增加,直到 4 个节点处于活动状态时变得非常难以忍受(此时集群无法再自动恢复)。
详细症状如下:
- 每隔 5 到 15 分钟,所有写入查询 (INSERT/UPDATE) 都会卡在每个节点的队列中。有些查询会在 45-50 秒后分派,而其他查询则会完全停滞。
- 大多数情况下,经过 30 到 60 秒后,集群就能以某种方式赶上,并在 1-2 秒内快速分派查询。
- 有时集群无法自动处理这些卡住的查询,我需要手动禁用最繁忙的网站以降低负载,并且在几乎没有负载的 30 秒后,集群再次能够分派所有查询。
错误日志通常很干净,在速度变慢之前或之后没有错误消息。我很少遇到这样的情况(可能 10 次中只有 1 次):
130906 9:53:27 [注意] WSREP: (3f3abd42-15bc-11e3-b38b-2e049b972e3b, 'tcp://0.0.0.0:4567') 打开消息中继请求,非活动对等体:tcp://IPOFONEOFTHENODES
130906 9:53:27 [注意] WSREP: (3f3abd42-15bc-11e3-b38b-2e049b972e3b, 'tcp://0.0.0.0:4567') 关闭消息中继请求
在正常负载下,我的 wsrep_cert_deps_distance 通常约为 400。一旦开始减速,wsrep_cert_deps_distance 就会缓慢增加,直到 2k-3k 范围(当它达到 3k 标记时,我需要手动禁用应用程序,否则集群无法自行恢复)
使用 mytop 和 atop 进行监控时,我注意到服务器或 mysql 进程中没有高负载。无论是在正常运行期间还是在减速期间,CPU 使用率始终相当低(约为最大值的 25%)。I/O 使用情况良好,RAM 充足,vmcom 低于限制。
我使用 myq_status 实时监控每个节点上的集群,以下是发生的情况:
- 即使出现速度减慢的情况,wsrep_flow_control_paused 变量也始终为 0.0。
- 没有发生 wsrep_local_bf_aborts 或 wsrep_local_cert_failures。
- 在每个节点上,出站复制通常为 0,当发生速度减慢时,则会增加到 200-300。
- 每个节点上的入站复制始终为 0(很少为 1,但即使在正常负载下也会发生这种情况)。这让我很困惑,因为集群中显然没有慢速节点。
- 从开始减速后 10-15 秒,每个节点上的操作数和发送和接收的字节数变为 0。它们保持为 0 一两秒,然后下一秒操作数和字节数增加,同时出现大量“oooe”操作(无序执行)。这种情况每隔几秒重复一次,直到服务器恢复正常。
以下是我为尝试解决问题而执行的测试的详细信息(没有任何成功......):
- 我首先检查了网络:服务器位于同一机架,具有专用的千兆网络,一切似乎运行正常,没有数据包丢失或其他明显的网络问题。
- 我检查了带宽使用情况:每个节点平均使用 30 到 100mbps(兆位)的带宽。我使用“iftop”实时检查,当问题发生时,带宽使用量通常低于平均值(15 到 30mbps)。同步节点时,带宽会上升到 800-900mbps(应该是这样的),所以我认为网络没有饱和。
- 我尝试了所有节点的组合,以确保某个特定节点会影响其他所有节点:无论我禁用或使用哪个节点,问题始终存在。问题始终与同时活动的节点数量有关。
有人遇到过类似的问题吗?提前致谢!