MicroStrategy ONE

ライブラリのロードバランサとクラスタリング: セットアップワークフローの例

Redis Server のインストールと構成

  1. Redisをインストールするには、 Redisを使い始める
  2. Redis Server を起動します。
  3. Redisが正常に動作しているかどうかを確認するには、「PING」コマンドを送信します。redis-cli

    Redis Server が正常に稼働していれば「PONG」という応答があります。

    コピー
    127.0.0.1:6379> ping
    PONG
    127.0.0.1:6379>

    Collaboration Server が稼働中の Redis Server に接続し、水平クラスター化を行うためには、URL の指定が必要です。

    : redis://redis_host_machine:6379

    Redis 設定ファイルを書き換えて、外部トラフィックを受け取るようにしてください。

    • Redis設定ファイル(redis.confまたはredis.windows-service.conf)、追加/変更bindエントリーbind 0.0.0.0
    • 書き換えたファイルを保存し、Redis Server を再起動してください。

Collaboration Server の構成

  1. 各コンピューターにインストールした Collaboration Server それぞれについて、Redis Server の URL、ウェブ ロード バランサーの URL、クラスター化モードを、設定ファイルに記述してください。

    コピー
    {
    "port": 3000,
    "dataSource": {"username": "mstr_collab","password": "xxx"},
    "logging": true,
    "authorizationServerUrl":"<web_load_balancer_url>/api",
    "scaling": "horizontal","redisServerUrl": 
    "<redis_server_url>",
    .......
    }

     

  2. 設定ファイルを保存し、Collaboration Server を再起動します。
  3. すべて正常に稼働しているか、それぞれの「/status」という URL を使って確認してください。この URL は、各 Collaboration Server インスタンスの、実際の状態を返します。例えば次の Collaboration Server は、Postgres サーバーや Redis サーバーに到達できないため、一時停止状態になっています。

    コピー
    {
    "version":"11.0.0.720",
    "enableTls":false,
    "scaling":"horizontal",
    "logging":true,
    "state":"paused",
    "reason":"The following dependent services are unavailable: DB Service, Redis Server",
    "main":
    {
    "cpu":{"current":0,"max":17},
    "memory":{"current":62758912,"max":85626880},
    "connections":{"total":12,"current":4,"max":11},
    "messages":{"processed":5},
    "restCalls":{"received":3},
    "up_since":"2018-4-18 02:12:42","pid":900
    }
    }

     

Web Load Balancer Server の設定

ロード バランサーは「スティッキー セッション」を使って、クライアントが、初期セッションを確立したインスタンスとやり取りできるようにする必要があります。さらに、Web Socket プロトコル (wss:) にも対応する必要がありますが、これは HTTP 1.1 Upgrade プロトコルに依存します。

例として、水平クラスター化した Collaboration Server の設定ファイルを示します。NGINX をウェブ ロード バランサーとして使っています。

コピー
......

http {
    ......

    upstream collabServer {
    ip_hash;             # this is a must, ensures that we are sticky to the IP to enable a correct socket.io handshake
    server collabServer1:3000;    # provide the list of the Collaboration servers from here
    server collabServer2:3000;
    server collabServer3:3000;
    }
    
    location /socket.io/ {                    # API Pattern for socket.io handshake
        proxy_http_version 1.1;                # Required for proper HTTP upgrade protocol
        proxy_set_header Upgrade $http_upgrade;     # This is a Hop-by-Hop header–must pass through manually
        proxy_set_header Connection "upgrade";      # Another hop-by-hop header
        proxy_pass http://collabServer/socket.io/;      # Directs the request to a server in upstream "collabServer"
    }

    location /status {                    # forward the /status API to one server from the CollabServer list
        proxy_pass http://collabServer/status;
    }

    ......

}

......