我在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在分布式生产中工作,我们缺少什么?
答案 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。