Docker部署

环境准备

Docker安装

1. #以ubuntu为例,其他操作系统可以自行搜索安装方法
2. #step1: 安装一些必要的系统工具
3. sudo apt-get update
4. sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
5. #step2: 安装GPG证书
6. curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
7. #step3: 写入软件源信息
8. sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
9. #step4: 更新并安装Docker-CE
10. sudo apt-get -y update
11. sudo apt-get -y install docker-ce
12. #step5: 设置docker开机自启动
13. sudo systemctl enable docker
14. #step6: 验证docker是否安装成功
15. docker --version  #显示版本信息,即安装成功

docker-compose安装

1. #安装命令
2. curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
3. chmod +x /usr/local/bin/docker-compose
4. ln -s  /usr/local/bin/docker-compose  /usr/bin/docker-compose
5. #验证是否安装成功
6. docker-compose --version  #显示版本信息即安装成功

单机版

本节演示如何部署1C1D的docker单机版。

拉取镜像文件

Apache IoTDB的Docker镜像已经上传至 <https://hub.docker.com/r/apache/iotdb> 。

以获取1.3.2版本为例,拉取镜像命令:

1. docker pull apache/iotdb:1.3.2-standalone

查看镜像:

1. docker images

Docker 部署 - 图1

创建docker bridge网络

1. docker network create --driver=bridge --subnet=172.18.0.0/16 --gateway=172.18.0.1  iotdb

编写docker-compose的yml文件

这里我们以把IoTDB安装目录和yml文件统一放在/docker-iotdb文件夹下为例:

文件目录结构为:/docker-iotdb/iotdb, /docker-iotdb/docker-compose-standalone.yml

1. docker-iotdb:
2. ├── iotdb  #iotdb安装目录
3. │── docker-compose-standalone.yml #单机版docker-compose的yml文件

完整的docker-compose-standalone.yml 内容如下:

1. version: "3"
2. services:
3. iotdb-service:
4. image: apache/iotdb:1.3.2-standalone #使用的镜像
5. hostname: iotdb
6. container_name: iotdb
7. restart: always
8. ports:
9. - "6667:6667"
10. environment:
11. - cn_internal_address=iotdb
12. - cn_internal_port=10710
13. - cn_consensus_port=10720
14. - cn_seed_config_node=iotdb:10710
15. - dn_rpc_address=iotdb
16. - dn_internal_address=iotdb
17. - dn_rpc_port=6667
18. - dn_internal_port=10730
19. - dn_mpp_data_exchange_port=10740
20. - dn_schema_region_consensus_port=10750
21. - dn_data_region_consensus_port=10760
22. - dn_seed_config_node=iotdb:10710
23. privileged: true
24. volumes:
25. - ./iotdb/data:/iotdb/data
26. - ./iotdb/logs:/iotdb/logs
27. networks:
28. iotdb:
29. ipv4_address: 172.18.0.6
30. # Note: Some environments set an extremely high container nofile limit (~2^30 = 1073741824).
31. # This can make the startup step "Checking whether the ports are already occupied..." appear to hang (lsof slow).
32. # If you see that line for a long time, lower the nofile limit by uncommenting below:
33. # ulimits:
34. #   nofile:
35. #     soft: 1048576
36. #     hard: 1048576
37. networks:
38. iotdb:
39. external: true

启动IoTDB

使用下面的命令启动:

1. cd /docker-iotdb
2. docker-compose -f docker-compose-standalone.yml up  -d  #后台启动

验证部署

  • 查看日志,有如下字样,表示启动成功

1. docker logs -f iotdb-datanode #查看日志命令 2. 2024-07-21 08:22:38,457 [main] INFO o.a.i.db.service.DataNode:227 - Congratulations, IoTDB DataNode is set up successfully. Now, enjoy yourself!

Docker 部署 - 图2 - 进入容器,查看服务运行状态

查看启动的容器

1. docker ps

Docker 部署 - 图3

进入容器, 通过cli登录数据库, 使用show cluster命令查看服务状态

1. docker exec -it iotdb /bin/bash #进入容器 2. ./start-cli.sh -h iotdb #登录数据库 3. IoTDB> show cluster #查看服务状态

可以看到服务状态都是running, 说明IoTDB部署成功。

Docker 部署 - 图4

映射/conf目录(可选)

后续如果想在物理机中直接修改配置文件,可以把容器中的/conf文件夹映射出来,分三步:

步骤一:拷贝容器中的/conf目录到/docker-iotdb/iotdb/conf

1. docker cp iotdb:/iotdb/conf /docker-iotdb/iotdb/conf

步骤二:在docker-compose-standalone.yml中添加映射

1. volumes:
2. - ./iotdb/conf:/iotdb/conf   #增加这个/conf文件夹的映射
3. - ./iotdb/data:/iotdb/data
4. - ./iotdb/logs:/iotdb/logs

步骤三:重新启动IoTDB

1. docker-compose  -f docker-compose-standalone.yml  up  -d

集群版

本小节描述如何手动部署包括3个ConfigNode和3个DataNode的实例,即通常所说的3C3D集群。

Docker 部署 - 图5

注意:集群版目前只支持host网络和overlay 网络,不支持bridge网络。

下面以host网络为例演示如何部署3C3D集群。

设置主机名

假设现在有3台linux服务器,IP地址和服务角色分配如下:

节点ip 主机名 服务
192.168.1.3 iotdb-1 ConfigNode、DataNode
192.168.1.4 iotdb-2 ConfigNode、DataNode
192.168.1.5 iotdb-3 ConfigNode、DataNode

在3台机器上分别配置主机名,设置主机名需要在目标服务器上配置/etc/hosts,使用如下命令:

1. echo "192.168.1.3  iotdb-1"  >> /etc/hosts
2. echo "192.168.1.4  iotdb-2"  >> /etc/hosts
3. echo "192.168.1.5  iotdb-3"  >> /etc/hosts

拉取镜像文件

Apache IoTDB的Docker镜像已经上传至https://hub.docker.com/r/apache/iotdb。

在3台服务器上分别拉取IoTDB镜像,以获取1.3.2版本为例,拉取镜像命令:

1. docker pull apache/iotdb:1.3.2-standalone

查看镜像:

1. docker images

Docker 部署 - 图6

编写docker-compose的yml文件

这里我们以把IoTDB安装目录和yml文件统一放在/docker-iotdb文件夹下为例:

文件目录结构为:/docker-iotdb/iotdb, /docker-iotdb/confignode.yml,/docker-iotdb/datanode.yml

1. docker-iotdb:
2. ├── confignode.yml #confignode的yml文件
3. ├── datanode.yml   #datanode的yml文件
4. └── iotdb          #IoTDB安装目录

在每台服务器上都要编写2个yml文件,即confignode.yml和datanode.yml,yml示例如下:

confignode.yml:

1. #confignode.yml
2. version: "3"
3. services:
4. iotdb-confignode:
5. image: apache/iotdb:1.3.2-standalone #使用的镜像
6. hostname: iotdb-1|iotdb-2|iotdb-3    #根据实际情况选择,三选一
7. container_name: iotdb-confignode
8. command: ["bash", "-c", "entrypoint.sh confignode"]
9. restart: always
10. environment:
11. - cn_internal_address=iotdb-1|iotdb-2|iotdb-3 #根据实际情况选择,三选一
12. - cn_internal_port=10710
13. - cn_consensus_port=10720
14. - cn_seed_config_node=iotdb-1:10710   #默认第一台为seed节点
15. - schema_replication_factor=3         #元数据副本数
16. - data_replication_factor=2           #数据副本数
17. privileged: true
18. volumes:
19. - ./iotdb/data:/iotdb/data
20. - ./iotdb/logs:/iotdb/logs
21. network_mode: "host"    #使用host网络
22. # Note: Some environments set an extremely high container nofile limit (~2^30 = 1073741824).
23. # This can make the startup step "Checking whether the ports are already occupied..." appear to hang (lsof slow).
24. # If you see that line for a long time, lower the nofile limit by uncommenting below:
25. # ulimits:
26. #   nofile:
27. #     soft: 1048576
28. #     hard: 1048576

datanode.yml:

1. #datanode.yml
2. version: "3"
3. services:
4. iotdb-datanode:
5. image: iotdb-enterprise:1.3.2.3-standalone #使用的镜像
6. hostname: iotdb-1|iotdb-2|iotdb-3 #根据实际情况选择,三选一
7. container_name: iotdb-datanode
8. command: ["bash", "-c", "entrypoint.sh datanode"]
9. restart: always
10. ports:
11. - "6667:6667"
12. privileged: true
13. environment:
14. - dn_rpc_address=iotdb-1|iotdb-2|iotdb-3  #根据实际情况选择,三选一
15. - dn_internal_address=iotdb-1|iotdb-2|iotdb-3 #根据实际情况选择,三选一
16. - dn_seed_config_node=iotdb-1:10710      #默认第1台为seed节点
17. - dn_rpc_port=6667
18. - dn_internal_port=10730
19. - dn_mpp_data_exchange_port=10740
20. - dn_schema_region_consensus_port=10750
21. - dn_data_region_consensus_port=10760
22. - schema_replication_factor=3         #元数据副本数
23. - data_replication_factor=2           #数据副本数
24. volumes:
25. - ./iotdb/data:/iotdb/data
26. - ./iotdb/logs:/iotdb/logs
27. network_mode: "host"      #使用host网络
28. # Note: Some environments set an extremely high container nofile limit (~2^30 = 1073741824).
29. # This can make the startup step "Checking whether the ports are already occupied..." appear to hang (lsof slow).
30. # If you see that line for a long time, lower the nofile limit by uncommenting below:
31. # ulimits:
32. #   nofile:
33. #     soft: 1048576
34. #     hard: 1048576

首次启动confignode

先在3台服务器上分别启动confignode, 注意启动顺序,先启动第1台iotdb-1,再启动iotdb-2和iotdb-3。

1. cd /docker-iotdb
2. docker-compose -f confignode.yml up  -d #后台启动

启动datanode

在3台服务器上分别启动datanode

1. cd /docker-iotdb
2. docker-compose  -f  datanode.yml  up -d #后台启动

Docker 部署 - 图7

验证部署

  • 查看日志,有如下字样,表示datanode启动成功

1. docker logs -f iotdb-datanode #查看日志命令 2. 2024-07-21 09:40:58,120 [main] INFO o.a.i.db.service.DataNode:227 - Congratulations, IoTDB DataNode is set up successfully. Now, enjoy yourself!

Docker 部署 - 图8 - 进入容器,查看服务运行状态

查看启动的容器

1. docker ps

Docker 部署 - 图9

进入任意一个容器, 通过cli登录数据库, 使用show cluster命令查看服务状态

1. docker exec -it iotdb-datanode /bin/bash #进入容器 2. ./start-cli.sh -h iotdb-1 #登录数据库 3. IoTDB> show cluster #查看服务状态

可以看到服务状态都是running, 说明IoTDB部署成功。

Docker 部署 - 图10

映射/conf目录(可选)

后续如果想在物理机中直接修改配置文件,可以把容器中的/conf文件夹映射出来,分三步:

步骤一:在3台服务器中分别拷贝容器中的/conf目录到/docker-iotdb/iotdb/conf

1. docker cp iotdb-confignode:/iotdb/conf /docker-iotdb/iotdb/conf
2. 或者
3. docker cp iotdb-datanode:/iotdb/conf   /docker-iotdb/iotdb/conf

步骤二:在3台服务器的confignode.yml和datanode.yml中添加/conf目录映射

1. #confignode.yml
2. volumes:
3. - ./iotdb/conf:/iotdb/conf  #增加这个/conf文件夹的映射
4. - ./iotdb/data:/iotdb/data
5. - ./iotdb/logs:/iotdb/logs

7. #datanode.yml
8. volumes:
9. - ./iotdb/conf:/iotdb/conf   #增加这个/conf文件夹的映射
10. - ./iotdb/data:/iotdb/data
11. - ./iotdb/logs:/iotdb/logs

步骤三:在3台服务器上重新启动IoTDB

1. cd /docker-iotdb
2. docker-compose  -f confignode.yml  up  -d
3. docker-compose  -f datanode.yml    up  -d