1 简介
因为工作单位需要面向学生提供免费电子邮件服务。而经过筛选,选择了Lotus 公司的Domino服务器,因为它在一台服务器上集成了目录服务、邮件服务、网站、数据库系统,还支持脚本与Java开发。
我们首先设计了几个网页导航,分别指向创建邮箱、登录系统、使用帮助等。在一台服务器上安装并运行Domino,为全校学生提供免费服务。但是,几个月时间,大约有6000人登入了系统,其中本校2000人,其它学校4000人,这时服务器已经不堪重荷,已经无法对用户进行正常响应。因此,我们决定实现一套集群系统,可以往系统中任意追加服务器来支持不断加大的需求。
2 系统概念
Domino 邮件系统的核心包括三部分,一是收藏全部用户的目录,二是支持 Web、 SMTP 、 POP3、 IMAP的邮件服务,三是各个用户的邮件数据库(NSF)。下面是系统架构图:

3 关键技术
1)集群模型:我们的集群模型要求支持邮件数据库的集群、Web访问集群、同时支持故障恢复机制。
2)数据库集群,由于各个邮件数据库都在不同的服务器上,所以,专门设计了一个集群用户表进行管理:
| 用户名称 | 口令 | 磁盘限额 | 所属服务器 | 邮箱数据库路径 |
| wxz | aaa | 64 | www1 | Mail/wxz.nsf |
| bbb | bbb | 10 | www2 | Mail/bbb.nsf |
此用户表需要在每个集群服务器上存放,通过数据库同步保证所有服务器数据集相同。
集群服务器管理,它也需要一张分布于各个服务器上的表:
| 服务器名称 | IP | 总磁盘容量 | 最大用户数量 | 最大可用磁盘容量 | 最小空闲磁盘容量 | 任务负载率(%) |
| www1 | 202.200.28.39 | 80000 | 10000 | 70000 | 10000 | 60 |
| www2 | 202.200.28.40 | 60000 | 6000 | 50000 | 10000 | 40 |
这里的限额只要超出,那么服务器就将拒绝接受新用户。任务负载率是指不同服务器的硬件性能比率,全部相加应该为100,比如上面的这张表显示的60% 和40%表示两台服务器的硬件处理速度有差别,所以,前一台服务器应当承担60%的用户负荷,而后一台应当承担40%的用户负荷。
任何一台服务器如果修改了这张表,也将在所有服务器上强制进行复制同步。由于Domino的数据库在复制支持上是非常强大的,因此,我们的所有数据同步算法都与复制有关。
3)WEB用户注册流程(可在任意一台服务器上完成):
输入帐号及口令,进行合法、唯一校验
根据服务器的限额,计算出此用户应当归属的服务器
是本服务器 是其它服务器
URL重定向到目标服务器
创建用户、设置限额
将注册信息追加到集群用户表,对用户显示注册成功
集群用户表与其它所有服务器进行数据库复制,进行数据同步
注册成功
4)WEB用户登录流程(可在任意一台服务器上完成):
输入帐号及口令,进行合法、唯一校验
根据集群用户表,计算出此用户应当归属的服务器
是本服务器 是其它服务器
URL重定向到目标服务器
打开用户邮件数据库
登录成功
5)WEB用户删除流程(可在任意一台服务器上完成):
输入帐号及口令,进行合法、唯一校验
根据集群用户表,找到用户记录
从集群用户表中删除用户
集群用户表与其它所有服务器进行数据库复制,进行数据同步
从用户所在服务器删除邮件数据库
删除成功
6)集群服务器损坏恢复流程(可在任意一台服务器上完成):
集群用户表与其它所有服务器进行数据库复制,进行数据同步,将丢失的集群数据表还原
从还原的集群用户表中找到所有属于本服务器的用户,进行帐号、口令复原以及邮件数据库重建
恢复成功
需要指出的是,系统恢复的只是用户的邮件数据库、口令等,没有考虑损坏的邮件数据库,实际上邮件已经全部丢失。
4 其它集群技术的讨论
1)邮件服务集群,邮件服务的集群设计到两个方面,首先是在DNS中设置邮件系统的MX记录例如:
| 主机 | 域 | 格式 | 优先级 |
| Mail1 | corp.com | MX | 10 |
| Mail2 | corp.com | MX | 11 |
其次Domino 有一个特点就是可将发错服务器的邮件再次发送到正确的服务器上,因此接收邮件时无需集群。
2)目录服务集群,目录服务本身就是最好的集群系统,只要配置好就可以了。
5 后记
此系统是在条件不容许的情况下,利用集群技术充分利用一些普通设备以满足学生需要。后来发展为三台低档服务器,用户数量接近两万,经过多年使用,非常稳定可靠。
本文记录的日期为1996年8月