看了
的RHEL4+Kickstart+NFS+DHCP+PXE全自动无人安装 ,我决定将我之前的研究 整理一下,现在基于RedHat的Kickstart网络安装技术较为成熟。
我的做法是在现今这种成熟的方法中加入Heartbeat技术,网络安装服务器采用Vsftp或Http。
实验环境:两台安装服务器(均为双网卡),操作系统是RedHat9.0,客户端预装RedHat9.0
实验附件:交叉网线、串口交叉线
实验目标:网络安装过程中,一台服务器出现故障,自动切换到另一台进行安装,客户端机器的安装不会中断;被安装机器可同时从两台服务器安装
安装特点:安装服务器能够进行故障转移(主要是网络故障);具备两种安装服务器的负载均衡方法(基本配置文件和DNS服务)
测试:大规模网络安装没有测试,小规模安装测试通过
实用性:对大规模安装的益处有待考究
本配置只根据我的方法的特点描述与以往经典配置不同之处:
1.基本描述
安装服务器采用了双机集群系统,双机之间存在三条硬件链路:一对串口及交叉串口线、一对网络接口及交叉网线、局域网络连接。交叉线用于Heartbeat软件在两台服务器之间传送心跳信息,局域网的接入一方面使两台机器之间可以通过网络通信,另一方面使服务器能够通过网络为结点提供安装。双机同时提供安装服务,除硬件相近外,各种软件设施和文件配置也相近。
结点在安装过程中会通过负载均衡算法分组,一种是有规则的根据IP奇偶分组,另一种是无规则的基于DNS分组。
引导服务器和安装服务器位于同一台机器上,安装服务采用Ftp。结点启动后,由server1向所有结点提供DHCP服务,结点根据获得的IP地址或访问DNS服务器决定自己由哪台服务器安装。
如果采用IP奇偶分组,奇数IP的结点会映射到server1的Ftp服务,偶数IP的映射到server2的Ftp服务,server1和server2分别通过192.168.0.253和192.168.0.254对外提供Ftp服务。如果server1发生故障,DHCP服务由server2提供,IP地址192.168.0.253被server2捕获,此时server2向结点提供安装服务,如果server2发生故障,192.168.0.254由server1捕获,server1负责所有结点。
DHCP服务器由Heartbeat控制开启和关闭,两台服务器均开机自动运行TFTP、DNS、Ftp服务,这些服务不受Heartbeat控制,因为一台机器故障发生,Heartbeat进行资源接管时启动相应的服务会占用一定时间,这影响了安装服务可用时间。
由于客户端对服务器无写操作,所以两台服务器不涉及复杂的数据同步。一个关键的问题是,服务器故障切换,IP重新绑定后连接的恢复。通过以上分析,有三方面能够保证达到这个效果,首先,Heartbeat故障切换后,能够在备份服务器上发送GARP广播,主动的通知客户端IP与MAC的对应关系发生变化,从而更新对应的缓存表;其次,客户端的缓存表是定时更新的,客户端在一定时间间隔内会主动询问IP与MAC地址的对应关系,更新本地ARP表;再次,根据对Kickstart支持的协议分析以及FTP协议的特性,连接是有可能恢复的,测试中证明了这一点。
2.故障切换的实现:
2.1Heartbeat的安装与配置
传送心跳的接口IP地址分别设置成10.0.0.3和10.0.0.4。
主配置文件ha.cf关键内容如下:
logfile /var/log/ha-log #日志文件,重要的参考信息可以辅助测试
nice_failback off #Heartbeat支持形成共享负载的关键,使两个IP分别由两台服务器捕获
node server1 #使用主机server1
node server2 #使用主机server2
respawn root /etc/init.d/vsftpd start #如果Ftp服务失败,将重启Ftp服务资源文件haresource规定哪台服务器拥有哪些资源。与我们构建的集群部署密切相关的配置是在haresource中加入server1 192.168.0.253 dhcpd和server2 192.168.0.254两条语句。server1和server2是两台服务器的主机名(在/etc/hosts中必须进行配置),与ha.cf中指定的一致;192.168.0.253和192.168.0.254是两台服务器分别需要捕捉的除自身IP以外的IP地址。通过这两个IP地址,两台服务器同时对外提供服务。在同一局域网里不能有两个DHCP服务,因此让Heartbeat控制其中一台拥有dhcpd资源。
3.负载均衡的实现:
3.1基于基本配置文件的负载均衡
(1)引导服务器配置
①DHCP配置
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.128 192.168.0.252;
option routers 192.168.0.1;
host cli128 {
filename "pxelinux.0";
next-server 192.168.0.254;//偶结点TFTP服务IP地址
hardware ethernet 00:0C:29:6D:1C:F7;//偶节点MAC地址
fixed-address 192.168.0.128;//偶结点IP地址
}
host cli129 {
filename "pxelinux.0";
next-server 192.168.0.253;//奇结点TFTP服务IP地址
hardware ethernet 00:0C:29:6E:81:E8;//奇结点MAC地址
fixed-address 192.168.0.129;//奇结点IP地址
}
}该配置文件不但确立了MAC地址与分配IP的对应关系,而且指定了结点对应的TFTP服务器地址。确定这种对应关系才能方便地进行负载均衡,获得IP地址的PXE客户端会根据DHCP配置文件指定的TFTP地址获得一些启动需要的文件;启动后会根据Kickstart配置文件找到负责自己的安装服务器。DHCP服务由Heartbeat启动。
②TFTP的配置
在TFTP的主目录/tftpboot/的pxelinux.cfg下为每个结点生成引导配置文件。这些配置文件的名称是结点被分配的IP地址的16进制表示,如C0A80080对应IP地址为192.168.0.128的结点。安装过程中结点从TFTP获得并执行pxelinux.0时,pxelinux.0会读取对应结点IP的配置文件。在pxelinux.cfg下可以放置一个名为default的配置文件,如果结点找不到对应IP地址的配置文件,则默认使用default。
奇数IP地址的引导配置文件内容示例如下:
DEFAULT vsftpd #对应下面的LABEL选项
DISPLAY message.txt#引导之前显示的提示信息
PROMPT 1
TIMEOUT 50#50ms后自动加载内核
LABEL vsftpd
KERNEL vmlinuz #内核名字
APPEND ks=ftp://192.168.0.253/pub/rh9/ks129.cfg initrd=initrd.img root=/dev/ram ramdisk_size=8192 #指定了内核参数,包括Kickstart配置文件,文件系统initrd.img和使用的虚拟磁盘偶数IP地址的结点对应的引导配置文件与上述文件的差别在于APPEND选项的ks=ftp://192.168.0.254/pub/rh9/ks128.cfg,通过对Kickstart配置文件位置的指定可以使结点从不同的安装服务器获取Kickstart配置文件,达到负载均衡的目的。
(2)安装服务器配置
安装包放在/var/ftp/pub/rh9下,Kickstart配置文件也放在此目录下,我们准备了两种配置文件,他们指定了不同的安装服务器的位置,一种文件中的一行为url --url ,另一种文件中的一行为url --url 。
(3)负载均衡特点
不同的MAC地址对应特定的IP地址,进而对应引导配置文件,其中指明了对应的Kickstart配置文件,该文件指明了安装服务器IP地址,最终将结点定向到了某台安装服务器。
这里的负载均衡是一种通过IP地址奇偶性分割待安装结点的静态负载均衡方法。负载的大小由结点的数量和安装包大小决定,两台安装服务器分别负责一半结点。从结点角度来说,安装包只由一台服务器提供,除非提供安装的服务器发生故障,剩余的安装包才由另一台服务器提供。由于待安装结点之间可能存在处理能力、体系结构以及所需安装包大小和版本等差别,更加复杂、灵活的动态或动静结合的负载均衡手段,可以通过修改配置文件,在本负载均衡方法基础上进行,并且容易扩展到多台安装服务器上加以实现。
除了安装服务器的负载均衡,TFTP服务器因为DHCP的指定也达到了负载均衡的效果,整体上部署服务器实现了负载均衡。
3.2基于DNS的负载均衡
(1)引导服务器配置
①DHCP配置
next-server ftp.youyuanyin.org;//安装服务器的域名(主机名)
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.128 192.168.0.252;
option domain-name "youyuanyin.org";//域名(后缀)
option domain-name-servers 192.168.0.253,192.168.0.254;//指定域名服务器IP
}与上一种负载均衡方法中的配置不同的是以上几行,此处TFTP服务器以域名的形式指定,同时指定域名服务器。这样TFTP服务器的负载均衡由DNS支撑,解析出什么IP就访问其上的TFTP服务获取与启动相关的文件。
②TFTP的配置
TFTP与上一中负载方法不同的也只是在引导配置文件上,如下:
APPEND ks=ftp://ftp.youyuanyin.org/pub/rh9/ks129.cfg initrd=initrd.img root=/dev/ram ramdisk_size=8192 Kickstart配置文件的位置由域名指定,这样结点可以从某台服务器获得Kickstart配置文件,而不是固定从某台服务器获得。
(2)DNS服务器配置
这里DNS有两个用途,一个是需要配合Sendmail实现域名解析,顺利发送邮件到Internet;另一个用途是将安装服务器域名解析成两个不同的IP,实现负载均衡。Linux下DNS服务器通常使用开源软件Bind(Berkeley Internet Name Domain Service)实现。在这里我们配置主要名称服务器,首先在Bind的主配置文件/etc/named.conf中,建立主区域如下
zone "youyuanyin.org" {
type master;
file "youyuanyin.org.zone";
allow-transfer { none; };
};file "youyuanyin.org.zone";这一行指定了对应的区域文件,在youyuanyin.org.zone文件中加入
ftp IN A 192.168.0.253
ftp IN A 192.168.0.254因为我们使用了两台内容相同的安装服务器更同承担结点的安装,他们的在Heartbeat软件的作用下分别使用了IP地址192.168.0.253和192.168.0.254,在这里他们使用同一个域名ftp.youyuanyin.org,即一个主机名对应两条A资源记录。当有域名查询请求到达时,DNS服务器会轮询这两条资源记录,以随机的顺序响应结点的解析请求,从而实现了在两台安装服务器之间分担结点访问。
(3)安装服务器配置
基于DNS的负载均衡,只需要制作一种Kickstart配置文件,在文件中加入安装源地址为--url ,也就是不使用直接的IP指定安装源。ftp.youyuanyin.org是安装服务器的域名,和DNS服务器配置文件中的对应。
由于在Kickstart的配置文件中可以指定安装源为url --url ,而结点通过DHCP获得IP的同时还能够获得DNS服务器的IP地址,当它获得以域名方式给出的安装源地址时会通过DNS服务器解析出为其提供安装包的服务器IP地址。上一小节中的DHCP配置文件中option domain-name-servers 192.168.0.253,192.168.0.254;这一行指定了DNS服务器的IP地址。DNS服务器的地址也可以在Kickstart配置文件中指定:
network --bootproto=static --device=eth0 --ip=192.168.0.128 --netmask=255.255.255.0 --gateway=192.168.0.1 --nameserver=192.168.0.253 --hostname=cli128--nameserver=192.168.0.253即指定了DNS服务器的地址,这个指定将覆盖DHCP服务器中的指定。Kickstart配置文件的制作以及安装源的准备方法与上一小节相同。
(4)负载均衡的特点
在DNS服务器上,ftp.youyuanyin.org会由DNS内部的负载均衡算法从youyuanyin.org.zone区域文件中解析出192.168.0.253或192.168.0.254,从而达到负载均衡的目的。这里只需要一种Kickstart配置文件,并在文件中通过域名指定安装源地址,DNS将域名轮询解析为192.168.0.253和192.168.0.254。对应关系或者说是结点组的划分不再取决于结点的IP地址,而是DNS内部的负载均衡机制对两个服务器IP地址的轮询。
基于DNS的负载均衡安装原理图如4.9所示。这里的负载均衡实质上是DNS的负载均衡,依赖于DNS内部的负载均衡算法。同时必须有DHCP服务器的支持或者在Kickstart文件中指定,使结点获得DNS服务器的IP地址。更重要的是Kickstart的安装程序Anaconda支持域名形式的安装源地址,访问DNS寻求域名解析。结点在开始安装之前和安装过程的一系列活动中还访问了DNS服务器。更重要的一点是,结点每次获取安装包,都要查询域名服务器获得IP地址,之后才能从服务器获取数据,这也是该种负载均衡的缺点,频繁访问DNS服务器占用了一定的网络带宽。
4.测试
我们使用Vmware虚拟机和真实机器作为结点分别进行了安装测试。采用虚拟机可以方便进行重启操作,截取结点机屏幕,录制整个安装过程结点屏幕信息,保存机器状态,通过宿主机测试网络连通性等。在一台服务器上打开多个终端对两台服务器进行监视和命令操作,用tcpdump工具捕捉并分析了安装过程的数据包。
4.1 故障转移特性测试
目前测试得出基于Kickstart安装方式,采用NFS协议安装时只能做到负载均衡,当服务器出现故障时,因为NFS服务器和结点采用UTP进行通信,一旦出现故障,不会进行重新连接;采用Ftp和Http能够同时做到故障处理以及负载均衡。
通过service heartbeat stop命令模拟故障,然后比对两台服务器上的Heartbeat日志计算出处理服务器故障的时间延迟为4秒钟左右,而不进行故障处理时结点在1到3分钟才会弹出错误提示页面,4秒钟的故障时间不会造成安装失败。server1关闭heartbeat进程后,/var/log/ha-log中的一段日志如下:
heartbeat: 2007/12/24_19:37:21 info: Heartbeat shutdown in progress. (667
heartbeat: 2007/12/24_19:37:21 info: Giving up all HA resources.
heartbeat: 2007/12/24_19:37:21 info: Releasing resource group: server1 192.168.0.253 dhcpd
heartbeat: 2007/12/24_19:37:21 info: Running /etc/init.d/dhcpd stop
heartbeat: 2007/12/24_19:37:21 info: Running /etc/ha.d/resource.d/IPaddr 192.168.0.253 stop
heartbeat: 2007/12/24_19:37:21 info: /sbin/route -n del -host 192.168.0.253
heartbeat: 2007/12/24_19:37:21 info: /sbin/ifconfig eth0:0 down
heartbeat: 2007/12/24_19:37:21 info: IP Address 192.168.0.253 released
heartbeat: 2007/12/24_19:37:21 info: All HA resources relinquished.
heartbeat: 2007/12/24_19:37:22 info: control process Received SIGQUIT
heartbeat: 2007/12/24_19:37:22 info: Core process 6672 exited. 7 remaining
heartbeat: 2007/12/24_19:37:22 info: Core process 6673 exited. 6 remaining
heartbeat: 2007/12/24_19:37:22 info: Core process 6674 exited. 5 remaining
heartbeat: 2007/12/24_19:37:22 info: Core process 6675 exited. 4 remaining
heartbeat: 2007/12/24_19:37:22 info: Core process 6676 exited. 3 remaining
heartbeat: 2007/12/24_19:37:22 info: Core process 6677 exited. 2 remaining
heartbeat: 2007/12/24_19:37:22 info: Core process 6678 exited. 1 remaining
heartbeat: 2007/12/24_19:37:22 info: Heartbeat shutdown complete.这是server1上从关闭heartbeat到完全释放资源时记录的日志。对应的server2端会记录heartbeat接管资源的一系列信息。同样/var/log/messages会记录heartbeat进程的信息。
IP接管后,接管IP的安装服务器会通过GARP广播更新客户端的ARP表,进而重新建立连接,继续进行安装。GARP广播使得结点与Heartbeat控制的IP地址能够在失去连接之后重新建立连接;Ftp协议是基于TCP/IP协议的,TCP/IP协议的可靠性和重传机制使得存在故障切换的情况下,并未丢包,结点获得安装包仍为2.7G大小。
也可以通过tcpdump工具监控数据流进行测试,但没有观察heartbeat日志方便,因为日志中记录了heartbeat服务的状态,包括何时关闭、启动等。通过tcpdump监控数据流可以观察到,当故障发生后,一台服务器上的相关数据流停止,而出现在另一台服务器上,备份服务器此时提供所有结点的安装。
4.2 负载均衡特性测试
在两台服务器上分别用tcpdump host 192.168.0.253和tcpdump host 192.168.0.254命令确认负载在两台服务器之间进行了分配。
尤其对于基于DNS的负载均衡,可以观察到,一个结点会先访问DNS服务器,然后从某个部署服务器获得安装数据包,安装包由两台服务器共同提供。由tcpdump在DNS服务器上截获的数据包如下:
13:40:15.551497 ftp.youyuanyin.org.domain > cli128.youyuanyin.org.32769: 23015* 2/1/1 A ftp.youyuanyin.org, (102) (DF)
13:40:15.551950 cli128.youyuanyin.org.33175 > ftp.youyuanyin.org.ftp: S 1618371400:1618371400(0) win 5840 (DF)
13:40:15.551967 ftp.youyuanyin.org.ftp > cli128.youyuanyin.org.33175: S 161667834:161667834(0) ack 1618371401 win 5792 (DF)
13:40:15.552206 cli128.youyuanyin.org.33175 > ftp.youyuanyin.org.ftp: . ack 1 win 5840 (DF)
13:40:15.553275 ftp.youyuanyin.org.ftp > cli128.youyuanyin.org.33175: P 1:21(20) ack 1 win 5792 (DF)
13:40:15.553617 cli128.youyuanyin.org.33175 > ftp.youyuanyin.org.ftp: . ack 21 win 5840 (DF)除了结点与FTP服务器的通信(.ftp的行),还存在结点与DNS的通信(.domain等行)。基于基本配置文件的负载均衡只存在与FTP服务器的通信。
5参考文献
【1】冯钰,刘亚.基于网络的 Red Hat 无人值守安装[EB/OL].
http://www.ibm.com/developerworks/cn/linux/l-autoinstl/index.html,2006.10.19.
【2】邱建新,马世霞.Linux网络安装的自动化原理剖析及应用[J].微计算机应用,2005.11,6(26):760-764
【3】 W.Richard Stevens.TCP/IP详解[M].北京:机械工业出版社,2002.
【4】林慧琛,刘殊,尤国君.Red Hat Linux服务器配置与应用[M].北京:人民邮电出版社,2006.1.
【5】Behrouz A.Forouzan,Sophia Chung Fegan著,谢希仁等译.TCP/IP协议族[M].第3版,北京:清华大学出版社,2006.5.
【6】Karl Kopper著,沈金河,李秋霞等译.Linux企业集群——用商用硬件和免费软件构建高可用集群[M].北京:中国水利水电出版社,2007.1.
【7】