
1、背景
隨著社交、電商、金融、零售、物聯網等行業的快速發展,現實社會織起了了一張龐大而復雜的關系網,傳統數據庫在處理關系運算上顯得越來越力不從心。大數據行業需要處理的數據之間的關系隨數據量呈幾何級數增長,亟需一種支持海量復雜數據關系運算的數據庫,圖數據庫應運而生。
當前圖數據庫的種類也已經有很多,本文介紹的是原生類的代表之一的orientdb(另一個代表是neo4j)的部署,以便為后續的使用做好準備。
2、環境準備
- 操作系統:Centos6.8
- 內存: 8G(分布式部署時建議4G及以上,否則需要手動修改JVM配置)
- JDK: 建議jdk8版本(3.0版本要求jdk8)
- 環境變量:需配置JAVA_HOME、ORIENTDB_HOME (配置文件中有用到)
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
export ORIENTDB_HOME=/usr/local/orientdb
export PATH=$PATH:$ORIENTDB_HOME/bin
創建orientdb用戶。
# groupadd orientdb
# useradd -r -g orientdb orientdb
OrientDB安裝包下載:官網地址https://orientdb.com/。
3、單實例部署
(1)解壓數據庫安裝包,并授權
企業版處理步驟:
tar -zxvf orientdb-enterprise-2.2.37.tar.gz
ln -s orientdb-enterprise-2.2.37 orientdb
chown -R orientdb:orientdb orientdb/
tar -zxvf orientdb-3.0.10.tar.gz
社區版處理步驟:
與企業版不同的是如果下載的為社區版需將agent jar下載下來并拷貝至plugins目錄下:
# 創建軟連接 以便后續升級使用
ln -s orientdb-3.0.10 orientdb
# 授權
chown -R orientdb:orientdb orientdb/
# 如果是下載的為社區版需將企業版agent jar包拷貝至plugins目錄下
cp agent-3.0.10.jar orientdb/ plugins
(2)修改bin目錄下orientdb.sh
ORIENTDB_DIR="/usr/local/orientdb"
ORIENTDB_USER="orientdb"
(3)修改bin目錄下orientdb.service
User=orientdb
Group=orientdb
ExecStart=$ORIENTDB_HOME/bin/server.sh
(4)初始化啟動
首次啟動數據庫使用server.sh,并在啟動過程中提示配置root賬號密碼,如首次不采用此方式啟動,則會隨機生成root賬號的密碼。因此單實例啟動時建議用該方式啟動。

(5)文件屬主確認
首次啟動后會在databases目錄下生成OSystem,如果該目錄屬主不是orientdb則需要手動修改為orientdb,否則下次啟動時異常(報沒有權限操作OSystem目錄的錯誤)
(6)啟動、關閉服務(也可以復制到/etc/init.d目錄下,做成服務)
# 啟動
./orientdb.sh start
# 狀態
./orientdb.sh status
# 關閉
./orientdb.sh stop
(7)進入控制臺,進行數據庫交互
4、分布式部署
分布式部署前幾步操作同單實例情況(3.1-3.3),但后續操作不同。
(1)解壓數據庫安裝包
tar -zxvf orientdb-enterprise-2.2.37.tar.gz
如果是下載的為社區版需將企業版agent jar包拷貝至plugins目錄下。
tar -zxvf orientdb-3.0.10.tar.gz
ln -s orientdb-3.0.10 orientdb
cp agent-3.0.10.jar orientdb/ plugins
(2)修改bin目錄下orientdb.sh
ORIENTDB_DIR="/usr/local/orientdb"
ORIENTDB_USER="orientdb"
(3)修改bin目錄下orientdb.service
User=orientdb
Group=orientdb
ExecStart=$ORIENTDB_HOME/bin/server.sh
(4)初始化啟動
分布式部署的首次初始化啟動數據庫使用dserver.sh,并在啟動過程中提示配置root賬號密碼,以及節點名稱,節點名稱在后續操作中需要用到。

(5)修改hazelcast.xml文件
配置TCP / IP模式機制,并添加對應節點信息,修改后主要配置信息如下:
<group>
<name>clusterName</name>
<password>clusterPassword</password>
</group>
<properties>
. . .
</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>your_master_server_ip_1</member>
<member>your_master_server_ip_2</member>
<member>your_replica_server_ip</member>
</tcp-ip>
</join>
</network>
其中部分標簽的含義如下:
<group> name :此元素定義集群的名稱。你可以選擇任何你喜歡的東西
<group> password :定義用于加密每個成員發送的廣播消息加入群集的密碼。在這里選擇一個強大的密碼。
<network> port :標識用于自動發現節點的端口。auto-increment屬性指示機制從定義的端口開始,如果該端口正在使用,則繼續嘗試其他端口。通過將其設置為false,定義的端口將用于通信,如果端口已在使用中,則節點發現將失敗。對于本文,該屬性將被禁用。
<join>multicast enabled :組播元素用于定義IP組播參數。將不會使用IP多播,因此我們將忽略它們,可以將enabled屬性設置為false。
<join> tcp-ip :用于定義與TCP / IP集群相關的參數。enabled屬性用于啟用它。
<join> <tcp-ip> member :定義集群的每個成員。還有其他方法來指定每個成員,但是我們將堅持指定每個成員的IP地址(每行一個)。
(6)修改orientdb-server-config.xml文件
其中NodeName參數的值是在第3.4步中配置的節點名。
. . .
<handler class="com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin">
<parameters>
<parameter value="true" name="enabled"/>
<parameter value="${ORIENTDB_HOME}/config/default-distributed-db-config.json" na$
<parameter value="${ORIENTDB_HOME}/config/hazelcast.xml" name="configuration.haz$
<parameter value="orientdb_server_name_1" name="nodeName"/>
</parameters>
</handler>
. . .
(7)修改default-distributed-db-config.json文件
默認配置全部節點均為主節點,如配置其中部分節點為副本,則修改為如下情況。
其中新增replication ,hotAlignment。
{
"replication": true,
"hotAlignment" : true,
"autoDeploy": true,
"readQuorum": 1,
"writeQuorum": "majority",
"executionMode": "undefined",
"readYourWrites": true,
"newNodeStrategy": "static",
"servers": {
"orientdb_server_name_1": "master",
"orientdb_server_name_2": "master",
"orientdb_server_name_3": "replica"
},
...
}autoDeploy :指定是否將數據庫部署到集群中尚未擁有的新節點。
readQuorum :在讀取操作上回復客戶端之前需要一致的集群節點的響應次數。將其設置為“1”將禁用讀取一致性。
writeQuorum :在寫入操作時,在向客戶端發送回復之前需要響應多少個節點。默認值為多數 ,它使用(N / 2)+ 1計算 ,其中N是集群中可用主節點的數量。在計算大多數時,不考慮復制節點。如果在僅具有兩個主節點的群集中保留默認值,則如果其中一個節點關閉,則法定人數將永遠不會形成。
executionMode :定義客戶端的執行模式 - 同步或異步。默認值允許客戶端決定。
readYourWrites :指定節點的響應是否計數達到寫入定額。
newNodeStrategy :當新節點加入集群時會發生什么。使用默認值,節點將自動注冊在服務器列表下。
hotAlignment :指定如果節點關閉然后重新聯機,會發生什么。如果啟用,則當節點脫機時,同步消息將保留在分布式隊列中。當它回到在線時,通過輪詢隊列中的所有同步消息來啟動同步階段。
servers :用于指定集群中節點的角色(主節點或副本節點)。默認情況下,使用星號*表示服務器中的所有節點都是主節點。因為我們打算構建一個包含兩個主器件和一個副本的集群,所以我們將通過指定每個節點的名稱和集群中的角色來修改此參數進行匹配。
(8)啟動各節點服務
啟動時,注意啟動順序。啟動的第一個服務器(即第一個加入集群)成為協調服務器 ,這是分布式操作啟動的地方。如果希望特定服務器具有此角色,先啟動該角色
所有節點啟動完畢后,日志中將有如下信息,其中含有主節點、副本集信息

結束語:
至此,OrientDB的單節點及分部署部署均已完成 。