GridDB Azureクラスタの構築

このブログでは、GridDB NoSQLソフトウェアのテスト、開発、および使用のために、Microsoft Azure上にマルチノードクラスタを構築する方法について説明します。 クラウドコンピューティングコンセプト、Linuxシステム管理、およびGridDBに関する一般的な知識を持っている方向けの内容となっています。

Azureツールをインストールする

このブログでは、Azureクラスタを制御するためにWindows 8.1または10を使用していることを想定しています。

最初に、Azure PowerShell CmdLets、Azureコマンドラインインターフェイス、およびAzCopyをダウンロードしてインストールします。
https://azure.microsoft.com/en-us/downloads/

ベースイメージを作成する

次に、クラスタ内の100ノード全てに使用されるディスクイメージを作成します。 portal.azure.comにログインし、「リソースグループ」をクリックした後「追加」をクリックしてリソースグループBASEGRPを作成します。

次に、「リソースグループ」、次にBASEGRP、次に「追加」をクリックして仮想マシンBASEVMを作成します。 Centos 6.7を検索し、OpenLogicsイメージを選択します。 必要な基本設定とサイズを選択し、設定ペインで「ストレージアカウント」と「新規作成」をクリックして、BASESTORなどの固有の名前を選択します。 また、設定ペインで「パブリックIPアドレス」と「新規作成」をクリックします。 最終的なクラスタのヘッドノード用に新しいIPアドレスリソースを作成するため、動的IPを使用することもできます。

これで、リストされたIPアドレスと作成されたユーザアカウントを使用して、PuttyやMINGW / sshなどのツールを使ってssh経由でホストにログインできます。

次に、ノードにログインできるユーザーを作成する必要があります。 これはadduserで簡単にできます。

# sudo adduser MYUSER
# sudo passwd MYUSER

作成するユーザーごとに、SSH鍵を作成して、パスワードなしでクラスター内の他のノードにログインできるようにする必要があります。

# sudo su – MYUSER
$ ssh-keygen –t rsa
$ cp .ssh/id_rsa.pub .ssh/authorized_keys
$ exit

rootユーザーについても同様に行います。

# ssh-keygen –t rsa
# cp .ssh/id_rsa.pub .ssh/authorized_keys

他のユーザーがsudoを実行できるようにするには、この行を/ etc / sudoersに追加します。

MYUSER ALL=(ALL)     NOPASSWD: ALL

これで、GridDB Community Edition RPM Install Guide の指示に従って、GridDBのインストールを開始する準備が整いました。GridDB SEまたはAEを使用している場合は、設定方法が多少異なる場合があります。 詳細については、GridDB SE/AE Quick Start を参照してください。

# rpm -Uvh https://github.com/griddb/griddb_nosql/releases/download/v3.0.0/griddb_nosql-3.0.0-1.linux.x86_64.rpm

プロファイルスクリプトを使用してGrid DB環境変数を設定します。rootとして/etc/profile.d/griddb nosql.shを作成します。

#!/bin/bash
export GS_HOME=/var/lib/gridstore
export GS_LOG=$GS_HOME/log

一旦ログアウトしてから再度ログインすると、設定が適用されます。

GridDBには、24ノードのクラスタ用に作成した2つの構成ファイルがあり、このページの下部にあるZIPファイルに含まれています。 gs_cluster.jsonとgs_node.jsonを$ GS_HOME / confの正しい場所にコピーします。

# cp GridDBAzureFiles/gs_*.json /var/lib/gridstore/conf

Admin用のGridDBパスワードを作成します。

$ bin/gs_passwd admin (input your_password)

次にイメージをキャプチャするためノードをde-provisionします。

$ sudo waagent --deprovision

その後、「Virtual Machines」、「BASEVM」、「Delete」 をクリックし、指示に従って、AzureポータルからVMを停止して削除します。

クラスタを展開する

使用する全てののcmd.exeウィンドウに対して、Azure環境を準備します。

> azure login
> azure account set MY_SUBSCRIPTION

Azureで一度にまとめて展開するには、ノードとそのパラメータを定義する2つのファイルが必要です。 nodes.jsonとparams.jsonをそれぞれ指定します。これらのファイルは、このページの下部にあるzipファイルに含まれています。

nodes.jsonの編集は、YCSBクラスターが現在24のノードを含んでいるため、YCSBクラスターのサイズを変更する場合にのみ必要です。必要に応じて、ファイル内のノード定義を削除または追加することができます。

正しい値を含めるには、params.jsonファイルを編集する必要があります。 storageAccountNameは元のノードで使用されていたのと同じストレージアカウントに設定され、sourceVhdFilenameは元のノードで使用されたファイル名に設定されます。これらの値は、Azureポータルで、ノードに移動してから、ディスク、OSディスクの下のエントリ、およびURLを解析することで確認できます。最初のサブドメインはストレージアカウントですが、実際のファイル名はsourceVhdFilenameになります。.

例えば、https://griddbtestdisks.blob.core.windows.net/vhds/griddbtest120161220.vhdのようなURLの場合、storageAccountNameはgriddbtestdisksで、sourceVhdFilenameはgriddbtest120161220.vhdです。

これでようやく、ノードを展開する準備ができました。

> azure group deployment create –f nodes.json –e params.json –g CLUSTER

処理には多少時間がかかりますが、ノードが展開され次第、実行、課金されます。

クラスタにアクセスする必要があるので、ノード1にパブリックIPを追加する必要があります。 Azureポータルで、「Virtual machines」、「node1」、「Network Interfaces」、「nic1」、「IP Configurations」、「ipconfig1」、「Public IP address Enabled」、「IP Address」、「Create New」 、CLUSTERIPとして希望する名前を入力し、nic1ペインに「Static」、「Okay」、最後に「Save」を選択します。

クラスタ上でGridDBを起動する

今作成したIPアドレスにSSHでアクセスし、Azure VMの作業を開始できます。

最初に使用するのは、全てのVMで同時にコマンドを実行できる小さなスクリプトです。 お使いのエディタでruncmd.shを作成します。

#!/bin/bash

for x in `seq 4 27`; do
    sudo ssh  -o StrictHostKeyChecking=no 10.0.0.$x "$@" &
    pids[$x]=$!
done
for x in `seq 4 27`; do
    wait ${pids[$x]}
done

これを実行可能にします。

$ chmod +x runcmd.sh

これで、1つのコマンドで全てのホスト上のコマンドを実行することができるようになります。

$ ./runcmd.sh hostname
 node1
 node2
 node3
 …
 node23
 node24

次に、全てのノード上の全てのGridDBサーバを起動します。

runcmd su -c gs_startnode gsadm 
sleep 2;
runcmd su -c "gs_joincluster -c defaultCluster -u admin/admin -n 24" gsadm

gs_statツールを使用してクラスタが実行されているかどうかを確認できます。

# gs_stat -u admin/your_password
{
    "checkpoint": {
        "archiveLog": 0,
        "backupOperation": 0,
        "duplicateLog": 0,
        "endTime": 1484681438011,
        "mode": "RECOVERY_CHECKPOINT",
        "normalCheckpointOperation": 0,
        "pendingPartition": 0,
        "requestedCheckpointOperation": 0,
        "startTime": 1484681437974
    },
    "cluster": {
        "clusterName": "defaultCluster",
        "clusterStatus": "FOLLOWER",
        "designatedCount": 5,
        "loadBalancer": "ACTIVE",
        "master": {
            "address": "10.3.0.5",
            "port": 10040
        },
        "nodeList": [
            {
                "address": "10.3.0.6",
                "port": 10040
            },
            {
                "address": "10.3.0.5",
                "port": 10040
            }
        ],
        "nodeStatus": "ACTIVE",
        "notificationMode": "FIXED_LIST",
        "partitionStatus": "NORMAL",
        "startupTime": "2017-01-17T19:30:36Z",
        "syncCount": 46
    },
    "currentTime": "2017-01-17T19:40:17Z",
    "performance": {
        "batchFree": 0,
        "checkpointFileSize": 65536,
... snip ...
        "totalRowWrite": 451987,
        "totalWriteOperation": 451987
    },
    "recovery": {
        "progressRate": 1
    },
    "version": "3.0.0 CE"
}

gs_statと-sをクラスタのマスターノードのIPアドレス(bullyアルゴリズムで自動的に決定されます)と一緒に使用することで、より詳細な情報が得られます。

新しいクラスタをベンチマークする方法は、YCSB GridDB connector から確認することができます。 この記事で使用されているファイルの一部は、こちらでzipファイル形式でダウンロード可能です。

ブログの内容について疑問や質問がある場合は Q&A サイトである Stack Overflow に質問を投稿しましょう。 GridDB 開発者やエンジニアから速やかな回答が得られるようにするためにも "griddb" タグをつけることをお忘れなく。 https://stackoverflow.com/questions/ask?tags=griddb

Leave a Reply

Your email address will not be published. Required fields are marked *