Docker部署
Docker部署
環境準備
Docker安裝
#以ubuntu為例,其他操作系統可以自行搜索安裝方法
#step1: 安裝一些必要的系統工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
#step2: 安裝GPG證書
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
#step3: 寫入軟件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
#step4: 更新并安裝Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
#step5: 設置docker開機自啟動
sudo systemctl enable docker
#step6: 驗證docker是否安裝成功
docker --version #顯示版本信息,即安裝成功docker-compose安裝
#安裝命令
curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
#驗證是否安裝成功
docker-compose --version #顯示版本信息即安裝成功安裝dmidecode插件
默認情況下,linux服務器應該都已安裝,如果沒有安裝的話,可以使用下面的命令安裝。
sudo apt-get install dmidecodedmidecode 安裝后,查找安裝路徑:whereis dmidecode,這里假設結果為/usr/sbin/dmidecode,記住該路徑,后面的docker-compose的yml文件會用到。
獲取IoTDB的容器鏡像
關于IoTDB企業版的容器鏡像您可聯系商務或技術支持獲取。
單機版部署
本節演示如何部署1C1D的docker單機版。
load 鏡像文件
比如這里獲取的IoTDB的容器鏡像文件名是:iotdb-enterprise-1.3.2.3-standalone-docker.tar.gz
load鏡像:
docker load -i iotdb-enterprise-1.3.2.3-standalone-docker.tar.gz查看鏡像:
docker images
創建docker bridge網絡
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
docker-iotdb:
├── iotdb #iotdb安裝目錄
│── docker-compose-standalone.yml #單機版docker-compose的yml文件完整的docker-compose-standalone.yml內容如下:
version: "3"
services:
iotdb-service:
image: iotdb-enterprise:1.3.2.3-standalone #使用的鏡像
hostname: iotdb
container_name: iotdb
restart: always
ports:
- "6667:6667"
environment:
- cn_internal_address=iotdb
- cn_internal_port=10710
- cn_consensus_port=10720
- cn_seed_config_node=iotdb:10710
- dn_rpc_address=iotdb
- dn_internal_address=iotdb
- dn_rpc_port=6667
- dn_internal_port=10730
- dn_mpp_data_exchange_port=10740
- dn_schema_region_consensus_port=10750
- dn_data_region_consensus_port=10760
- dn_seed_config_node=iotdb:10710
privileged: true
volumes:
- ./iotdb/activation:/iotdb/activation
- ./iotdb/data:/iotdb/data
- ./iotdb/logs:/iotdb/logs
- /usr/sbin/dmidecode:/usr/sbin/dmidecode:ro
- /dev/mem:/dev/mem:ro
networks:
iotdb:
ipv4_address: 172.18.0.6
# Note: Some environments set an extremely high container nofile limit (~2^30 = 1073741824).
# This can make the startup step "Checking whether the ports are already occupied..." appear to hang (lsof slow).
# If you see that line for a long time, lower the nofile limit by uncommenting below:
# ulimits:
# nofile:
# soft: 1048576
# hard: 1048576
networks:
iotdb:
external: true首次啟動
使用下面的命令啟動:
cd /docker-iotdb
docker-compose -f docker-compose-standalone.yml up由于沒有激活,首次啟動時會直接退出,屬于正常現象,首次啟動是為了獲取機器碼文件,用于后面的激活流程。

申請激活
首次啟動后,在物理機目錄
/docker-iotdb/iotdb/activation下會生成一個system_info文件,將這個文件拷貝給天謀工作人員。
收到工作人員返回的license文件,將license文件拷貝到
/docker-iotdb/iotdb/activation文件夾下。
再次啟動IoTDB
docker-compose -f docker-compose-standalone.yml up -d
驗證部署
- 查看日志,有如下字樣,表示啟動成功
docker logs -f iotdb-datanode #查看日志命令
2024-07-19 12:02:32,608 [main] INFO o.a.i.db.service.DataNode:231 - Congratulations, IoTDB DataNode is set up successfully. Now, enjoy yourself!
進入容器,查看服務運行狀態及激活信息
查看啟動的容器
docker ps
進入容器, 通過cli登錄數據庫, 使用show cluster命令查看服務狀態及激活狀態
docker exec -it iotdb /bin/bash #進入容器 ./start-cli.sh -h iotdb #登錄數據庫 IoTDB> show cluster #查看狀態可以看到服務都是running,激活狀態顯示已激活。

映射/conf目錄(可選)
后續如果想在物理機中直接修改配置文件,可以把容器中的/conf文件夾映射出來,分三步:
步驟一:拷貝容器中的/conf目錄到/docker-iotdb/iotdb/conf
docker cp iotdb:/iotdb/conf /docker-iotdb/iotdb/conf步驟二:在docker-compose-standalone.yml中添加映射
volumes:
- ./iotdb/conf:/iotdb/conf #增加這個/conf文件夾的映射
- ./iotdb/activation:/iotdb/activation
- ./iotdb/data:/iotdb/data
- ./iotdb/logs:/iotdb/logs
- /usr/sbin/dmidecode:/usr/sbin/dmidecode:ro
- /dev/mem:/dev/mem:ro步驟三:重新啟動IoTDB
docker-compose -f docker-compose-standalone.yml up -d集群版部署
本小節描述如何手動部署包括3個ConfigNode和3個DataNode的實例,即通常所說的3C3D集群。

注意:集群版目前只支持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,使用如下命令:
echo "192.168.1.3 iotdb-1" >> /etc/hosts
echo "192.168.1.4 iotdb-2" >> /etc/hosts
echo "192.168.1.5 iotdb-3" >> /etc/hostsload鏡像文件
比如獲取的IoTDB的容器鏡像文件名是:iotdb-enterprise-1.3.2.3-standalone-docker.tar.gz
在3臺服務器上分別執行load鏡像命令:
docker load -i iotdb-enterprise-1.3.2.3-standalone-docker.tar.gz查看鏡像:
docker images
編寫docker-compose的yml文件
這里我們以把IoTDB安裝目錄和yml文件統一放在/docker-iotdb文件夾下為例:
文件目錄結構為:/docker-iotdb/iotdb,/docker-iotdb/confignode.yml,/docker-iotdb/datanode.yml
docker-iotdb:
├── confignode.yml #confignode的yml文件
├── datanode.yml #datanode的yml文件
└── iotdb #IoTDB安裝目錄在每臺服務器上都要編寫2個yml文件,即confignode.yml和datanode.yml,yml示例如下:
confignode.yml:
#confignode.yml
version: "3"
services:
iotdb-confignode:
image: iotdb-enterprise:1.3.2.3-standalone #使用的鏡像
hostname: iotdb-1|iotdb-2|iotdb-3 #根據實際情況選擇,三選一
container_name: iotdb-confignode
command: ["bash", "-c", "entrypoint.sh confignode"]
restart: always
environment:
- cn_internal_address=iotdb-1|iotdb-2|iotdb-3 #根據實際情況選擇,三選一
- cn_internal_port=10710
- cn_consensus_port=10720
- cn_seed_config_node=iotdb-1:10710 #默認第一臺為seed節點
- schema_replication_factor=3 #元數據副本數
- data_replication_factor=2 #數據副本數
privileged: true
volumes:
- ./iotdb/activation:/iotdb/activation
- ./iotdb/data:/iotdb/data
- ./iotdb/logs:/iotdb/logs
- /usr/sbin/dmidecode:/usr/sbin/dmidecode:ro
- /dev/mem:/dev/mem:ro
network_mode: "host" #使用host網絡
# Note: Some environments set an extremely high container nofile limit (~2^30 = 1073741824).
# This can make the startup step "Checking whether the ports are already occupied..." appear to hang (lsof slow).
# If you see that line for a long time, lower the nofile limit by uncommenting below:
# ulimits:
# nofile:
# soft: 1048576
# hard: 1048576datanode.yml:
#datanode.yml
version: "3"
services:
iotdb-datanode:
image: iotdb-enterprise:1.3.2.3-standalone #使用的鏡像
hostname: iotdb-1|iotdb-2|iotdb-3 #根據實際情況選擇,三選一
container_name: iotdb-datanode
command: ["bash", "-c", "entrypoint.sh datanode"]
restart: always
ports:
- "6667:6667"
privileged: true
environment:
- dn_rpc_address=iotdb-1|iotdb-2|iotdb-3 #根據實際情況選擇,三選一
- dn_internal_address=iotdb-1|iotdb-2|iotdb-3 #根據實際情況選擇,三選一
- dn_seed_config_node=iotdb-1:10710 #默認第1臺為seed節點
- dn_rpc_port=6667
- dn_internal_port=10730
- dn_mpp_data_exchange_port=10740
- dn_schema_region_consensus_port=10750
- dn_data_region_consensus_port=10760
- schema_replication_factor=3 #元數據副本數
- data_replication_factor=2 #數據副本數
volumes:
- ./iotdb/activation:/iotdb/activation
- ./iotdb/data:/iotdb/data
- ./iotdb/logs:/iotdb/logs
- /usr/sbin/dmidecode:/usr/sbin/dmidecode:ro
- /dev/mem:/dev/mem:ro
network_mode: "host" #使用host網絡
# Note: Some environments set an extremely high container nofile limit (~2^30 = 1073741824).
# This can make the startup step "Checking whether the ports are already occupied..." appear to hang (lsof slow).
# If you see that line for a long time, lower the nofile limit by uncommenting below:
# ulimits:
# nofile:
# soft: 1048576
# hard: 1048576首次啟動confignode
先在3臺服務器上分別啟動confignode, 用來獲取機器碼,注意啟動順序,先啟動第1臺iotdb-1,再啟動iotdb-2和iotdb-3。
cd /docker-iotdb
docker-compose -f confignode.yml up -d #后臺啟動申請激活
首次啟動3個confignode后,在每個物理機目錄
/docker-iotdb/iotdb/activation下都會生成一個system_info文件,將3個服務器的system_info文件拷貝給天謀工作人員;
將3個license文件分別放入對應的ConfigNode節點的
/docker-iotdb/iotdb/activation文件夾下;
license放入對應的activation文件夾后,confignode會自動激活,不用重啟confignode
啟動datanode
在3臺服務器上分別啟動datanode
cd /docker-iotdb
docker-compose -f datanode.yml up -d #后臺啟動
驗證部署
查看日志,有如下字樣,表示datanode啟動成功
docker logs -f iotdb-datanode #查看日志命令 2024-07-20 16:50:48,937 [main] INFO o.a.i.db.service.DataNode:231 - Congratulations, IoTDB DataNode is set up successfully. Now, enjoy yourself!
進入任意一個容器,查看服務運行狀態及激活信息
查看啟動的容器
docker ps
進入容器,通過cli登錄數據庫,使用
show cluster命令查看服務狀態及激活狀態docker exec -it iotdb-datanode /bin/bash #進入容器 ./start-cli.sh -h iotdb-1 #登錄數據庫 IoTDB> show cluster #查看狀態可以看到服務都是running,激活狀態顯示已激活。

映射/conf目錄(可選)
后續如果想在物理機中直接修改配置文件,可以把容器中的/conf文件夾映射出來,分三步:
步驟一:在3臺服務器中分別拷貝容器中的/conf目錄到/docker-iotdb/iotdb/conf
docker cp iotdb-confignode:/iotdb/conf /docker-iotdb/iotdb/conf
或者
docker cp iotdb-datanode:/iotdb/conf /docker-iotdb/iotdb/conf步驟二:在3臺服務器的confignode.yml和datanode.yml中添加/conf目錄映射
#confignode.yml
volumes:
- ./iotdb/conf:/iotdb/conf #增加這個/conf文件夾的映射
- ./iotdb/activation:/iotdb/activation
- ./iotdb/data:/iotdb/data
- ./iotdb/logs:/iotdb/logs
- /usr/sbin/dmidecode:/usr/sbin/dmidecode:ro
- /dev/mem:/dev/mem:ro
#datanode.yml
volumes:
- ./iotdb/conf:/iotdb/conf #增加這個/conf文件夾的映射
- ./iotdb/activation:/iotdb/activation
- ./iotdb/data:/iotdb/data
- ./iotdb/logs:/iotdb/logs
- /usr/sbin/dmidecode:/usr/sbin/dmidecode:ro
- /dev/mem:/dev/mem:ro步驟三:在3臺服務器上重新啟動IoTDB
cd /docker-iotdb
docker-compose -f confignode.yml up -d
docker-compose -f datanode.yml up -d