如何使用 OrientDB 设置嵌入式主/主复制? [英] How to setup embedded master/master replication with OrientDB?

查看:108
本文介绍了如何使用 OrientDB 设置嵌入式主/主复制?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的目标是有两个节点.节点 A 应该写入一些顶点,节点 B 应该能够读取这些顶点.

My goal is to have two nodes. Node A should write some vertices and node B should be able to read those vertices.

到目前为止,我的榛子发现效果很好.OrientDB 还会将任何找到的数据库从 nodeA 热部署到 nodeB.不幸的是,节点 A 上的任何写入都不会复制到节点 B.

So far my hazelcast discovery works just fine. OrientDB will also hot deploy any found database from nodeA to nodeB. Unfortunately any write on Node A will not be replicated to nodeB.

我的设置:

orientdb-server-config.xml:

简化版(复制自orientdb-community tar.gz)

Simplified version (copied from orientdb-community tar.gz)

%NODENAME% 将被 nodeA 或 nodeB 替换.

%NODENAME% will be replaced with nodeA or nodeB.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<orient-server>
    <handlers>
        <handler
            class="com.orientechnologies.orient.graph.handler.OGraphServerHandler">
            <parameters>
                <parameter name="enabled" value="true" />
                <parameter name="graph.pool.max" value="50" />
            </parameters>
        </handler>
        <!-- CLUSTER PLUGIN, TO TURN ON SET THE 'ENABLED' PARAMETER TO 'true' -->
        <handler
            class="com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin">
            <parameters>
                <parameter name="nodeName" value="%NODENAME%" />
                <parameter name="enabled" value="true" />
                <parameter name="configuration.db.default"
                    value="config/default-distributed-db-config.json" />
                <parameter name="configuration.hazelcast" value="config/hazelcast.xml" />
            </parameters>
        </handler>
    </handlers>
    <network>
        <sockets>
            <socket
                implementation="com.orientechnologies.orient.server.network.OServerSSLSocketFactory"
                name="ssl">
                <parameters>
                    <parameter value="false" name="network.ssl.clientAuth" />
                    <parameter value="config/cert/orientdb.ks" name="network.ssl.keyStore" />
                    <parameter value="password" name="network.ssl.keyStorePassword" />
                    <parameter value="config/cert/orientdb.ks" name="network.ssl.trustStore" />
                    <parameter value="password" name="network.ssl.trustStorePassword" />
                </parameters>
            </socket>
            <socket
                implementation="com.orientechnologies.orient.server.network.OServerSSLSocketFactory"
                name="https">
                <parameters>
                    <parameter value="false" name="network.ssl.clientAuth" />
                    <parameter value="config/cert/orientdb.ks" name="network.ssl.keyStore" />
                    <parameter value="password" name="network.ssl.keyStorePassword" />
                    <parameter value="config/cert/orientdb.ks" name="network.ssl.trustStore" />
                    <parameter value="password" name="network.ssl.trustStorePassword" />
                </parameters>
            </socket>
        </sockets>
        <protocols>
            <!-- Default registered protocol. It reads commands using the HTTP protocol 
                and write data locally -->
            <protocol name="binary"
                implementation="com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary" />
            <protocol name="http"
                implementation="com.orientechnologies.orient.server.network.protocol.http.ONetworkProtocolHttpDb" />
        </protocols>
        <listeners>
            <listener protocol="binary" ip-address="0.0.0.0" port-range="2424-2430"
                socket="default" />
            <!-- <listener protocol="binary" ip-address="0.0.0.0" port-range="2434-2440" 
                socket="ssl"/> -->
            <listener protocol="http" ip-address="0.0.0.0" port-range="2480-2490"
                socket="default">
                <parameters>
                    <!-- Connection's custom parameters. If not specified the global configuration 
                        will be taken -->
                    <parameter name="network.http.charset" value="utf-8" />
                    <parameter value="true" name="network.http.jsonResponseError" />
                    <!-- Define additional HTTP headers to always send as response -->
                    <!-- Allow cross-site scripting -->
                    <!-- parameter name="network.http.additionalResponseHeaders" value="Access-Control-Allow-Origin: 
                        *;Access-Control-Allow-Credentials: true" / -->
                </parameters>
                <commands>
                    <command
                        pattern="GET|www GET|studio/ GET| GET|*.htm GET|*.html GET|*.xml GET|*.jpeg GET|*.jpg GET|*.png GET|*.gif GET|*.js GET|*.css GET|*.swf GET|*.ico GET|*.txt GET|*.otf GET|*.pjs GET|*.svg GET|*.json GET|*.woff GET|*.woff2 GET|*.ttf GET|*.svgz"
                        implementation="com.orientechnologies.orient.server.network.protocol.http.command.get.OServerCommandGetStaticContent">
                        <parameters>
                            <!-- Don't cache html resources in development mode -->
                            <entry name="http.cache:*.htm *.html"
                                value="Cache-Control: no-cache, no-store, max-age=0, must-revalidate\r\nPragma: no-cache" />
                            <!-- Default caching -->
                            <entry name="http.cache:default" value="Cache-Control: max-age=120" />
                        </parameters>
                    </command>
                    <command pattern="GET|gephi/*"
                        implementation="com.orientechnologies.orient.graph.server.command.OServerCommandGetGephi" />
                </commands>
            </listener>
        </listeners>
        <cluster>
        </cluster>
    </network>
    <!-- <storages> <storage name="db_%NODENAME%" path="%DB_PATH%" userName="admin" 
        userPassword="admin" loaded-at-startup="true" /> </storages> -->
    <users>
        <user name="root" password="finger" resources="*" />
        <user name="admin" password="finger" resources="*" />
    </users>
    <properties>
        <!-- DATABASE POOL: size min/max -->
        <entry name="db.pool.min" value="1" />
        <entry name="db.pool.max" value="50" />
        <!-- PROFILER: configures the profiler as <seconds-for-snapshot>,<archive-snapshot-size>,<summary-size> -->
        <entry name="profiler.enabled" value="true" />
        <!-- <entry name="profiler.config" value="30,10,10" /> -->
        <entry name="plugin.directory" value="%PLUGIN_DIRECTORY%" />

        <!-- LOG: enable/Disable logging. Levels are: finer, fine, finest, info, 
            warning -->
        <entry name="log.console.level" value="%CONSOLE_LOG_LEVEL%" />
        <entry name="log.file.level" value="%FILE_LOG_LEVEL%" />
    </properties>
</orient-server>

default-distributed-db-config.json:

{
  "autoDeploy": true,
  "hotAlignment": true,
  "executionMode": "synchronous",
  "readQuorum": 1,
  "writeQuorum": 1,
  "failureAvailableNodesLessQuorum": false,
  "readYourWrites": true,
  "servers": {
    "*": "master"
  },
  "clusters": {
    "internal": {
    },
    "index": {
    },
    "*": {
      "servers": ["<NEW_NODE>"]
    }
  }
}

  1. 启动 OServer:

  1. Start OServer:

OServer 服务器 = OServerMain.create();

OServer server = OServerMain.create();

server.startup(getOrientServerConfig());

server.startup(getOrientServerConfig());

server.activate();

server.activate();

等待两个节点都启动.

每个节点都连接到图形数据库.

Each node connects to the graph database.

OrientGraphFactory factory = new OrientGraphFactory("plocal:" + new File("databases/db_testdb").getAbsolutePath());

OrientGraphFactory factory = new OrientGraphFactory("plocal:" + new File("databases/db_testdb").getAbsolutePath());

  • NodeA 将使用 getNoTx 添加新顶点.
  • NodeB 将仅读取图形并使用 getNoTx 计算找到的顶点.

我创建了一个非常基本的 maven 项目,其中包含两个将启动 nodeA 和节点B.

I created a very basic maven project which contains two tests that will start nodeA and nodeB.

推荐答案

必须为每个节点设置 ORIENTDB_HOME 属性.必须以这种方式设置该属性,以便可以找到 $ORIENTDB_HOME/databases 文件夹.我已经更新了 Maven 项目.

It is mandatory to set the ORIENTDB_HOME property for each node. The property must be set that way so that the $ORIENTDB_HOME/databases folder can be located. I have updated the maven project.

每个节点都可以这样设置属性,例如:<代码>String orientdbHome = new File("").getAbsolutePath();System.setProperty("ORIENTDB_HOME", orientdbHome);

Each node can set the property for example this way: String orientdbHome = new File("").getAbsolutePath(); System.setProperty("ORIENTDB_HOME", orientdbHome);

这篇关于如何使用 OrientDB 设置嵌入式主/主复制?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆