部署
本文討論以分布式的模式運(yùn)行Dgraph,包括運(yùn)行多實(shí)例的Dgraph,并將多個(gè)server構(gòu)建成一個(gè)集群
1. 安裝Dgraph
到github上下載需要的發(fā)行版,并解壓即可
2.簡(jiǎn)單集群構(gòu)建
2.1 理解Dgraph集群
Dgraph是一個(gè)真正的分布式圖數(shù)據(jù)庫(kù),而不是以master-slave模式復(fù)制數(shù)據(jù)全集的。它根據(jù)謂語分片,并在集群中備份謂語,查詢可以在任何節(jié)點(diǎn)上執(zhí)行,連接是基于分布式的數(shù)據(jù)執(zhí)行的。查詢節(jié)點(diǎn)自己存儲(chǔ)的謂語會(huì)在本地執(zhí)行,而對(duì)于存在其他節(jié)點(diǎn)上的謂語,會(huì)使用分布式的join
為了更有效地運(yùn)行Dgraph集群,理解shard、replica以及rebalance時(shí)怎么工作的很重要
2.1.1 Sharding
Dgraph把每個(gè)謂語(在RDF術(shù)語中寫作* P *)的數(shù)據(jù)存在一起,因此最小的數(shù)據(jù)單元時(shí)一個(gè)謂語。為了把圖分片,需要把一個(gè)或多個(gè)謂語分配到一個(gè)group。集群中的每個(gè)節(jié)點(diǎn)都存有一個(gè)group,zero負(fù)責(zé)把group分配給各個(gè)節(jié)點(diǎn)
2.1.2 Shard rebalancing
Dgraph的zero會(huì)試著基于磁盤使用情況進(jìn)行rebalance。如果Zero檢測(cè)到數(shù)據(jù)分布不平衡的情況,它會(huì)試著把某個(gè)謂語以及它的index、反向邊一起轉(zhuǎn)移到磁盤使用最少的group上。這可能會(huì)導(dǎo)致這個(gè)謂語暫時(shí)不可用
Zero會(huì)不斷地檢查數(shù)據(jù)分布,每十分鐘一次。因此,每個(gè)的Dgraph實(shí)例都會(huì)允許Zero從group中分離某個(gè)謂語,并將它轉(zhuǎn)移到一個(gè)新的節(jié)點(diǎn)上
2.1.3 一致性Replication
如果把--replicas標(biāo)志設(shè)置為大于一的整數(shù),Zero會(huì)把group分配到多個(gè)node上。這些節(jié)點(diǎn)將組成一個(gè)Raft group,被稱作quorum。每個(gè)寫操作將會(huì)被一致地復(fù)制到quorum上。為了保證數(shù)據(jù)一致性,quorum的大小應(yīng)該時(shí)奇數(shù)。因此,我們推薦把--replicas設(shè)置為1、3或5。這允許0、1或者2個(gè)存儲(chǔ)同一個(gè)group的節(jié)點(diǎn)宕機(jī)而不影響group的健康
2.2 直接在host上跑
2.2.1 運(yùn)行dgraph zero
$ dgraph zero --my=IPADDR:7080 --wal zw
默認(rèn)的Zero端口是7080與8080,7080時(shí)Dgraph集群內(nèi)部不同節(jié)點(diǎn)之間數(shù)據(jù)交互的Grpc端口,而8080是與外部程序數(shù)據(jù)交互的HTTP端口。你可以使用--port_offset標(biāo)志改變這些端口
--my標(biāo)志是Dgraph與zero聯(lián)系的撥號(hào)盤,因此端口7080以及IP地址必須對(duì)其他Dgraph服務(wù)器是可見的
如果想查看所有可用的flag,執(zhí)行:dgraph zero --help
2.2.2 運(yùn)行dgraph server
dgraph server --idx=2 --memory_mb=<typically half the RAM>
--my=IPADDR:7081 --zero=localhost:7080 --port_offset=1
Dgraph服務(wù)器監(jiān)聽內(nèi)部端口7080,以及外部HTTP端口8080、外部Grpc端口9080。這些可以通過--port_offset標(biāo)志指定
注意--idx標(biāo)志可以省略,省略的話Zero將會(huì)自動(dòng)地為每個(gè)Dgraph server分配一個(gè)唯一的ID,Dgraph服務(wù)器會(huì)將它持久化到wal目錄中
可以使用-p與-w修改文件及WAL的存儲(chǔ)位置,具體可以執(zhí)行dgraph server --help
2.2.3 運(yùn)行Dgraph UI
$ dgraph-ratel -p 8081
Dgraph UI默認(rèn)監(jiān)聽8081端口,可以使用-p標(biāo)志來修改。默認(rèn)情況下,ratel會(huì)假設(shè)dgraph在localhost:8080端口運(yùn)行,可以在ui中修改這個(gè)地址
注意 ratel需要訪問Amazon下載css與js
2.3 高可用性配置
在高可用性配置中,我們需要運(yùn)行三個(gè)或五個(gè)Zero,以及三個(gè)或五個(gè)server
注意
如果replica的數(shù)量是2K+1,至多K個(gè)server宕機(jī)的情況下,讀寫可以不受任何影響
避免把replica設(shè)置為2K(偶數(shù)),這樣如果K個(gè)服務(wù)器宕機(jī),將會(huì)導(dǎo)致阻塞讀寫
2.3.1 Dgraph Zero
運(yùn)行三個(gè)實(shí)例,并通過--idx給每一個(gè)分配一個(gè)唯一ID,并通過--peer發(fā)送一個(gè)健康的Zero實(shí)例的地址(會(huì)自動(dòng)加入集群?像redis那樣?)
為了讓server實(shí)例保存三個(gè)復(fù)制,設(shè)置--replicas=3。每當(dāng)添加一個(gè)新的Dgraph服務(wù)器,Zero將會(huì)檢查已有的group,并給它們分配一個(gè)復(fù)制數(shù)不是三的group
依次啟動(dòng)三個(gè)zero:
./dgraph zero --idx 100 --port_offset 100 --my 10.181.105.100:7180 --wal ../data/zw --replicas 3
./dgraph zero --idx 101 --port_offset 100 --my 10.181.105.101:7180 --peer 10.181.105.100:7180 --wal ../data/zw --replicas 3
./dgraph zero --idx 102 --port_offset 100 --my 10.181.105.102:7180 --peer 10.181.105.101:7180 --wal ../data/zw --replicas 3
2.3.2 Dgraph Server
Run as many Dgraph servers as you want??梢允謩?dòng)設(shè)置--idx標(biāo)志,如果不設(shè)的話也可以,Zero 會(huì)給server自動(dòng)分配一個(gè)id。這個(gè)id將會(huì)被保存在wal中,所以不要?jiǎng)h除wal
新的server會(huì)聯(lián)系z(mì)ero自動(dòng)檢測(cè)其他的server,并互相建立連接。通常,Zero首先會(huì)通過分配一個(gè)server運(yùn)行已有的group來嘗試復(fù)制一個(gè)group。如果所有的分組都已經(jīng)安裝 —replicas標(biāo)志復(fù)制好了,Zero會(huì)創(chuàng)建一個(gè)新的分組。隨著時(shí)間的發(fā)展,數(shù)據(jù)會(huì)被均勻地被分割到不同的group中。因此,需要確保Dgraph server的數(shù)量是replication設(shè)置的整數(shù)倍。
例如,如果在Zero中設(shè)置--replicas=3,那么運(yùn)行三個(gè)server的話,不會(huì)有sharding,但是有3x的復(fù)制。如果運(yùn)行六個(gè)serer,那么會(huì)把數(shù)據(jù)shard到兩個(gè)group中,仍然有3x復(fù)制
依次啟動(dòng)三個(gè)server:
./dgraph server --idx 200 --port_offset 200 --memory_mb 51200 --my 10.181.105.100:7280 --zero 10.181.105.102:7180 --postings ../data/p --wal ../data/w
./dgraph server --idx 201 --port_offset 200 --memory_mb 51200 --my 10.181.105.101:7280 --zero 10.181.105.100:7180 --postings ../data/p --wal ../data/w
./dgraph server --idx 202 --port_offset 200 --memory_mb 51200 --my 10.181.105.102:7280 --zero 10.181.105.101:7180 --postings ../data/p --wal ../data/w
2.3.4 移除死節(jié)點(diǎn)
如果一個(gè)人復(fù)制壞掉,并且不能被恢復(fù),可以移除它并向quorum中添加一個(gè)新節(jié)點(diǎn)。Zero中的/removeNode可以用于移除死節(jié)點(diǎn)(/removeNode?id=3&group=2)
注意
在使用API之前,必須先確定節(jié)點(diǎn)宕了,并確保它不會(huì)再恢復(fù)了
在添加新復(fù)制的時(shí)候,記得設(shè)置
idx標(biāo)志,否則Zero會(huì)給它設(shè)置一個(gè)新的分組
3. 從源碼構(gòu)建
確保安裝了Go (version >= 1.8)
之后,執(zhí)行:
# This should install dgraph binary in your $GOPATH/bin.
$ go get -u -v github.com/dgraph-io/dgraph/dgraph
如果在build的時(shí)候,報(bào)了grpc的錯(cuò),你的go-grpc版本可能太老了。我們不提供go-groc(因?yàn)樵谑褂肎o client的時(shí)候它會(huì)有問題)。通過運(yùn)行如下命令更新go-grpc:
$ go get -u -v google.golang.org/grpc
4. More about Dgraph
在http端口上,一個(gè)運(yùn)行中的Dgraph實(shí)例有一系列的管理終端:
-
/Browser UI and query visualization. -
/healthHTTP status code 200 and “OK” message if worker is running, HTTP 503 otherwise. -
/admin/shutdownshutdown a node. -
/admin/exporttake a running export.
默認(rèn)情況下,server會(huì)監(jiān)聽localhost(只有本機(jī)可見的本地環(huán)網(wǎng)地址),可以使用 --bindall=true 選項(xiàng)綁定到 0.0.0.0 ,監(jiān)聽外部鏈接
注意 如果你準(zhǔn)備load大量數(shù)據(jù),把最大文件描述符設(shè)置為像10000這樣的大值
5. More about Dgraph Zero
Dgraph Zero控制Dgraph集群。它會(huì)基于每個(gè)實(shí)例存儲(chǔ)數(shù)據(jù)的大小自動(dòng)地在集群中移動(dòng)數(shù)據(jù)
在運(yùn)行任何dgraph server之前,必須至少有一個(gè)dgraph zero
- Zero存儲(chǔ)集群的信息
-
--replicas是控制復(fù)制因子的選項(xiàng)(例如每個(gè)數(shù)據(jù)分片的復(fù)制數(shù),包括原始分片) - 每當(dāng)一個(gè)新的機(jī)器啟動(dòng),zero會(huì)基于復(fù)制因子給它分配一個(gè)group。如果復(fù)制因子是1,那么每個(gè)節(jié)點(diǎn)都會(huì)保存不同的group。如果復(fù)制因子是2,摒棄啟動(dòng)了4個(gè)節(jié)點(diǎn),那么前面兩個(gè)節(jié)點(diǎn)會(huì)保存group1,后面兩個(gè)保存group2
- Zero也會(huì)監(jiān)控每個(gè)group的謂語占用的空間大小,并會(huì)通過移動(dòng)它們來平衡集群
像Dgrph一樣,Zero也有使用HTTP端口8080(+port_offset)??梢酝ㄟ^查詢它來獲取有用的信息,如下:
-
/state集群中節(jié)點(diǎn)的信息,包括謂語的size,以及它們所屬的組 -
/removeNode?id=idx&group=gid用于從quorum中移除死掉的節(jié)點(diǎn),節(jié)點(diǎn)id與groupid是所需的參數(shù)
查看state信息:
{
"counter": "26",
"groups": {
"1": {
"members": {
"200": {
"id": "200",
"groupId": 1,
"addr": "10.181.105.100:7280",
"leader": true,
"lastUpdate": "1515398876"
},
"201": {
"id": "201",
"groupId": 1,
"addr": "10.181.105.101:7280"
},
"202": {
"id": "202",
"groupId": 1,
"addr": "10.181.105.102:7280"
}
},
"tablets": {
"_dummy_": {
"groupId": 1,
"predicate": "_dummy_",
"space": "19"
}
}
}
},
"zeros": {
"100": {
"id": "100",
"addr": "10.181.105.100:7180",
"leader": true
},
"101": {
"id": "101",
"addr": "10.181.105.101:7180"
},
"102": {
"id": "102",
"addr": "10.181.105.102:7180"
}
}
}
6. 配置
可以用--help參數(shù)查看zero與server的所有配置項(xiàng)
可以通過多種方式進(jìn)行配置(按優(yōu)先級(jí)從高到低):
- 使用命令行標(biāo)志
- 使用環(huán)境變量
- 使用配置文件
多種配置方式可以同時(shí)使用,例如配置文件用于保存核心信息,命令行標(biāo)志用于為每個(gè)實(shí)例制定參數(shù)
環(huán)境變量本人不推薦使用,不翻譯了
配置文件支持的格式包括JSON、TOML、YAML、HCL以及Java properties,通過文件擴(kuò)展名識(shí)別
配置文件可以通過--config標(biāo)簽或者環(huán)境變量指定,例如:
$ dgraph zero --config my_config.json
配置文件的結(jié)構(gòu)就是簡(jiǎn)單的鍵值對(duì),例如JSON格式配置文件如下:
{
"idx": 42,
"peer": 192.168.0.55:9080,
"replicas": 2
}
7. TSL配置
client到server之間的連接可以通過TLS提高安全,支持加密(密碼保護(hù))與非加密私鑰
如果你使用
openssl生成加密私鑰,必須明確指定加密算法(例如-aes256)。這回強(qiáng)制openssl在私鑰中包含DEK-Info頭,這需要Dgraph解密key。如果使用默認(rèn)加密方式,openssl不會(huì)寫頭,因此key無法被解密
server有如下參數(shù)可以配置:
# Use TLS connections with clients.
tls_on
# CA Certs file path.
tls_ca_certs string
# Include System CA into CA Certs.
tls_use_system_ca
# Certificate file path.
tls_cert string
# Certificate key file path.
tls_cert_key string
# Certificate key passphrase.
tls_cert_key_passphrase string
# Enable TLS client authentication
tls_client_auth string
# TLS max version. (default "TLS12")
tls_max_version string
# TLS min version. (default "TLS11")
tls_min_version string
Dgraph loader可以通過如下參數(shù)設(shè)置:
# Use TLS connections.
tls_on
# CA Certs file path.
tls_ca_certs string
# Include System CA into CA Certs.
tls_use_system_ca
# Certificate file path.
tls_cert string
# Certificate key file path.
tls_cert_key string
# Certificate key passphrase.
tls_cert_key_passphrase string
# Server name.
tls_server_name string
# Skip certificate validation (insecure)
tls_insecure
# TLS max version. (default "TLS12")
tls_max_version string
# TLS min version. (default "TLS11")
tls_min_version string
8. 集群Checklist
在創(chuàng)建集群的時(shí)候,確保檢查了如下項(xiàng):
- 是不是至少一個(gè)dgraph zero節(jié)點(diǎn)在運(yùn)行
- 是否集群中的每個(gè)實(shí)例都被正確配置
- 是不是每個(gè)實(shí)例都能通過7080 (+ any port offset)訪問所有peer
- 是不是每個(gè)節(jié)點(diǎn)在啟動(dòng)的時(shí)候都有一個(gè)唯一ID
- 是不是設(shè)置了
--bindall=true
9. 快速數(shù)據(jù)導(dǎo)入
有兩個(gè)工具可以進(jìn)行數(shù)據(jù)批量導(dǎo)入:
dgraph livedgraph bulk
注意
這兩個(gè)工具都只能接受gzip壓縮的RDF NQuad/Triple數(shù)據(jù)。其他格式的數(shù)據(jù)必須先轉(zhuǎn)換
9.1 Live Loader
dgraph live是一個(gè)從gzip壓縮文件中讀取RDF Nquads,把它們分批,使用go client創(chuàng)建mutation,并導(dǎo)入Dgraph的工具
Live loader可以正確地給多個(gè)文件中的空節(jié)點(diǎn)分配唯一ID,并將它們持久化到磁盤,以節(jié)省內(nèi)存并應(yīng)付loader重新執(zhí)行的情況
$ dgraph live --help # To see the available flags.
# Read RDFs from the passed file, and send them to Dgraph on localhost:9080.
$ dgraph live -r <path-to-rdf-gzipped-file>
# Read RDFs and a schema file and send to Dgraph running at given address
$ dgraph live -r <path-to-rdf-gzipped-file> -s <path-to-schema-file> -d <dgraph-server-address:port>
9.2 Bulk Loader
注意
調(diào)整bulk loader的參數(shù)以提高性能非常重要
Bulk loader的功能與live loader很像,但是只能被用于dgraph離線,并準(zhǔn)備初始化的情況。它不能運(yùn)行在一個(gè)已有的dgraph實(shí)例
警告
千萬不要在Dgraph服務(wù)啟動(dòng)的時(shí)候執(zhí)行bulk loader。用它把已有的數(shù)據(jù)導(dǎo)入一個(gè)新的Dgraph實(shí)例
Bulk loader比live loader快相當(dāng)多,但是它只被推薦用于大數(shù)據(jù)集初始化導(dǎo)入dgraph
可以參看read some technical details博客來了解技術(shù)細(xì)節(jié)
你需要決定集群中希望的dgraph實(shí)例的數(shù)量,并將reduce shard的數(shù)量設(shè)置為這個(gè)數(shù)。你還需要把map shard的數(shù)量至少設(shè)置為跟這個(gè)數(shù)相等(數(shù)量越大,bulk loader就會(huì)把謂語在reduce shard中分布的梗平均)
下面的例子,使用了2個(gè)reduce shard以及4個(gè)map shard:
dgraph-bulk-loader -r=goldendata.rdf.gz -s=goldendata.schema --map_shards=4 --reduce_shards=2
{
"RDFDir": "goldendata.rdf.gz",
"SchemaFile": "goldendata.schema",
"DgraphsDir": "out",
"LeaseFile": "LEASE",
"TmpDir": "tmp",
"NumGoroutines": 4,
"MapBufSize": 67108864,
"ExpandEdges": true,
"BlockRate": 0,
"SkipMapPhase": false,
"CleanupTmp": true,
"NumShufflers": 1,
"Version": false,
"MapShards": 4,
"ReduceShards": 2
}
MAP 01s rdf_count:219.0k rdf_speed:218.7k/sec edge_count:693.4k edge_speed:692.7k/sec
MAP 02s rdf_count:494.2k rdf_speed:247.0k/sec edge_count:1.596M edge_speed:797.7k/sec
MAP 03s rdf_count:749.4k rdf_speed:249.4k/sec edge_count:2.459M edge_speed:818.3k/sec
MAP 04s rdf_count:1.005M rdf_speed:250.8k/sec edge_count:3.308M edge_speed:826.1k/sec
MAP 05s rdf_count:1.121M rdf_speed:223.9k/sec edge_count:3.695M edge_speed:738.3k/sec
MAP 06s rdf_count:1.121M rdf_speed:186.6k/sec edge_count:3.695M edge_speed:615.3k/sec
MAP 07s rdf_count:1.121M rdf_speed:160.0k/sec edge_count:3.695M edge_speed:527.5k/sec
REDUCE 08s [22.68%] edge_count:837.9k edge_speed:837.9k/sec plist_count:450.2k plist_speed:450.2k/sec
REDUCE 09s [40.79%] edge_count:1.507M edge_speed:1.507M/sec plist_count:905.8k plist_speed:905.7k/sec
REDUCE 10s [79.91%] edge_count:2.953M edge_speed:1.476M/sec plist_count:1.395M plist_speed:697.3k/sec
REDUCE 11s [100.00%] edge_count:3.695M edge_speed:1.231M/sec plist_count:1.778M plist_speed:592.5k/sec
REDUCE 11s [100.00%] edge_count:3.695M edge_speed:1.182M/sec plist_count:1.778M plist_speed:568.8k/sec
Total: 11s
數(shù)據(jù)生成之后,你可以在啟動(dòng)server的時(shí)候使用-p參數(shù)指定輸出的目錄。如果運(yùn)行了多個(gè)Dgraph server,你需要把輸出的shard拷貝到不同的服務(wù)器上
cd out/i # i = shard number.
dgraph server -zero=localhost:7080 -memory_mb=1024
9.2.1 性能調(diào)優(yōu)
Tip
我們強(qiáng)烈推薦在執(zhí)行Bulk Loader的時(shí)候禁用swap空間。修復(fù)參數(shù)減少內(nèi)存使用,比swap導(dǎo)致loader宕機(jī)好
可以使用標(biāo)志來控制bulk loader的行為及性能特點(diǎn)。可以使用dgraph bulk --help查看所有的參數(shù)。特別要注意,需要調(diào)整參數(shù)使bulk loader不會(huì)使用超過RAM大小的內(nèi)存。一旦開始swap,它將變的特別慢
Map
在map語句中,修改下面的參數(shù)可以降低內(nèi)存使用:
-
--num_go_routines標(biāo)志控制worker線程的數(shù)量,數(shù)值越小,占用的內(nèi)存越少 -
--mapoutput_mb標(biāo)志控制map輸出文件的大小,數(shù)值越小,占用的內(nèi)存越少
對(duì)于更大的數(shù)據(jù)集,以及有很多core的服務(wù)器,map中的gzip解碼可能會(huì)成為瓶頸,可以首先把RDF拆分成多個(gè).rdf.gz文件(例如每個(gè)256MB)。這對(duì)內(nèi)存使用會(huì)有略微的影響
Reduce
Reduce語句對(duì)內(nèi)存的壓力比map小,盡管它仍然可能會(huì)使用很多內(nèi)存。有些參數(shù)可以提高性能,但是只有在你有很大的RAM的情況下使用:
-
--reduce_shards控制產(chǎn)生的dgraph實(shí)例數(shù)。增大 - The
--map_shardsflag controls the number of separate map output shards. Increasing this increases memory consumption but balances the resultant dgraph instances more evenly. - The
--shufflerscontrols the level of parallelism in the shuffle/reduce stage. Increasing this increases memory consumption.
10. 導(dǎo)出
可以訪問集群中任意節(jié)點(diǎn)的終端,導(dǎo)出所有節(jié)點(diǎn)的數(shù)據(jù):
$ curl localhost:8080/admin/export
Warning 如果從dgraph運(yùn)行的服務(wù)器之外調(diào)用是無效的
Dgraph也提供了一個(gè)HTTP GET接口,可以在Dgraph運(yùn)行的服務(wù)器上調(diào)用
這個(gè)接口可以導(dǎo)出集群中所有的group的數(shù)據(jù)。每個(gè)服務(wù)器都會(huì)把輸出寫入到gzip壓縮的rdf文件,文件路徑可以通過--export參數(shù)指定。如果某個(gè)group失敗了,所有的export進(jìn)程都會(huì)失敗,并返回錯(cuò)誤
Note 用戶需要自己到集群中的服務(wù)器上拿導(dǎo)出的數(shù)據(jù)文件,Dgraph不會(huì)把文件拷到執(zhí)行導(dǎo)出的服務(wù)器
11. 關(guān)機(jī)
可以通過執(zhí)行如下命令,將一個(gè)Dgraph節(jié)點(diǎn)的安全退出:
curl localhost:8080/admin/shutdown
Warning 如果從運(yùn)行的dgraph之外的服務(wù)器執(zhí)行是無效的
這會(huì)停止執(zhí)行命令的服務(wù)器上的Dgraph,而不是停止整個(gè)Dgraph集群
12. 刪除數(shù)據(jù)庫(kù)
如果要?jiǎng)h除所有的數(shù)據(jù),可以使用Alter 終端的DropAll請(qǐng)求
或者,你也可以:
- 關(guān)閉Dgraph,并等待所有寫入完成
- 刪除
p與w目錄,然后 - 重啟Dgraph
13. 升級(jí)Dgraph
周期性的數(shù)據(jù)導(dǎo)出是個(gè)好主意。特別是當(dāng)你希望升級(jí)數(shù)據(jù)庫(kù),或者重新配置集群的分片時(shí)。下面是數(shù)據(jù)安全導(dǎo)出與重啟的正確步驟:
- 開啟一個(gè)導(dǎo)出任務(wù)
- 確保導(dǎo)出成功
- 關(guān)閉集群
- 使用新數(shù)據(jù)目錄運(yùn)行Dgraph
- 通過bulk loader重新導(dǎo)入數(shù)據(jù)
- 如果都成功了,你可以刪除舊目錄(數(shù)據(jù)導(dǎo)出是為了保證數(shù)據(jù)安全)
14. 監(jiān)控
Dgraph通過/debug/vars終端以json格式返回監(jiān)控指標(biāo)。Dgraph不存儲(chǔ)監(jiān)控指標(biāo),只是返回當(dāng)時(shí)的值。你可以將數(shù)據(jù)存儲(chǔ)在監(jiān)控系統(tǒng),或者安裝Prometheus
將下面配置文件中的ip配置為你的dgraph實(shí)例,并用如下命令運(yùn)行prometheus:
$ prometheus -config.file my_config.yaml
scrape_configs:
- job_name: "dgraph"
metrics_path: "/debug/prometheus_metrics"
scrape_interval: "2s"
static_configs:
- targets:
- 172.31.9.133:8080
- 172.31.15.230:8080
- 172.31.0.170:8080
- 172.31.8.118:8080
安裝Grafana用于繪制監(jiān)控指標(biāo)。Grafana默認(rèn)會(huì)在3000端口上運(yùn)行。用如下步驟創(chuàng)建一個(gè)prometheus數(shù)據(jù)源。通過如下鏈接導(dǎo)入一個(gè)grafana_dashboard.json
15. Troubleshooting
下面是一些常見的問題及解決辦法
15.1 OOM(out of memory)
在bulk loading數(shù)據(jù)的時(shí)候,Dgraph可能會(huì)消耗更多的內(nèi)存,因?yàn)闀?huì)有大量寫入。因此你可能會(huì)遇到OOM問題
推薦的最小RAM是16GB。當(dāng)使用默認(rèn)的—memory_mb=4096設(shè)置時(shí),Dgraph可能會(huì)占用7-8GB
在EC2/GCE實(shí)例上,我們推薦最小RAM是8GB。推薦將-memory_mb設(shè)置為RAM的一半