Windows Server 2019 上通过虚拟机部署 TDengine 社区版

41 阅读9分钟

在 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)

关键设计决策

  1. 放弃直接在 Windows 运行 TDengine:企业版安装后自动关闭,社区版无 Windows 版本
  2. 放弃 WSL2 方案:Windows Server 2019 版本过低(1809),WSL 版本不兼容
  3. 放弃 Windows Docker 容器:TDengine 仅支持 Linux 环境
  4. 采用 Hyper-V 虚拟机方案:稳定性最好,兼容性最强,支持全自动启动

二、使用到的指令/名词解释

术语解释
Hyper-VWindows 内置的虚拟化技术,可在单台物理服务器上运行多个虚拟机
WSL2Windows Subsystem for Linux 2,在 Windows 中运行 Linux 子系统
Docker容器化平台,允许将应用及其依赖打包成标准化单元
TDengine开源、高性能、分布式的时序数据库
netplanUbuntu 系统的网络配置工具(YAML 格式)
systemdLinux 系统和服务管理器,用于控制服务自启动
ufwUncomplicated Firewall,Ubuntu 的简化防火墙工具

三、所用到的安装介质

  1. 操作系统

    • Windows Server 2019 Datacenter(版本 1809)
    • Ubuntu Server 24.04.3 LTS (ubuntu-24.04.3-live-server-amd64.iso)
  2. 数据库软件

    • TDengine 社区版 Docker 镜像 (tdengine-tsdb-oss-docker-3.4.0.0-linux-x64.tar.gz)
  3. 管理工具

    • 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 虚拟网络

由于服务器有双网卡,默认虚拟网络无法访问外网,需创建外部虚拟交换机:

  1. 打开 Hyper-V 管理器
  2. 右侧操作面板 → "虚拟交换机管理器"
  3. 创建新的外部虚拟交换机(命名为 TDSwitch
  4. 绑定到正确的物理网卡(能访问互联网的网卡)

阶段二:创建并配置 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
  1. 通过 Hyper-V 控制台连接虚拟机
  2. 选择语言、键盘布局
  3. 选择安装模式:Ubuntu Server(最小化安装)
  4. 网络配置:使用 DHCP(安装后再固定 IP)
  5. 存储配置:使用整个磁盘(LVM)
  6. 用户设置:设置用户名/密码(如:tduser)
  7. 关键步骤:必须选中安装 OpenSSH Server
  8. 等待安装完成并重启
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 连接
  1. 在 Windows 宿主机安装 DBeaver

  2. 新建 TDengine 连接

  3. 配置参数:

    • 主机:192.168.28.100(Ubuntu 虚拟机 IP)
    • 端口:6030
    • 用户名/密码:root/taosdata(默认)
  4. 测试连接,成功连接后即可进行数据库操作

五、在安装过程中碰到的问题及解决办法

问题 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 默认绑定了错误的物理网卡。

解决方案

  1. 删除默认的虚拟交换机

  2. 新建外部虚拟交换机(TDSwitch

  3. 正确绑定到能上网的物理网卡

  4. 修改虚拟机网络配置

    powershell

    Disconnect-VMNetworkAdapter -VMName tdengine
    Connect-VMNetworkAdapter -VMName tdengine -SwitchName TDSwitch
    
  5. 在 Ubuntu 中配置正确的 IP 地址和网关

问题 4:Ubuntu 虚拟机与宿主机网络不通

现象:FinalShell 无法连接 Ubuntu 虚拟机的 IP 地址(172.19.224.100)。

分析

  • 宿主机网络:192.168.31.9/22
  • 虚拟机网络:172.19.224.100/20
  • 两者不在同一网段

解决方案

  1. 修改 Ubuntu 网络配置为宿主机同一网段
  2. 使用 netplan 配置静态 IP(如 192.168.28.100/22)
  3. 配置正确的网关和 DNS

问题 5:Docker 镜像加载失败

现象:在 Windows Docker 中加载 Linux 镜像时提示 "Windows does not support legacy loading of images"。

原因:TDengine 的 tar 包是 Linux 环境下的 Docker 镜像,与 Windows Docker 不兼容。

解决方案

  • 在 Linux 虚拟机中执行 docker load 命令
  • 确保执行环境与镜像架构匹配

问题 6:系统重启后服务链断裂

需求:要求服务器重启后,所有服务自动恢复。

解决方案:配置四级自启动链:

  1. Windows Server → Hyper-V 服务(自动启动)
  2. Hyper-V → tdengine 虚拟机(Set-VM -AutomaticStartAction
  3. Ubuntu → Docker 服务(systemctl enable docker
  4. Docker → TDengine 容器(--restart=always

问题 7:防火墙阻止连接

现象:配置完成后,从宿主机无法连接 TDengine 端口。

解决方案

  1. 在 Ubuntu 中检查防火墙状态
  2. 开放必要的 TCP/UDP 端口
  3. 或暂时禁用防火墙进行测试

六、总结与建议

方案优势

  1. 稳定性高:每个组件都在最合适的环境中运行
  2. 隔离性好:数据库运行在独立的虚拟机中,不影响宿主机
  3. 维护方便:Ubuntu 和 Docker 有完善的社区支持
  4. 可迁移性强:Docker 容器易于备份和迁移
  5. 全自动运行:实现了从硬件启动到应用服务的完整自启动链

性能考虑

  1. 资源分配:虚拟机分配 4GB 内存和 2 个 CPU 核心,可根据实际负载调整
  2. 存储性能:虚拟硬盘性能低于物理硬盘,如对 I/O 要求高可考虑直通物理磁盘
  3. 网络延迟:虚拟网络有少量开销,但对于时序数据库场景通常可接受

安全建议

  1. 修改默认密码:TDengine 默认用户 root 的密码为 taosdata,生产环境务必修改
  2. 配置防火墙:仅开放必要的端口到必要的 IP 地址
  3. 定期更新:保持 Ubuntu、Docker 和 TDengine 的版本更新
  4. 数据备份:定期备份 /opt/taos_data 目录

替代方案评估

在本次部署中,我们评估了多种方案:

  1. 直接安装 Windows 版:失败,服务自动关闭
  2. Docker Desktop:不支持 Windows Server 2019
  3. WSL2:Windows Server 2019 版本太低
  4. Windows Docker + Linux 镜像:不兼容,加载失败
  5. Hyper-V 虚拟机:✓ 成功,稳定可靠

通过本次部署,我们成功在 Windows Server 2019 上建立了稳定运行的 TDengine 时序数据库环境,实现了从硬件启动到应用服务的全自动运行,满足了测试服务器的无人值守需求。该方案虽稍显复杂,但提供了最好的兼容性和稳定性,适合生产测试环境使用。