本文介绍将客户端流量均衡到 Azure HPC 缓存上所有装入点的一些基本方法。
每个 HPC 缓存至少有三个不同的 IP 地址,吞吐量值较大的缓存最多可以有 12 个。 请务必使用所有 IP 地址来获取 Azure HPC 缓存的全部优势。
有各种选项可用于对客户端装载进行负载均衡:
- 为每个客户端手动选择不同的装载 IP
- 在客户端装载脚本中包含 IP 地址轮换
- 配置 DNS 系统以在所有可用地址之间自动路由客户端请求(轮循 DNS)
适合你的负载均衡系统取决于工作流的复杂性、缓存中的 IP 地址数和大量的其他因素。 如果需要帮助确定哪种方法最适合你,请咨询 Azure 顾问。
手动分配 IP 地址
缓存的装载 IP 地址显示在 Azure 门户中的缓存 概述 和 装载说明 页上,以及使用 Azure CLI 或 PowerShell 创建缓存时打印的成功消息。
可以使用 “装载说明 ”页为每个客户端生成自定义装载命令。 创建多个命令时,选择所有 缓存装载地址 值。
有关详细信息,请阅读挂载 Azure HPC 缓存。
使用脚本化负载均衡
可通过多种方式以编程方式在可用 IP 地址之间轮换客户端装载。 下面是两个示例。
挂载命令行脚本“cksum”示例
此示例装载命令使用哈希函数 cksum
和客户端主机名在 HPC 缓存上的所有可用 IP 地址之间自动分配客户端连接。 如果所有客户端计算机都具有唯一的主机名,则可以在每个客户端上运行此命令,以确保使用所有可用的装入点。
mount -o hard,proto=tcp,mountproto=tcp,retry=30 $(X=(10.0.0.{1..3});echo ${X[$(($(hostname|cksum|cut -f 1 -d ' ')%3))]}):/${NAMESPACE} /mnt
若要在工作流中使用此示例,请自定义以下术语:
在表达式中
X=
,按排序顺序使用所有缓存装载地址的空间分隔列表。(X=(10.0.0.{7..9})
表达式将变量 X 设置为此装载地址集:{10.0.0.7、10.0.0.8、10.0.0.9}。 使用缓存的基本 IP 地址和缓存概述页中显示的确切地址。 如果地址不是连续的,请按数字顺序列出这些地址。在参数
%3
中,使用缓存实际拥有的装载 IP 地址数(通常为 3、6、9 或 12)。例如,如果缓存公开了 9 个客户端装载 IP 地址,则使用
%9
。对于表达式
${NAMESPACE}
,请使用客户端将访问的存储目标命名空间路径。可以使用已定义的变量(示例中的 NAMESPACE ),或改为传递文本值。
本节末尾的命令示例使用命名空间路径
/blob-target-1
的文本值。如果要在客户端计算机上使用自定义本地路径,请将值
/mnt
更改为所需的路径。
下面是填充的客户端装载命令的示例:
mount -o hard,proto=tcp,mountproto=tcp,retry=30 $(X=(10.7.0.{1..3});echo ${X[$(($(hostname|cksum|cut -f 1 -d ' ')%3))]}):/blob-target-1 /hpc-cache/blob1
轮循机制函数示例
此代码示例使用客户端 IP 地址作为随机元素,将客户端分发到所有 HPC 缓存的可用 IP 地址。
function mount_round_robin() {
# to ensure the clients are spread out somewhat evenly the default
# mount point is based on this client's IP octet4 % number of HPC cache mount IPs.
declare -a MOUNT_IPS="($(echo ${NFS_IP_CSV} | sed "s/,/ /g"))"
HASH=$(hostname | cksum | cut -f 1 -d ' ')
DEFAULT_MOUNT_INDEX=$((${HASH} % ${#MOUNT_IPS[@]}))
ROUND_ROBIN_IP=${MOUNT_IPS[${DEFAULT_MOUNT_INDEX}]}
DEFAULT_MOUNT_POINT="${BASE_DIR}/default"
# no need to write again if it is already there
if ! grep --quiet "${DEFAULT_MOUNT_POINT}" /etc/fstab; then
echo "${ROUND_ROBIN_IP}:${NFS_PATH} ${DEFAULT_MOUNT_POINT} nfs hard,proto=tcp,mountproto=tcp,retry=30 0 0" >> /etc/fstab
mkdir -p "${DEFAULT_MOUNT_POINT}"
chown nfsnobody:nfsnobody "${DEFAULT_MOUNT_POINT}"
fi
if ! grep -qs "${DEFAULT_MOUNT_POINT} " /proc/mounts; then
retrycmd_if_failure 12 20 mount "${DEFAULT_MOUNT_POINT}" || exit 1
fi
}
使用 DNS 负载均衡
本部分介绍配置 DNS 系统以将客户端连接分发到 Azure HPC 缓存上所有装入点的基础知识。 此方法不考虑每个客户端生成的流量量,但它确实确保客户端均匀分布在所有缓存接口上,而不是只使用一两个。
本文档不包括在 Azure 环境中为客户端设置和管理 DNS 服务器的说明。
不需要 DNS 才能使用 NFS 协议和 IP 地址装载客户端。 如果要使用域名而不是 IP 地址来访问硬件 NAS 系统,或者工作流包含某些高级协议设置,则需要 DNS。
用于将地址分发到客户端的 DNS 系统不需要由 HPC 缓存访问。 在某些情况下,你可能想要为缓存本身使用自定义 DNS 系统,但配置该系统比设置此类客户端轮循机制系统要复杂得多。 如果考虑 将 HPC 缓存的 DNS 服务器更改为 自定义系统,则必须咨询 Azure 支持。
为缓存挂载点配置轮流分配
循环 DNS (RRDNS) 系统将自动在多个地址之间路由客户端请求。
若要设置此系统,需要自定义 DNS 服务器的配置文件,以便在将请求装载到 HPC 缓存的主域地址时,它会在所有 HPC 缓存系统的装入点之间分配流量。 客户端使用其域名作为服务器参数装载 HPC 缓存,并自动路由到下一个装载 IP。
配置 RRDNS 有两个主要步骤:
修改 DNS 服务器
named.conf
的文件,为 HPC 缓存的查询设置循环顺序。 此选项会导致服务器循环使用所有可用 IP 值。 添加如下语句:options { rrset-order { class IN A name "hpccache.contoso.com" order cyclic; }; };
为每个可用 IP 地址配置 A 记录和指针 (PTR) 记录,如下例所示。
这些
nsupdate
命令提供了使用域名 hpccache.contoso.com 和三个装载地址(10.0.0.10、10.0.0.11 和 10.0.0.12)为 HPC 缓存正确配置 DNS 的示例:update add hpccache.contoso.com. 86400 A 10.0.0.10 update add hpccache.contoso.com. 86400 A 10.0.0.11 update add hpccache.contoso.com. 86400 A 10.0.0.12 update add client-IP-10.contoso.com. 86400 A 10.0.0.10 update add client-IP-11.contoso.com. 86400 A 10.0.0.11 update add client-IP-12.contoso.com. 86400 A 10.0.0.12 update add 10.0.0.10.in-addr.arpa. 86400 PTR client-IP-10.contoso.com update add 11.0.0.10.in-addr.arpa. 86400 PTR client-IP-11.contoso.com update add 12.0.0.10.in-addr.arpa. 86400 PTR client-IP-12.contoso.com
这些命令为每个 HPC 缓存的装载地址创建 A 记录,并设置指针记录以支持适当的反向 DNS 检查。
下图显示了此配置的基本结构。
配置 RRDNS 系统后,请告知客户端计算机使用它来解析其装载命令中的 HPC 缓存地址。
后续步骤
- 若要将数据移到缓存的存储目标,请参阅填充新的 Azure Blob 存储。