2025-01-23 16:24:00
在上一篇文章已部署好DDC的基础上部署XenApp。Citrix ® XenApp™是一种按需应用交付解决方案,能够在数据中心对所有Windows ®应用实现虚拟化、集中部署和管理,并能作为一项服务、通过任何设备向所有用户交付应用。
请参见Citrix XenDesktop 云桌面部署的“环境介绍”部分。
这里假定已安装好域控和DDC,准备进行XenApp的交付。主机分配、IP地址、域控状态与上一篇文章一致。
首先部署一台Windows Server虚拟机,我这里为了方便仍使用Windows Server 2012 R2。该虚拟机是XenApp的运行环境,运行时所有分发出去的应用程序本质上都运行在该虚拟机上。这里要求必须使用Windows Server系统,因为只有Windows Server才能支持远程桌面服务。
该XenApp运行环境也可以使用物理机安装Windows Server后安装VDA作为运行环境,但要求能够加入DDC所在域。
登录到Store Front,然后查看账户中的应用程序,直接点击对应程序图标即可开启,使用体验与本地使用几乎无异
Citrix XenApps 依赖的其实是Windows Server的Remote Desktop Service。但该服务并不是免费的,这里讲一下怎么激活。我们其实也能在Citrix Studio里面看到授权无效的消息。
http://activate.microsoft.com
,选择“启用许可证服务器”6565792
;4954438
;6879321
;5296992
,产品类型选择“Windows Server 2012 远程桌面服务每用户客户端访问许可证”,最后在服务器上安装该许可证密钥包ID即可。2025-01-17 16:24:00
从零开始部署一套生产环境可用的XenDesktop云桌面基础架构
服务器:Dell PowerEdge R410
CPU:2×Intel Xeon E5504(4 Cores 4 Threads Per CPU)
内存:4×8G non-ECC DDR3
存储:1×1TB Seagate HDD
网卡:板载BCM5716双口千兆电口网卡
Tips:真不是故意用这种电子垃圾,是手头真没有闲着的机器了。这里面唯一的一块硬盘甚至还重摔过…本次部署过程中也是难受的很,随机读写性能基本等同于没有,IO Wait最高的时候高达8772%…唉
XenServer版本:7.5(buildDate: 2018-05-21)
XenDesktop版本:3.15
域控服务器操作系统:Windows Server 2012 R2
SQL Server版本:2014.120.5000.0
需要注意的是本文所部署的方法在安全方面并非最佳实践,如需强安全性还需做各种用户权限和网络的隔离等,以及最新版本的软件更新。
序号 | 用途 | IP地址 | 操作系统 | 配置 |
---|---|---|---|---|
1 | 虚拟化 | 192.168.50.101 | XenServer 7.5 | 2c4g |
2 | 授权服务器 (本文不涉及) |
— | — | — |
3 | 域控服务器 | 192.168.50.161 | Windows Server 2012 R2 | 2c4g |
4 | DDC与数据库 | 192.168.50.162 | Windows Server 2012 R2 | 2c4g |
5 | 客户机 | 192.168.50.171-180 | Windows 10 LTSC | 2c4g |
上述分配均为本次实验环境的分配,如果并发数量比较大环境比较多,建议将域控、SQL、DDC、授权服务、StoreFront等均分开部署。
本次部署中我对所有主机的IPv6功能均进行了关闭。
其中激活服务器可以先不弄,XenServer默认拥有30天的试用期,激活服务器可以稍后和DDC做在一起(最佳实践也是如此),最后再激活即可。
如果生产环境已经有了域控服务器则可以使用现成的域控制器。
域控服务器的部署到这里先告一段落。
另起一台Windows Server服务器,我这里仍然使用虚拟机和Windows Server 2012 R2,Windows安装过程不再赘述,详见上一节第一步。
SQL服务器我们这一步安装在DDC服务器上,如果环境比较庞大建议单独部署。
以下部分为安装SQL Server 2014 Management Studio,不需要可以跳过。
安装好后重启虚拟机。
这一步部署Critix XenDesktop的Desktop Delivery Controller(DDC)。
按正常流程新建虚拟机然后安装操作系统,此处略过。
该步骤仅用于没有DHCP的网络环境,如果你的网络环境中已经有了能够自动下发DHCP地址的DHCP服务器,请跳过此步。
本节将在当前网络环境中创建一个基于Windows Server的DHCP服务器。Citrix虚拟机云桌面下发时依靠DHCP分配地址,连接时依靠网络进行连接。
这一步主要是解决后面可能无法创建虚拟机,提示“没有权限在默认OU或者指定OU创建计算机”的问题。
在域控服务器上打开“Active Directory用户和计算机”,将刚才创建的ddc用户加入Domain Admins组,然后确定保存,最后重启DDC服务器。
在DDC服务器上,打开Citrix Studio,左侧栏选择“Citrix StoreFront”,右侧应该默认已经配置好了一个Store Service,然后在下面详细信息中可以查看Receiver for Web站点,下面的http://xxxxx/Citrix/StoreWeb
就是云桌面的入口。
在浏览器打开它就可以看到Receiver for Web的页面。
云桌面交付的最后一步是创建最终用户的账户,在AD域控服务器上新建账号,用于登录云桌面。
至此,部署完成。
确实是没有,我的解决办法是在制作模板机的时候把Domain Users
组加入模板机的Administrators
组,这样客户机自己也有管理员权限了。不过如此操作是否有安全风险还有待考虑。
打开DDC服务器上的Citrix Studio,转到策略,编辑右侧默认策略(Unfiltered),找到“客户端USB设备重定向”,编辑为“启用”。
随后重新连接云桌面,此时在Desktop Viewer上即可看到设备重定向及设备管理选项。
打开Citrix Receiver后添加http连接的StoreFront提示无法添加,需要额外操作。
那么额外操作是什么呢?
这里分两种情况,客户机是32位还是64位。
1 |
HKEY_LOCAL_MACHINE\SOFTWARE\Citrix\Dazzle |
1 |
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Citrix\Dazzle |
AllowAddStore
值更改为A
;AllowSavePwd
值更改为A
。1 |
HKEY_LOCAL_MACHINE\SOFTWARE\Citrix\AuthManager |
1 |
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Citrix\AuthManager |
ConnectionSecurityMode
,值设定为Any
。最后重启Citrix Receiver即可。
2024-12-24 16:24:00
PVE 中 LVM 卷的扩容全过程以及相关解释。
目前服务器具备4块硬盘:2×1TB + 2×4TB,计划取出一块做系统盘(及ISO镜像、CT卷等),余下三块硬盘做LVM用于VM磁盘存储。硬件上不具备RAID卡,PVE版本为Linux 6.8.4-2-pve。
目前服务器上所有硬盘均有数据,但数据不再需要将清零处理;其中1块1TB硬盘(/dev/sdb
)已安装好系统,分区拓扑参考下表:
1 |
root@dell_t30:~# lsblk |
可见其中pve-root
分区仅被分到96GB,余下空间均分配给pve-data
。
下面来准备磁盘,其中sda、sdc、sdd三块硬盘需要组LVM,那么先对这三块盘进行准备,主要就是初始化分区表和建立空分区。新建立的分区不必格式化。
1 |
root@dell_t30:~# fdisk /dev/sda |
对余下两块盘做同样操作,这里不再赘述。
1 |
root@dell_t30:~# pvcreate /dev/sda1 |
1 |
root@dell_t30:~# vgcreate datastore0 /dev/sda1 |
datastore0
是我这里对VG的命名,可以随意修改;/dev/sda1
是刚才创建好PV的磁盘vgdisplay
)1 |
root@dell_t30:~# vgs |
1 |
root@dell_t30:~# vgextend datastore0 /dev/sdc1 |
1 |
root@dell_t30:~# vgdisplay |
我这里直接在Web里面把自动创建的LVM-Thin销毁掉,然后执行如下命令扩容pve-root
:
1 |
root@dell_t30:~# lvextend -rl +100%FREE /dev/mapper/pve-root |
我这里resize2fs
是自动的,如果没有自动执行可以手动执行一下。
2024-11-14 16:24:00
使用bond方式将四个千兆电口聚合为一个4Gbps的聚合口的记录。
1 |
[root@localhost ~]# lspci | grep Ethernet |
xmit_hash_policy
参数ip -d link show
查看当前分流策略:1 |
6: nm-bond: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 |
xmit_hash_policy
为layer2
,即使用二层哈希进行流量分配。这里我们需要给它调整为layer3+4
:1 |
nmcli connection modify "Bond connection 1" +bond.options xmit_hash_policy=layer3+4 |
1 |
nmcli d reapply nm-bond |
Linux网卡绑定mode共有七种(0~6) bond0、bond1、bond2、bond3、bond4、bond5、bond6。
第一种模式:mod=0 ,即:(balance-rr) Round-robin policy(平衡抡循环策略)
特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;但是我们知道如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降
第二种模式:mod=1,即: (active-backup) Active-backup policy(主-备份策略)
特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。此模式只提供了容错能力;由此可见此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N
第三种模式:mod=2,即:(balance-xor) XOR policy(平衡策略)
特点:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力
第四种模式:mod=3,即:broadcast(广播策略)
特点:在每个slave接口上传输每个数据包,此模式提供了容错能力
第五种模式:mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 动态链接聚合)
特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。
外出流量的slave选举是基于传输hash策略,该策略可以通过xmit_hash_policy选项从缺省的XOR策略改变到其他策略。需要注意的 是,并不是所有的传输策略都是802.3ad适应的,尤其考虑到在802.3ad标准43.2.4章节提及的包乱序问题。不同的实现可能会有不同的适应 性。
必要条件:
条件1:ethtool支持获取每个slave的速率和双工设定
条件2:switch(交换机)支持IEEE 802.3ad Dynamic link aggregation
条件3:大多数switch(交换机)需要经过特定配置才能支持802.3ad模式
第六种模式:mod=5,即:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡)
特点:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。
该模式的必要条件:ethtool支持获取每个slave的速率
第七种模式:mod=6,即:(balance-alb) Adaptive load balancing(适配器适应性负载均衡)
特点:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receive load balance, rlb),而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。
来自服务器端的接收流量也会被均衡。当本机发送ARP请求时,bonding驱动把对端的IP信息从ARP包中复制并保存下来。当ARP应答从对端到达 时,bonding驱动把它的硬件地址提取出来,并发起一个ARP应答给bond中的某个slave。使用ARP协商进行负载均衡的一个问题是:每次广播 ARP请求时都会使用bond的硬件地址,因此对端学习到这个硬件地址后,接收流量将会全部流向当前的slave。这个问题可以通过给所有的对端发送更新 (ARP应答)来解决,应答中包含他们独一无二的硬件地址,从而导致流量重新分布。当新的slave加入到bond中时,或者某个未激活的slave重新 激活时,接收流量也要重新分布。接收的负载被顺序地分布(round robin)在bond中最高速的slave上
当某个链路被重新接上,或者一个新的slave加入到bond中,接收流量在所有当前激活的slave中全部重新分配,通过使用指定的MAC地址给每个 client发起ARP应答。下面介绍的updelay参数必须被设置为某个大于等于switch(交换机)转发延时的值,从而保证发往对端的ARP应答 不会被switch(交换机)阻截。
必要条件:
条件1:ethtool支持获取每个slave的速率;
条件2:底层驱动支持设置某个设备的硬件地址,从而使得总是有个slave(curr_active_slave)使用bond的硬件地址,同时保证每个bond 中的slave都有一个唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址将会被新选出来的 curr_active_slave接管
其实mod=6与mod=0的区别:mod=6,先把eth0流量占满,再占eth1,….ethX;而mod=0的话,会发现2个口的流量都很稳定,基本一样的带宽。而mod=6,会发现第一个口流量很高,第2个口只占了小部分流量。
我这里只使用了mode4(802.3ad)方式聚合。
在 bond 模式为 2、4、5 的情况下,支持通过修改传输 hash 策略改变数据包发送方式。在 debain9 系统上,就是通过修改 bond-xmit-hash-policy 改变 bond out 流量负载方式。
排名不分先后。
2024-11-05 16:24:00
部署 XenServer 7.2 。
本次用于部署 XenServer 的是一台拼凑起来的 Dell R710 ,具备 2*Xeon E5504 + 96GB RAM + 2T SATA HDD + 140G SAS HDD。
扩充包一般指的是Citrix的官方功能包、驱动盘或OEM、云厂商等制作的包含自动化安装脚本的镜像文件。
随后访问刚才设置的XenServer服务器的IP地址,里面可以下载XenCenter,XenCenter是XenServer的管理工具。
激活服务器是一个Windows的服务器,里面安装了授权工具和License。该授权服务器既可以是物理机也可以是虚拟机。这里我将授权服务器安装在XenServer里面。
首次在XenServer上创建虚拟机需要先准备一个用于存储ISO镜像的存储服务器,我这里以另外一台Windows Server 2019的物理机为例,如果是非服务器版本这一步骤还需要给服务器添加一个密码以启用共享。
注意:
- 启用SMB 1.0协议可能在某些场景中造成严重的安全问题,生产环境请做好网络隔离;
- 在非服务器版本中可通过控制面板->程序和功能->启用或关闭Windows功能中找到并启用该功能。
最后只需要共享包含iso镜像的文件夹即可。
打开XenCenter,左侧选择当前服务器,右侧选择“Storage”选项卡,然后下面点击“New SR”,然后选择“Windows File Sharing(SMB/CIFS)”,然后下一步
存储库名称可以随便写,介绍也可以自动生成。
最后填写地址、用户名和密码即可。
激活服务器需要的性能并不高,我这里创建了 1c 1.5g 的虚拟机用于激活程序,打算安装 Windows Server 2012 R2 。
创建过程中会自动扫描存储库内的镜像文件,创建过程中选择正确的镜像即可。
创建好后切换到“Console”选项卡即可看到虚拟机的控制台,随后正常安装操作系统、配置网络和一些必备项即可。
注意修改服务器计算机名为CTXLic
最后激活的话就是选中服务器,然后Tools -> License Manager
然后“Assign License”,最后输入IP地址和端口号,选择正确的License类型,如果 License 正确且有效,随后点击“OK”即可激活。
shell
进入高级安装模式命令行1 |
vi /opt/xensorce/installer/constants.py |
1 |
GPT_SUPPORT = False |
1 |
root_size = 20480 |
2024-10-31 16:24:00
不知道为啥AMD显卡驱动不能安装在Windows Server上,真无语…
1 |
.\amd_Radeon_27.20.20913.2000_w1064\Packages\Drivers\Display\WT6A_INF\ |
U0382934.inf
文件,使用文本编辑器打开该文件。1 |
PCI\VEN_1002&DEV_683F&SUBSYS_A013174B&REV_00 |
VEN
指的是制造商,DEV
指的是设备ID,我这里是683F
,那么先在刚才的U0382934.inf
文件中搜索一下683F
,得到如下行:1 |
%AMD683F.1%" = ati2mtag_R575A, PCI\VEN_1002&DEV_683F |
1 |
"%AMD683F.1%" = ati2mtag_R575A, PCI\VEN_1002&DEV_683F&SUBSYS_300D1043 |
1 |
bcdedit -set loadoptions DISABLE_INTEGRITY_CHECKS |
1 |
bcdedit -set loadoptions ENABLE_INTEGRITY_CHECKS |