邮件服务器-邮件系统-邮件技术论坛(BBS)

标题: [原创]MDaemon Server 冗余方案系列 - 实现基于SQLServer存储账号的MDaemon群集 [打印本页]

作者: goxia    时间: 2006-2-8 19:07
标题: [原创]MDaemon Server 冗余方案系列 - 实现基于SQLServer存储账号的MDaemon群集
原文出处:<a target=_blank href=http://forum.maytide.net/viewthread.php?tid=4491>http://forum.maytide.net/viewthread.php?tid=4491</a><br>
<b>MDaemon Server 冗余方案系列</b><br>
—— 实现基于SQLServer存储账号的MDaemon群集<br>
<br><b>·本章概述<br>
</b> MDaemon Server(以下简称 MDaemon) 的冗余方案有多种选择,本章将以微软公司出品的 SQL Server 2005 简体中文企业版(以下简称 SQL2005)作为 MDaemon 账户存储数据库,在微软群集(MSCS)上部署 SQL2005 虚拟服务器群集,从而实现 MDaemon 的故障自动转移,达到用户所要求的高可用性。<br>
<br>因为本章重点放在 MDaemon 群集的实现上,所以关于 MSCS 和 SQL2005 群集的部署请参考:<br>1.Windows Server 2003 群集的创建和配置 <br>
<A HREF="http://www.microsoft.com/china/technet/prodtechnol/windowsserver2003/technologies/clustering/confclus.mspx" TARGET=_blank>http://www.microsoft.com/china/technet/prodtechnol/windowsserver2003/technologies/clustering/confclus.mspx</A><br>
<br>2.部署SQL2005群集实战总结 <br>
<A HREF="http://goxia.maytide.net/p/sql2005_cluster.php" TARGET=_blank>http://goxia.maytide.net/p/sql2005_cluster.php</A><br>本次实验所使用的 MDaemon 版本是 v7.23 英文版,建议大家不论测试还是实际生产环境最好都使用英文版以避免不必要的错误故障,如果情况允许最好操作系统也选择英文版,因为在实际情况中发现英文版的 MDaemon 与中文系统存在兼容性会导致菜单显示不完整。<br>
<br><b>·测试环境</b> <br>宿主:<br>硬件配置:PIV2.4G / 1.5G-DDR400 / 80G-7200pm / 8139C-NIC<br>操作系统:Windows XP Pro With SP2 ENU<br>虚拟平台:VMware GSX 3.2.1<br>----------------------------------------------------------------------------------------------------------------<br>NodeA:<br>硬件配置:PIV2.4G / 512M / 10G+0.5G(Qdisk)+4G(Sdisk) / vlance-NIC+vmxnet-NIC<br>操作系统:Windows Server 2003 EE With SP1 CHS<br>网络信息:vlance-NIC:10M 全速半双工 / Heartbeat / IP192.168.236.250<br>vmxnet-NIC:1000M 全速全双工 / Public / IP192.168.199.250<br>承载信息:DC+DNS+IIS+SQL2005+MSCS<br>----------------------------------------------------------------------------------------------------------------<br>NodeB:<br>硬件配置:PIV2.4G / 512M / 10G+0.5G(Qdisk)+4G(Sdisk) / vlance-NIC+vmxnet-NIC<br>操作系统:Windows Server 2003 EE With SP1 CHS<br>网络信息:vlance-NIC:10M 全速半双工 / Heartbeat / IP192.168.236.251<br>vmxnet-NIC:1000M 全速全双工 / Public / IP192.168.199.251<br>承载信息:DC+DNS+IIS+SQL2005+MSCS<br>----------------------------------------------------------------------------------------------------------------<br>MSCS:<br>MSCS:IP192.168.199.200 / HostName:CLUSTER<br>SQL2005 VirtualHost:IP192.168.199.201 /HostName:SQL2005<br>
<br><b>·理论概念 & 最终目标<br>
</b> 使用 SQL2005 作为 MDaemon 账户存储数据库并基于群集模式,以保障 MDaemon 任何一个节点服务器出现故障后仍然能够提供域和帐户的验证及管理。<br>
<br>使用资源磁盘(以下简称Sdisk)来存储 MDaemon 的用户数据,以保障 MDaemon 任何一个节点服务器出现故障后,用户在通过验证后登录到 MDaemon 上取得的邮件与数据一致。<br>
<br>最后通过 MSCS 的故障自动转移,实现 MDaemon 的冗余。<br>
<br>为此,在 SQL2005 中创建一个用来保存 MDaemon 域和帐户信息的数据库,命名为 MDaemonUsers。然后将 MDaemon 账户存储方式配置为 ODBC 方式,并创建与 SQL2005 中 MDaemonUsers 数据库的连接,导入账户数据库查询。修改 MDaemon 默认账户模板的存储路径,在群集管理器中将 MDaemon 配置为群集中的一个“通用服务”资源。<br>
<br><b>·实施部署<br>
</b> 首先在获得活动资源的节点服务器上安装 MDaemon ,请记录下安装时管理员的名称和密码,完成 MDaemon 的安装后,强烈建议重新启动一次系统,确保 MDaemon 服务正常运转。之后进行以下的操作:<br>1、打开数据库管理器,创建一个新的数据库,名称为:MDaemonUsers。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/1.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>2、打开服务管理器,找到 MDaemon 服务,将启动类型改为“手动”。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/2.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>3、因为 MDaemon 当前只绑定在 192.168.199.251 上,群集 IP 不在绑定范围,会导致实际中出现访问故障。为此,打开 MDaemon 管理器并点击导航栏上的“Setup”,选择“Primary domain...”。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/3.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>4、进入“Primary Domain”后,在“Domain”页下将“Primary domain IP”改为“127.0.1.1”,确定后退出。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/4.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>5、为了让 MDaemon 的用户数据都保存在 Sdisk 下,需要修改默认新用户配置。为此,点击导航栏上的“Accounts”,选择“New account defaults...”。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/5.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>6、在“Account Defaults”页下,将“Mail directory”改为“S:\MDaemon Users\$DOMAIN$\$MAILBOX$\”,根据需要再配置其他项,完成后确定退出。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/6.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>7、因为在 MDaemon 安装时创建了一个管理员,为了保证每个节点中 MDaemon 管理员的一致性,则需要将管理员的数据也迁移到 Sdisk 中。为此,点击导航栏上的“Accounts”,选择“Account manager...”。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/7.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>8、选中账号“Admin”,进入“Account Editor”并切换到“Mailbox”页下,将“Message directory”改为“S:\MDaemon USERS\maytide.net\admin\”,完成后确定并退出。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/8.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>9、现在进行 MDaemon 账户存储方式的修改,将其改为 ODBC 中的 SQL Server 存储方式。为此,点击导航栏上的“Accounts”,选择“Account database...”。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/9.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>10、进入“Account Database Options”后,将“Account database”页下的选择改为“Store account data in a ODBC accessible store”,并点击“Configure”开始配置。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/10.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>11、进入配置页面后,点击“New DSN”,开始创建数据源。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/11.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>12、在“选择数据源”配置中,切换到“机器数据源”,并选择“新建”。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/12.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>13、在“创建新数据源”配置中,选择数据源类型为“系统数据源(只用于当前机器)”,并点击“下一步”。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/13.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>14、选择“SQL Server”作为数据源的驱动程序,并点击“下一步”。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/14.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>15、至此,就完成了以 SQL Server 为连接类型的系统数据源的创建,点击“完成”。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/15.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>16、此时系统自动弹出连接 SQL Server 的 ODBC 数据源创建向导,根据提示填写信息。为了方便管理,我将此 ODBC 数据源命名为“MDaemonUsers”,注意服务器这项应当选择主机名为“SQL2005”的服务器,因为“SQL2005”是本次实验中的 SQL2005群集虚拟主机。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/16.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>17、验证与连接配置中,我是按照默认配置的。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/17.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>18、将默认的数据库改为 SQL2005 中名为“MDaemonUsers”的数据库,因为此数据库将用来保存 MDaemon 的域和用户信息。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/18.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>19、其他选项为默认,并点击“完成”。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/19.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>20、弹出完成后的提示,这里可以选择“测试数据源”来进行连接测试。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/20.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>21、至此就在本节点服务器上建立了一个以 SQL Server 连接,名为“MDaemonUsers”的 ODBC 机器数据源。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/21.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>22、完成 ODBC 的配置后,回到 MDaemon 的“ODBC Selector Wizard”下,可以看到“MDaemonUsers”已经在数据源列表中,选中它后点击“下一步”。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/22.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>23、因为 ODBC 中的“MDaemonUsers”数据源所对应的 SQL2005 下的数据库“MDaemonUsers”中没有 MDaemon 所需要的表,所以我们运行 MDaemon 自带的脚本来创建它。为此,点击“Run a script to created the necessary tables...”。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/23.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>24、向导将自动定位到 SQL scritps 所在的位置,此处有多个脚本选择,因为我们使用的是 SQL Server ,所以选择名为“AccountsDB-SQLServer.sql”的脚本文件,并选择“打开”。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/24.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>25、此时会弹出“Tables created successfully!”的提示,如果失败请重新检查之前的步骤确保数据源创建成功。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/25.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>26、回到“ODBC Selector Wizard”界面,我们会看到成功创建的两个表“domains”、“userlist”,点击“完成”。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/26.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>27、MDaemon 开始转换数据,并给出提示。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/27.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>好了,可以休息一下了。因为到这里就完成了 MDaemon 以 SQL Server 为账户存储方式的建立。感觉是不是够累得,其实真的操作的时候是非常简单的要不了多长时间,基本上一路选择下来是非常的顺利。不过说真的我是够累得,写到这里已经是17:42分了,下班时间过去12分钟了,决定继续写完。<br>
<br>基本上工作已经完成了一大半了,下面请关闭这台节点,切换到其他节点进行 MDaemon 的安装后配置,关于第二台节点上 MDaemon 的安装配置就不再重复了。<br><br>
<font color="#ff6000">不过需要提醒注意的是:</font><br>
第二台节点上 MDaemon 安装时的管理员名称及密码都应该与第一台上的相同,在完成安装的最后有一个选项“Start MDaemon”,最好不要勾选,因为下来我们需要手工配置这台节点上的 MDaemon 使用数据库存储账户。<br>
<br>为此,打开系统管理工具程序组中的“数据源(ODBC)”参考第一个节点的数据源安装步骤为第二个节点创建与之前相同的数据源。之后,用文字编辑器打开 MDaemon 所在安装下 App 目录中的“MDaemon.ini”文件,加入以下配置:<br>
代码<br>
[Advanced]<br>
UserDllType=ODBC<br>
[USER_ODBC]<br>
DSN=MDaemonUsers<br>
User=<br>
Password=<br>
<font color="#c00000">注:DSN 是配置 MDaemon 使用服务器 ODBC 中哪个数据库源,User 和 Password 是指定数据源的访问账号和密码,同样如果 mdaemon.ini 配置文件中没有 [USER_ODBC] 配置字段则添加。</font><br>
<br>将本节点上的 MDaemon 服务也改为“手动”方式(参考2)。运行 MDaemon ,修改默认的绑定IP(参考3~4),修改默认账号路径与第一个节点相同(参考5~6)。进入账号管理你能看到此节点上的管理员数据所在位置是在 Sdisk 上,因为第一次启动 MDaemon 前,已经手工为其配置了数据库存储账户信息,所以当第一次启动后 MDaemon 是直接从数据库中获取账户的信息。现在可以测试一下邮局是否工作正常!访问<A HREF="http://ip_address:3000/" TARGET=_blank>http://IP_Address:3000</A>登录 WorldClient 操作测试。<br>
<br>28、完成以上步骤及测试后, MDaemon 的冗余部署的准备工作算是完成了,为了实现故障自动转移,还需要将 MDaemon 配置到 MSCS 中,在开始配置之前强烈建议关闭 MDaemon 服务避免不必要的错误,因为当配置完 MDaemon 后,其监视及控制权已经转交给了 MSCS 。接下来开始为 MDaemon 配置群集,为此在当前节点上打开“群集管理器”,在 SQL Server 所在的群集组“组0”中新建一个“资源”。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/28.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>29、在“新建资源”中填写相关信息,这里我为资源命名为“MDaemon Server”,因为 MDaemon 本身并不支持群集,而它的群集实现纯粹是靠 DIY 出来的,所以为了能够使 MDaemon 被 MSCS 所支持,在“资源类型”中选择“通用服务”,完成后点击“下一步”。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/29.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>30、在“可能的所有者”中将“可用节点”中的服务器添加到“可能的所有者中”,完成后点击“下一步”。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/30.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>31、在“依存”关系中,请将 MDaemon 群集依赖的资源添加到“资源依存”中,完成后点击“下一步”。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/31.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>32、在“一般服务参数”中,“服务名”为“MDaemon”;“启动参数”为“C:\MDaemon\APP\MDAEMON.EXE”,完成后点击“下一步”。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/32.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>33、完成资源添加后,“MDaemon Server”便出现在“组0”中,将其联机后,系统会自动启动 MDaemon。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/33.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br>至此,便实现了基于 SQL Server 存储账号的 MDaemon 群集,下来我们可以创建一个邮件账号进行 webmail 方式的登录来检测 MDaemon 与 SQL Server 群集连接是否正常。<br>
<IMG onmouseover="javascript:if(this.width>520)this.width=520;" src="http://goxia.maytide.net/up/MDaemonCluster/34.JPG" onload="javascript:if(this.width>520)this.width=520;" align=absmiddle border=0><br>
<br><b>·结尾<br>
</b> MDaemon 的群集创建结束了,下来我们可以开启第一台节点进行灾难模拟,以检验此次部署实施的 MDaemon 冗余方案的效果。经过测试,当一台节点停止后,另一台节点迅速接管群集资源,并启动 MDaemon 服务。小注:当只剩下一台节点时,通过 MDaemon 自身来停止服务是无效的,经过测试关闭 MDaemon 服务后,系统会自动再次开启 MDaemon 服务,如果在此环境下作 MDaemon 的停机维护,需要通过群集管理器将 MDaemon Server 脱机。<br>
<br>关于 MDaemon 的群集打算做成一个系列,而这个系列的名字就以需求为根本,名为《MDaemon Server 冗余方案系列》,在今后还将推出多种 MDaemon 的冗余方式供大家参考选择。不过,个人认为此次群集的实施方式所达到的冗余,可能只有在大环境中才能得到真正的应用。如果能够脱离微软群集(MSCS)来实现 MDaemon 的冗余就会有很大的应用市场。<br>
<br>欢迎大家与我共同探讨关于 MDaemon 的冗余实现技术,同时希望大家能参与到讨论中。<br>
<br>
<br>
作者:gOxiA<br>
日期:2006年2月8日 18:55<br>
Blog:<A HREF="http://goxia.maytide.net/" TARGET=_blank>http://goxia.maytide.net</A><br>
社区:<A HREF="http://forum.maytide.net/" TARGET=_blank>http://forum.maytide.net</A> (五月时节)<br>
参与本文讨论:<A HREF="http://forum.maytide.net/viewthread.php?tid=4491" TARGET=_blank>http://forum.maytide.net/viewthread.php?tid=4491</A><br><A HREF="../Announce/Announce.asp?BoardID=34&ID=135513" TARGET=_blank>../Announce/Announce.asp?BoardID=34&ID=135513</A><br>
<br>
<br>
---------- 未经授权,不得转载 ----------
作者: asionliang    时间: 2006-2-8 19:12
标题: re:谢谢分享~~ 解决了MDer的难道...
谢谢分享~~ <br>
解决了MDer的难道<br>
<font color="red">固顶三周,希望大家相互交流~</font>
作者: goxia    时间: 2006-2-8 19:16
标题: re:也不给加个精,然后加个积分,再给些威望。...
也不给加个精,然后加个积分,再给些威望。<br>
写这个确实够累的。
作者: asionliang    时间: 2006-2-9 09:13
标题: re:1, Mircosoft SQL SER...
1, Mircosoft SQL SERVER 2000 能不能通过?<br>
<br>
对于N个不同公网IP的节点,域名MX值应该都不相同~ 加上GOXIA的群集,保证之间的账户与信件同步。
作者: goxia    时间: 2006-2-9 09:31
标题: re:SQL Server 2000 没有问题...
SQL Server 2000 没有问题<br>
<br>
对于不同地点的服务器,使用SQL2005的复制功能可以实现账户的同步,但是信件确有问题,我正在考虑不同地点的环境方案。
作者: U-Mail    时间: 2006-2-11 23:58
标题: re:有一个简单的办法。将储存提出来,...
有一个简单的办法。<br>
<br>
将储存提出来,用RAS.<br>
认证也提出来,用专门的数据库服务器。<br>
<br>
然后邮件服务器群用一个负载平衡器F5做负载平衡,结构简单可靠。<br>
<br>





欢迎光临 邮件服务器-邮件系统-邮件技术论坛(BBS) (http://bbs.5dmail.net/) Powered by Discuz! X3.2