在 Windows Server 2019 上通过虚拟机部署 TDengine 社区版的工作记录
概述
由于项目需求,需要在 Windows Server 2019 服务器上部署 TDengine 时序数据库社区版。由于 TDengine 社区版仅提供 Docker 和 Linux 版本,而 Windows Server 2019 不支持 Docker Desktop 的 Linux 容器模式,最终选择通过 Hyper-V 虚拟机运行 Ubuntu 系统来部署 TDengine。
一、安装流程说明
整体架构
text
Windows Server 2019 (宿主机)
├─ Hyper-V 虚拟化平台
│ └─ Ubuntu Server 24.04 (虚拟机)
│ ├─ Docker 服务
│ └─ TDengine 容器 (社区版 3.4.0.0)
└─ 管理工具 (DBeaver, FinalShell)
关键设计决策
- 放弃直接在 Windows 运行 TDengine:企业版安装后自动关闭,社区版无 Windows 版本
- 放弃 WSL2 方案:Windows Server 2019 版本过低(1809),WSL 版本不兼容
- 放弃 Windows Docker 容器:TDengine 仅支持 Linux 环境
- 采用 Hyper-V 虚拟机方案:稳定性最好,兼容性最强,支持全自动启动
二、使用到的指令/名词解释
| 术语 | 解释 |
|---|---|
| Hyper-V | Windows 内置的虚拟化技术,可在单台物理服务器上运行多个虚拟机 |
| WSL2 | Windows Subsystem for Linux 2,在 Windows 中运行 Linux 子系统 |
| Docker | 容器化平台,允许将应用及其依赖打包成标准化单元 |
| TDengine | 开源、高性能、分布式的时序数据库 |
| netplan | Ubuntu 系统的网络配置工具(YAML 格式) |
| systemd | Linux 系统和服务管理器,用于控制服务自启动 |
| ufw | Uncomplicated Firewall,Ubuntu 的简化防火墙工具 |
三、所用到的安装介质
-
操作系统
- Windows Server 2019 Datacenter(版本 1809)
- Ubuntu Server 24.04.3 LTS (
ubuntu-24.04.3-live-server-amd64.iso)
-
数据库软件
- TDengine 社区版 Docker 镜像 (
tdengine-tsdb-oss-docker-3.4.0.0-linux-x64.tar.gz)
- TDengine 社区版 Docker 镜像 (
-
管理工具
- DBeaver(数据库管理工具)
- FinalShell(SSH 客户端)
- Hyper-V 管理器(Windows 内置)
四、安装的具体操作
阶段一:宿主机环境准备
1.1 检查并启用 CPU 虚拟化
powershell
# 检查虚拟化支持
systeminfo | findstr "虚拟化"
# 或使用 PowerShell
Get-ComputerInfo | Select HyperV* | Format-List
# 如果未启用,需进入 BIOS 设置
# 1. 重启服务器,按 Delete/F2 进入 BIOS
# 2. 找到 CPU 虚拟化选项(AMD-V/SVM Mode 或 Intel VT-x)
# 3. 设置为 Enabled
# 4. 保存并重启
1.2 启用 Hyper-V 角色
powershell
# 安装 Hyper-V 角色及管理工具
Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart
# 验证安装
Get-WindowsFeature -Name Hyper-V | Format-List
1.3 配置 Hyper-V 虚拟网络
由于服务器有双网卡,默认虚拟网络无法访问外网,需创建外部虚拟交换机:
- 打开 Hyper-V 管理器
- 右侧操作面板 → "虚拟交换机管理器"
- 创建新的外部虚拟交换机(命名为
TDSwitch) - 绑定到正确的物理网卡(能访问互联网的网卡)
阶段二:创建并配置 Ubuntu 虚拟机
2.1 创建虚拟机
powershell
# 定义虚拟机参数
$VMName = "tdengine"
$VMPath = "C:\Hyper-V\VMs"
$ISOPath = "C:\ISOs\ubuntu-24.04.3-live-server-amd64.iso"
# 创建虚拟机(分配 4GB 内存,2 个 CPU 核心)
New-VM -Name $VMName -MemoryStartupBytes 4GB -BootDevice VHD `
-Path $VMPath -Generation 2 -SwitchName "TDSwitch"
# 创建虚拟硬盘(40GB 动态扩展)
New-VHD -Path "$VMPath$VMName$VMName.vhdx" -SizeBytes 40GB -Dynamic
Add-VMHardDiskDrive -VMName $VMName -Path "$VMPath$VMName$VMName.vhdx"
# 分配 CPU 核心
Set-VMProcessor -VMName $VMName -Count 2
# 挂载安装镜像
Add-VMDvdDrive -VMName $VMName -Path $ISOPath
# 启动虚拟机进行安装
Start-VM -Name $VMName
2.2 安装 Ubuntu Server
- 通过 Hyper-V 控制台连接虚拟机
- 选择语言、键盘布局
- 选择安装模式:Ubuntu Server(最小化安装)
- 网络配置:使用 DHCP(安装后再固定 IP)
- 存储配置:使用整个磁盘(LVM)
- 用户设置:设置用户名/密码(如:tduser)
- 关键步骤:必须选中安装 OpenSSH Server
- 等待安装完成并重启
2.3 配置网络(解决无法上网问题)
安装后发现虚拟机无法访问互联网,原因是 IP 地址与宿主机不在同一网段:
问题现象:
- 宿主机 IP:192.168.31.9/22(物理网络)
- 虚拟机 IP:172.19.224.100/20(Hyper-V 默认网络)
解决方案:
bash
# 在 Ubuntu 虚拟机中执行
sudo nano /etc/netplan/01-netcfg.yaml
# 替换为以下配置(缩进必须准确)
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses: [192.168.28.100/22]
routes:
- to: default
via: 192.168.28.1
nameservers:
addresses: [202.103.24.68, 202.103.44.150]
# 应用配置
sudo netplan apply
阶段三:在 Ubuntu 中部署 TDengine
3.1 安装并配置 Docker
bash
# 更新系统
sudo apt update
# 安装 Docker
sudo apt install -y docker.io
# 启动 Docker 并设置开机自启
sudo systemctl enable --now docker
# 将当前用户加入 docker 组(避免每次使用 sudo)
sudo usermod -aG docker $USER
# 提示:需要退出重新登录使组生效
echo "请退出 SSH 重新登录,后续 docker 命令无需 sudo"
3.2 加载并运行 TDengine
bash
# 1. 上传 TDengine 镜像包到虚拟机(使用 SCP 或 Hyper-V 文件共享)
# 假设文件在 /home/tdengine/ 目录
# 2. 加载 Docker 镜像
sudo docker load -i /home/tdengine/tdengine-tsdb-oss-docker-3.4.0.0-linux-x64.tar.gz
# 3. 为镜像打标签
sudo docker tag tdengine/tsdb-amd64:3.4.0.0 tdengine/tsdb:3.4.0.0
sudo docker tag tdengine/tsdb-amd64:3.4.0.0 tdengine/tsdb:latest
# 4. 创建数据持久化目录
sudo mkdir -p /opt/taos_data /opt/taos_log
sudo chown -R root:root /opt/taos_data /opt/taos_log
# 5. 运行 TDengine 容器
sudo docker run -d \
--name tdengine \
--hostname tdengine-server \
--restart=always \
-p 6030:6030 \
-p 6041:6041 \
-p 6043:6043 \
-p 6044-6049:6044-6049 \
-p 6044-6045:6044-6045/udp \
-p 6060:6060 \
-v /opt/taos_data:/var/lib/taos \
-v /opt/taos_log:/var/log/taos \
tdengine/tsdb:3.4.0.0
3.3 配置防火墙
bash
# 查看防火墙状态
sudo ufw status
# 如果防火墙启用,则开放 TDengine 端口
sudo ufw allow 6030/tcp
sudo ufw allow 6041/tcp
sudo ufw allow 6043:6049/tcp
sudo ufw allow 6060/tcp
sudo ufw allow 6044:6045/udp
# 或直接暂时禁用防火墙(测试环境)
sudo ufw disable
阶段四:配置全自动启动
4.1 Ubuntu 虚拟机内的自启动
已通过以下配置实现:
- Docker 服务:
systemctl enable docker - TDengine 容器:
--restart=always参数
4.2 Windows 宿主机的自启动配置
powershell
# 设置虚拟机自动启动
Set-VM -Name "tdengine" -AutomaticStartAction Start -AutomaticStartDelay 30
# 验证配置
Get-VM -Name "tdengine" | Select-Object Name, AutomaticStartAction, AutomaticStartDelay
4.3 完整的自启动链条
text
Windows Server 重启
↓
Hyper-V 服务自动启动(Windows 服务)
↓
tdengine 虚拟机自动启动(Hyper-V 设置)
↓
Ubuntu 系统启动 → Docker 服务自动启动(systemd)
↓
TDengine 容器自动启动(Docker restart policy)
↓
数据库服务就绪(端口 6030 监听)
阶段五:验证连接
5.1 在 Ubuntu 中验证
bash
# 查看容器状态
docker ps
# 查看容器日志
docker logs tdengine
# 进入容器执行命令
docker exec -it tdengine taos
# 在 TDengine 命令行中
taos> show dnodes;
5.2 在 Windows 宿主机验证
powershell
# 测试端口连通性
Test-NetConnection -ComputerName 192.168.28.100 -Port 6030
# 或使用 telnet(需安装 Telnet 客户端)
telnet 192.168.28.100 6030
5.3 使用 DBeaver 连接
-
在 Windows 宿主机安装 DBeaver
-
新建 TDengine 连接
-
配置参数:
- 主机:192.168.28.100(Ubuntu 虚拟机 IP)
- 端口:6030
- 用户名/密码:root/taosdata(默认)
-
测试连接,成功连接后即可进行数据库操作
五、在安装过程中碰到的问题及解决办法
问题 1:Windows Server 2019 不支持 Docker Desktop 的 Linux 容器模式
现象:尝试安装 Docker Desktop 失败,官方明确不支持 Windows Server 2019。
解决方案:
- 采用 Hyper-V 虚拟机方案
- 在虚拟机中运行完整的 Linux 系统
问题 2:TDengine 企业版在 Windows 上自动关闭
现象:直接安装 TDengine Windows 企业版,服务启动后立即停止。
解决方案:
- 改用社区版 Docker 镜像
- 通过 Linux 环境运行
问题 3:Hyper-V 默认虚拟网络无法访问互联网
现象:Ubuntu 虚拟机可以 ping 通宿主机,但无法访问外网。
根本原因:服务器有两块网卡,Hyper-V 默认绑定了错误的物理网卡。
解决方案:
-
删除默认的虚拟交换机
-
新建外部虚拟交换机(
TDSwitch) -
正确绑定到能上网的物理网卡
-
修改虚拟机网络配置
powershell
Disconnect-VMNetworkAdapter -VMName tdengine Connect-VMNetworkAdapter -VMName tdengine -SwitchName TDSwitch -
在 Ubuntu 中配置正确的 IP 地址和网关
问题 4:Ubuntu 虚拟机与宿主机网络不通
现象:FinalShell 无法连接 Ubuntu 虚拟机的 IP 地址(172.19.224.100)。
分析:
- 宿主机网络:192.168.31.9/22
- 虚拟机网络:172.19.224.100/20
- 两者不在同一网段
解决方案:
- 修改 Ubuntu 网络配置为宿主机同一网段
- 使用
netplan配置静态 IP(如 192.168.28.100/22) - 配置正确的网关和 DNS
问题 5:Docker 镜像加载失败
现象:在 Windows Docker 中加载 Linux 镜像时提示 "Windows does not support legacy loading of images"。
原因:TDengine 的 tar 包是 Linux 环境下的 Docker 镜像,与 Windows Docker 不兼容。
解决方案:
- 在 Linux 虚拟机中执行
docker load命令 - 确保执行环境与镜像架构匹配
问题 6:系统重启后服务链断裂
需求:要求服务器重启后,所有服务自动恢复。
解决方案:配置四级自启动链:
- Windows Server → Hyper-V 服务(自动启动)
- Hyper-V → tdengine 虚拟机(
Set-VM -AutomaticStartAction) - Ubuntu → Docker 服务(
systemctl enable docker) - Docker → TDengine 容器(
--restart=always)
问题 7:防火墙阻止连接
现象:配置完成后,从宿主机无法连接 TDengine 端口。
解决方案:
- 在 Ubuntu 中检查防火墙状态
- 开放必要的 TCP/UDP 端口
- 或暂时禁用防火墙进行测试
六、总结与建议
方案优势
- 稳定性高:每个组件都在最合适的环境中运行
- 隔离性好:数据库运行在独立的虚拟机中,不影响宿主机
- 维护方便:Ubuntu 和 Docker 有完善的社区支持
- 可迁移性强:Docker 容器易于备份和迁移
- 全自动运行:实现了从硬件启动到应用服务的完整自启动链
性能考虑
- 资源分配:虚拟机分配 4GB 内存和 2 个 CPU 核心,可根据实际负载调整
- 存储性能:虚拟硬盘性能低于物理硬盘,如对 I/O 要求高可考虑直通物理磁盘
- 网络延迟:虚拟网络有少量开销,但对于时序数据库场景通常可接受
安全建议
- 修改默认密码:TDengine 默认用户 root 的密码为 taosdata,生产环境务必修改
- 配置防火墙:仅开放必要的端口到必要的 IP 地址
- 定期更新:保持 Ubuntu、Docker 和 TDengine 的版本更新
- 数据备份:定期备份
/opt/taos_data目录
替代方案评估
在本次部署中,我们评估了多种方案:
- 直接安装 Windows 版:失败,服务自动关闭
- Docker Desktop:不支持 Windows Server 2019
- WSL2:Windows Server 2019 版本太低
- Windows Docker + Linux 镜像:不兼容,加载失败
- Hyper-V 虚拟机:✓ 成功,稳定可靠
通过本次部署,我们成功在 Windows Server 2019 上建立了稳定运行的 TDengine 时序数据库环境,实现了从硬件启动到应用服务的全自动运行,满足了测试服务器的无人值守需求。该方案虽稍显复杂,但提供了最好的兼容性和稳定性,适合生产测试环境使用。