在AWS上以分布式模式运行OrientDB不起作用

时间:2016-08-24 11:09:28

标签: amazon-web-services orientdb hazelcast

我在AWS上设置了3个OrientDB(2.2.7)节点。它们以分布式模式运行。

每当我在端口2424上连接到服务器时,连接都会锁定在 pyorient 中。

根据这个问题,我知道在分布式模式下运行OrientDB的一些问题: Creating a database in Orientdb in distributed mode

为了避免任何问题,我正按照文档的建议运行永久实例。

我还根据hazelcast 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 配置如下:

<?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版。无论我使用哪种版本的淡褐色,结果都是一样的。

一旦连接到服务器,连接就会锁定。服务器仍可在端口2480上正常工作。您仍然可以在浏览器中使用前端,但无法通过pyorient打开连接。

我们有一个大型数据库,每月收集大约250万个顶点数据,边缘约为500万。对于我们来说,在分布式模式下运行至关重要,因为单个服务器无法扩展到超出该容量。就目前情况而言,似乎OrientDB具有作为分布式数据库运行的能力,但该功能似乎不起作用。

我们正在运行码头工人但是切换到二进制文件以升级到hazelcast 3.7。

是否有人能够让OrientDB在分布式生产中工作,我们缺少什么?

2 个答案:

答案 0 :(得分:1)

这对Hazelcast或AWS来说似乎不是问题。 我的设置有2个问题。 第一个问题与OrientDB没有刷新使用来自的设置替换我的distributed-config.json 默认分布式-DB-config.json。结果是,连接到我的数据库的每个节点都附加到该文件,并且我的default-distributed-db-config.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的更新版本。第一个版本有内存泄漏,所以使用master分支中的版本:

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

这在AWS上以分布式模式完美运行,并且比CSV序列化器快得多。

希望它有所帮助。

答案 1 :(得分:-1)

您使用的是ec2公共IP地址,而不是ec2私有IP地址。公共IP地址通常以57或54开头。私有IP地址通常为10。