比特幣挖礦——集群礦池btcpool

1. 介紹

btcpool一個(gè)集群的解決方案,它使用了mysql數(shù)據(jù)庫,web服務(wù),kafka,zooKeeper,據(jù)說可以控制100000礦機(jī)。代碼中邏輯和安裝說明都比較完整,但還需要一些編寫一些web界面做UI支持。配好之后就和其它大礦池差不多了。
挖礦的哈希碰撞需要大量計(jì)算,由礦機(jī)實(shí)現(xiàn)。而拆分集成運(yùn)算量,分配任務(wù),在礦機(jī)多的情況下也需要大量的算力支持。Btcpool是一個(gè)去中心化集群的解決方案(礦池內(nèi)部去中心,對外自成體系)。N個(gè)礦機(jī)連一個(gè)控制板,控制板接入網(wǎng)絡(luò),通過端口連服務(wù)器,服務(wù)器再把拆分運(yùn)算量的工作分擔(dān)給礦池內(nèi)的多臺(tái)服務(wù)器同時(shí)計(jì)算。
它的主旨就是整套系統(tǒng)切分成功能塊,塊與塊之間用使用kafka傳遞數(shù)據(jù)和信息,后臺(tái)由zooKeeper負(fù)載均衡,從而使不同的功能塊運(yùn)行在不同的服務(wù)器上。像錢包和mysql這種頻率使用的公用數(shù)據(jù)放在另外的服務(wù)器上,各功能塊通過rpc,zmp等方式訪問它們。
其中最核心的程序是sserver,礦機(jī)控制板連接的就是該程序。它支持Stratum協(xié)議?,F(xiàn)在一般的比特幣礦池都支持兩種協(xié)議:getwork、stratum。getwork比較方便也非常好理解,直接連接到礦池挖礦。stratum協(xié)議是一個(gè)挖礦代理,先通過電腦穩(wěn)定連接礦池,然后挖礦機(jī)連接到電腦上,通過電腦中轉(zhuǎn)挖礦結(jié)果和接收新的block,因?yàn)橛须娔X作為中轉(zhuǎn),相對來說挖礦過程比較穩(wěn)定。

2. btcpool(核心工具)

1) 下載

https://github.com/btccom/btcpool

2) 安裝

btcpool源碼里,雖然沒有什么文檔,但是README和INSTALL里面寫得很清楚。

$ su  #install腳本里,指定了/root等絕對路徑,最好切換成root安裝
$ unzip btcpool-master.zip
$ cd btcpool-master/install
$ . install_btcpool.sh #第一次安裝,有些輔助軟件從git下載(一次連不上可多連幾次),這樣有效地保證了版本匹配,數(shù)據(jù)下載和安裝在/root/sources和/work/中,具體說明見 INSTALL.md。
$ cd /work/btcpool/build
$ bash ../install/init_folders.sh

3) 注意事項(xiàng)

i. /work/btcpool/build/run_xxx/xxx.cfg文件必須根據(jù)具體信息修改,先安裝好支持軟件,最后修改配置文件。
ii. 集群的搭建方法必須按btcpool/docs/INSTALL*.md來操作,因?yàn)橛幸恍┲匾獏?shù),比如broker.id,max.size等等需要調(diào)整,如按一般方法安裝,調(diào)試起來非常麻煩。
iii. 盡量不要變更目錄,很多路徑都是寫死的
iv. 核心算法在src/bitcoin目錄下,它編出來的是一個(gè)靜態(tài)庫,其它的可執(zhí)行程序調(diào)用它。

3. ZooKeeper(依賴工具)

主要負(fù)責(zé)負(fù)載均衡。安裝Kafka的說明書在/work/btcpool/docs/ INSTALL- ZooKeeper.md中,最好按它的步驟配置,否則調(diào)試可能很麻煩。ZooKeeper原理及調(diào)試方法見上篇《比特幣挖礦——建立Kafka&Zookeeper集群》

4. Kafka(依賴工具)

主要負(fù)責(zé)消息傳送。安裝Kafka的說明書在/work/btcpool/docs/ INSTALL-Kafka.md中,一定要按它的要求修改配置文件,如果一開始配置錯(cuò)誤,后對調(diào)試很麻煩。具體原理及調(diào)試方法見上篇《比特幣挖礦——建立Kafka&Zookeeper集群》
建topic操作見INSTALL.md腳本

5. Mysql數(shù)據(jù)庫(依賴工具)

  1. 安裝
$ apt-get install mysql-client
$ apt-get install mysql-server
  1. 建庫
$ mysql
> CREATE DATABASE bpool_local_db; # 這兩個(gè)庫在.cfg中設(shè)置
> CREATE DATABASE bpool_local_stats_db;
> exit

其它操作見INSTALL.md腳本

6. http服務(wù)器Apache2(依賴工具)

  1. 安裝
$ apt install apache2
  1. 需要寫一個(gè)php,能輸入如下內(nèi)容
{"err_no":0,"err_msg":null,"data":{"jack":1,"terry":2}}

它與礦工連上來的用戶名對應(yīng)。

7. zeromq(輔助工具)

ZeroMQ看起來像一個(gè)可嵌入的網(wǎng)絡(luò)庫, 但其作用就像是一個(gè)并發(fā)框架。它提供了各種傳輸工具, 如進(jìn)程內(nèi), 進(jìn)程間, TCP和組播中進(jìn)行原子消息傳遞的套接字。
在install.sh腳本里下載到/root/sources/下,并安裝,無需手動(dòng)再安了。
在gbtmaker.cfg中的默認(rèn)設(shè)置為使用zeromq通訊, 需要bitcoin錢包也支持zeromq,如果不想用它,在gbtmaker.cfg里將zmq相關(guān)的設(shè)為false,它將改為調(diào)用rpc通訊。

8. supervisor(依賴工具)

1) 說明

它負(fù)責(zé)管理后臺(tái)進(jìn)程,服務(wù)一般要長時(shí)間運(yùn)行,它負(fù)責(zé)監(jiān)測進(jìn)程狀態(tài),在死掉時(shí)重啟服務(wù)等等,其中的配置文件conf用于指定具體的程序及參數(shù)。

2) 安裝

$ apt-get install supervisor # 這是后臺(tái)進(jìn)程管理用的

將需要啟動(dòng)的服務(wù)配置寫成conf文件復(fù)制到/etc/supervisor/conf.d下即可,其它操作見INSTALL.md腳本

3) 常用命令

$ supervisorctl
> reread
> update
> status # 查看狀態(tài)
> restart xxxx # 可選擇重啟某一個(gè)
其它
$ supervisorctl start xxx
$ supervisorctl stop xxx

9. 測試

1) 自帶的測試工具simulator

$ cd /work/btcpool/build/run_simulator
$ ./simulator -c simulator.cfg -l /tmp/log

2) 模擬礦機(jī)連接

minerd -o stratum+tcp://127.0.0.1:3333 -O jack:1

注意這里的用戶名要和http服務(wù)上的匹配

10. 集成說明

1) 一般調(diào)試過程如下:

i. 所有程序正常運(yùn)行,不退出,不報(bào)錯(cuò),不卡往。
ii. 礦機(jī)能連上礦池,能分配到工作,開始計(jì)算。
iii. 數(shù)據(jù)庫中出現(xiàn)用戶登錄的記錄。
iv. 數(shù)據(jù)庫中的各項(xiàng)數(shù)據(jù)都顯示正常。
v. 程序員做一些監(jiān)控統(tǒng)計(jì)的工具,供一般用戶使用。

2) 調(diào)試說明:

i. 首先要根據(jù)具體情況修改各個(gè).cfg文件
ii. 調(diào)試時(shí),可以先不使用supervisorctl,直接調(diào)用/work/btcpool/build/run*中的程序,具體參數(shù)見對應(yīng)的conf程序
iii. 建議從核心程序開始一個(gè)一個(gè)調(diào)試。默認(rèn)有很多l(xiāng)og文件,里面顯示了具體程序出錯(cuò)的位置。調(diào)試的順序是blkmaker->gbtmaker->jobmaker->sserver->其它
iv. 集成最重要的是配置文件和軟件版本,配完后最好對其進(jìn)行記錄和備份
v. 綜上,Btcpool提供了一個(gè)工作框架,真正用起來還需要做很多工作。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容