stratum-miningの弱点と冗長化

5月 13, 2018

放置プレイとは行かないマイニングプール運用

運用していく内に見えてくる、障害の多さ。

stratum-miningとphp-mpos、データベースも冗長化を考えないといけない。それぞれ対策はあるんだけど、今回はstratum-miningについて書く。以下、1年弱stratum-miningを運用してわかったこと。

CPU負荷が天敵

stratum-miningはそんなにメモリを使わない。1ポートで100Mbyteもあれば十分じゃないだろうか。一方でstratum-miningの弱点であるシングルスレッド稼働という問題がある。マルチスレッド対応していないため、複数コアでも十分に性能を発揮できない。(これは複数ポート稼働させることである程度置換えれる。ポートごとに1コア使えるので。)NOMPからマイニング割り当て部分を持ってきて対応させることもできるけど、全てCPU使い切るとサーバごと止められる危険性があるので、stratum-miningのまま運用を進めている。(ブームが下火になった今、100%になることはまずない)100%を超えると、timeoutやrecv_lineエラーがマイナーに表示されるようになる。
接続数が限られるGPU-Mining前提のコインだとCPU負荷はほとんどあがらないが、接続数が多いCPU-Miningのコインでのみこの問題が露見する。

再起動することが多い

難易度変更やプールからのメッセージ対応等、色々と設定変更を刷る際に再起動をすることが多い。瞬断で済むことも多いが、一定期間止まるのは避けれない。

サーバ会社起因の再起動

滅多にないが、サーバ会社の問題でサーバが勝手に再起動されることもある。この場合は起動スクリプトを用意していないと、ずっとマイナー側にtimeoutエラーが出ることになる。ツライ。

冗長化はどうやるか

ロードバランサを使ってもいいけど、単純にラウンドロビンで冗長化できる。同じ構成のstratum-miningサーバを用意して、同じドメインにIPを複数登録するだけ。よくあるラウンドロビンの説明では、サーバ停止を検知できない…とか書いているが、そんなことはない。今のOSは優秀で、接続先でエラーが出たら次のIPアドレスに勝手にリトライしてくれる。ラウンドロビンで問題ない。

ラウンドロビンの弱点

ラウンドロビンの場合、単純に順番通りにIPを割り振っていくので、片方が停止して復旧した場合でも、正常稼働していたサーバに接続が集中した状態が続くことがある。暫く経つとまた平準化されてるんだけど、片方が100%近くなってしまった場合はstratum-miningを再起動して瞬断させる。これでもう片方にある程度接続が逃げることで、平準化を促すことができる。