Apache doris 使用過程中常見問題彙總

語言: CN / TW / HK

這是從社群很多人在使用過程中遇到的問題進行的總結,彙總釋出出來方便大家查閱

1.tablet writer write failed, tablet_id=27306172, txn_id=28573520, err=-235 or -215

這個錯誤通常發生在資料匯入操作中。新版錯誤碼為 -235,老版本錯誤碼可能是 -215。這個錯誤的含義是,對應tablet的資料版本超過了最大限制(預設500),後續寫入將被拒絕。比如問題中這個錯誤,即表示 27306172 這個tablet的資料版本超過了限制。

這個錯誤通常是因為匯入的頻率過高,大於後臺資料的compaction速度,導致版本堆積並最終超過了限制。此時,我們可以先通過show tablet 27306172 語句,然後執行結果中的 show proc 語句,檢視tablet各個副本的情況。結果中的 versionCount即表示版本數量。如果發現某個副本的版本數量過多,則需要降低匯入頻率或停止匯入,並觀察版本數是否有下降。如果停止匯入後,版本數依然沒有下降,則需要去對應的BE節點檢視http://be.INFO日誌,搜尋tablet id以及 compaction關鍵詞,檢查compaction是否正常執行。關於compaction調優相關,可以參閱:

2.tablet 110309738 has few replicas: 1, alive backends: [10003]

這個錯誤可能發生在查詢或者匯入操作中。通常意味著對應tablet的副本出現了異常。

此時,可以先通過 show backends 命令檢查BE節點是否有宕機,如 isAlive 欄位為false,或者 LastStartTime 是最近的某個時間(表示最近重啟過)。如果BE有宕機,則需要去BE對應的節點,檢視be.out日誌。如果BE是因為異常原因宕機,通常be.out中會列印異常堆疊,幫助排查問題。如果be.out中沒有錯誤堆疊。則可以通過linux命令dmesg -T 檢查是否是因為OOM導致程序被系統kill掉。

如果沒有BE節點宕機,則需要通過show tablet 110309738 語句,然後執行結果中的 show proc 語句,檢視tablet各個副本的情況,進一步排查。

3.disk xxxxx on backend xxx exceed limit usage

通常出現在匯入、Alter等操作中。這個錯誤意味著對應BE的對應磁碟的使用量超過了閾值(預設95%)此時可以先通過 show backends 命令,其中MaxDiskUsedPct展示的是對應BE上,使用率最高的那塊磁碟的使用率,如果超過95%,則會報這個錯誤。

此時需要前往對應BE節點,檢視資料目錄下的使用量情況。其中trash目錄和snapshot目錄可以手動清理以釋放空間。如果是data目錄佔用較大,則需要考慮刪除部分資料以釋放空間了。具體可以參閱【磁碟空間管理】:

4.通過 DECOMMISSION 下線BE節點時,為什麼總會有部分tablet殘留?

在下線過程中,通過 show backends 檢視下線節點的 tabletNum ,會觀察到 tabletNum 數量在減少,說明資料分片正在從這個節點遷移走。當數量減到0時,系統會自動刪除這個節點。但某些情況下,tabletNum 下降到一定數值後就不變化。這通常可能有以下兩種原因:

1. 這些 tablet 屬於剛被刪除的表、分割槽或物化檢視。而剛被刪除的物件會保留在回收站中。而下線邏輯不會處理這些分片。可以通過修改 FE 的配置引數 catalog_trash_expire_second 來修改物件在回收站中駐留的時間。當物件從回收站中被刪除後,這些 tablet就會被處理了。

2. 這些 tablet 的遷移任務出現了問題。此時需要通過 show proc "/cluster_balance" 來檢視具體任務的錯誤了。

對於處理版本,可以先通過 show proc "/statistic" 檢視叢集是否還有 unhealthy 的分片,如果為0,則可以直接通過 drop backend 語句刪除這個 BE 。否則,還需要具體檢視不健康分片的副本情況。

5.doris網路引數 priorty_network應該如何設定?

priorty_network 是 FE、BE 都有的配置引數。這個引數主要用於幫助系統選擇正確的網絡卡 IP 作為自己的 IP 。建議任何情況下,都顯式的設定這個引數,以防止後續機器增加新網絡卡導致IP選擇不正確的問題。

priorty_network 的值是 CIDR 格式表示的。分為兩部分,第一部分是點分十進位制的 IP 地址,第二部分是一個字首長度。比如 10.168.1.0/8 會匹配所有 10.xx.xx.xx 的IP地址,而 10.168.1.0/16 會匹配所有 10.168.xx.xx 的 IP 地址。

之所以使用 CIDR 格式而不是直接指定一個具體 IP,是為了保證所有節點都可以使用統一的配置值。比如有兩個節點:10.168.10.1 和 10.168.10.2,則我們可以使用 10.168.10.0/24 來作為 priorty_network 的值。

6. doris FE的Master、Follower、Observer都是什麼?

首先明確一點,FE 只有兩種角色:Follower 和 Observer。而 Master 只是一組 Follower 節點中選擇出來的一個 FE。Master 可以看成是一種特殊的 Follower。所以當我們被問及一個叢集有多少 FE,都是什麼角色時,正確的回答當時應該是所有 FE 節點的個數,以及 Follower 角色的個數和 Observer 角色的個數。

所有 Follower 角色的 FE 節點會組成一個可選擇組,類似 Poxas 一致性協議裡的組概念。組內會選舉出一個 Follower 作為 Master。當 Master 掛了,會自動選擇新的 Follower 作為 Master。而 Observer 不會參與選舉,因此 Observer 也不會稱為 Master 。

一條元資料日誌需要在多數 Follower 節點寫入成功,才算成功。比如3個 FE ,2個寫入成功才可以。這也是為什麼 Follower 角色的個數需要是奇數的原因。

Observer 角色和這個單詞的含義一樣,僅僅作為觀察者來同步已經成功寫入的元資料日誌,並且提供元資料讀服務。他不會參與多數寫的邏輯

7.FE啟動失敗,fe.log中一直滾動 "wait catalog to be ready. FE type UNKNOWN"

這種問題通常有兩個原因:

1. 本次FE啟動時獲取到的本機IP和上次啟動不一致,通常是因為沒有正確設定 `priority_network` 而導致 FE 啟動時匹配到了錯誤的 IP 地址。需修改 `priority_network` 後重啟 FE。

2. 叢集內多數 Follower FE 節點未啟動。比如有 3 個 Follower,只啟動了一個。此時需要將另外至少一個 FE 也啟動,FE 可選舉組方能選舉出 Master 已提供服務。

如果以上情況都不能解決,可以按照 Doris 官網文件中的元資料運維文件進行恢復:

8.Failed to get scan range, no queryable replica found in tablet: xxxx

這種情況是因為對應的 tablet 沒有找到可以查詢的副本,通常原因可能是 BE 宕機、副本缺失等。可以先通過 `show tablet tablet_id` 語句,然後執行後面的 `show proc` 語句,檢視這個 tablet 對應的副本資訊,檢查副本是否完整。同時還可以通過 `show proc "/cluster_balance"` 資訊來查詢叢集內副本排程和修復的進度

9.使用 Stream Load 訪問 FE 的公網地址匯入資料,被重定向到內網 IP?

當 stream load 的連線目標為FE的http埠時,FE僅會隨機選擇一臺BE節點做http 307 redirect 操作,因此使用者的請求實際是傳送給FE指派的某一個BE的。而redirect返回的是BE的ip,也即內網IP。所以如果你是通過FE的公網IP傳送的請求,很有可能因為redirect到內網地址而無法連線。

通常的做法,一種是確保自己能夠訪問內網IP地址,或者是給所有BE上層假設一個負載均衡,然後直接將 stream load 請求傳送到負載均衡器上,由負載均衡將請求透傳到BE節點。


Apache doris微信公眾號(歡迎掃碼關注)

相關連結:
Apache Doris官方網站:

Apache Doris Github:

Apache Doris 開發者郵件組:[email protected]