Linux集群系统的实现(上) 篇是《基于linux的集群系统》的最后一篇。作者将向我们讲述一个Linux集群系统的具体实现过程。限于篇幅分为上、下两部分。 1. 设计目标 设计一个基于Linux的集群系统,它能够提供负载平衡的功能。系统能够不断监视集群中各台实际服务器的负载状况,并且将来自外部网的多种请求转发到内部网中的某一台实际服务器上执行。 具体来说,它必须拥有以下的功能: (1)服务转发。能接受来自外部网中的多种基于TCP/IP的服务请求如FTP 、TELNET、 HTTP等,并且将它们转发到当前负载最轻的机器上执行。 (2)动态负载平衡。平衡器能够监视内部网中的实际服务器的负载状况并且找到负载最轻的机器。 (3)连接持续性。来自外部网的同一客户的所有请求必须转发到内部网中的同一台实际服务器上进行处理。 2.环境设置 如图1-1所示,该集群系统由router、server 1、server 2、server 3以及 server n等机器组成。其中router作为内部网和外部网的接口,能够接收外部网的用户请求,并将此用户请求发送到server1到servern中的某台机器上(如server1),当server1处理完用户的请求以后,就将处理完的结果发送给router,然后再由router将请求回应返回给外部网的用户。文章中也将router这台机器称为负载平衡器,因为它承担了均衡负载的作用;将实际响应用户请求的server1等机器称为实际服务器。试验环境中外部网中的客户机器的IP地址为192.9.200.53,负载平衡器(router)有两个IP地址,一个是192.9.200.56,一个是10.1.1.1,负载平衡器上运行的操作系统内核为Linux 2.2.x。内部网中有n台实际服务器,它们的IP地址分别为10.1.1.2、10.1.1.3……..10.1.1.n,他们上面运行的操作系统可以是linux操作系统,也可以是Windows系列的操作系统,如Windows 98、Windows NT等等。它们都将10.1.1.1设为网关,并且都增加了通往192.9.200.0网络的路由。负载平衡的目的就是将客户发向平衡器的请求如:telnet、 ftp 、www等按照内部网机器当前负载的情况分发到各个实际服务器上。 图1-1 负载平衡系统环境设置图 3.构建过程 在构建过程这一小节中,首先介绍IP伪装技术的原理,然后介绍集群系统的建立过程。本集群系统的建立首先要建立IP伪装机制,然后再增加IP Portforwarding(IP端口转发)机制,然后设计一个应用程序,它能够根据集群中的机器的状态实现实时动态负载平衡。本集群系统中的负载平衡器上的Linux内核版本为2.2.x。 3.1 IP伪装技术 本集群系统主要采用了IP Masquerade(IP伪装)机制。该负载平衡系统采用了NAT(network address translation)机制。NAT机制主要用于内部私有网与外部网之间进行通讯。IP地址中的那些私有地址如10.0.0.0/255.0.0.0, 172.16.0.0/255.240.0.0 以及192.168.0.0/255.255.0.0等是无法直接与Internet上的机器通讯的,如果它们想与Internet上的机器通讯,需要采用网络地址翻译(Network Address Translation,NAT)机制。 NAT意味着将IP地址从一组映射到另外一组,如果这种映射关系是N-N的,则称之为静态网络地址翻译;如果映射是M-N(M>N)的,则叫做动态网络地址翻译;IP伪装机制实际上就是一种M-1的动态网络地址翻译,它能够将多个内部网中的IP地址映射到一个与Internet相连接的外部网IP地址上,这样这些无法直接与Internet上的机器通讯的具有内部网IP地址的机器就可以通过这台映射机器与外界进行通讯了。而网络地址端口翻译是对网络地址翻译的一种扩展,它将许多网络地址以及它们的TCP/UDP端口翻译为一个IP地址和TCP/UDP端口。本集群系统采用的就是网络地址端口翻译机制。 3.2 IP伪装机制的建立过程 (1) 编译核心使之能够支持IP伪装。 编译核心时要注意以下选项的选择。 * Prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL) [Y/n/?] - YES: though not required for IP MASQ, this option allows the kernel to create the MASQ modules and enable the option for port forwarding -- Non-MASQ options skipped -- * Enable loadable module support (CONFIG_MODULES) [Y/n/?] - YES: allows you to load kernel IP MASQ modules -- Non-MASQ options skipped -- * Networking support (CONFIG_NET) [Y/n/?] - YES: Enables the network subsystem -- Non-MASQ options skipped -- * Sysctl support (CONFIG_SYSCTL) [Y/n/?] - YES: Enables the ability to enable disable options such as forwarding, dynamic IPs, LooseUDP, etc. -- Non-MASQ options skipped -- * Packet socket (CONFIG_PACKET) [Y/m/n/?] - YES: Though this is OPTIONAL, this recommended feature will allow you to use TCPDUMP to debug any problems with IP MASQ * Kernel/User netlink socket (CONFIG_NETLINK) [Y/n/?] - YES: Though this is OPTIONAL, this feature will allow the logging of advanced firewall issues such as routing messages, etc * Routing messages (CONFIG_RTNETLINK) [Y/n/?] - NO: This option does not have anything to do with packet firewall logging -- Non-MASQ options skipped -- * Network firewalls (CONFIG_FIREWALL) [Y/n/?] - YES: Enables the kernel to be comfigured by the IPCHAINS firewall tool * Socket Filtering (CONFIG_FILTER) [Y/n/?] - OPTIONAL: Though this doesn't have anything do with IPMASQ, if you plan on implimenting a DHCP server on the internal network, you WILL need this option. * Unix domain sockets (CONFIG_UNIX) [Y/m/n/?] - YES: This enables the UNIX TCP/IP sockets mechanisms * TCP/IP networking (CONFIG_INET) [Y/n/?] - YES: Enables the TCP/IP protocol -- Non-MASQ options skipped -- * IP: advanced router (CONFIG_IP_ADVANCED_ROUTER) [Y/n/?] - YES: This will allow you to configure advanced MASQ options farther down * IP: policy routing (CONFIG_IP_MULTIPLE_TABLES) [N/y/?] - NO: Not needed by MASQ though users who need advanced features such as TCP/IP source address-based or TOS-enabled routing will need to enable this option. * IP: equal cost multipath (CONFIG_IP_ROUTE_MULTIPATH) [N/y/?] - NO: Not needed for normal MASQ functionality * IP: use TOS value as routing key (CONFIG_IP_ROUTE_TOS) [N/y/?] - NO: Not needed for normal MASQ functionality * IP: verbose route monitoring (CONFIG_IP_ROUTE_VERBOSE) [Y/n/?] - YES: This is useful if you use the routing code to drop IP spoofed packets (highly recommended) and you want to log them. * IP: large routing tables (CONFIG_IP_ROUTE_LARGE_TABLES) [N/y/?] - NO: Not needed for normal MASQ functionality * IP: kernel level autoconfiguration (CONFIG_IP_PNP) [N/y/?] ? - NO: Not needed for normal MASQ functionality * IP: firewalling (CONFIG_IP_FIREWALL) [Y/n/?] - YES: Enable the firewalling feature * IP: firewall packet netlink device (CONFIG_IP_FIREWALL_NETLINK) [Y/n/?] - OPTIONAL: Though this is OPTIONAL, this feature will allow IPCHAINS to copy some packets to UserSpace tools for additional checks * IP: transparent proxy support (CONFIG_IP_TRANSPARENT_PROXY) [N/y/?] - NO: Not needed for normal MASQ functionality * IP: masquerading (CONFIG_IP_MASQUERADE) [Y/n/?] - YES: Enable IP Masquerade to re-address specific internal to external TCP/IP packets * IP: ICMP masquerading (CONFIG_IP_MASQUERADE_ICMP) [Y/n/?] - YES: Enable support for masquerading ICMP ping packets (ICMP error codes will be MASQed regardless). This is an important feature for troubleshooting connections. * IP: masquerading special modules support (CONFIG_IP_MASQUERADE_MOD) [Y/n/?] - YES: Though OPTIONAL, this enables the OPTION to later enable the TCP/IP Port forwarding system to allow external computers to directly connect to specified internal MASQed machines. (责任编辑:IT) |