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 .-->