如何在 Ubuntu 16.04 上配置 OrientDB 群集

介绍

OrientDB 是一个多模型 NoSQL 数据库,支持图形和文档数据库. 它是一个 Java 应用程序,可以在任何操作系统上运行. 它也完全支持 ACID - 支持多主群集和复制,允许轻松的水平扩展。

然而,OrientDB中的群集一词可以指两个不同的概念:

您可以有一个 OrientDB nodes 群集,这是运行 OrientDB 的服务器,这意味着至少使用一个物理 (或云) 服务器,因为一个服务器上可以运行多个 OrientDB 实例。 2 您也可以有一个 OrientDB database 内部的群集,这是类似类型或值的记录的群集。

本文的重点是第一个类型的集群,即一个节点集群。在集群模式中,OrientDB运行在一个多大师或无大师的分布式架构中,这意味着集群中的每个节点在平等的基础上运作,并且能够读/写对方的记录。

在本教程中,您将使用 OrientDB 社区版本设置一个三个节点集群,其中有两个主节点和一个复制节点。

前提条件

要遵循本教程,您将需要:

  • 三个Ubuntu 16.04服务器,有足够的RAM支持集群. 这将视您的需要以及您如何自定义东方数据库而有所不同, 但是4GB 每一个都是很好的默认值 。
  • 使用这个带有Ubuntu 16.04 教程的初始服务器设置,在每一个服务器**上设置了 sudo 非根用户账户和防火墙.
  • Java必须安装在所有服务器上,您可以通过遵循此Java安装指南的JDK 8步骤来做到这一点. OpenJDK JRE同样有效,所以如果不想接受甲骨文许可证,可以使用同一种教程来安装默认的JRE.
  • 东方 DB在每个服务器上安装了****,** 通过遵循单一服务器OrientDB安装指南第1步的正文. 您可以选择遵循步骤2, 以限制必需的RAM 数量; OrientDB 分布的启动脚本预计至少有 4 GB 的RAM 可用, 除非您更改此选项, 否则它不会启动 。
  • 东方 DB 设置为系统化服务 ** 在每个服务器上 ** 遵循 [单一服务器东方DB 安装指南中的 第 5 和 6 个] (https://andsky.com/tech/tutorials/how-to-install-and-configure-orientdb-on-ubuntu-16-04),在重新装入单元后停止(即不启动服务). 您需要更改的只是您为单位文件中的ExecStart提供的文件。 最初的教程使用'server.sh',但这里使用'dserver.sh'进行分布模式.

步骤 1 — 生成根密码和OrientDB实例名

首先,我们将运行分布式服务器脚本 `dserver.sh' 来生成 OrientDB 实例需要在集群中运作的凭证。

要开始,导航到安装目录。

1cd /opt/orientdb

然后启动分布式服务器。

1sudo bin/dserver.sh

首次启动分布式服务器时,您将被要求为 root 用户帐户指定密码. 这是一个内部的OrientDB帐户,将用于访问服务器,例如OrientDB Studio,用于管理OrientDB的基于Web的界面,并从控制台连接到OrientDB。 如果您没有在这里指定密码,它将自动生成。

 1[secondary_label Output]
 2+---------------------------------------------------------------+
 3|                WARNING: FIRST RUN CONFIGURATION               |
 4+---------------------------------------------------------------+
 5| This is the first time the server is running. Please type a   |
 6| password of your choice for the 'root' user or leave it blank |
 7| to auto-generate it.                                          |
 8|                                                               |
 9| To avoid this message set the environment variable or JVM     |
10| setting ORIENTDB_ROOT_PASSWORD to the root password to use.   |
11+---------------------------------------------------------------+
12
13Root password [BLANK=auto generate it]: *****
14Please confirm the root password: *****

然后,您将被要求为 OrientDB 实例设置一个名称,该实例可能与其运行的云服务器相同。

 1[secondary_label Output]
 2+---------------------------------------------------------------+
 3|         WARNING: FIRST DISTRIBUTED RUN CONFIGURATION          |
 4+---------------------------------------------------------------+
 5| This is the first time that the server is running as          |
 6| distributed. Please type the name you want to assign to the   |
 7| current server node.                                          |
 8|                                                               |
 9| To avoid this message set the environment variable or JVM     |
10| setting ORIENTDB_NODE_NAME to the server node name to use.    |
11+---------------------------------------------------------------+
12
13Node name [BLANK=auto generate it]: node-name

当脚本完成运行时,你会看到这样的行:

1[secondary_label Output]
22017-06-01 02:24:00:717 INFO OrientDB Server is active v2.2.20 (build 76ab59e72943d0ba196188ed100c882be4315139). [OServer]

在此时,您可以使用CTRL+C终止该过程,现在OrientDB已安装,我们需要修改几个配置文件,以便它作为一个集群运行。

步骤 2 — 将 OrientDB 配置为分布式模式功能

为了使 OrientDB 安装在群集中作为节点,其config目录中的三个文件需要进行修改。

  1. hazelcast.xml:本文件中定义的参数使节点的自动发现成为可能。
  2. default-distributed-db-config.json:本文件仅用于分布式环境中使用,用于为每个数据库定义节点的行为。

我们将在这个步骤中修改每个文件,从hazelcast.xml开始。

更改hazelcast.xml文件

在hazelcast.xml中您需要配置的最重要的设置是每个节点将使用的机制加入集群。我们将在本节中考虑的两个机制是 IP MulticastTCP/IP-cluster. 使用前者,您指定一个多节点地址和端口,每个节点将用来自动发现它所属的网络。

要开始,打开文件编辑:

1sudo nano /opt/orientdb/config/hazelcast.xml

该文件不太长,这是一个剪辑的版本,只显示你要更改的文件的部分:

 1[label /opt/orientdb/config/hazelcast.xml]
 2. . .
 3    <group>
 4    	<name>orientdb</name>
 5    	<password>orientdb</password>
 6    </group>
 7    <properties>	
 8    	. . .
 9    </properties>
10    <network>
11    	<port auto-increment="true">2434</port>
12    	<join>
13    		<multicast enabled="true">
14    			<multicast-group>235.1.1.1</multicast-group>
15    			<multicast-port>2434</multicast-port>
16    		</multicast>
17    	</join>
18    </network>

对于这个文件,你要做的就是禁用 IP 多元化,添加一个允许 TCP/IP 集群的条目,并指定集群成员。

  • ** 组 > 名称** : 此元素定义了集群的名称 。 您可以选择任何您喜欢的 。
  • ** group > 密码 ** : 定义用于加密每个成员为加入集群而发送的广播信件的密码。 在此选择一个强烈的密码.
  • network > 端口 : 识别用于自动发现节点的端口. " 自动递增 " 属性指示该机制从所定义的港口开始,并在该港口被使用时继续尝试其他港口。 通过将其设定为虚假,定义的端口将被用于通信,如果端口已经使用,则节点发现会失败. 对于此文章,属性将被禁用. *join > multicast 元素用于定义IP多播参数. 你不会使用IP多播, 所以我们会忽略他们。 这就是说,我们会把被启用属性设定为虚假。 用于定义TCP/IP集群相关参数. `被启用'属性用于启用它。 *join > tcp-ip > 成员 : 定义集群的每个成员。 有其他办法可以指定每个成员,但我们会坚持这个办法,指定每个成员的IP地址(每行一个). (韩语)_

当您完成更改文件时,最终版本将看起来如下:

 1[label /opt/orientdb/config/hazelcast.xml]
 2. . .
 3    <group>
 4    	<name>clusterName</name>
 5    	<password>clusterPassword</password>
 6    </group>
 7    <properties>	
 8    	. . .
 9    </properties>
10    <network>
11    	<port auto-increment="false">2434</port>
12    	<join>
13    		<multicast enabled="false">
14    			<multicast-group>235.1.1.1</multicast-group>
15    			<multicast-port>2434</multicast-port>
16    		</multicast>
17    		<tcp-ip enabled="true">
18    			<member>your_master_server_ip_1</member>
19                <member>your_master_server_ip_2</member>
20                <member>your_replica_server_ip</member>
21            </tcp-ip>
22    	</join>
23    </network>

保存并关闭文件,当你完成编辑时. 接下来是我们列表中的第二个文件。

更改默认分布-db-config.json文件

hazelcast.xml一样,我们只会对/opt/orientdb/config/default-distributed-db-config.json进行几次修改。

打开它来编辑。

1sudo nano /opt/orientdb/config/default-distributed-db-config.json

文件的相关部分在下面的代码块中显示:

 1[label /opt/orientdb/config/default-distributed-db-config.json]
 2{
 3  "autoDeploy": true,
 4  "readQuorum": 1,
 5  "writeQuorum": "majority",
 6  "executionMode": "undefined",
 7  "readYourWrites": true,
 8  "newNodeStrategy": "static",
 9  "servers": {
10    "*": "master"
11  },
12  . . . 
13}

这里是每个行意味着什么:

  • ** 自动部署** :指定是否将数据库部署到组中尚未安装的新节点。 *** 已读法定人数** : 分组节点在回复客户端读取操作前需要一致的响应数量. 设置为1 , 无法读取一致性 。 {} ** writeQcoverity ** : 在写入操作时,在发送回复给客户端之前需要响应多少个节点. 默认值为** 多数** ,使用** (N/2)+1** 来计算,其中** N** 为集群中可用的主节点数. 在计算多数时不考虑复制节点。 如果在只有两个主节点的集群中处于默认状态,如果其中一个节点下行,法定人数永远不会形成. *executionMode :定义客户端的执行模式-同步或同步. 默认让客户端决定.
  • ** read YourWrites ** :指定节点的响应是否构成达到写法定人数.
  • ** 新节点战略** : 当一个新的节点加入集群时会发生什么. 带有默认值的节点会自动在服务器列表下注册.

我们将添加以下参数:

  • hotAlignment : 指定如果节点下降,然后返回网络时会发生什么。如果启用,则在节点离线时,同步消息被保存在分布式排列中。当节点返回网络时,它会通过调试排列中的所有同步消息来启动同步阶段。
  • servers : 用于指定集群中的节点的角色(主或复制) 默认情况下,一个星座, *,用于表示服务器中的所有节点将是主。 因为我们打算构建一个集群,其中包括两个大师和一个复制,我们将通过指定每个节点的名称和它将在集群中扮演的角色来修改这个参数。 这个名称是您在步骤 1._MBRK_1 中配置的

当你完成了修改文件时,它应该是这样的:

 1[label /opt/orientdb/config/default-distributed-db-config.json]
 2{
 3  "replication": true,
 4  "hotAlignment" : true,
 5  "autoDeploy": true,
 6  "readQuorum": 1,
 7  "writeQuorum": "majority",
 8  "executionMode": "undefined",
 9  "readYourWrites": true,
10  "newNodeStrategy": "static",
11  "servers": {
12    "orientdb_server_name_1": "master",
13    "orientdb_server_name_2": "master",
14    "orientdb_server_name_3": "replica"
15  },
16
17  ...
18
19}

完成后保存并关闭文件. 我们现在将配置我们列表中的最后一个文件。

更改orientdb-server-config.xml文件

Within /opt/orientdb/config/orientdb-server-config.xml 是一个用于在 OrientDB 中使用 Hazelcast in-memory data grid 启用或禁用集群的参数。

打开它来编辑。

1sudo nano /opt/orientdb/config/orientdb-server-config.xml

文件的相关部分如下所示,它位于文件的顶部. 请注意, NodeName 参数的值是您在步骤 1 中指定的值:

 1[label /opt/orientdb/config/orientdb-server-config.xml]
 2. . .
 3<handler class="com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin">
 4    <parameters>
 5    	<parameter value="${distributed}" name="enabled"/>
 6        <parameter value="${ORIENTDB_HOME}/config/default-distributed-db-config.json" na$
 7        <parameter value="${ORIENTDB_HOME}/config/hazelcast.xml" name="configuration.haz$
 8        <parameter value="orientdb_server_name_1" name="nodeName"/>
 9    </parameters>
10</handler>
11. . .

要启用集群化,请将 ** enabled** 参数更改为 ** true** . 编辑后,最终版本将看起来如下:

 1[label /opt/orientdb/config/orientdb-server-config.xml]
 2. . .
 3<handler class="com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin">
 4    <parameters>
 5    	<parameter value="true" name="enabled"/>
 6        <parameter value="${ORIENTDB_HOME}/config/default-distributed-db-config.json" na$
 7        <parameter value="${ORIENTDB_HOME}/config/hazelcast.xml" name="configuration.haz$
 8        <parameter value="orientdb_server_name_1" name="nodeName"/>
 9    </parameters>
10</handler>
11. . .

当你完成编辑文件时,保存并关闭它。

在我们开始和测试集群之前,唯一剩下的东西是允许OrientDB通过防火墙的流量。

步骤 3 – 通过防火墙允许 OrientDB 流量

如果你现在试图启动集群,OrientDB的流量将被你的防火墙阻止,让我们添加规则来允许通过以下端口的流量:

  • 2424,用于二进制通信
  • 2434,用于交换集群通信

打开24242480的端口。

1sudo ufw allow 2424
2sudo ufw allow 2434

美元(注)

** 注意** : 端口 2480 用于访问 OrientDB Studio,该应用程序的 Web 接口. 使用 HTTP,因此它不安全,不应暴露于公共互联网。

1sudo ufw allow 2480

美元

接下来,重新启动UFW。

1sudo systemctl restart ufw

OrientDB已经从前提条件设置为Systemd服务,所以现在剩下的配置已经完成,我们可以开始集群。

步骤 4 – 启动和测试 OrientDB 集群

在每个服务器上,请确保该服务已启用,以便在启动时启动。

1sudo systemctl enable orientdb

现在您可以启动所有三个服务器。第一个开始的服务器(即第一个加入集群的服务器)成为 coordinator server,这是分布式操作开始的地方。

1sudo systemctl start orientdb

检查进程状态以确认他们开始正确。

1sudo systemctl status orientdb

你会看到这样的输出:

1[secondary_label Output]
2 orientdb.service - OrientDB Server
3   Loaded: loaded (/etc/systemd/system/orientdb.service; enabled; vendor preset: enabled)
4   Active: active (running) since Thu 2017-06-01 02:45:53 UTC; 7s ago

如果服务器无法启动,请在输出中寻找线索。潜在的错误来源包括不够的RAM、未安装的Java JRE,或修改的JSON文件未能验证。

一旦进程正常运行,让我们测试集群是否正常工作. 在任何三个节点上,过滤与集群相关的 syslog 条目:

1sudo tail -f /var/log/syslog | grep -i dserver

使用该命令,您将看到类似于下面的输出,该输出表示集群的所有成员都在线。

1[secondary_label Output]
2-------------------+------+------------------------------------+-----+---------+-------------------+
3|Name              |Status|Databases                           |Conns|StartedOn|Binary                    |
4-------------------+------+------------------------------------+-----+---------+-------------------+
5|orientdb-replica-1|ONLINE|GratefulDeadConcerts=ONLINE (MASTER)|4    |01:26:00 |111.111.111.111
6|orientdb-master-2 |ONLINE|GratefulDeadConcerts=ONLINE (MASTER)|4    |01:25:13 |222.222.222.222
7|orientdb-master-1*|ONLINE|GratefulDeadConcerts=ONLINE (MASTER)|6    |01:24:46 |333.333.333.333

这是一个很好的迹象,因为如果服务器及其数据库在线,那么集群的运作可能性很高,您还会看到类似的输出,但当您从下面的控制台连接到数据库之一时会看到更多信息。

要验证集群中的新数据的数据复制,您需要在一个服务器上生成一些数据,然后看看它是否被复制到其他服务器上。

1[environment second]
2cd /opt/orientdb/bin
3sudo ./console.sh

最后一个命令应该在启动控制台时提供以下输出,将提示变为orientdb>

1[environment second]
2[secondary_label Output]
3OrientDB console v.2.2.17 (build UNKNOWN@r98dbf8a2b8d43e4af09f1b12fa7ae9dfdbd23f26; 2017-02-02 07:01:26+0000) www.orientdb.com
4Type 'help' to display all the supported commands.
5Installing extensions for GREMLIN language v.2.6.0
6
7orientdb>

现在连接到 OrientDB 服务器实例. 此命令只会使用 root 用户帐户连接到运行在服务器上的 OrientDB 实例,而不是连接到任何数据库。

1[environment second]
2connect remote:localhost root root-password

接下来,让我们创建一个名为CallMeMaybe的数据库:

1custom_prefix(orientdb&nbsp;{server=remote:localhost/}&gt;)
2[environment second]
3create database remote:localhost/CallMeMaybe root root-password plocal

如果数据库创建成功,您将连接到它,您的提示应更改以匹配。

<$>[note] Note :如果您收到错误表示允许被拒绝或类似,请检查 `/opt/orientdb/databases’ 目录上的权限。从控制台创建数据库的帐户应该有阅读和写入该文件夹的权限。

现在,‘CallMeMaybe’仍然只是一个空的数据库. 只是为了获得一些测试数据,让我们添加一个类:

1[environment second]
2create class Artist

然后,将一个记录插入其中:

1[environment second]
2insert into Artist (id, name, age) values (01,'sammy', 35)

检查新数据库现在是否包含您刚刚插入的记录:

1[environment second]
2select id, age, name from Artist

如果一切顺利,结果应该是这样的:

1[environment second]
2[secondary_label Output]
3+----+----+----+------+
4|#   |id  |age |name  |
5+----+----+----+------+
6|0   |1   |35  |sammy |
7+----+----+----+------+
8
91 item(s) found. Query executed in 0.216 sec(s).

您现在可以退出控制台。

1[environment second]
2exit

此验证过程的最后一步是登录集群中的另一个节点,并尝试查询新数据库,看看数据是否成功传播。

1[environment local]
2ssh sammy@another_orientdb_server_ip

像以前一样启动控制台。

1[environment third]
2cd /opt/orientdb/bin
3sudo ./console.sh

连接到数据库作为 admin ,这是任何新的 OrientDB 数据库的默认用户和密码。

1[environment third]
2connect remote:localhost/CallMeMaybe admin admin

执行与以前相同的查询。

1[environment third]
2select id, age, name from Artist

输出应该与以前的服务器相同,因为您正在在服务器群中执行查询,现在您可以退出控制台。

1[environment third]
2exit

这确认您的三节点集群正常运作。

结论

你已经设置了一个OrientDB集群,由三个节点组成,用于不同的角色(主或复制)。 有了这样的设置,更改节点的数量很容易。 更容易,更有趣,更少的任务将是使用(如Ansible这样的配置管理工具)(https://andsky.com/tech/tutorials/configuration-management-101-writing-ansible-playbooks)来自动部署这样的集群。

目前,您可能需要做的是 参阅此 OrientDB 安全指南来了解如何保护群集中的每个节点。 有关 OrientDB 管理的官方文档可在 项目文档网站找到,以及有关 Hazelcast 的更多信息,请参阅 Hazelcast 文档

Published At
Categories with 技术
comments powered by Disqus