Collaborative Editing fails on clustered Confluence Data Center - can't establish a persistent WebSocket connection
プラットフォームについて: Data Center - この記事は、Data Center プラットフォームのアトラシアン製品に適用されます。
このナレッジベース記事は製品の Data Center バージョン用に作成されています。Data Center 固有ではない機能の Data Center ナレッジベースは、製品のサーバー バージョンでも動作する可能性はありますが、テストは行われていません。サーバー*製品のサポートは 2024 年 2 月 15 日に終了しました。サーバー製品を利用している場合は、アトラシアンのサーバー製品のサポート終了のお知らせページにて移行オプションをご確認ください。
*Fisheye および Crucible は除く
要約
After setting up a Clustered Confluence Data Center to run behind an Amazon Web Service Elastic Load Balancer, Collaborative Editing isn't working.
The error message displayed is The editor didn't load this time, and you already reviewed the document Confluence throws "The editor didn't load this time" error when trying to edit a page.
環境
Clustered Confluence Data Center using Self-Managed Synchrony
ロード バランサ
診断
- When capturing a HAR file, while editing a document with Collaborative Editing enabled, it's possible to see the WebSocket connection upgrade (HTTP 101 - Switching protocols). The WebSocket connection is a persistent connection and should be active during all the time the document is being edited. However, when we can see multiple requests for the Websocket upgrade, all taking a long time to complete, as for example:
In Synchrony logs of Node 1, we can see a ConnectTimeoutException happening when this node tries to communicate with Node 2 using Port 25500:
atlassian-synchrony.log for Node 12020-11-17 15:41:07,626 WARN [async-dispatch-12] [synchrony.event-bus] error creating topic connection {:throwable #error { 2020-11-17 15:41:07,626 DEBUG [2571:StdOutHandler [/data/atlassian/confluence/jre/bin/java]] :cause "connection timed out: /<NODE2_IP_ADDRESS>:25500" 2020-11-17 15:41:07,626 DEBUG [2571:StdOutHandler [/data/atlassian/confluence/jre/bin/java]] :via 2020-11-17 15:41:07,626 DEBUG [2571:StdOutHandler [/data/atlassian/confluence/jre/bin/java]] [{:type io.netty.channel.ConnectTimeoutException 2020-11-17 15:41:07,626 DEBUG [2571:StdOutHandler [/data/atlassian/confluence/jre/bin/java]] :message "connection timed out: /<NODE2_IP_ADDRESS>:25500"
On Node 2, we can see that Node 1 was reported dead, and the Cluster Membership is composed of Node 2 only:
atlassian-synchrony.log for Node 12020-11-17 15:41:34,724 WARN [hz._hzInstance_1_cluster-name-Synchrony.cached.thread-3] [internal.cluster.impl.MembershipManager] [<NODE2_IP_ADDRESS>]:5701 [cluster-name-Synchrony] [3.11.4] Member [<NODE1_IP_ADDRESS]:5701 - 610548f6-f067-4a9d-9a73-7e5c5a9b8491 is suspected to be dead for reason: No connection
When trying to test the WebSocket upgrade through curl, using Confluence Base URL, we receive an empty reply from the server instead of establishing a WebSocket connection:
WebSocket upgrade test$ curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Sec-WebSocket-Key: 33xyqDvzAXTYgsjjbaYD5A==" --header "Sec-WebSocket-Version: 13" https://<CONFLUENCE_BASE_URL>/synchrony/v1/bayeux-sync1 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0HTTP/1.1 101 Switching Protocols Date: Thu, 19 Nov 2020 02:05:57 GMT Connection: upgrade P3P: CP="This is not a P3P policy! See http://www.atlassian.com/company/privacy for more info." upgrade: websocket sec-websocket-accept: RV68WHXjNM0H+IFE5/W1ioLmMHI= 0 0 0 0 0 0 0 0 --:--:-- 0:01:00 --:--:-- 0 curl: (52) Empty reply from server
原因
The inter-node communication in Synchrony isn't working properly using the ports mentioned on the log files.
ソリューション
- Review the setup of all ports used by Synchrony on nodes of a Confluence Data Center setup. Ensure that:
- All nodes are listening on ports 5701 (Hazelcast for Synchrony) and 25500 (Cluster base port for Synchrony).
- You can establish a connection from one node to the other using these ports