Meteorのスケーリング方法

翻訳者からMeteorJS-オープン(MIT)フルスタックJavaScriptフレームワーク(クライアントとサーバーの両方)。 現在のバージョン0.7.0-バージョン1.0は2014年初頭にリリースされる予定です。 ハブの出版物: 1、2、3

スケーリングの準備


コンポーネントチャート:
画像
ロードバランサーとして、3つのMeteorサーバー、1つのMongoDbサーバーとHaProxyサーバーがあります。 SSLをサポートするには、 スタッドをHaProxyの前に置きます。

コンポーネントとその構成について説明しましょう。

MongoDbを構成する


単一サーバーoplog レプリカセットを使用しています。 もちろん、マルチサーバーを使用することをお勧めしますが、わかりやすくするために少し簡略化しました。

単一サーバーのレプリカを構成する

まず、MongoDbを起動して、レプリカを認識させる必要があります。 次のコマンドを使用して、 流星のレプリカセットを構成します。

mongod --replSet meteor 

その後、Mongo-shellを開き、単一サーバーレプリカに次の設定を入力します。

 var config = {_id: "meteor", members: [{_id: 0, host: "127.0.0.1:27017"}]} rs.initiate(config) 

アクセス制御

専用のMongoDbサーバーを使用しているため、サーバーへの不正アクセスを防止する必要があります。 ファイアウォールを構成するか、MongoDb自体で役割ベースのアクセスを使用できます。 構成を簡素化するために、ファイアウォールが正しく構成されていると仮定するか、 MongoDbの役割ベースのアクセスドキュメントを参照してください。

Meteorアプリケーションのデータベースはappと呼ばれます。 oplogと統合するために、oplog自体が配置されるlocalというデータベースを使用します。

流星の設定


スケーラブルなMeteorアプリケーションの展開を計画する場合、いくつかの点を考慮する必要があります。 それらについてお話します。

Oplogサポート

前の記事で、oplogが流星のスケールアウトにどのように役立つかについて既に説明しました。 2つのオプションがあります。 SmartCollectionsまたは予備バージョンのMeteorをoplogで使用できます( OpLogを完全にサポートするUPDリリースバージョンMeteor 0.7.0。使用する必要があります)。

MongoDb oplogをMeteorに統合する方法の詳細については、David GracerのDevShop 10トークを参照してください。

どちらの場合でも、追加のMongoDB接続URLをoplogログ(先ほど述べたローカルデータベース)に指定する必要があります。 SmartCollectionの場合、Meteorでoplogを事前に実装するために、環境変数OPLOG_URLを設定する必要があります(変数MONGO_OPLOG_URL)

(そしてもちろん、いつものように、 MONGO_URLを設定することを忘れないでください)

IE 8および9でのスティッキーセッションのサポート

IE 8および9 AJAXリクエストでCookie送信しません。これにより、ロードバランサーが破損します。これについては後で説明します。 幸いなことに、SockJSにはこの問題に対する組み込みソリューションがありますが、Meteorではデフォルトでオフになっています。 有効にするには、次の環境変数をエクスポートする必要があります。

 export USE_JSESSIONID=1 

Meteorバージョン0.6.6以降を使用してください。このオプションはこのバージョン以降に登場しています。

サーバーの選択

Meteorに同じサーバーを選択することは非常に重要です。 それらは同じデータセンターにあり、同じパフォーマンス、OS、アーキテクチャを持っている必要があります。そうでない場合、負荷のバランスが不適切になります。

現在の設定では、サーバーごとに1つのプロセスのみを使用しているため、マルチコアサーバーは役に立ちそうにありません。 サーバーにシングルコアのハードウェア環境を使用してみてください。 次の記事では、これについてさらに詳しく説明します。

展開

サーバーを適切に構成して、Meteorサーバーを正しく展開することが非常に重要です。 可能であれば、これに導かれる人に助けを求めてください。 または、私が作成したMeteor-Upを使用して、産業用にすぐに使用できるMeteorアプリケーションをデプロイできます。

ロードバランサーの構成(HaProxy)


Meteorアプリケーションの負荷分散には、HaProxyを使用します。 これは非常に安定しており、多くの企業によって産業運用でテストされています。 HaProxyはスティッキーセッションもサポートしており、他にも便利な設定がいくつかあります。

スティッキーセッションのサポート

sticky-sessionにはいくつかの実装オプションがあります。 それらは、Cookieを使用して実装され、IPクライアントをハッシュするか、URLを変更します。 まだオプションがありますが、これらは最も一般的です。

クライアントのIPアドレスをハッシュ化するのが最も簡単な方法ですが、負荷を適切に分散させることはできません。 IP情報を信頼できず、透過プロキシ(ほとんどがプロバイダーによって使用されます)が元のIPを隠すため、サーバーの1つの負荷が増加します。

URLの変更は適切なオプションであり、SockJSで非常によくサポートされています。 ただし、ロードバランサーとMeteorに追加のロジックを実装する必要があります。

クッキーベースのソリューションは、私たちにとって最適に機能します-バランスがよく、設定が簡単です。

負荷分散アルゴリズム

適切な負荷分散アルゴリズムを選択することは非常に重要です。 HaProxyにはそれらのいくつかがあります。 ラウンドロビンアルゴリズム 、ドキュメントで推奨されています。 RoRやPHPなどで作成されたステートレス状態を含まないアプリケーションに最適です。

ただし、Meteorは状態アカウンティングと長期接続に基づいているため、 leastconnアルゴリズムを使用することをお勧めします。 その中で、接続の数が最も少ないサーバーに新しい接続が与えられます。 これにより、サーバーが一時的にシャットダウンした場合でも、均一な負荷分散が実現します。 ラウンドロビンの場合負荷は不均等になります。

カスタマイズ

HaProxyの構成方法をご覧ください。これは構成ファイルです。

 defaults mode http timeout connect 5s timeout client 10s timeout server 10s frontend public #binding port 80 bind *:80 default_backend apps backend apps #load balancing algorithm balance leastconn #using JSESSIONID as the cookie cookie JSESSIONID insert nocache #adding server server host1 host1.example.com cookie host1 server host2 host2.example.com cookie host2 server host3 host3.example.com cookie host3 

わかりやすくするために、構成ファイルの一部を削除しました。 完全版はこちらから入手できます

スタッド付きSSL


私の意見では、産業運用でのSSLの使用は必須です。 残念ながら、HaProxyの安定バージョンはSSLをサポートしていません。 ただし、SSL接続の2番目のエンドとしてHaProxyの前にスタッドを使用できます。 そしてもちろん、スタッドをHaProxyと同じサーバーにデプロイする方が良いでしょう。

必ずソースからスタッドをインストールしてください。 apt-getが受け取ったバージョンは非推奨です。

次の設定ファイルを使用できます。

 #bind to defualt SSL port frontend = "[*]:443" #haproxy host and port backend = "[localhost]:80" #location of the .pem file pem-file = "/path/to/ssl.pem" 


これが設定ファイルの完全版です。

Studでは、SSL証明書と秘密キーが同じ.pemファイルにある必要があります。 このマニュアルの詳細。

追伸 ハブに新しいハブMeteor.JSが登場しました-サインアップ。

Source: https://habr.com/ru/post/J206330/


All Articles