图数据库nebula——搭建docker完全分布式集群
1、集群架构:Nebula集群分为测试集群、生产集群,不同环境的集群对应的服务数量不同,大致如下:集群类别Meta服务Graph服务Storage服务测试集群1>=1>=1生产集群3>=3>=3测试
目录
1、集群架构:
Nebula集群分为测试集群、生产集群,不同环境的集群对应的服务数量不同,大致如下:
集群类别 | Meta服务 | Graph服务 | Storage服务 |
测试集群 | 1 | >=1 | >=1 |
生产集群 | 3 | >=3 | >=3 |
测试环境一般是3台服务器,可以按照如下配置搭建:
服务器 | Meta服务 | Graph服务 | Storage服务 |
服务器A | 1 | 1 | 1 |
服务器B | 1 | 1 | |
服务器C | 1 | 1 |
生产环境一般是5台服务器,可以按照如下配置搭建:
服务器 | Meta服务 | Graph服务 | Storage服务 |
服务器A | 1 | 1 | 1 |
服务器B | 1 | 1 | 1 |
服务器C | 1 | 1 | 1 |
服务器D | 1 | 1 | |
服务器E | 1 | 1 |
2、服务器:
本地虚拟机采用4台服务器,由于使用docker,所以服务器内核要求在3.8以上,建议3.10及以上,搭建测试集群:
服务器IP | Etcd端口号 | Nebula集群节点 | ||
Meta端口号 | Graph端口号 | Storage端口号 | ||
192.168.137.111 | 2379 | |||
192.168.137.112 | 9559 | 9669 | 9779 | |
192.168.137.113 | 9669 | 9779 | ||
192.168.137.114 | 9669 | 9779 |
3、修改主机名称:
在集群所有节点上,进行如下操作:
修改/etc/hostname文件,修改对应的名称为主机名称,主机名称不能重复。
然后重新启动服务器。
4、搭建docker环境:
在集群所有节点上,进行如下操作:
安装docker环境,操作步骤可见:
通过yum安装docker操作步骤:https://blog.csdn.net/LSY_CSDN_/article/details/116889227
无网环境安装docker操作步骤:https://blog.csdn.net/LSY_CSDN_/article/details/116889325
5、搭建docker私有镜像仓库:
生产环境建议搭建docker私有镜像仓库,可以使用docker通过registry镜像搭建私有仓库或者使用harbor搭建私有仓库。
本地测试就不搭建私有镜像仓库了。
搭建registry私有镜像仓库操作步骤https://blog.csdn.net/LSY_CSDN_/article/details/118597226
搭建harbor私有镜像仓库操作步骤:https://blog.csdn.net/LSY_CSDN_/article/details/118814588
6、搭建docker的overlay网络:
在etcd服务器上进行如下操作:
搭建docker的overlay网络操作步骤:https://blog.csdn.net/LSY_CSDN_/article/details/120065860
7、创建overlay网络:
在集群任意一个节点上,创建容器overlay网络即可:
执行命令:
docker network create -d overlay net-docker-nebula
8、准备meta服务配置文件:
配置文件下载地址:https://download.csdn.net/download/LSY_CSDN_/21887583
(1)获取meta默认配置文件:
可以通过获取自备的meta默认配置文件,如果没有自备的默认配置文件,可以通过rpm安装一个nebula然后在/usr/local/nebula/etc中找到nebula-metad.conf默认配置文件,或者可以利用docker启动一个meta容器,然后进入容器在/etc文件夹中找到nebula-metad.conf默认配置文件。
(2)配置文件使用方式:
首次启动时,Meta服务会从配置文件nebula-metad.conf中读取配置信息。您需要把初始配置文件的后缀.default或.production删除,Meta服务才能将其识别为配置文件。
如果修改了配置文件,希望新配置生效,请在配置文件开头添加--local_config=true再重启服务,否则会从缓存中读取过期配置。
(3)修改meta配置文件参数:
① 增加参数local_config:
在配置文件第一行,增加参数:--local_config=true。
② 修改参数meta_server_addrs:
全部Meta服务的IP地址和端口。多个Meta服务用英文逗号(,)分隔。预设值:127.0.0.1:9559。
③ 修改参数local_ip:
Meta服务的本地IP地址。本地IP地址用于识别nebula-metad进程,如果是分布式集群或需要远程访问,请修改为对应地址。预设值:127.0.0.1。建议修改为容器名称,而不写具体的IP地址。
例如:--local_ip=nebula-meta-01
④ 修改参数data_path:
meta数据存储路径。预设值:data/meta。
⑤ 修改参数log_dir:
存放Meta服务日志的目录,建议和数据保存在不同硬盘。预设值:logs。
⑥ 默认参数ws_ip:
HTTP服务的IP地址。预设值:0.0.0.0。因为在容器中,外部访问,建议使用默认值即可。
⑦ 默认参数port:
Meta服务的RPC守护进程监听端口。Meta服务对外端口为9559,对内端口为对外端口+1,即9560,Nebula Graph使用内部端口进行多副本间的交互。预设值:9559。
⑧ 默认参数ws_http_port:
HTTP服务的端口。预设值:19559。
⑨ 默认参数v:
日志详细级别,值越大,日志记录越详细。可选值为0、1、2、3。预设值:0。
⑩ 默认参数minloglevel:
最小日志级别,即不会记录低于这个级别的日志。可选值为0(INFO)、1(WARNING)、2(ERROR)、3(FATAL)。建议您在调试时设置为0,生产环境中设置为1。如果设置为4,Nebula Graph不会记录任何日志。预设值:0。
9、准备graph服务配置文件:
配置文件下载地址:https://download.csdn.net/download/LSY_CSDN_/21887583
(1)获取graph默认配置文件:
可以通过获取自备的graph默认配置文件,如果没有自备的默认配置文件,可以通过rpm安装一个nebula然后在/usr/local/nebula/etc中找到nebula-graphd.conf默认配置文件,或者可以利用docker启动一个graph容器,然后进入容器在/etc文件夹中找到nebula-graphd.conf默认配置文件。
(2)配置文件使用方式:
首次启动时,Graph服务会从配置文件nebula-graphd.conf中读取配置信息。您需要把初始配置文件的后缀.default或.production删除,Graph服务才能将其识别为配置文件。
如果修改了配置文件,希望新配置生效,请在配置文件开头添加--local_config=true再重启服务,否则会从缓存中读取过期配置。
(3)修改graph配置文件参数:
① 增加参数增加参数local_config:
在配置文件第一行,增加参数:--local_config=true。
② 修改参数meta_server_addrs:
全部Meta服务的IP地址和端口。多个Meta服务用英文逗号(,)分隔。预设值:127.0.0.1:9559。
③ 修改参数local_ip:
Graph服务的本地IP地址。本地IP地址用于识别nebula-graphd进程,如果是分布式集群或需要远程访问,请修改为对应地址。预设值:127.0.0.1。建议修改为容器名称,而不写具体的IP地址。
例如:--local_ip=nebula-graph-01
④ 修改参数log_dir:
存放Graph服务日志的目录,建议和数据保存在不同硬盘。预设值:logs。
⑤ 默认参数ws_ip:
HTTP服务的IP地址。预设值:0.0.0.0。因为在容器中,外部访问,建议使用默认值即可。
⑥ 默认参数port:
Graph服务的RPC守护进程监听端口。预设值:9669。
⑦ 默认参数ws_http_port:
HTTP服务的端口。预设值:19669。
⑧ 默认参数v:
日志详细级别,值越大,日志记录越详细。可选值为0、1、2、3。预设值:0。
⑨ 默认参数minloglevel:
最小日志级别,即不会记录低于这个级别的日志。可选值为0(INFO)、1(WARNING)、2(ERROR)、3(FATAL)。建议您在调试时设置为0,生产环境中设置为1。如果设置为4,Nebula Graph不会记录任何日志。预设值:0。
10、准备storage服务配置文件:
配置文件下载地址:https://download.csdn.net/download/LSY_CSDN_/21887583
(1)获取storage默认配置文件:
可以通过获取自备的storage默认配置文件,如果没有自备的默认配置文件,可以通过rpm安装一个nebula然后在/usr/local/nebula/etc中找到nebula-storaged.conf默认配置文件,或者可以利用docker启动一个storage容器,然后进入容器在/etc文件夹中找到nebula-storaged.conf默认配置文件。
(2)配置文件使用方式:
首次启动时,Storage服务会从配置文件nebula-storaged.conf中读取配置信息。您需要把初始配置文件的后缀.default或.production删除,Storage服务才能将其识别为配置文件。
如果修改了配置文件,希望新配置生效,请在配置文件开头添加--local_config=true再重启服务,否则会从缓存中读取过期配置。
(3)修改storage配置文件参数:
① 增加参数local_config:
在配置文件第一行,增加参数:--local_config=true。
② 修改参数meta_server_addrs:
全部Meta服务的IP地址和端口。多个Meta服务用英文逗号(,)分隔。预设值:127.0.0.1:9559。
③ 修改参数local_ip:
Storage服务的本地IP地址。本地IP地址用于识别nebula-storaged进程,如果是分布式集群或需要远程访问,请修改为对应地址。预设值:127.0.0.1。建议修改为容器名称,而不写具体的IP地址。
例如:--local_ip=nebula-storage-01
④ 修改参数data_path:
数据存储路径,多个路径用英文逗号(,)分隔。一个RocksDB实例对应一个路径。预设值:data/storage
⑤ 默认参数ws_ip:
HTTP服务的IP地址。预设值:0.0.0.0。因为在容器中,外部访问,建议使用默认值即可。
⑥ 默认参数port:
Storage服务的RPC守护进程监听端口。Storage服务对外端口为9779,对内端口为9777、9778和9780,Nebula Graph使用内部端口进行多副本间的交互。预设值:9779。
⑦ 默认参数ws_http_port:
HTTP服务的端口。预设值:19779。
⑧ 默认参数log_dir:
存放Storage服务日志的目录,建议和数据保存在不同硬盘。预设值:logs。
⑨ 默认参数v:
日志详细级别,值越大,日志记录越详细。可选值为0、1、2、3。预设值:0。
⑩ 默认参数minloglevel:
最小日志级别,即不会记录低于这个级别的日志。可选值为0(INFO)、1(WARNING)、2(ERROR)、3(FATAL)。建议您在调试时设置为0,生产环境中设置为1。如果设置为4,Nebula Graph不会记录任何日志。预设值:0。
11、构建nebula容器:
(1)下载nebula镜像:
在集群所有节点上,根据服务的需要,下载对应服务的镜像包。
① 下载meta镜像:
执行命令:
docker pull vesoft/nebula-metad:v2.0.0
② 下载graph镜像:
执行命令:
docker pull vesoft/nebula-graphd:v2.0.0
③ 下载storage镜像:
执行命令:
docker pull vesoft/nebula-storaged:v2.0.0
(2)创建nebula持久化目录:
在集群所有节点上,根据服务的需要,创建持久化目录。
① 创建meta持久化目录:
创建数据持久化目录:
执行命令:
mkdir -p /wocloud/soft/nebula/meta/data
创建日志持久化目录:
执行命令:
mkdir -p /wocloud/soft/nebula/meta/logs
创建配置文件持久化目录:
执行命令:
mkdir -p /wocloud/soft/nebula/meta/conf
② 创建graph持久化目录:
创建日志持久化目录:
执行命令:
mkdir -p /wocloud/soft/nebula/graph/logs
创建配置文件持久化目录:
执行命令:
mkdir -p /wocloud/soft/nebula/graph/conf
③ 创建storage持久化目录:
创建数据持久化目录:
执行命令:
mkdir -p /wocloud/soft/nebula/storage/data
创建日志持久化目录:
执行命令:
mkdir -p /wocloud/soft/nebula/storage/logs
创建配置文件持久化目录:
执行命令:
mkdir -p /wocloud/soft/nebula/storage/conf
(3)上传各服务配置文件:
在集群所有节点上,根据服务的需要,上传对应服务配置文件。
① 上传meta配置文件:
将meta配置文件上传到对应服务器的配置文件持久化目录中。
② 上传graph配置文件:
将graph配置文件上传到对应服务器的配置文件持久化目录中。
③ 上传storage配置文件:
将storage配置文件上传到对应服务器的配置文件持久化目录中。
(4)编写nebula容器构建命令:
① 编写meta容器构建命令:
docker run -d --name nebula-meta-01 \
-p 9559:9559 -p 19559:19559 \
--restart=always \
-v /wocloud/soft/nebula/meta/data:/usr/local/nebula/data/meta \
-v /wocloud/soft/nebula/meta/logs:/usr/local/nebula/logs \
-v /wocloud/soft/nebula/meta/conf/nebula-metad.conf:/usr/local/nebula/etc/nebula-metad.conf \
--network net-docker-nebula \
vesoft/nebula-metad:v2.0.0
说明:不同服务器上构建meta容器命令不一样,将容器名称修改一下。
② 编写graph容器构建命令:
docker run -d --name nebula-graph-01 \
-p 9669:9669 -p 19669:19669 \
--restart=always \
-v /wocloud/soft/nebula/graph/data:/usr/local/nebula/data/meta \
-v /wocloud/soft/nebula/graph/logs:/usr/local/nebula/logs \
-v /wocloud/soft/nebula/graph/conf/nebula-graphd.conf:/usr/local/nebula/etc/nebula-graphd.conf \
--network net-docker-nebula \
vesoft/nebula-graphd:v2.0.0
说明:不同服务器上构建graph容器命令不一样,将容器名称修改一下。
③ 编写storage容器构建命令:
docker run -d --name nebula-storage-01 \
-p 9779:9779 -p 19779:19779 \
--restart=always \
-v /wocloud/soft/nebula/storage/data:/usr/local/nebula/data/meta \
-v /wocloud/soft/nebula/storage/logs:/usr/local/nebula/logs \
-v /wocloud/soft/nebula/storage/conf/nebula-storaged.conf:/usr/local/nebula/etc/nebula-storaged.conf \
--network net-docker-nebula \
vesoft/nebula-storaged:v2.0.0
说明:不同服务器上构建storage容器命令不一样,将容器名称修改一下。
(5)构建nebula容器:
在集群所有节点上,根据服务的需要,构建对应服务容器。
① 构建meta容器:
执行构建meta容器的命令。
② 构建graph容器:
执行构建graph容器的命令。
③ 构建storage容器:
执行构建storage容器的命令。
12、操作集群:
(1)启动集群:
在集群的各个节点上启动对应的服务即可。
① 启动meta服务:
找到meta服务的容器ID,然后进行操作:
执行命令:docker start 容器ID
② 启动graph服务:
找到graph服务的容器ID,然后进行操作:
执行命令:docker start 容器ID
③ 启动storage服务:
找到storage服务的容器ID,然后进行操作:
执行命令:docker start 容器ID
(2)停止集群:
在集群的各个节点上停止对应的服务即可。
① 停止meta服务:
找到meta服务的容器ID,然后进行操作:
执行命令:docker stop 容器ID
② 停止graph服务:
找到graph服务的容器ID,然后进行操作:
执行命令:docker stop 容器ID
③ 停止storage服务:
找到storage服务的容器ID,然后进行操作:
执行命令:docker stop 容器ID
(3)重启集群:
在集群的各个节点上重启对应的服务即可。
① 重启meta服务:
找到meta服务的容器ID,然后进行操作:
执行命令:docker restart 容器ID
② 重启graph服务:
找到graph服务的容器ID,然后进行操作:
执行命令:docker restart 容器ID
③ 重启storage服务:
找到storage服务的容器ID,然后进行操作:
执行命令:docker restart 容器ID
13、检查集群:
连接到集群的任意一个Graph服务,查看集群状态。
执行命令nGql命令:SHOW HOSTS。
14、监控指标:
(1)监控指标说明:
Nebula Graph的每个监控指标都由三个部分组成,中间用英文句号(.)隔开,例如num_queries.sum.600。不同的Nebula Graph服务支持查询的监控指标也不同。示例指标结构的说明如下:
类别 | 示例 | 说明 |
指标名称 | num_queries | 简单描述指标的含义。 |
统计类型 | sum | 指标统计的方法。当前支持SUM、COUNT、AVG、RATE和P分位数(P75、P95、P99、P99.9)。 |
统计时间 | 600 | 指标统计的时间范围,当前支持5秒、60秒、600秒和3600秒,分别表示最近5秒、最近1分钟、最近10分钟和最近1小时。 |
(2)监控指标查询:
通过HTTP端口查询监控指标语法如下:
curl -G "http://<ip>:<port>/stats?stats=<metric_name_list> [&format=json]"
参数含义:
选项 | 说明 |
ip | 服务器的IP地址,可以在安装目录内查看配置文件获取。 |
port | 服务器的HTTP端口,可以在安装目录内查看配置文件获取。默认情况下,Meta服务端口为19559,Graph服务端口为19669,Storage服务端口为19779。 |
metric_name_list | 监控指标名称,多个监控指标用英文逗号(,)隔开。 |
&format=json | 将结果以JSON格式返回。 |
(3)监控指标示例:
① 查询meta指标:
不指定查询某个监控指标时,会返回该服务器上所有的监控指标。查询请求示例:
curl -G "http://192.168.137.112:19559/stats"
结果示例:
value=231
name=heartbeat_latency_us.avg.5
value=143
name=heartbeat_latency_us.avg.60
value=165
name=heartbeat_latency_us.avg.600
value=173
name=heartbeat_latency_us.avg.3600
② 查询graph指标:
不指定查询某个监控指标时,会返回该服务器上所有的监控指标。查询请求示例:
curl -G "http://192.168.137.112:19669/stats"
结果示例:
value=0
name=slow_query_latency_us.avg.5
value=0
name=slow_query_latency_us.avg.60
value=0
name=slow_query_latency_us.avg.600
value=0
name=slow_query_latency_us.avg.3600
value=0
name=slow_query_latency_us.p75.5
value=0
name=slow_query_latency_us.p75.60
value=0
name=slow_query_latency_us.p75.600
value=0
name=slow_query_latency_us.p75.3600
value=0
name=slow_query_latency_us.p95.5
value=0
name=slow_query_latency_us.p95.60
value=0
name=slow_query_latency_us.p95.600
value=0
name=slow_query_latency_us.p95.3600
③ 查询storage指标:
不指定查询某个监控指标时,会返回该服务器上所有的监控指标。查询请求示例:
curl -G "http://192.168.137.112:19779/stats"
结果示例:
value=0
name=num_lookup_errors.rate.5
value=0
name=num_lookup_errors.rate.60
value=0
name=num_lookup_errors.rate.600
value=0
name=num_lookup_errors.rate.3600
value=0
name=num_lookup_errors.sum.5
value=0
name=num_lookup_errors.sum.60
value=0
name=num_lookup_errors.sum.600
value=0
name=num_lookup_errors.sum.3600
15、发现bug:
发现一个bug,etcd和docker所在服务器同时重新启动,启动后docker上连接overlay的容器启动不了了,需要将原有的docker中的overlay网络删除后,重新创建一个overlay网络,然后通过命令修改容器使用最新创建的overlay网络,才可以正常启动。暂时不知道什么原因,待以后再处理。
更多推荐
所有评论(0)