前不久, 论坛用户yufuxi联系到我说有个项目, 是要扩建一个
Exchange的邮件系统, 将单一的all-in-one的邮件
服务器扩展到3台Ex2k7服务器架构,其中一台做前端hub/cas,两台在后端做CCR灾备冗余集群.
下面是项目报告书:
===========================
项目需求单位: 上海理工大学复兴路校区
项目名称: Exchange群集连续复制(CCR)的部署
实施方: Exchange中文站
实施人员: Geminibobo, Flowerwaiter
---------------------------------------
第一天, 我们是下班后直接过去的, 到达学校是7点钟的样子, 开始我们以为校方已经搭建好了服务器, 谁知HP 380的服务器装WIN2008系统是不带网卡驱动的, 四张网卡一张也没有认出来, 然后就在满世界找网卡驱动, 一直到晚上9点钟. 不过我跟bobo也没闲着, 这么点时间完成了原先单台all-in-one服务器的整机备份.
这会儿项目进度有点慢, 我们面临两个选择, 一是继续寻找驱动, 好处是, 因为之前的服务器是
Exchange2007基于win2k8标准版的部署, 如果目标系统环境相同, 按照微软的一篇KB就可以无痛将当前服务器迁移到前端的HUB/CAS上面; 坏处不言自明, 不知道要找到什么时候...
白皮书1: 如何将 Exchange 2007 邮箱服务器移动到新硬件并保留相同的服务器名称 (
http://technet.microsoft.com/zh-cn/library/bb332341(EXCHG.80).aspx)
第二个选择, 安装Win2K8 R2操作系统, 因为不知道为啥, 在这个操作系统下, HP 380的服务器会加载各种驱动, 这样我们完全不用担心系统层面的问题, 只不过Exchange 2007SP2之前的版本是不支持这个操作系统的, 这样我们就必须赶紧下载Exchange 2007最新的SP3系统. 这样的好处是系统和程序可以很快的搭建起来, 但是和之前的系统有差异, 只有通过常规的邮箱迁移来暂时将邮件转移到前端.
跟外包公司商量后, 由于我们还有两天时间, 并且第二种方法相对安全可控一些, 同时我们可以重新对服务器进行命名, 所以我们下载了Exchange 2007 SP3的邮件系统. 搭好前端, 并在上面部署了赛门铁克防病毒程序后, 开始做数据迁移, 此时已经过了子时, bobo回家, 我跟校方的IT在附近找了个宾馆住下.
-----------------------------------------------------
第二天, 起床后, 发现邮箱迁移有20几个没有成功, 我检查了目标分区, 哎呀我粗糙了一下, 把EDB建在C盘了, 在console中"move data path'将文件位置改到D盘, 然后将剩余的邮箱迁移过去. 这时候已经可以邮箱测试了, 内网收发没问题, 但发现外网发信进来一直不成功, 经查, 原来是在默认接收连接器上, 没有将匿名用户的访问权限加上.
set-receiveconnector "DEFAULT Exchange" permissiongroups anonymous
然后是将原先单台Exchange服务器上的证书导出(注意: 证书的导入导出只能用EMS命令行完成), 实际生产中之需要第三方机构颁发的证书.
白皮书2:
Export-ExchangeCertificate(
http://technet.microsoft.com/en-us/library/aa996305(EXCHG.80).aspx)
将导出的证书(pfx文件)复制到目标HUB/CAS服务器上, 然后再将这张证书导入.
白皮书3:
Import-ExchangeCertificate(
http://technet.microsoft.com/en-us/library/bb124424(EXCHG.80).aspx)
注意这里证书导入导出的命令都有这样一个参数-Password:(Get-Credential).password, 前后两次输入的账户密码必须一致(这个帐户密码可以自己设置, 完全只为了加密导出的PFX文件).
一切迁移完成之后, 原先的
邮件服务器就理所当然地被移除了, 同时重装系统, 一样为Win2k8 R2 Standard.
实际部署过程中还碰到了一个问题,就是卸载原来的Exchange服务器后,客户端
outlook每次打开都会提示一个证书错误, 这是因为autodiscover的地址还没有指到证书所在的服务器, 运行两个命令即可解决此问题.
Set-WebServicesVirtualDirectory -Identity “CASServer\EWS (Default Web Site)” -InternalURL https://mail.shudnow.net/EWS/Exchange.asmx -BasicAuthentication:$true
Set-OABVirtualDirectory -Identity “CASServer\OAB (Default Web Site)” -InternalURL https://internalURL/OAB相关资料:
http://www.shudnow.net/2007/08/10/outlook-2007-certificate-error/接下来就是搭建windowsFailover集群为CCR打基础, 这里有个两个小插曲, 一是一开始装的时候没有注意到, Win2k8 R2标准版是不支持集群的, 于是后端系统重装了win2k8 R2的企业版; 另一个是在分区的时候两台的分区不一致, 导致搭建集群时validation一直过不去.
整个搭建过程大致按照以下三篇文章来的:
http://www.msexchange.org/tutorials/Installing-Configuring-Testing-Exchange-2007-Cluster-Continuous-Replication-Based-Mailbox-Server-Part1.htmlhttp://www.msexchange.org/tutorials/Installing-Configuring-Testing-Exchange-2007-Cluster-Continuous-Replication-Based-Mailbox-Server-Part2.htmlhttp://www.msexchange.org/tutorials/Installing-Configuring-Testing-Exchange-2007-Cluster-Continuous-Replication-Based-Mailbox-Server-Part3.html总的来说流程还算顺利, 只是到安装Exchange的时候, CMS一直搭建失败, 后来bobo在删掉注册表的watermark后, 大胆地使用命令行搭建CMS, 并终获成功!
上面所提的watermark的位置: HKLM\Software\Microsoft\Exchange\v8.0\MailboxRole 下面的watermark键值,
删除后, 执行以下命令安装exchange邮箱服务器的主节点
Setup.com /roles:Mailbox /newcms /CMSname:<NameofClusteredMailboxServer> /CMSIPAddress:<ClusteredMailboxServerIPAddress>
注意, 最后那个CMSIPAddress是不同于当前任何一台服务器的一个虚拟IP地址, 比如说后端两台服务器是192.168.1.1和192.168.1.2, 集群地址是192.168.1.3, 那CMS的ip地址就不能是这三个地址, 而需要是同一网段下的另一个地址(这个地址也不能被别的机器占用.)
搭好主从节点后, 就开始将前端HUB/CAS上的邮箱往后端迁移了.
----------------------------------------------------------
第三天, 昨天晚上bobo粗糙了一下, 给校方一个脚本说可以批量迁移,结果不可行, 200多个邮箱只迁移了第一个. 不得已, 校方的IT在图形界面下手动筛选手动牵, 白天花了7个小时迁移邮箱, 然后发现个别邮箱没有迁移成功, 大概10%左右. 我就又屁颠屁颠跑过去support了, 一开始我还蛮煞有介事的查错误代码, 然后发现一个一个迁移这些邮箱就没有问题, 估计是可能一个进程下承载多个线程就会有各种奇怪的报错. 一个一个迁移全部成功!
----------------------------------------------------------
本来以为项目结束了, 第四天(礼拜一)早晨手机铃声大作, 说是outlook2003的用户发邮件报错, 由于bobo可以上外网就远程troubleshoot了一下, 估计是Information Store服务的问题, 晚上又过去支持了一下, 当时的问题是, 邮件收发都没有问题, 但是Outlook2003的用户会收到
警告,
考虑到outlook2003用户是使用公共文件夹来访问脱机地址簿的, 那么就需要在后端CCR上面创建公共文件夹存储来生成OAB.
白皮书4:
如何创建脱机通讯簿(
http://technet.microsoft.com/zh-cn/library/bb124270(EXCHG.80).aspx)
由于公共文件夹复制需要时间, 到第二天这个错误就彻底消除了.
部署前后示意简图.