2016-08-24 14 views
1

AWSに3つのOrientDB(2.2.7)ノードが設定されています。それらは分散モードで実行されています。AWSで分散モードでOrientDBを実行できない

ポート2424でサーバーに接続すると、接続はpyorientにロックされます。

私はこの質問ごとに分散モードでOrientDBを実行する点でいくつかの問題を認識してね: Creating a database in Orientdb in distributed mode

すべての問題を避けるために文書により示唆されるように、私は永久的なインスタンスを実行していますよ。

また、ヘイルキャストEC2ホワイトペーパーで提案されているように、EC2インスタンスを「c3.4xlarge」インスタンスに設定しました。 (Amazon_EC2_Deployment_Guide_v0.3_web.pdf

私は私のhazelcast.xmlはTCP-IPとAWSの発見戦略を使用するように構成されていたとの両方が同じ結果を配信しました。サーバーは、ヘイゼルキャストを介して互いに接続されていることがわかり、検出が正常に動作しています。

私は次のポリシーを自分のユーザーに付与しています。

{ 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Sid": "Stm7747196888759", 
     "Action": [ 
      "ec2:DescribeInstances" 
     ], 
     "Effect": "Allow", 
     "Resource": "*" 
    } 
] 
} 

それぞれがそうのように構成されたhazelcast.xml持っている:私のhazelcast.xmlからわかるように

<?xml version="1.0" encoding="UTF-8"?> 
<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.7.xsd" 
     xmlns="http://www.hazelcast.com/schema/config" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <group> 
      <name>orientdb</name> 
      <password>xxxxxxxxx</password> 
    </group> 
    <properties> 
      <property name="hazelcast.local.localAddress">{{LOCAL_IP}}</property> 
      <property name="hazelcast.icmp.enabled">true</property> 
    </properties> 
    <network> 
      <public-address>{{PUBLIC_IP}}</public-address> 
      <port auto-increment="true">2434</port> 
      <join> 
        <multicast enabled="false"> 
          <multicast-group>235.1.1.1</multicast-group> 
          <multicast-port>2434</multicast-port> 
        </multicast> 
        <tcp-ip enabled="true"> 
          <member>57.xx.xx.165</member> 
          <member>57.xx.xx.236</member> 
          <member>57.xx.xx.133</member> 
        </tcp-ip> 
        <aws enabled="false"> 
          <access-key>xxxx</access-key> 
          <secret-key>xxxx</secret-key> 
          <host-header>ec2.amazonaws.com</host-header> 
          <region>eu-west-1</region> 
        </aws> 
      </join> 
      <interfaces enabled="false"> 
        <interface>{{LOCAL_IP}}</interface> 
      </interfaces> 
    </network> 
    <executor-service> 
      <pool-size>16</pool-size> 
    </executor-service> 
</hazelcast> 

を、私はまた、バージョン3.7にアップグレードするhazelcastてみました。私が使用するヘイルキャストのバージョンは関係なく、結果は同じです。

サーバーに接続すると、接続がロックされます。サーバーはまだポート2480で正常に動作します。ブラウザでフロントエンドを使用することはできますが、pyorient経由で接続を開くことはできません。

私たちは大きなDBを持っており、毎月250万の頂点データを約5百万のエッジで収集しています。単一のサーバーがその容量を超えて拡張することができないため、分散モードで実行することが不可欠です。現時点では、OrientDBは分散データベースとして機能するように見えますが、その機能は機能していないようです。

ドジャースを実行していましたが、ハローキャスト3.7にアップグレードするためにバイナリに切り替えました。

OrientDBを誰かが分散環境で稼動させることができました。何が欠けていますか?

答えて

1

これはHazelcastまたはAWSでは問題ありません。 セットアップに2つの問題がありました。 最初の問題は、OrientDBが default-distributed-db-config.jsonの設定で私のdistributed-config.jsonを置き換えるのをリフレッシュしないことです。その結果、私のDBに接続したことのあるすべてのノードがそのファイルに追加され、default-distributed-db-config.jsonの設定はその設定に反映されませんでした。

私は、そのdistributed-configを削除する起動スクリプトを追加しました。私のサーバーが起動してノードのリストをリフレッシュして設定を更新するたびに

第2の問題はPyorientと関係があります。 Pyorientには、分散モードでOrientDBから返されたメッセージを解析できないというバグがあります。これにより、接続が無限ループに入ります。

現在、欠落しているバイナリシリアライザ(OrientSerialization.Binary)を実装するpyorientの開発ブランチがあります。私はそれにいくつかの修正がマージされている別のブランチを持っています。

でそれをインストールします。次のように

pip install https://github.com/anber500/pyorient/tarball/17f5e42e83859a661c6483f7fa812226194694dd#egg=pyorient 

あなたのシリアライザを設定します。

client = pyorient.OrientDB("localhost", 2424, serialization_type=pyorient.OrientSerialization.Binary) 

またpyorient_nativeの更新されたバージョンが必要になります。

pip install https://github.com/nikulukani/pyorient_native/tarball/master#egg=pyorient_native 

これは、分散モードでAWS上で完璧に動作し、CSVシリアライザよりもはるかに高速である:最初のリリースはとてもmasterブランチからのバージョンを使用してメモリリークを持っていました。

希望します。

-1

ec2パブリックIPアドレスではなく、ec2プライベートIPアドレスを使用しています。パブリックIPアドレスは、57または54から始まることがよくあります。プライベートIPアドレスは10であることがよくあります。

+0

私はプライベートアドレスを使用してみましたが、同様の結果を出しました:( ノードは問題なく接続しますが、バイナリポート経由で接続すると落ちます。 – anber

+0

いくつかのHZログをダンプできますか? – pveentjer

+0

私はあなたがこの問題に精通していないので推測します。パブリックIPアドレスが使用されているためプライベートIPアドレスを代わりに使用する必要があるため、接続がロックされています。 – pveentjer

関連する問題