概述
--- 叢集前端報錯 ---
該Redis節點無法正常使用,請即時檢查該節點狀態
問題描述:
節點管理報錯:該Redis節點無法正常使用,請即時檢查該節點狀態,如下圖所示:
原因分析:
某個節點出現異常或已經宕掉,無法繼續在 Redis 叢集中提供服務。
解決方案:
1)登入 Redis 叢集,輸入cluster nodes檢查 Redis 叢集狀態,如下所示:
當檢查到某個 Redis 節點是當機(fail)狀態,請即時檢查該 Redis 節點進程,若進程還在,則 kill 掉進行重啟,若進程不在,則直接啟動該節點,啟動後再次進行檢查是否恢復。
2)如果想進一步確認 Redis 叢集的可用性,可以連結某個主節點(master)測試是否能夠寫入 key
正常情況如下所示:
異常情況如下所示:
當檢查到 Redis 叢集是無法寫入(down)的狀態時,此種異常較為罕見,建議重啟整個 Redis 叢集。
該節點與XXX節點的JAR包不一致
問題描述:
節點管理報錯:該節點與XXX節點的jar包不一致,請即時更新jar包並重啟該節點,如下圖所示:
原因分析:
節點啟動程式會與第一個加入叢集的節點對比jar包是否一致,若檢查到不一致情況,則前端進行異常展示並給出詳細的異常資訊。
解決方案:
參照異常提示, 檢查各個節點下的 JAR 包並進行調整,調整完畢後重啟節點,再觀察是否還有報錯。
叢集節點XXX與基準節點存在不一致檔案
問題描述:
節點管理報錯:叢集節點XXX與基準節點存在不一致檔案,且無法自動同步,請檢查該節點狀態,如下圖所示:
原因分析:
該節點與檔案同步基準節點進行檔案同步時,出現同步錯誤或者請求逾時,重複嘗試 3 次仍然無法成功,則前端進行異常展示。
解決方案:
檢查節點間通訊、網路狀態是否正常,若有異常則即時進行調整。
異常模組:CLUSTER_MEMBER_MODULE
問題描述:
叢集節點頁面標紅,報錯為:該節點存在異常的模組,暫無法正常提供服務,異常模組:CLUSTER_MEMBER_MODULE,如下圖所示:
排查步驟及解決方案:
可參考:叢集節點標紅異常模組CLUSTER_MEMBER_MODULE
Could not get a resource from the pool
問題描述:
報表介面存取的時候,報錯:Could not get a resource from the pool 如需存取請聯絡管理者,如下圖所示:
原因分析:
Redis 當機
網路異常
工程運作時修改了 Redis密碼
解決方案:
如果是 Redis 當機或網路異常,正常排查和解決即可
如果是 Redis 修改了密碼需重啟 Tomcat 工程,重啟工程後進入平台頁面重新配置 Redis 密碼即可
Redis由單機模式變為叢集模式無法登入
叢集部署時,狀態伺服器為 Redis,Redis 是單機非叢集模式。
突然無法存取,存取報表登入http://ip:port/webroot/decision頁面時,提示 Redis 的錯誤。無法登入,也無法修改狀態伺服器模式。
主要是狀態伺服器 Redis 的模式改變造成無法存取。Redis 模式由單機改為叢集,狀態伺服器的模型由單機改為叢集。
1)登入 MySQL 資料庫,修改資料庫表資訊,SQL 語句如下:
update fine_conf_entity set value='false' where id='StateServerConfig.clusterMode';
update fine_conf_entity set value='false' where id='FineClusterConfig.params.cluster';
2)把各節點下的WEB-INF/config/cluster.config刪除。
3)然後停止服務,重啟各節點即可。
--- 遠端設計 ---
伺服器斷開連結後遠端設計沒有提示斷開
問題描述:
設計器遠端設計切換到某個節點之後,當伺服器斷開連結,遠端設計沒有提示斷開連結。
原因分析:
1)現在彈窗觸發 是基於Socket.IO 監聽 disconnect 事件,但是這個事件斷開後需要幾秒到幾十秒不等才會被回应 (這個時間沒法把控 取決於斷開的形式:
如果是伺服器直接關閉的話,可以很快回应。
如果是 vpn 斷開的話 回应較慢,回应後就會彈窗。
2)遠端設計有自己的心跳機制,30s 進行一次連結校驗。若連續超過3次校驗失敗,則判斷為斷開連結,這個目前也有斷開的事件 90s+後被回应的情況,時間是可控的可配置的。
解決方案:
並不是遠端設計沒有斷開,而是提示離開叢集環境的回应彈窗出現速度比較慢,此問題在後續會進行優化。且後續產品中遠端設計心跳斷開也會提供提示。
啟動 https 遠端設計報錯
問題描述:
切換工作區間到遠端環境,啟動 https,伺服器關掉之後,頁面不會有提示。後台日誌有報錯;此時點選範本,會提示範本不存在。如下圖所示:
原因分析:
現有的遠端設計 websocket 不支援 https,目前僅支援 http,而遠端連結斷開提醒是基於 websocket 實現,所以不支援頁面不會有提示。
解決方法:
使用 http 模式即可。
--- 叢集啟動後各節點只能看到自身節點資訊 ---
叢集間無法通訊
問題描述:
叢集間無法通訊,各個節點只能看到自己的節點資訊。
解決方案:
1)網路不允許 UDP 組播
如果網路不允許組波,而通訊協定選擇的是 UDP,需要改用 TCP。
2)防火牆未開放叢集通訊埠
對於 TCP,節點之間需要互相開放 7800, 7810, 7820, 7830, 7840, 7850, 7860, 7870 這八個埠;
對於 UDP,需要隨機開放 45588~65536 埠中的一個,滿足 UDP 存取。
IP 互相 ping 不通(網段和 IP 選擇不當)
容器化部署web叢集的時候使用的是bridge模式預設,導致不是同一台宿主機上面的節點不能 ping 通。
解決方案容器啟動鏡像的時候採用--net=host採用host模式
4)啟動報錯java.net.UnknownHostException: XXXX: XXXX: 未知的名稱或服務
每個節點執行一下,以把 hostname 加到 /etc/hosts 的 127.0.0.1 記錄中
sudo sed -i -e '/127.0.0.1/ s/\(localhost\)/'$(hostname)' \1/' /etc/hosts
5)ip 顯示的不對,需要手動選擇伺服器實際的ip。
節點啟動後互相 telnet 78xx 埠正常
問題描述:
節點啟動後互相 telnet 78xx 埠正常,各個節點只能看到自己的節點資訊。
解決方案:
這種情況一般是兩個節點的叢集 id 不一致導致,檢查兩個節點WEB-INF/config/db.properties檔案的 hibernate.connection.url 值是否一致(字面意思,要一模一樣,不要使用 localhost),如果不一致表示屬於不同叢集,所以會出現節點看不到對方節點,對於使用 oracle 資料庫的,還需要檢查 hibernate.default_schema 是否一致。
節點 id 衝突
問題描述:
節點 id 衝突,各個節點只能看到同一個節點的資訊(2019.06以前版本)。
排查步驟:
1)到每個節點的叢集配置/節點管理查看id是否衝突。
2)排查下面的原因:
docker部署
(同鏡像同啟動順序時,docker 指定的 mac 地址是一樣的),或者使用了橋接模式,沒有第三方網路工具的情況下應使用 host 模式,讓宿主機和容器共享 ip 和埠。
亞馬遜伺服器 EC2
(或者類似的虛擬伺服器)上部署(和上面類似,沒有獨立的 mac 地址?)。
cluster.properties
手動在各機器 cluster.properties 指定了一樣的節點 id。
--- 其他 ---
檔案解析失敗
問題描述:
在叢集遷移前後環境的 JAR 包版本一致的前提下,叢集遷移時,匯入附件 resource.zip 出錯,報錯如下圖所示:
原因分析:
配置 Nginx 的叢集環境,Nginx 預設限制只能上傳小於 1M 的檔案,當資源遷移的resource.zip過大時會上傳失敗。
注:單機無上傳限制
解決方案:
開啟/nginx/nginx.conf,修改 Nginx 的配置檔案,增大 Nginx 上傳檔案大小限制。如下圖所示:
圖中的 8M 可自行根據需求修改大小,程式碼如下所示:
client_max_body_size 8M; client_body_buffer_size 128k;
修改完成後,重新載入配置檔案,即可重新成功上傳。