Exchange 2013/2016 在创建用户邮箱,开启用户邮箱或者移动用户邮箱这三个场景时,如果没有指定目标邮箱数据库,系统会自动随机分配邮箱到可用的邮箱数据库。这个过程由Mailbox Resources Management Agent cmdlet extension agent 来完成,对于用户来说是透明的。 那么问题来了, 系统会平均分配吗?可以定制邮箱数据库范围吗?可以根据系统负载配置权重吗?可以针对网络条件配置优先级吗?等等.... 对,技术人就是应该破除ignorance, 不断打破沙锅问到底.
我们简单看一下Exchange 是怎样完成这个任务的:
1. 当创建用户邮箱,开启用户邮箱或者移动用户邮箱这三个场景发生时, Exchange 会获取到Exchange organization的邮箱数据库列表(可简单理解为get-mailboxdatabase);
2. 邮箱数据库上有excludefromProvision属性的,这些数据库会从列表中移除:
3. 在管理scope之外的邮箱数据库也会从列表中移除; 这个管理范围我们之后可以讨论,Exchange 设计了非常完善的管理分级和角色级别的权限管理机制,已经非常完善了;
4. 在操作主机AD站点外的数据库会从列表中移除。这是为了优化之后用户登录邮箱的网络流量,系统自动认为管理在哪site操作,用户在哪site;
5. 从剩下的数据库列表中,Exchange 随机选择一个健康可用的完成任务;
机制分析:
从上面的过程可看出:
a. Exchange不做轮询/权重评估等负载均衡或者评估邮件服务器负载
b. 自动分布机制无法做系统集成的智能配置,可能出现某个数据库积累大量用户而其他数据库用户少的情况。虽然从结果的概率论来讲,应该是偏向平均分配的。但技术人员要在逻辑上就去保证是智能的;
注: 我们前面讲了,邮箱自动分配是Mailbox Resources Management Agent cmdlet extension agent 完成的,如果管理员不需要该功能而希望手动完成邮箱指配,那么可以禁用Mailbox Resources Management Agent cmdlet extension agent 。
那么如何在利用该功能便利性的同时赋予该功能一定的智能呢? 这是个好问题!
考虑到Mailbox Automatic distribution的工作机制,我们可以人工对这一过程做些干预,以实现智能化改造,减轻运维负担并提高效率. 比如:因为excludefromProvision/管理范围/site可以影响到邮箱数据库是否参与自动分配过程,我们就可以利用这些设置,来动态的优化邮箱分配过程。以利用excludefromProvision属性为例:
思路:
我们想要实现基本的平均分配因为服役的邮箱服务器硬件配置一致。所以同样的用户数量,相近或者一致的负载是我们想要的结果。那么我们可以设置一个理想的用户数量规划,比如有10台邮箱服务器,每台服务器运行10个主数据库(这里只讨论主活动数据库,不考虑DAG带来的数据库数量影响),每个服务器理想服务用户数量是1000,每个数据库服务100个用户。 那么我们可以制作一个脚本来定期统计数据库用户数量,超过100的就设置excludefromProvision,使它们不再接受新用户。而如果之前超过100用户的数据库因邮箱移除等使数量下降到了100以下,就移除excludefromProvision,让他们再次加入到自动分配过程中来。通过这种方式最终实现邮箱服务器/邮件数据库被平均使用的效果,实现了智能优化。
脚本参考如下:
Param(
[Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)]
[String]
$DistinguishedName
)
Process
{
[ADSI] $objDB = “GC://$($DistinguishedName -replace ‘/’,’\/’)”
if ( ($objDB.objectClass -ne $null) -and ($objDB.objectClass.Contains(“msExchPrivateMDB”)) )
{
$count = [Math]::Max(0,([Int] ($objDB.homeMDBBL.Count)) – 1)
}
if ($count -gt 7) {Set-mailboxDatabase $DistinguishedName -IsExcludedFromProvisioning $True}
else {Set-mailboxDatabase $DistinguishedName -IsExcludedFromProvisioning $false}
write-host "done!"
}
大家如果有问题欢迎留言。希望有机会可以深入解析开去。如果有更新我也会再写一篇文章丰富该Exchange功能便利广大使用者!大家也可以关注这个公众号获取动态更新的信息