【问题标题】:OrientDB: how to connect to multiple remote hosts in a distributed cluster?OrientDB:如何连接到分布式集群中的多个远程主机?
【发布时间】:2019-07-01 17:24:31
【问题描述】:

假设我有 3 个以分布式模式一起运行的 OrientDB 主机,位于以下地址:

  • 192.168.10.4
  • 192.168.10.5
  • 192.168.10.6

使用 Java 客户端,获取对数据库的引用的典型方法是这样做:

 this.graphFactory = new OrientGraphFactory(
            "remote:[host]/[database]",
            "username",
            "password")
            .setupPool([...], [...]);

在连接字符串参数中,如何指示有多个主机?我的第一直觉是在单独的 IP 上手动设置 TCP 负载平衡器(即 HAProxy),并让它在我的 3 台主机之间分配。

有没有办法告诉 API 有多个 IP 可供选择,或者我应该在我的实例前面设置一个负载均衡器?

【问题讨论】:

    标签: distributed orientdb


    【解决方案1】:

    您可以使用用分号分隔的所有地址:

    remote:192.168.10.4/db;remote:192.168.10.5/db;remote:192.168.10.6/db
    

    OrientDB 会尝试连接第一个,但如果无法访问,它会依次尝试其他的。

    【讨论】:

    • 好的,这行得通,但从理论上讲,这意味着我的第一台服务器将比其他两台服务器处理更多的流量,对吗?
    • 正确。但是,在 v2.2 中,您可以在客户端进行负载平衡。
    • 如果我们有不同的服务器密码和用户名怎么办?
    • 您必须在所有节点上使用相同的用户名密码。
    【解决方案2】:

    上述连接数据库的方式对我不起作用。

    我试过远程:host1/host2/host3/{databsename}

    示例:远程:192.168.10.4;192.168.10.5;192.168.10.6/db

    这行得通。

    【讨论】:

      【解决方案3】:

      2019-07-01 上海

      对于 v3.0.x,多节点连接如下所示:

      remote:{ip_1},{ip_2},{ip_3}/{database_name}
      

      OrientDB JavaApi 演示:

      String url = "remote:{ip_1},{ip_2},{ip_3}/{database_name}";
      String username = "username";
      String password = "password";
      
      // FIXME: I'm not sure the pool configuration is suit for you, may be you can use the default config.
      
      OrientDBConfigBuilder poolCfg = OrientDBConfig.builder();
      poolCfg.addConfig(OGlobalConfiguration.DB_POOL_MIN, 1);
      poolCfg.addConfig(OGlobalConfiguration.DB_POOL_MAX, 100);
      poolCfg.addConfig(OGlobalConfiguration.CLIENT_CONNECTION_STRATEGY, OStorageRemote.CONNECTION_STRATEGY.ROUND_ROBIN_CONNECT);
      
      ODatabasePool pool = new ODatabasePool(url, userName, password, poolCfg.build());
      ODatabaseSession session = pool.acquire();
      session.begin();
      ....
      

      OrientDB 源代码

        public OrientDB(String url, String serverUser, String serverPassword, OrientDBConfig configuration) {
          int pos;
          String what;
          if ((pos = url.indexOf(':')) > 0) {
            what = url.substring(0, pos);
          } else {
            what = url;
          }
          if ("embedded".equals(what) || "memory".equals(what) || "plocal".equals(what))
            internal = OrientDBInternal.embedded(url.substring(url.indexOf(':') + 1), configuration);
      
      =========================== HERE =========================
          else if ("remote".equals(what))
            internal = OrientDBInternal.remote(url.substring(url.indexOf(':') + 1).split(","), configuration);
      =========================== HERE =========================
      
          else
            throw new IllegalArgumentException("Wrong url:`" + url + "`");
      
          this.serverUser = serverUser;
          this.serverPassword = serverPassword;
        }
      
      

      【讨论】:

        猜你喜欢
        • 2012-06-10
        • 1970-01-01
        • 1970-01-01
        • 2015-09-02
        • 2018-07-01
        • 2020-03-21
        • 1970-01-01
        • 1970-01-01
        • 2017-04-15
        相关资源
        最近更新 更多