Posted :
Start
by
downloading orientdb
on the servers , where
replication is to be configured . It can be
gotten from
orientdb ,
or for example by using wget , as in :
$ wget https://s3.us-east-2.amazonaws.com/orientdb3/releases/3.1.10/orientdb-3.1.10.tar.gz
Next
extract orientdb , by using tar ,
as in tar -xzf orientdb-version.tar.gz , and
go into the bin directory of the extracted
folder , which
is more or less related to orientdb execution ,
by using the cd command , as in cd orientdb-3.1.10/bin ,
and execute
./dserver.sh .
The dserver.sh script
, starts orientdb in distributed mode .
The reason that this script is first ran , is for orientdb
to generate a password , and a name for each node , where the
script is to be ran . Choose
meaningful name , as in location1 , location2 ...
... +---------------------------------------------------------------+ | WARNING: FIRST RUN CONFIGURATION | +---------------------------------------------------------------+ | This is the first time the server is running. Please type a | | password of your choice for the 'root' user or leave it blank | | to auto-generate it. | | | | To avoid this message set the environment variable or JVM | | setting ORIENTDB_ROOT_PASSWORD to the root password to use. | +---------------------------------------------------------------+ Root password [BLANK=auto generate it]: *********** Please confirm the root password: *********** ... +---------------------------------------------------------------+ | WARNING: FIRST DISTRIBUTED RUN CONFIGURATION | +---------------------------------------------------------------+ | This is the first time that the server is running as | | distributed. Please type the name you want to assign to the | | current server node. | | | | To avoid this message set the environment variable or JVM | | setting ORIENTDB_NODE_NAME to the server node name to use. | +---------------------------------------------------------------+ Node name [BLANK=auto generate it]: development # You can after that hit ctrl-c to stop # orientdb , or you can also execute the # script ./shutdown.sh in orientdb # bin directory , to shut down # orientdb .
Orientdb
recommends 4 GB of ram , for the distributed mode ,
but
if memory is an issue ,
it can be configured by editing
the script orientdb-version/bin/dserver.sh ,
for example by using nano and ctrl-w ,
to search for the memory settings , which should be as follows :
# Excerpt from bin/dserver.sh
# ORIENTDB memory options, default to 4GB of heap.
if [ -z "$ORIENTDB_OPTS_MEMORY" ] ; then
ORIENTDB_OPTS_MEMORY="-Xms4G -Xmx4G"
# Xms is the start memory , and Xmx is the
# max memory .
# Replace 4G for example by 512M , which means
# 512 megabytes .
# If using nano , hit ctrl-x , followed by the
# y character , followed by an enter to exit
# editing , and save the done work .
Now
it is time to configure nodes' clustering .
To do that the
OHazelcastPlugin must be configured
in
config/orientdb-server-config.xml ,
to specify if it is enabled , and where the
default
configuration file for distributed database , for example
default-distributed-db-config.json is , and
where the file used to configure cluster membership and protocol , for example ,
hazelcast.xml is .
The default configuration in orientdb-server-config.xml is sufficient .
<!-- orientdb-version/config/orientdb-server-config.xml -->
<handler class="com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin">
<parameters>
<parameter value="${distributed}" name="enabled"/>
<parameter value="${ORIENTDB_HOME}/config/default-distributed-db-config.json" name="configuration.db.default"/>
<parameter value="${ORIENTDB_HOME}/config/hazelcast.xml" name="configuration.hazelcast"/>
<parameter value="development" name="nodeName"/>
</parameters>
</handler>
To
configure the replication protocol
,
edit orientdb-server-config.xml ,
for each server .
<!-- The config/orientdb-server-config.xml file .-->
<?xml version="1.0" encoding="UTF-8"?>
<hazelcast
xsi:schemaLocation="http://www.hazelcast.com/schema/config ...>
<group>
<name>orientdb</name>
<password>orientdb</password>
</group>
<properties>
<property name="hazelcast.phone.home.enabled">false</property>
...
</properties>
<network>
<port auto-increment="false">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>ipaddress</member>
<member>ipaddress:port</member>
<member>host</member>
<member>host:port</member>
...
</tcp-ip>
</join>
</network>
<executor-service>
<pool-size>16</pool-size>
</executor-service>
</hazelcast>
The group name and password , are the cluster's name and password . Make sure to change them , and to choose a secure password .
The network is
the network protocol to be used
. auto-increment is disabled , if enabled and the port specified is already
bound , then the next port is tried .
The
network protocol
can be set to multicast
, like if on the local network ,
or on the same PC , in such a case , nothing is to be
configured , just make sure that multicast is enabled ,
as in , enabled="true" . Only one network setting
can be enabled , as in tcp-ip or multicast .
If
like on different or remote networks , or for any other reasons ,
the network protocol can be set to tcp-ip .
For tcp-ip , you can specify the IP address or host name , with optionally a port number ,
as in 192.168.0.4:2424 . For each server , that is to be part of the group , just add
its details using the member tag .
Having
configured the network protocol , it is time to
configure database replication
, which can be done in
default-distributed-db-config.json .
This file is copied , and updated as distributed-config.json ,
to each database folder in orientdb-version/databases .
// The config/default-distributed-db-config.json file .
{
"autoDeploy": true,
"executionMode": "undefined",
"readQuorum": 1,
"writeQuorum": "majority",
"readYourWrites": true,
"newNodeStrategy": "static",
"servers": {
"production": "master"
"development": "replica",
},
"clusters": {
"internal": {
},
"*": {
"servers": [""]
}
}
}
/*
autoDeploy : Means automatically deploy the database to nodes , which
do not have it .
executionMode : Default is undefined , to let the client decide .
If set to Asynchronous , then an operation is first
executed on the the local node , before being
replicated .
readQuorum : Number of responses that must be coherent , before
replying to a read operation .
writeQuorum : Number of responses that must be coherent , before
replying to a write operation .
If set to all , means all responses must be coherent ,
if set to majority , this means that n/2 + 1
responses must be coherent , and if set to 1 , it
is as if it is disabled .
readYourWrites : The write quorum is only satisfied , if the local
node has responded .
newNodeStrategy : Can be set to static or dynamic , if static a new
node is registered as static , if dynamic a new
node is managed as dynamic . When a node is
unreachable , and the node strategy is dynamic it
does not count into the quorum .
servers : What is the role of each server , for example the server which
was given the name of production is a master , and the one
given the name of development is replica .
"servers":{"*"":master} , can be used to state that all servers
are masters .
More than one master can be configured , a replica server is just a
replica , it does not count into voting in writeQuorum .
clusters : The term cluster in orientdb , also means a way of grouping
records of a certain type , or by a specific value .
A class is orientdb way of modeling , so it is the model , it
stores its data into records .
Each class can have multiple clusters , as in to group records
which it has and which are similar .
A cluster can be a physical one , as storage on disk , or
temporal as an in memory cluster .
So this setting is used to configure clusters .
As seen , in the provided excerpt the internal cluster is not
replicated . All other clusters are replicated .
servers has as a value an array , which is the list of
servers where cluster records are saved . The special
value <NEW_NODE> means auto add new nodes . An
example of using specific node values is :
["location1" , "location2"] .
Cluster configuration inherits database configuration ,
readQuorum , writeQuorum , readYourWrites , and can
override them .
Additionally owner can be used to specify the owner of the
cluster , as in "owner": "location1" , this is called
static assignment , even if the node is down , a static
owner is not changed . If not done statically , an owner is
chosen at runtime dynamically .*/
In the previous example , two nodes were specified , one as being a master , and the second one as being a replica , other configuration options , are explained in the preceding code , as in having all nodes to be masters , which is the default .
That
is it for configuring replication using
orientdb , the
servers can be started
using
./dserver.sh . Start the
replica , after the master .
To
check if everything is working
correctly , a database
can be created as in create database remote:localhost/nameOfDb root thePassword ,
on the master server , using the console , which can be launched from
the bin folder , and using the console in the
replica server , and after issuing the command
connect remote:localhost/ root thePassword , the
command List databases can be run to verify that
the created database has been replicated .
If
multiple instances of
orientdb are run on the
same PC , different ports
must
be configured for each running instance , for example in orientdb-server-config.xml ,
by using nano config/orientdb-server-config.xml ,
and searching using ctrl-w for port , and
choosing the preferred ports .
<!-- Excerpt from orientdb-server-config.xml file .-->
<?xml version="1.0" encoding="UTF-8"?>
<listener protocol="binary" socket="default" port-range="2424-2430" ip-address="0.0.0.0"/>
<listener protocol="http" socket="default" port-range="2480-2490" ip-address="0.0.0.0">
<!-- Excerpt from config/hazelcast.xml file .-->
<port auto-increment="false">2434</port>
<!-- instead of changing the port , auto-increment
can be set to true for hazelcast.xml .-->