読者です 読者をやめる 読者になる 読者になる

Aerospikeのスケールアウト

aerospike 技術

こんにちはmatsです。

 

先日、「Aerospike Deep Dive」に登壇したのですが、その際にスケールアウト(ノードの追加)について聞かれる方が多い様に思いました。

http://tech.im-dmp.net/archives/3971

今回はそのスケールアウトの手順と注意事項について書こうかと思います。

 

スケールアウトの手順

0. 環境について

今回の環境は下記の想定です。

既存のノード

aerospike1 10.0.0.1
aerospike2 10.0.0.2
aerospike3 10.0.0.3

追加するノード

aerospike4 10.0.0.4

追加するノードのハードウェア構成は同じもので、既存のノードと同様の手順で aerospike-server がインストールされているものとします。

 

1. 設定の編集

基本的には既存のノードと全く同じになりますが、注意点があります。

AWSなどマルチキャスト通信が出来ない環境では、aerospike.confの設定が全ノードで同じにならず、追加を繰り返す毎に差分が増えていきます。

IMでは全ノード分のIPをconfに書き、自ノードのIPはコメントアウトする形でansibleで管理しています。ノード追加の際に既存のノードの設定も修正しますが、読み込みには再起動が伴うのであくまで形式上の変更になります。

また、この設定はオンラインでは変更不可のため設定の非対称性は残り続けます。(運用上問題ありませんが・・・)

aerospike.conf 設定例

network {
    service {
        address any
        port 3000
    }

    heartbeat {
        mode mesh
        address any
        port 3002
        mesh-seed-address-port 10.0.0.1 3002 # aerospike1
        mesh-seed-address-port 10.0.0.2 3002 # aerospike2
        mesh-seed-address-port 10.0.0.3 3002 # aerospike3
        #mesh-seed-address-port 10.0.0.4 3002 # aerospike4

        interval 150
        timeout 20
    }

    fabric {
        port 3001
    }
    info {
        port 3003
    }
}

 

2. 書き込み処理の停止

公式のドキュメントには記載がありませんが、書き込みは停止しておくのが推奨な様です。

 

3. 新規追加ノードの起動

asdのサービスを起動します。clusterへの参加は自動で行われます。

 

4. マッピングテーブルの生成を待つ

マッピングテーブルの生成が完了するまで1〜5分ほど待ちます。この間、無応答になりAMCなどでステータスを確認することが出来ません。

データ量に依存して時間が伸びることがあります。(IMでの実績ベースなので未確認)

 

5. マイグレーション完了まで待つ

一応、マッピングテーブルの生成が完了していれば、動作上は正常な状態に戻るので書き込み処理を再開しても問題は無いかと思います。

ただ、推奨的にはマイグレーションの完了まで待ったほうが良いとのことです。

 

6. 書き込み処理の再開

aerospikeへの書き込みを再開します。

 

気になる点

  • 無停止で行うことが出来ません
  • データ量の増加に伴い、無応答時間が伸びるなど不安程度が増します
  • マイグレーション中はレプリカの数が0になります

 

設定変更の際などローリングで全ノードを入れ替えたいと言っていた方もいらっしゃいましたが、個人的にはノードの数はあまり変更しないことをオススメしています。(作業は簡単なのですが、毎回挙動が違うのでドキドキします。。)

 

おしまい