我在AWS上设置了3个OrientDB(2.2.7)节点。它们以分布式模式运行。
每当我通过端口2424连接到服务器时,连接都会在pyorient中锁定。
我知道与以下问题有关的有关在分布式模式下运行OrientDB的一些问题:在Orientdb中以分布式模式创建数据库
为了避免出现任何问题,我正在运行文档建议的永久实例。
根据hazelcast EC2白皮书的建议,我还将EC2实例配置为“ c3.4xlarge”实例。(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似乎具有可以作为分布式数据库运行的功能,但是该功能似乎不起作用。
我们正在运行docker,但切换到二进制文件以升级到hazelcast 3.7。
有没有人能够使OrientDB在分布式环境中投入生产,我们还缺少什么?
对于Hazelcast或AWS,这似乎不是问题。我的设置有2个问题。第一个问题与OrientDB有关,而不是刷新从default-distributed-db-config.json中的设置替换我的distributed-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序列化器快得多。
希望能帮助到你。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句