Docker-compose 部署 nebula 集群数据库
一、官方默认启动配置
官方默认的 compose 文件是集群模式,部署在同一台机器上,如下:
$ git clone -b release-3.5 https://github.com/vesoft-inc/nebula-docker-compose.git查看配置文件内容
services:
metad0:
image: vesoft/nebula-metad:v3.5.0
environment:
USER: root
TZ: "${TZ}"
command:
- --meta_server_addrs=metad0:9559,metad1:9559,metad2:9559
- --local_ip=metad0
- --ws_ip=metad0
- --port=9559
- --ws_http_port=19559
- --data_path=/data/meta
- --log_dir=/logs
- --v=0
- --minloglevel=0
healthcheck:
test: ["CMD", "curl", "-sf", "http://metad0:19559/status"]
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
ports:
- 9559
- 19559
- 19560
volumes:
- ./data/meta0:/data/meta
- ./logs/meta0:/logs
networks:
- nebula-net
restart: on-failure
cap_add:
- SYS_PTRACE
metad1:
image: vesoft/nebula-metad:v3.5.0
environment:
USER: root
TZ: "${TZ}"
command:
- --meta_server_addrs=metad0:9559,metad1:9559,metad2:9559
- --local_ip=metad1
- --ws_ip=metad1
- --port=9559
- --ws_http_port=19559
- --data_path=/data/meta
- --log_dir=/logs
- --v=0
- --minloglevel=0
healthcheck:
test: ["CMD", "curl", "-sf", "http://metad1:19559/status"]
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
ports:
- 9559
- 19559
- 19560
volumes:
- ./data/meta1:/data/meta
- ./logs/meta1:/logs
networks:
- nebula-net
restart: on-failure
cap_add:
- SYS_PTRACE
metad2:
image: vesoft/nebula-metad:v3.5.0
environment:
USER: root
TZ: "${TZ}"
command:
- --meta_server_addrs=metad0:9559,metad1:9559,metad2:9559
- --local_ip=metad2
- --ws_ip=metad2
- --port=9559
- --ws_http_port=19559
- --data_path=/data/meta
- --log_dir=/logs
- --v=0
- --minloglevel=0
healthcheck:
test: ["CMD", "curl", "-sf", "http://metad2:19559/status"]
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
ports:
- 9559
- 19559
- 19560
volumes:
- ./data/meta2:/data/meta
- ./logs/meta2:/logs
networks:
- nebula-net
restart: on-failure
cap_add:
- SYS_PTRACE
storaged0:
image: vesoft/nebula-storaged:v3.5.0
environment:
USER: root
TZ: "${TZ}"
command:
- --meta_server_addrs=metad0:9559,metad1:9559,metad2:9559
- --local_ip=storaged0
- --ws_ip=storaged0
- --port=9779
- --ws_http_port=19779
- --data_path=/data/storage
- --log_dir=/logs
- --v=0
- --minloglevel=0
depends_on:
- metad0
- metad1
- metad2
healthcheck:
test: ["CMD", "curl", "-sf", "http://storaged0:19779/status"]
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
ports:
- 9779
- 19779
- 19780
volumes:
- ./data/storage0:/data/storage
- ./logs/storage0:/logs
networks:
- nebula-net
restart: on-failure
cap_add:
- SYS_PTRACE
storaged1:
image: vesoft/nebula-storaged:v3.5.0
environment:
USER: root
TZ: "${TZ}"
command:
- --meta_server_addrs=metad0:9559,metad1:9559,metad2:9559
- --local_ip=storaged1
- --ws_ip=storaged1
- --port=9779
- --ws_http_port=19779
- --data_path=/data/storage
- --log_dir=/logs
- --v=0
- --minloglevel=0
depends_on:
- metad0
- metad1
- metad2
healthcheck:
test: ["CMD", "curl", "-sf", "http://storaged1:19779/status"]
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
ports:
- 9779
- 19779
- 19780
volumes:
- ./data/storage1:/data/storage
- ./logs/storage1:/logs
networks:
- nebula-net
restart: on-failure
cap_add:
- SYS_PTRACE
storaged2:
image: vesoft/nebula-storaged:v3.5.0
environment:
USER: root
TZ: "${TZ}"
command:
- --meta_server_addrs=metad0:9559,metad1:9559,metad2:9559
- --local_ip=storaged2
- --ws_ip=storaged2
- --port=9779
- --ws_http_port=19779
- --data_path=/data/storage
- --log_dir=/logs
- --v=0
- --minloglevel=0
depends_on:
- metad0
- metad1
- metad2
healthcheck:
test: ["CMD", "curl", "-sf", "http://storaged2:19779/status"]
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
ports:
- 9779
- 19779
- 19780
volumes:
- ./data/storage2:/data/storage
- ./logs/storage2:/logs
networks:
- nebula-net
restart: on-failure
cap_add:
- SYS_PTRACE
graphd:
image: vesoft/nebula-graphd:v3.5.0
environment:
USER: root
TZ: "${TZ}"
command:
- --meta_server_addrs=metad0:9559,metad1:9559,metad2:9559
- --port=9669
- --local_ip=graphd
- --ws_ip=graphd
- --ws_http_port=19669
- --log_dir=/logs
- --v=0
- --minloglevel=0
depends_on:
- storaged0
- storaged1
- storaged2
healthcheck:
test: ["CMD", "curl", "-sf", "http://graphd:19669/status"]
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
ports:
- "9669:9669"
- 19669
- 19670
volumes:
- ./logs/graph:/logs
networks:
- nebula-net
restart: on-failure
cap_add:
- SYS_PTRACE
graphd1:
image: vesoft/nebula-graphd:v3.5.0
environment:
USER: root
TZ: "${TZ}"
command:
- --meta_server_addrs=metad0:9559,metad1:9559,metad2:9559
- --port=9669
- --local_ip=graphd1
- --ws_ip=graphd1
- --ws_http_port=19669
- --log_dir=/logs
- --v=0
- --minloglevel=0
depends_on:
- storaged0
- storaged1
- storaged2
healthcheck:
test: ["CMD", "curl", "-sf", "http://graphd1:19669/status"]
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
ports:
- 9669
- 19669
- 19670
volumes:
- ./logs/graph1:/logs
networks:
- nebula-net
restart: on-failure
cap_add:
- SYS_PTRACE
graphd2:
image: vesoft/nebula-graphd:v3.5.0
environment:
USER: root
TZ: "${TZ}"
command:
- --meta_server_addrs=metad0:9559,metad1:9559,metad2:9559
- --port=9669
- --local_ip=graphd2
- --ws_ip=graphd2
- --ws_http_port=19669
- --log_dir=/logs
- --v=0
- --minloglevel=0
depends_on:
- storaged0
- storaged1
- storaged2
healthcheck:
test: ["CMD", "curl", "-sf", "http://graphd2:19669/status"]
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
ports:
- 9669
- 19669
- 19670
volumes:
- ./logs/graph2:/logs
networks:
- nebula-net
restart: on-failure
cap_add:
- SYS_PTRACE
console:
image: vesoft/nebula-console:v3.5
entrypoint: ""
command:
- sh
- -c
- |
for i in `seq 1 60`;do
var=`nebula-console -addr graphd -port 9669 -u root -p nebula -e 'ADD HOSTS "storaged0":9779,"storaged1":9779,"storaged2":9779'`;
if [[ $$? == 0 ]];then
break;
fi;
sleep 1;
echo "retry to add hosts.";
done && tail -f /dev/null;
depends_on:
- graphd
networks:
- nebula-net
networks:
nebula-net:所以我们要拆开去部署
二、拆分启动文件
首先我这边三台机器信息
1. 准备第一台机器配置
# 创建相关目录
$ mkdir -pv /data/docker-app/nebula/{data/meta,data/storage,logs/meta,logs/storage,logs/graph}
$ vim docker-compose.ymlservices:
metad:
image: vesoft/nebula-metad:v3.5.0
network_mode: host
environment:
USER: root
TZ: "Asia/Shanghai"
command:
- --meta_server_addrs=192.168.248.41:9559,192.168.248.42:9559,192.168.248.43:9559
- --local_ip=192.168.248.41
- --ws_ip=192.168.248.41
- --port=9559
- --ws_http_port=19559
- --data_path=/data/meta
- --log_dir=/logs
- --v=0
- --minloglevel=0
volumes:
- ./data/meta:/data/meta
- ./logs/meta:/logs
restart: unless-stopped
storaged:
image: vesoft/nebula-storaged:v3.5.0
network_mode: host
environment:
USER: root
TZ: "Asia/Shanghai"
command:
- --meta_server_addrs=192.168.248.41:9559,192.168.248.42:9559,192.168.248.43:9559
- --local_ip=192.168.248.41
- --ws_ip=192.168.248.41
- --port=9779
- --ws_http_port=19779
- --data_path=/data/storage
- --log_dir=/logs
- --v=0
- --minloglevel=0
volumes:
- ./data/storage:/data/storage
- ./logs/storage:/logs
depends_on:
- metad
restart: unless-stopped
graphd:
image: vesoft/nebula-graphd:v3.5.0
network_mode: host
environment:
USER: root
TZ: "Asia/Shanghai"
command:
- --meta_server_addrs=192.168.248.41:9559,192.168.248.42:9559,192.168.248.43:9559
- --port=9669
- --local_ip=192.168.248.41
- --ws_ip=192.168.248.41
- --ws_http_port=19669
- --log_dir=/logs
- --v=0
- --minloglevel=0
- --enable_authorize=true # 开启权限认证,使用用户密码登录
volumes:
- ./logs/graph:/logs
depends_on:
- storaged
restart: unless-stopped启动
$ docker-compose up -d2. 准备第二台机器配置
# 创建相关目录
$ mkdir -pv /data/docker-app/nebula/{data/meta,data/storage,logs/meta,logs/storage,logs/graph}
$ vim docker-compose.ymlservices:
metad:
image: vesoft/nebula-metad:v3.5.0
network_mode: host
environment:
USER: root
TZ: "Asia/Shanghai"
command:
- --meta_server_addrs=192.168.248.41:9559,192.168.248.42:9559,192.168.248.43:9559
- --local_ip=192.168.248.42
- --ws_ip=192.168.248.42
- --port=9559
- --ws_http_port=19559
- --data_path=/data/meta
- --log_dir=/logs
- --v=0
- --minloglevel=0
volumes:
- ./data/meta:/data/meta
- ./logs/meta:/logs
restart: unless-stopped
storaged:
image: vesoft/nebula-storaged:v3.5.0
network_mode: host
environment:
USER: root
TZ: "Asia/Shanghai"
command:
- --meta_server_addrs=192.168.248.41:9559,192.168.248.42:9559,192.168.248.43:9559
- --local_ip=192.168.248.42
- --ws_ip=192.168.248.42
- --port=9779
- --ws_http_port=19779
- --data_path=/data/storage
- --log_dir=/logs
- --v=0
- --minloglevel=0
volumes:
- ./data/storage:/data/storage
- ./logs/storage:/logs
depends_on:
- metad
restart: unless-stopped
graphd:
image: vesoft/nebula-graphd:v3.5.0
network_mode: host
environment:
USER: root
TZ: "Asia/Shanghai"
command:
- --meta_server_addrs=192.168.248.41:9559,192.168.248.42:9559,192.168.248.43:9559
- --port=9669
- --local_ip=192.168.248.42
- --ws_ip=192.168.248.42
- --ws_http_port=19669
- --log_dir=/logs
- --v=0
- --minloglevel=0
- --enable_authorize=true # 开启权限认证,使用用户密码登录
volumes:
- ./logs/graph:/logs
depends_on:
- storaged
restart: unless-stopped启动
$ docker-compose up -d3. 准备第三台机器配置
# 创建相关目录
$ mkdir -pv /data/docker-app/nebula/{data/meta,data/storage,logs/meta,logs/storage,logs/graph}
$ vim docker-compose.ymlservices:
metad:
image: vesoft/nebula-metad:v3.5.0
network_mode: host
environment:
USER: root
TZ: "Asia/Shanghai"
command:
- --meta_server_addrs=192.168.248.41:9559,192.168.248.42:9559,192.168.248.43:9559
- --local_ip=192.168.248.43
- --ws_ip=192.168.248.43
- --port=9559
- --ws_http_port=19559
- --data_path=/data/meta
- --log_dir=/logs
- --v=0
- --minloglevel=0
volumes:
- ./data/meta:/data/meta
- ./logs/meta:/logs
restart: unless-stopped
storaged:
image: vesoft/nebula-storaged:v3.5.0
network_mode: host
environment:
USER: root
TZ: "Asia/Shanghai"
command:
- --meta_server_addrs=192.168.248.41:9559,192.168.248.42:9559,192.168.248.43:9559
- --local_ip=192.168.248.43
- --ws_ip=192.168.248.43
- --port=9779
- --ws_http_port=19779
- --data_path=/data/storage
- --log_dir=/logs
- --v=0
- --minloglevel=0
volumes:
- ./data/storage:/data/storage
- ./logs/storage:/logs
depends_on:
- metad
restart: unless-stopped
graphd:
image: vesoft/nebula-graphd:v3.5.0
network_mode: host
environment:
USER: root
TZ: "Asia/Shanghai"
command:
- --meta_server_addrs=192.168.248.41:9559,192.168.248.42:9559,192.168.248.43:9559
- --port=9669
- --local_ip=192.168.248.43
- --ws_ip=192.168.248.43
- --ws_http_port=19669
- --log_dir=/logs
- --v=0
- --minloglevel=0
- --enable_authorize=true # 开启权限认证,使用用户密码登录
volumes:
- ./logs/graph:/logs
depends_on:
- storaged
restart: unless-stopped启动
$ docker-compose up -d三、加入集群
1. 启动 nebula-console
$ docker run --rm -it vesoft/nebula-console:v3.5 \
-u root -p nebula \
-addr 192.168.248.41 -port 9669 \
-e 'ADD HOSTS "192.168.248.41":9779, "192.168.248.42":9779, "192.168.248.43":9779'2. 验证集群
首先进入集群
# 进入容器后执行操作
$ docker run --rm -it --entrypoint sh vesoft/nebula-console:v3.5
# 登录数据库,三台机器的 IP 地址任意都行
$ nebula-console -u root -p nebula --addr=192.168.248.41 --port=9669
# 或者直接连接数据库
$ docker run --rm -it vesoft/nebula-console:v3.5 \
-u root -p nebula \
--addr=192.168.248.41 --port=9669
# 查看当前集群节点信息
(root@nebula) [(none)]> SHOW HOSTS;
+------------------+------+----------+--------------+----------------------+------------------------+---------+
| Host | Port | Status | Leader count | Leader distribution | Partition distribution | Version |
+------------------+------+----------+--------------+----------------------+------------------------+---------+
| "192.168.248.41" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | "3.5.0" |
| "192.168.248.42" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | "3.5.0" |
| "192.168.248.43" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | "3.5.0" |
+------------------+------+----------+--------------+----------------------+------------------------+---------+
# 创建一个图空间(例如 3 副本、15 分区)
(root@nebula) [(none)]> CREATE SPACE myspace(partition_num=15, replica_factor=3, vid_type=INT64);
Execution succeeded (time spent 4.131ms/4.643147ms)
Sat, 17 May 2025 16:18:24 UTC
# 进入空间
(root@nebula) [(none)]> USE myspace;
Execution succeeded (time spent 1.253ms/1.880665ms)
Sat, 17 May 2025 16:18:35 UTC
# 查看当前集群节点信息
(root@nebula) [myspace]> SHOW HOSTS;
+------------------+------+----------+--------------+----------------------+------------------------+---------+
| Host | Port | Status | Leader count | Leader distribution | Partition distribution | Version |
+------------------+------+----------+--------------+----------------------+------------------------+---------+
| "192.168.248.41" | 9779 | "ONLINE" | 0 | "No valid partition" | "myspace:15" | "3.5.0" |
| "192.168.248.42" | 9779 | "ONLINE" | 8 | "myspace:8" | "myspace:15" | "3.5.0" |
| "192.168.248.43" | 9779 | "ONLINE" | 7 | "myspace:7" | "myspace:15" | "3.5.0" |
+------------------+------+----------+--------------+----------------------+------------------------+---------+
Got 3 rows (time spent 1.666ms/2.560771ms)
# 删除空间
(root@nebula) [myspace]> DROP SPACE myspace;
Execution succeeded (time spent 3.145ms/3.724806ms)
Sat, 17 May 2025 16:19:19 UTC
(root@nebula) [(none)]> SHOW HOSTS;
+------------------+------+----------+--------------+----------------------+------------------------+---------+
| Host | Port | Status | Leader count | Leader distribution | Partition distribution | Version |
+------------------+------+----------+--------------+----------------------+------------------------+---------+
| "192.168.248.41" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | "3.5.0" |
| "192.168.248.42" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | "3.5.0" |
| "192.168.248.43" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | "3.5.0" |
+------------------+------+----------+--------------+----------------------+------------------------+---------+
Got 3 rows (time spent 1.53ms/2.262823ms)
Sat, 17 May 2025 16:19:20 UTC
# 重置 root 账户密码
(root@nebula) [(none)]> ALTER USER root WITH PASSWORD 'nebula';
Execution succeeded (time spent 2.626ms/3.723652ms)
Sat, 17 May 2025 16:25:53 UTC
# 修改 root 账户密码
(root@nebula) [(none)]> CHANGE PASSWORD root FROM 'nebula' TO '123456';
Execution succeeded (time spent 2.626ms/3.723652ms)
Sat, 17 May 2025 16:25:53 UTC
License:
CC BY 4.0