E-VDI部署运维实战:从架构规划到命令行落地
2026/9/19 7:25:10 网站建设 项目流程

简介:这是一份面向噢易公司E-VDI产品的部署与运维手册,适合研发、测试、实施及技术支持工程师阅读,用来快速熟悉VDI产品的整体部署流程与服务器关键配置参数。文档从部署前注意事项切入,明确了主控节点IP规划、存储节点网络准备以及“先服务器端、再Web管理平台、最后安装客户端”的部署顺序;随后展开主控节点与计算节点的系统安装、分区挂载、网卡IP/DNS/主机名配置、root密码设置等操作细节,并延伸至Web管理平台初始化、Linux与Windows客户端安装。同时提供产品架构图和thor组件说明,梳理服务器端组件日志查看方法、常用VDI命令,附录中还整理了常用Linux命令、开源技术清单及典型问题解答,方便实施与运维人员现场查阅。资源为单份doc文档,约1.53MB,结构清晰、覆盖真实交付场景;目前已有144人学习,可作为技术团队内部培训和项目部署运维的实用参考。

1. 部署 E-VDI 前要先想清楚的事

E-VDI 这个词在采购清单里出现时,通常默认答案是“能装能用就行”,但真正落到部署和运维,它最少由四个部分组成:虚拟化调度、显示协议、接入网关和桌面镜像管理。任何一个部分不做规划,部署完的第一周就会开始出问题。我遇到过的典型场景是签了 200 个并发桌面,实施人员按默认参数装完,上午十点一过用户陆续登录,宿主机 CPU 没爆,存储 IO 却卡到 300ms 以上。问题不在于软件本身,而在于没先确认后端是 HDD、混合盘还是全闪,也没按协议会话数算出并发 IOPS。所以部署前先定死用户规模、桌面池类型、网络延迟、存储介质四个变量,后面每一步才有参照。这篇文章不讲安装截图,而是把 E-VDI 部署和运维里最容易被忽略的组件关系、参数设定和故障判断讲清楚。无论你用的是哪家的 E-VDI 分支产品,只要你手里有硬件和 CentOS 或统信 UOS 这类基础系统,下面的步骤基本可以直接套用。

2. E-VDI 的组件、协议与部署形态:先画图再动手

2.1 控制平面与数据平面拆开看

在开始敲命令前,先画一张拓扑图。E-VDI 最常见的错误是控制平面和数据平面混在一台机器上,导致调度和 VM 运行时互相抢资源。我的做法是把角色拆成三类:管理节点、接入节点、计算节点。管理节点上是数据库、LDAP 对接、Web 控制台和连接代理;接入节点是外网进来的会话网关;计算节点是真正运行虚拟桌面的宿主机。

这张表是每台机器上该开的服务与端口,我习惯把它贴机房空调面板旁边:

角色服务典型端口故障影响
管理节点Web 管理台、控制数据库443, 8443无法新建桌面、策略下发中断
接入节点会话网关、负载均衡4172, 3389, 8443外部用户无法连接
计算节点QEMU/KVM、虚拟桌面调度5900-5910, 22桌面掉线、卡死
存储节点NFS/SMB 镜像仓库2049, 445所有桌面启动异常

这里的端口不是死的,如果接入节点走的是 SPICE 协议,端口会多一个 5900 段来源;如果是 3389 段,说明你走的是 RDP 转发。运维时先用ss -tlnp确认实际监听,不要凭手册上的表格判断是否已经启动。

控制节点的配置文件evd.conf可以把这个结构写清楚:

[manager] role=controller web_port=8443 # 控制节点同时负责连接代理和 Web 管理 db_type=mysql db_host=10.10.1.10 session_timeout=3600 [gateway] role=access-gateway protocol=spice gateway_port=5900 cert_path=/etc/evd/ssl/server.crt [compute] role=vdi-host cpu_model=host-passthrough enable_nested_vt=0

这份配置本质上在做三件事:指定管理角色、标记接入网关协议、取消嵌套虚拟化。session_timeout是用户断网后会话保留时长,设为 3600 可以避免用户临时断网后桌面被立刻销毁。enable_nested_vt=0是默认值,如果这台宿主机本身只是虚拟机,置 0 才能减少性能损耗。

2.2 远程显示协议怎么选

E-VDI 的显示协议一般有 SPICE、RDP、以及部分厂商自研的基于 H.264 的协议。选择时不要只看宣传语里“高清流畅”这四个字,要按场景选。办公类桌面,RDP 足够,后端只需确保 3389 可达;设计类和高分屏需求,SPICE 更合适;如果是外网通过网关接入,很多厂商会用自研协议包装一重 TSL。常见做法是 RDP 只用于管理虚拟机,用户桌面的外发协议单独配置。

协议推荐场景带宽占用分辨率支持排错入口
RDP低交互办公约 100-300Kbps4K 以上但依赖客户端3389 通不通
SPICE重图形、视频500Kbps-1Mbps最高 32 位色5900 段连通性
自研 H.264外网移动办公动态码率与客户端有关网关日志

协议选完后,必须在接入网关的配置文件里锁定默认通道,别让用户用客户端随意切换协议。不然你会在一天后收到“桌面卡成幻灯片”的投诉,原因是有人用 RDP 打开了视频会议。

2.3 单机、集群还是多站点

部署形态不要拍脑袋。用户数少于 30,单机管理节点+单计算节点可以承受,前提是镜像和用户数据都放在独立存储上。30 到 200 人,至少是两个计算节点的集群,管理节点做成主备。超过 200 人,接入网关要单独拆两台,避免一个会议室全员接入时网关 CPU 跑满。

多站点部署时,常见做法是控制面共享、数据面分离。也就是说所有站点的管理走同一套数据库,但每个站点有自己的计算节点和镜像仓库。这样网络割裂时不会影响其他站点的登录。反过来,如果共用一个镜像仓库而站点间延迟超过 20ms,桌面开机就会让用户等满一张图片的时间。

这一章看着像架构评审会,其实是给部署命令提供参数依据。下一章的命令里,所有节点 IP 和角色参数都来自这里。

3. 用命令行把 E-VDI 控制平面和第一个桌面池跑起来

3.1 在 CentOS 7/8 上安装控制节点的最小步骤

常见的做法是把控制节点装在一台 4 核 8G 的独立机器上,系统盘 80G,日志和数据库单独挂一个盘。先更新系统,再装包。不要在一台跑着 Docker 和 Jenkins 的机器上复用控制节点,因为 E-VDI 依赖的端口多,和开发环境冲突后你很难排查是哪个进程占用了 8443。

先用最小命令完成初始化:

systemctl stop firewalld systemctl disable firewalld yum install -y epel-release yum install -y qemu-kvm libvirt virt-install nginx mysql-server evd-controller evd-agent systemctl enable --now mysqld systemctl enable --now libvirtd systemctl enable --now evd-controller

这里的顺序是有讲究的:先停防火墙,再装虚拟化层,最后启动控制服务。E-VDI 控制器启动时会自动探测本机 libvirtd 是否在监听,如果 libvirtd 没起来,它会报“local hypervisor connection failed”,而不是直接告诉你是哪一步的问题。evd-agent是每台宿主机要装的代理,用来向控制节点上报负载和会话数据。

装完后用下面的命令确认三个服务都活着:

systemctl status mysqld --no-pager | grep Active systemctl status libvirtd --no-pager | grep Active systemctl status evd-controller --no-pager | grep Active

如果控制器启动失败,先看/var/log/evd/controller.log,常见原因是 MySQL 连接串没改,默认连的是 localhost,而你把数据库放到了另一台机器。

注意:不要在调试阶段同时启动多个管理节点实例,E-VDI 管理面一旦用共享库就会出现主键冲突,用户登录会被会话数据库锁卡住。

3.2 注册计算节点并创建虚拟桌面模板

计算节点装完后,需要把它注册到控制节点。生产环境里我们会用管理台的节点发现,但最小化验证时,我更倾向直接调控制节点的 API:

# 注册计算节点到控制节点,返回 200 表示成功 curl -k -X POST https://10.10.1.10:8443/api/v1/hosts \ -H "Authorization: Bearer $EVD_TOKEN" \ -d '{ "host_name": "compute-01", "host_ip": "10.10.1.21", "cpu_sockets": 2, "memory_mb": 65536 }'

这个接口会在控制节点配置里写入一台宿主机,并推一份agent.conf到计算节点。cpu_sockets这个参数容易被忽略,它的值决定虚拟桌面供应商绑定 vCPU 的方式,填错会让桌面 QoS 策略失效。

桌面模板使用 qcow2 后端,先创建一个基础镜像:

qemu-img create -f qcow2 -o backing_file=/data/vdi/base/win10-base.qcow2,backing_fmt=qcow2 /data/vdi/pool/pool-01.qcow2 20G

这里采用了 backing_file 链。基础镜像只读,所有桌面共享它,只有差异数据写入 pool 文件。20G是差异盘最大容量,不代表立即占用磁盘空间。虚拟机的实际磁盘占用量用du -h /data/vdi/pool/pool-01.qcow2才能看到实时大小。如果后端存储是全闪,差异盘数量多也没问题;如果是机械盘,建议把差异盘放到 SSD 缓存层。

3.3 通过 CLI 创建桌面池并发布

E-VDI 的官方手册通常教你点 Web 页面,但点按钮很难做到批量一致。我的做法是用 CLI 命令按顺序执行:先建池,再挂镜像,后授权用户。下面是一条典型的桌面池创建命令:

evdcli pool create --name office-pool \ --type static \ --desktop-preset win10-4c8g \ --image-template /data/vdi/pool/pool-01.qcow2 \ --gateway access-gw-01 \ --vlan 120 \ --autologin off

参数说明:--type static表示用户每次登录都拿到同一台桌面,适合账号绑定场景;如果要应对公共电脑场景,应该用dynamic模式,用户离开后桌面会被重置。--image-template指向上一步创建的差异盘。--autologin off是为了强制用户通过 802.1X 或 AD 域认证登录,否则管理员创建的临时账号会在桌面上留下一个永远可用的后门。

创建完池后,查看池状态:

evdcli pool list --format table evdcli pool check --name office-pool

如果check显示某个宿主机上有告警,直接看那台机器的evd-agent日志。很多池发布失败是因为宿主机内存碎片不够,VirtIO 驱动没装全,导致桌面起不来。命令层面看起来是“无法完成桌面创建”,实际上错误堆栈里会有virDomainCreateWithXML failed字样,这时要去宿主机/var/log/libvirt/qemu/下查具体 VM 日志。

4. E-VDI 的日常运维:监控、日志、会话管理和补丁

4.1 用 Prometheus 监控 E-VDI 节点

E-VDI 的运维不能只看 Web 控制台的“健康”两字。产品通常把管理面和宿主机状态汇总成一个百分比,但真正的性能瓶颈在 CPU 的 steal、磁盘的 await、网络重传率。我一般会在每台节点上装node_exporter,再用 Prometheus 抓指标。控制节点本身已经暴露了/metrics接口,但如果你没有装监控栈,下面这条命令也能在 5 分钟内看到核心指标:

curl -s http://10.10.1.10:9100/metrics | grep -E "node_load1|node_memory_MemFree_bytes|node_disk_read_time"

取值后,把三个指标读出来对比。如果 load1 长期超过核数 70%,说明宿主机已经饱和;如果 MemFree 只剩几个 GB,要考虑桌面池是否把宿主机内存都预分配了。

提醒一句,E-VDI 控制台里有很多告警阈值是默认的,比如 CPU 90%、磁盘 90%,但真实环境里 80% 就可能因 IO 排队导致登录失败。我习惯把告警阈值下调到 80%,并加一条规则专门盯node_disk_await,当机械盘 await 超过 30ms 或闪存盘 await 超过 5ms 时触发:

groups: - name: evd.rules rules: - alert: DiskLatencyHigh expr: rate(node_disk_read_time_seconds_total[1m]) / rate(node_disk_reads_completed_total[1m]) > 0.03 for: 10m labels: severity: warning annotations: summary: "存储延迟异常,检查 E-VDI 宿主机磁盘或存储网络"

这条 PromQL 表达式把磁盘读时间速率除以读请求速率,得到平均单次 IO 时间。0.03 秒等于 30ms,用这个阈值触发告警。

4.2 会话断开、卡顿和黑屏的排查次序

处理桌面运维工单时,不要一上来就重启虚拟机。正确的排查次序是:网络、协议端口、宿主机资源、虚拟机内部状态。

我先用pingss确认三层和四层连接:

ping -c 4 10.10.1.21 ss -tlnp | grep 5900

用户反馈“卡顿”时,九成是链路延迟和重传。带宽大不能代表延迟低,要在接入网关上抓包看 RTT 的波动。如果用户用的是无线网络,先确认丢包率,再考虑调整 E-VDI 的语音和音频控件优先级。音频重定向默认打开会让 SPICE 通道带宽占用翻倍,建议先关闭重定向,只保留扬声器输出。

黑屏问题则要看/var/log/evd/session.log,里面有每个会话的通道建立记录。会话日志的字段通常包括:用户 ID、接入时间、协议类型、连接断开原因码。原因码104一般是客户端主动断开,105是网关主动关闭会话,110是后端虚拟机异常退出。把这三个码背下来,处理工单能快一半。

下表是 E-VDI 会话日志的常见字段,排错时直接对着表格看:

字段含义异常时的表现
client_ip用户接入来源地址多个来源地址说明账号共享
protocol_version协议版本号版本过低可能导致白屏
session_start_time会话建立时间和用户感知不一致则有时区差
disconnect_code断开原因码105/110 高发说明后端不稳

4.3 日志轮转与磁盘清理

E-VDI 管理节点一旦跑久,/var/log/evd/会积累大量 SQL 慢查询和协议调试日志。默认的 logrotate 配置通常只对主日志生效,会话日志和宿主机 agent 日志会被遗漏。我会给/etc/logrotate.d/evd写一份强制轮转配置:

/var/log/evd/*.log { daily rotate 14 compress delaycompress missingok notifempty copytruncate }

copytruncate很重要,它先复制日志再清空原文件,避免 E-VDI 的日志写入进程因为文件句柄失效而丢失新的日志。不要用create,如果创建新文件时权限不对,E-VDI 服务会直接停止写日志。

磁盘空间检查也应该写进定时任务,我给你一个常用做法,用find删除 30 天前的镜像快照:

find /data/vdi/snapshots -name "*.qcow2" -mtime +30 -print

生产环境不要直接用-delete,先改成-print输出文件路径,人工确认后再删。删之前要确认没有会话正在使用快照,evdcli session list里如果有in-use状态的桌面,快照文件必须保留。

5. 验证部署的 3 个方法,以及桌面池扩容时的注意项

5.1 用并发脚本模拟登录压力

部署完一个桌面池后,不要只在 Web 控制台看到“运行中”就收工。最小验证是并发登录 5 个账号,观察管理节点连接代理的会话数是否增长:

for i in $(seq 1 5); do evdcli session start --user user$i --pool office-pool & done sleep 30 evdcli session list --format table

这里&让多个启动命令并行执行,30 秒后能看到 5 个会话由starting变成active。如果会话停留在starting,查接入网关上 8443 端口和计算节点的 CPU。

并发验证通过后,还要检查桌面回收。用户退出时,桌面是否回到可用池而不是留在in-use。这一步直接决定第二天用户登录时还有没有可用资源。

5.2 扩容时先加存储再加热节点

桌面池扩容最稳妥的做法是“先存储,后计算”。先确认镜像池剩余空间足够创建差异盘,再往集群里加入新计算节点。加节点时用控制节点 API 同样可以完成注册,但要注意新宿主机的时间同步,chronyc sources是第一个要检查的命令,时间偏差超过 300ms 会导致认证票据失败,用户登录直接闪退。

5.3 连接协议的回归测试

每次修改接入网关或升级协议驱动后,都要做一次 RDP/SPICE 的回归测试,只测办公场景的 30 秒操作。如果发现图形化操作掉帧,把 SPICE 的压缩参数从glz改回lz再试。参数改动记录保存到evd.conf对应的 protocol 段,而不是只改客户端。变更记录模板放在/var/lib/evd/change下,内容加一列date,author,param,old,new,reason,每次调整都补一行,遇到问题先看变更记录再查日志,比重新抓包翻守则省时间。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询