第 9章 . Linux 虚拟服务器总览

红帽企业 Linux LVS 群集使用一个叫做活跃路由器(active router)的 Linux 机器来把来自互联网的请求发送给一组服务器。要做到它,LVS 群集包含两类基本的机器 — LVS 路由器(一个是活跃的,一个是备份的)和一组提供关键服务的真正服务器。

活跃路由器在群集中扮演两个角色:

备份路由器的工作是监视活跃路由器,并在失效事件发生时接替它的职责。

9.1. 基本的 LVS 配置

图 9-1显示了一个简单的包括两层的 LVS 群集。第一层上是两个 LVS 路由器 — 一个是活跃的,一个是备份的。每个 LVS 路由器有两个网络接口,一个是到互联网的接口,一个是到专用网络的接口。在这个例子中,活跃的路由器使用网络地址转换(Network Address Translation)或 NAT 来把互联网上的交通重导向到第二层上的一系列真正服务器上,这些真正服务器提供必要的服务。因此,这个例子中的真正服务器连接在一个专用网络上,并通过活跃 LVS 路由器把所有公共交通传递回去。对于外界而言,服务器群集似乎是一个实体。

图 9-1. 基本的 LVS 配置

到达 LVS 群集的服务请求使用虚拟 IP(virtual IP)或 VIP 的地址。这是网站管理员将其关联到完整域名的可公开选路的地址,如 www.example.com。它被分派给一个或多个虚拟服务器(virtual server[1]。注意,VIP 地址在失效转移时会从一个 LVS 路由器上迁移到另一个 LVS 路由器上,从而保持该 IP 地址,又称为浮动 IP 地址(floating IP addresses)

VIP 地址可以是连接 LVS 路由器和互联网的同一设备的别名。例如,如果 eth0 被连接到互联网上,那么多个虚拟服务器可以是 eth0:1 的别名。此外,每个虚拟服务器可以按照服务被关联到一个单独的设备上。例如,HTTP 交通可以被 eth0:1 处理,FTP 交通可以被 eth0:2 处理。

在一时内只能有一个活跃的 LVS 路由器。活跃路由器的角色是把来自虚拟 IP 地址的服务请求重导向到真正服务器。这种重导向是基于八种负载均衡算式中的一种。这些算式在第 9.3 节中被进一步描述。

活跃的路由器还通过简单的发送/期待脚本(send/expect scripts)来动态地监视真正服务器上的特定服务的总体健康状况。要帮助检测需要动态数据的服务的健康状况,如 HTTPS 或 SSL,管理员还可以调用外部的可执行文件。如果某个真正服务器上的服务出错了,活跃路由器在那个服务器恢复正常前会停止向它发送作业。

备份路由器扮演备用系统的角色。LVS 路由器定期通过主外部公共接口来交换心跳消息,在失效转移的情况下,则通过专有接口来交换。如果备份节点在期待的间隔内没有接到心跳消息,它就会发起失效转移行动,并接替活跃路由器的角色。在失效转移过程中,备份路由器使用一种叫做 ARP spoofing(ARP假冒) — 备份 LVS 路由器宣称自己是发送给失效节点的 IP 分组的目的地 — 的技术来接管由失效的路由器提供服务的 VIP 地址。当失效的节点恢复为活跃服务,备份节点就会回到它原来的热备份角色。

用在图 9-1的这种简单的两层配置对提供改变不频繁的数据 — 如静态网页 — 的群集来说是最佳选择,因为真正服务器之间并不自动同步数据。

9.1.1. 真正服务器间的日期复制和数据共享

因为 LVS 群集中没有内建的部件来在真正服务器间共享同样的数据,管理员有两种基本的选择:

  • 在真正服务器之间同步数据

  • 为使用共享数据给拓扑添加第三层

对于那些不允许大量用户上传或改变真正服务器上的数据的服务器来说,第一种选择是优选的。如果群集允许大量的用户修改数据,如电子商务网站,添加一个第三层是较佳的选择。

9.1.1.1. 配置真正服务器来同步数据

管理员可以用来在真正服务器间同步数据的方法有很多种。例如,你可以使用 shell 脚本,因此如果网页工程师更新了一页,该页会被同时邮寄给所有的服务器。此外,群集管理员还可以使用 rsync 之类的程序来定期在所有节点间复制改变了的数据。

然而,如果用户频繁地在群集中上传文件或进行数据库事务,这类数据同步不能优化功能。对于载量较高的群集而言,理想的解决方案是三层拓扑(three-tiered topology)。

[1]

虚拟服务器是监听指定虚拟 IP 的服务。关于使用 Piranha 配置工具来配置虚拟服务器的详情,请参阅第 12.6 节