2016-08-24 96 views
1

我在AWS上設置了3個OrientDB(2.2.7)節點。他們正在分佈式運行。在AWS上以分佈式模式運行OrientDB不起作用

無論何時我通過端口2424連接到服務器,連接鎖定在pyorient

我所知道的一些問題,其對在分佈式模式下運行OrientDB按照這樣的問題: Creating a database in Orientdb in distributed mode

爲了避免任何問題,我跑永久情況下通過的文件的建議。

我還配置EC2實例爲「c3.4xlarge」實例,如hazelcast EC2白皮書所建議的。 (Amazon_EC2_Deployment_Guide_v0.3_web.pdf

我有我的hazelcast.xml配置爲使用TCP-IP和AWS發現策略和所運輸的相同的結果。可以看到服務器通過hazelcast互相連接,發現工作正常。

我有以下政策附加到我的用戶。

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

每個人都有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> 

。從我hazelcast.xml可以看出,我也試過升級hazelcast到3.7版本。無論我使用哪個版本的hazelcast,結果都是一樣的。

只要我連接到服務器,連接就會鎖定。服務器仍可以通過端口2480正常工作。您仍然可以在瀏覽器中使用前端,但無法通過pyorient打開連接。

我們有一個大型的數據庫,每月收集約250萬個頂點數據,並有大約500萬條邊。對於我們來說,以分佈式模式運行是非常重要的,因爲單個服務器將無法擴展到超過這個容量。就目前而言,OrientDB似乎有能力以分佈式數據庫的方式運行,但該功能似乎並不奏效。

我們運行dockers,但切換到二進制文件,以升級到hazelcast 3.7。

有沒有人能夠使OrientDB在分佈式生產環境中工作,我們缺少什麼?

回答

1

這似乎不是Hazelcast或AWS的問題。 我的設置有2個問題。 第一個問題與OrientDB沒有關係,使用 default-distributed-db-config.json中的設置替換我的distributed-config.json。結果是每個連接到我的數據庫的節點都被附加到該文件中,並且沒有任何默認分佈式數據庫配置.json設置反映在該配置中。

我添加了一個啓動腳本來刪除那個distributed-config。每次我的服務器啓動時,json都會刷新節點列表並更新我的設置。

第二個問題與Pyorient有關。 Pyorient有一個錯誤,它不能解析OrientDB在分佈式模式中返回的消息。這會導致連接進入無限循環。

pyorient上目前有一個開發分支實現缺少的二進制序列化器(OrientSerialization.Binary)。我有另一個分支有一些修正合併到它。

與安裝:

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串行快得多。

希望它有幫助。

-1

您正在使用ec2公共ip地址,而不是ec2私有ip地址。公共IP地址通常以57或54開頭。專用IP地址通常爲10.

+0

這是真的,我們嘗試使用私人地址,但有類似的結果:( 節點連接沒有問題,但當我們通過二進制端口連接到它們時,會摔倒 – anber

+0

您可以轉儲一些HZ日誌嗎? – pveentjer

+0

我猜是因爲你對這個問題並不熟悉,連接被鎖定,因爲使用了公共IP地址,但應該使用私有IP地址。 – pveentjer