作者:王軍
運維難,難於上青天。
作爲 PingCAP 員工,我們不僅平時自己用着 TiDB,也會自發的想讓周圍人也用上 TiDB。但在這個過程中,我們發現有以下問題:
-
上船難:官方推薦的部署方法 TiDB Ansible 限制較多,有一定的學習成本。對於運維同學比較容易上手,但是對於研發同學就比較不友好。用戶手冊詳細但是複雜,其中也有各種各樣的限制,特別是遇到錯誤的時候不好處理。
-
開船難:用上 TiDB 之後,後續對 TiDB 集羣進行運維(如擴容,升級),尤其在 PD 的擴容和縮容,安全性高,但是操作還是有些複雜。
-
開發上船容易翻:經常見到開發人員不知道水有多深,跟着文檔在自己機器上嘗試用 TiDB Ansible 部署 TiDB,結果一不小心就把系統改得面目全非。
爲了改進和解決這些痛點,我們組隊參加了 TiDB Hackathon 2019 比賽,編寫了 TiExciting 項目,並最終獲得大家的認可拿到了三等獎。
當前的上船門檻有多高?
在參賽前,我們先評估了一下之前的體感問題是不是真實存在的問題,因此我們在本次 Hackathon Ucloud 新集羣上進行了一番實測:
-
隊友 A:騰訊微信研發,從未接觸過 TiDB,首次嘗試部署:
- 按照 TiDB Ansible 超長的部署教程,部署 3 小時後沒有成功,遂放棄。
-
隊友 B:PingCAP 華東地區高級客戶支持,爲各種商業客戶部署過 TiDB:
- 操作熟練,但經常由於手滑或環境關係經歷各種報錯,憑豐富的知識知道怎麼解決,最終使用 20 分鐘部署完畢。
綜上,實踐表明,不論是新手還是老手,都要經過很複雜的步驟才能開始真正用起 TiDB 產品。另外,TiDB Ansible 本身還對部署環境提出了極高的要求,例如公有云環境直接無法通過入門檢測,這些都會勸退大量新用戶。
怎樣可以快速上船和開船?
爲了解決問題,我們先進行了需求設計:
-
爲了能快速上船,部署過程本身應該要做到「快」,能並行的操作就並行進行。
-
直觀方便清晰,最好不要文檔就能用起來:提供圖形化界面。
-
所有與易用性衝突的特性都需要讓步。
-
TiDB Ansible 強制環境檢查 → TiExciting 不阻止部署(但給出 Warning)。
-
TiDB Ansible 要求從中控機部署 → TiExciting 甚至可以從 Windows 開始部署,且不要求配置互信。
-
-
綠色環保有節操,沒有全家桶。
-
TiDB Ansible 強制要求進行系統配置調優滿足 TiDB 要求 → TiExciting 允許用戶可選地配置系統以便更好地運行 TiDB,且用戶知悉各個要進行的改動。
-
TiExciting 允許用戶自行勾選想要安裝的組件,遵循最小化原則。
-
當前安裝都是安裝一路綠燈,環境檢查只做告警,不推薦在生產環境使用。後期我們會添加嚴格模式,來做生產集羣管理。時刻對生成環境抱有敬畏之心。
Hackathon 成果
部署
創建完目標機器(後文介紹機器添加方式)後,就可以自由選擇其中的機器進行部署。界面上可以自行勾選想要的組件,或取消勾選不想要的組件。比如不想要監控大禮包,就可以直接取消勾選「監控」。另外 TiDB 也是可以取消勾選的,適用於只想使用 TiKV 的情況。
選擇完組件後,界面會自動根據節點數量、想要的組件生成部署方案。當然,作爲 Hackathon 作品,這裏的自動方案不一定是最合理的,以及實際場景中用戶很可能想要進一步自行定製拓撲,因此用戶可以在這個界面上拖拽各個組件來重新決定拓撲,或添加新組件。一般來說,如果只是不嚴格想體驗一下分佈式 TiDB 的話,包括只有一個節點等情況,用戶直接採用默認的拓撲即可,非常友好。
然後演示下最後安裝的效果:
管理機器
啓動 TiExciting 後,界面會引導用戶首先增加機器,包括填寫連接方式等。這裏可以指定密碼或密鑰登錄,無需 root,也無需創建特別的用戶,只需填寫運維人員平時連接上去的方式即可。增加機器時候的設置也可以從現有機器設置複製。
高級配置中可以指定位置標籤,包括這個機器屬於什麼機架,及這個機器屬於什麼機房。如果有指定位置標籤,配置完畢後就會在界面上按照機房和機架組織顯示這些機器,非常直觀。
完整成果演示視頻可以點擊這裏:TiExciting Demo 視頻
技術實現
界面
爲了能跨各個平臺展示界面,TiExciting 是以 Web 形式提供界面的,使用了比較流行的 React + MobX 方案實現。這樣,不僅 TiExciting 的界面是跨平臺的,而且即使 TiExciting 運行在無 UI 的服務器上,也能在用戶瀏覽器上遠程訪問到界面。
跨平臺
TiExciting 的部署邏輯及響應用戶操作的邏輯是採用 Python 編寫的,來達成跨平臺的目的。我們設想採用 Python 打包工具來實現用戶一鍵下載打開運行且不需要安裝的理念,但實際 Hackathon 上用下來發現它只能是個設想,坑還是挺多的。另外 Python 本身 runtime 就很大。如果再給我們一次機會,大概會改用 Golang 吧,生成一個 binary 是真的很簡單。
快
爲了儘可能地快,TiExciting 會儘可能地基於文件哈希來複用文件,例如已下載且校驗通過的 TiDB 二進制大禮包就不需要重複下載,已經成功部署的同理。TiExciting 還實現了異步有向無環圖的任務調度機制,當所有先決任務完成後,後續任務就可以得到執行,且之間沒有依賴關係的任務可以並行執行,如下圖所示:
聊聊未來
因爲 Hackathon 時間有限,其實還有很多沒來得及做但想做的功能:
-
更好的部署方案規劃。
-
純界面實現擴容、縮容。
-
純界面實現更新集羣。
-
純界面管理集羣(啓動、停止、更新、滾動等)。
-
將現有 TiDB Ansible 集羣納入 TiExciting 管理。
雖然 Hackathon 已告一段落,但我們希望將來能進一步完善 TiExciting,將它想做的都落地下來,成爲一個大家喜歡用的通用的工具,幫助更多人用上 TiDB 並改善運維的複雜度。
原文閱讀:https://pingcap.com/blog-cn/tiexciting-makes-tidb-deployment-easy-and-simple/