状況
既存のGlusterノードが複数個ある
ここに、新たに複数のノードを追加したい。
そのためにpeer probeを試みると以下のエラーメッセージのような事態に。
*念の為ボリュームは全て削除済み
エラーメッセージ
Ansible経由で"あるひとつのノードからみた、自分(e.g. server0)以外のノード全て"をpeer probeしようとした。
以下は例です。大人の事情により色々コードの見た目変えてます。
- name: Probe gluster nodes
shell: |
gluster peer probe server{{item}}
with_sequence: end=99 start=1
話それますが、ひとつのノードからこれをやれば十分です。すべでのノードで自分以外のノードを全てpeer probeしようとしなくても、GlusterFSは賢いのでpeer nodesを自動で共有してくれます。
これでいけるはずと思いましたが、以下のエラーで、新規のノードから既存のノードへのpeer probeが失敗します。
Ansibleがコマンドラインを紅に染めてしまいます。。。
server1 is either already part of another cluster or having volumes configured
.......
解決法
- 既存のノードたちのうち一つをピックアップし、そこでピックアップしたノードで、それ以外のpeer nodesをdetachしました。
まずは繋がってるノードを確認しましょう。
gluster peer status
これで出てきたノードのうち、ピックアップしたノード以外のノードを、ピックアップしたノードからdetachしましょう。
gluster peer detach {{自分以外のpeer nodes}}
ひとつのノードからこれをやれば十分です。すべでのノードで自分以外のノードを全てpeer detachしようとしなくても、GlusterFSは賢いのでpeer nodesの変更を自動で共有してくれます。
これで、既存のノードたちは一時的に職を失い、無我の境地に至ります-これまで頑張ってファイルを分散してきたのに、新入りのノードのために容易くもdetachされるとは、まさに、諸行無常。。。
- 新規のノードの集団(peer probe済み)に、既存のノードをpeer probeする。
例として既存のサーバーがserver[1-5]だとすれば、新規ノードのうち一つをピックアップして、それだけに以下のようなAnsible playbookを適用しました。大人の事情により、色々コード書き換えてます。
- name: Probe gluster nodes
shell: |
gluster peer probe server{{item}}
with_sequence: end=5 start=1
あとは、適当なノードで、peer nodesのステータスを確認し、新旧のノードが仲良くしていることを確認してください。
gluster peer status
感想 インフラ構築は丸亀製麺のような手打ちは通用しない
うどんは丸亀製麺のように手打ちがいいですよね。
でも、インフラの構築には手打ちは通用しないです。
だって、十数台の大量のサーバーに手打ちでコマンド打ったら、手が疲れるし、気が狂います。
Ansibleなら、正しいplaybookさえ作れば、実行終了を待つだけです。
もうね、Ansibleしか勝たん。。。って感じですよ。
AnsibleをはじめとするInfrastructure as Code, IaCはROI高めなので、エンジニアのキャリアの初期に学ばさせていただけたのは本当に感謝です!
というわけで、Ansibleに感謝!
ここまで読んでいただき感謝です!