蜂燈科技基於對區塊鏈技術的深度探索,決定開設技術分享專區,為進階中的伙伴們打造一個學習、交流的共享平台。本期技術分享主題:鏈集群方案拓展。

產品功能簡介

Daemon 作為Lotus 集群中的節點進程,用於處理鏈上的共識信息,是各個集群與整體Lotus 網絡通信的網關,是lotus 集群的重要組成部分。 Daemon 的作用是:驗證網絡事務,管理錢包,可以執行和檢索處理。由於Daemon 在Lotus 的集群中扮演著重要的角色,所以daemon 服務的健康和穩定是非常重要的。本方案可以做到集群運行過程中miner 機器可智能自動尋找集群中最優狀態的daemon ,保證高可用,避免單點故障影響整體,還可在集群運行過程中無任何影響地進行daemon 剪枝操作,也可在共識升級過程中平滑升級,無需集群停機。無論是在硬件運維還是軟件運維的場景,既保證了集群的穩定和安全性能便於技術人員操作簡單易行。

技術方案說明

在集群系統中,用於保證服務穩定的解決方案都是多實例的負載均衡。這裡需要解決三個問題:問題一daemon 的接口驗證機制每個節點都有各自不同的JWT 作為接口權限驗證,雖然服務接口內容本身是無狀態的,由於存在這樣的權限驗證機制,使得服務做不到“無狀態”。我們通過配置文件指定每個daemon 節點的JWT,在daemon 啟動的時候讀取,加載進內存使用。問題二daemon 的狀態監控如何確認daemon 節點當前的工作狀態,這是一個問題。傳統的做法有檢測端口、掃描日誌、hello 接口測試,這樣的方案在Lotus 場景中,都或多或少存在一些漏洞。我們回歸初心,重新審視daemon 的核心功能,同步高度。 ****將每個daemon 節點的當前高度實時寫入數據庫,保持最大高度的節點,一定是健康工作的節點。問題三miner 接口請求的轉發**miner 節點在啟動服務之初,就需要跟daemon 建立tcp 長連接,後續接口調用如果需要發送rpc 請求,如果重新初始化連接會造成很多連鎖問題。我們給miner 內置了一個socket 轉發服務,能夠專門處理連接建立和轉發的問題。上述三個解決方案可以極大做到鏈集群服務的高可用,可以保證不會因為單個daemon 節點的維護而影響到整體集群的運轉效率**。

部署說明

1. 需要獲得lotus-beePro 版授權、開通lotus 鏈集群功能feature,需要lotus 和lotus-miner 程序配合使用。 2. 需要連接數據庫,配置環境變量。 (daemon 機和miner 機上都需要配置,配置好以後重啟生效)

export DAEMON_CLUSTER=true _#開啟鏈集群功能_export DAEMON_SQL_PATH=/home/data/daemon-sql.json

3. 數據庫配置文件:daemon-sql.json 的模版。 (daemon 機和miner 機上都需要配置)

{ 'name': 'beelant','addr': '172.16.1.1', // 數據庫的訪問地址'db': 'f0123',// 數據庫名稱'username': 'beelant',// 數據庫賬號' password': 'beelant',// 數據庫密碼'maxIdleConn': 0,'maxOpenConn': 100,'connMaxLifetime': 0}

4. daemon 機需要配置自身的ip 和服務端口,用於miner 訪問,目前只支持單個ip。

export DAEMON_URL=172.29.29.127:1234

5. 用第一台啟動好的daemon 的工作目錄下,會生成一個文件“beePrivateKey”,將此文件複製到所有Daemon 集群中的其他機器上,然後重啟daemon 服務。 6. miner 上配置環境變量,然後重啟miner 服務。

export FULLNODE_API_INFO=(lotus_jwt_token):/ip4/127.0.0.1/tcp/8888/http #這裡ip 一定是本機IP,端口是8888

7. 配置完成。

更多產品信息以及諮詢,請聯繫我們,歡迎為你答疑解惑!