TiExciting —— 讓 TiDB 部署輕鬆簡單

作者:王軍

運維難,難於上青天。

作爲 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 的情況。

圖 1 部署方案

選擇完組件後,界面會自動根據節點數量、想要的組件生成部署方案。當然,作爲 Hackathon 作品,這裏的自動方案不一定是最合理的,以及實際場景中用戶很可能想要進一步自行定製拓撲,因此用戶可以在這個界面上拖拽各個組件來重新決定拓撲,或添加新組件。一般來說,如果只是不嚴格想體驗一下分佈式 TiDB 的話,包括只有一個節點等情況,用戶直接採用默認的拓撲即可,非常友好。

然後演示下最後安裝的效果:

圖 2 安裝演示

管理機器

啓動 TiExciting 後,界面會引導用戶首先增加機器,包括填寫連接方式等。這裏可以指定密碼或密鑰登錄,無需 root,也無需創建特別的用戶,只需填寫運維人員平時連接上去的方式即可。增加機器時候的設置也可以從現有機器設置複製。

圖 3 服務器添加演示

高級配置中可以指定位置標籤,包括這個機器屬於什麼機架,及這個機器屬於什麼機房。如果有指定位置標籤,配置完畢後就會在界面上按照機房和機架組織顯示這些機器,非常直觀。

圖 4 高級配置

完整成果演示視頻可以點擊這裏:TiExciting Demo 視頻

技術實現

界面

爲了能跨各個平臺展示界面,TiExciting 是以 Web 形式提供界面的,使用了比較流行的 React + MobX 方案實現。這樣,不僅 TiExciting 的界面是跨平臺的,而且即使 TiExciting 運行在無 UI 的服務器上,也能在用戶瀏覽器上遠程訪問到界面。

跨平臺

TiExciting 的部署邏輯及響應用戶操作的邏輯是採用 Python 編寫的,來達成跨平臺的目的。我們設想採用 Python 打包工具來實現用戶一鍵下載打開運行且不需要安裝的理念,但實際 Hackathon 上用下來發現它只能是個設想,坑還是挺多的。另外 Python 本身 runtime 就很大。如果再給我們一次機會,大概會改用 Golang 吧,生成一個 binary 是真的很簡單。

爲了儘可能地快,TiExciting 會儘可能地基於文件哈希來複用文件,例如已下載且校驗通過的 TiDB 二進制大禮包就不需要重複下載,已經成功部署的同理。TiExciting 還實現了異步有向無環圖的任務調度機制,當所有先決任務完成後,後續任務就可以得到執行,且之間沒有依賴關係的任務可以並行執行,如下圖所示:

圖 5 異步有向無環圖的任務調度機制

聊聊未來

因爲 Hackathon 時間有限,其實還有很多沒來得及做但想做的功能:

  • 更好的部署方案規劃。

  • 純界面實現擴容、縮容。

  • 純界面實現更新集羣。

  • 純界面管理集羣(啓動、停止、更新、滾動等)。

  • 將現有 TiDB Ansible 集羣納入 TiExciting 管理。

雖然 Hackathon 已告一段落,但我們希望將來能進一步完善 TiExciting,將它想做的都落地下來,成爲一個大家喜歡用的通用的工具,幫助更多人用上 TiDB 並改善運維的複雜度。

原文閱讀https://pingcap.com/blog-cn/tiexciting-makes-tidb-deployment-easy-and-simple/

發佈了250 篇原創文章 · 獲贊 280 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章