|
当企业有大量的新机需要安装系统,如果每台都接上系统光盘并人工选择配置安装,无疑工作量巨大。而 PXE+kickstart 的安装方式能够实现自动化批量部署,特别适用于这种场景。
一、批量部署方式
①物理机:PXE
负载均衡
②虚拟机:映像文件模板
分布式文件系统
无论是针对物理机还是虚拟机的批量部署,都会对文件服务器造成巨大的压力,可以分别使用负载均衡和分布式文件系统的方式缓解
二、PXE工作原理
客户机通过支持PXE的网卡请求DHCP服务器 --> DHCP服务器给客户端分配IP地址等,并告诉客户端next server(通常是tftp服务器)的地址以及需要下载pxelinux.0 --> tftp客户端联系tftp服务器下载pxelinux.0并加载到内存中执行 --> 联系tftp服务器下载vmlinuz、ramdisk、vesamenu.c32、pxelinux.cfg等各种引导安装所需的文件--> 联系安装源(http、ftp、nfs等)
另外,还可提供kickstart文件,并在isolinux.cfg文件中或boot提示符后指明其位置以实现自动安装
①PXE:是由Intel开发的 client/server 协议,可以使计算机通过网络安装系统。PXE client在网卡的ROM中,计算机启动后,BIOS把PXE client中执行,并显示出命令菜单,经用户选择后,PXE client联系远端服务器下载安装所需的文件
②PXE client所在的网卡ROM中已经内置了tftp client
②pxelinux.0是类似于isolinxu.bin的引导加载程序,可调用启动菜单
④pxelinux.cfg:可直接复制现有isolinux.cfg并按需修改即可
三、如何配置PXE
以下DHCP、TFTP配置可参考http://www.iyunv.com/thread-142372-1-1.html,系统安装参考博客http://www.iyunv.com/thread-141375-1-1.html
1、配置DHCP服务
subnet ... netmask ... {
...
next-server TFTP-SERVER-IP;
filename "pxelinux.0";
}
2、配置TFTP server
yum install tftp-server
chkconfig tftp on
service xinetd restart
3、提供pxe工作环境
yum install syslinux #pxelinux.0由syslinux包提供
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
4、提供引导内核等文件
mount /dev/cdrom /media/cdrom
cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
cp /media/cdrom/isolinux/{splash.jpg,vesamenu.c32,boot.msg} /var/lib/tftpboot/
mkdir /var/lib/tftpboot/pxeboot.cfg
cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxeboot.cfg/default
5、提供安装源(以http为例)
yum -y install httpd
mkdir -pv /var/www/html/centos/6/x86_64
mount --bind /media/cdrom /var/www/html/centos/6/x86_64
(mount --bind表示将后面的两个目录做捆绑,所以通过这两个目录都能访问光盘了)
6、提供kickstart文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
| [iyunv@node2 ~]# mount /dev/cdrom /media/cdrom #挂载光盘光盘
mount: block device /dev/sr0 is write-protected, mounting read-only
[iyunv@node2 ~]# ls /media/cdrom/images/pxeboot
initrd.img TRANS.TBL vmlinuz
[iyunv@node2 ~]# ls /media/cdrom/isolinux
boot.cat boot.msg grub.conf initrd.img isolinux.bin isolinux.cfg memtest splash.jpg TRANS.TBL vesamenu.c32
[iyunv@node2 ~]# cp /media/cdrom/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/
vmlinuz #将相关引导文件都复制到tftpboot目录中
[iyunv@node2 ~]# cp /media/cdrom/isolinux/{boot.msg,splash.jpg,vesamenu.c32} /var/lib/tftpboot/
[iyunv@node2 ~]# mkdir /var/lib/tftpboot/pxelinux.cfg/
[iyunv@node2 ~]# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
[iyunv@node2 ~]# rpm -q syslinux
syslinux-4.04-3.el6.x86_64
[iyunv@node2 ~]# rpm -ql syslinux | grep 'pxelinux.0' #发现4.04版本的syslinux包没有提供pxelinux.0
[iyunv@node2 ~]# yum -y remove syslinux
...
[iyunv@node2 ~]# yum -y install /media/cdrom/Packages/syslinux-4.02-8.el6.x86_64.rpm #重新安装了4.02版本的syslinux包
[iyunv@node2 ~]# rpm -ql syslinux | grep 'pxelinux.0'
/usr/share/syslinux/pxelinux.0
[iyunv@node2 ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[iyunv@node2 ~]# ls /var/lib/tftpboot/ #各种引导文件准备完毕
a.txt boot.msg initrd.img pxelinux.0 pxelinux.cfg splash.jpg vesamenu.c32 vmlinuz
[iyunv@node2 ~]# vim /etc/dhcp/dhcpd.conf
...
subnet 192.168.30.0 netmask 255.255.255.0 {
range 192.168.30.31 192.168.30.50;
next-server 192.168.30.20; #指定下一个要联系的tftp服务器地址
filename "pxelinux.0"; #指定要下载pxelinux.0文件
}
[iyunv@node2 ~]# yum -y install httpd
...
[iyunv@node2 ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT #开放80端口
[iyunv@node2 ~]# mkdir -pv /var/www/html/centos/6/x86_64
mkdir: created directory `/var/www/html/centos'
mkdir: created directory `/var/www/html/centos/6'
mkdir: created directory `/var/www/html/centos/6/x86_64'
[iyunv@node2 ~]# mount --bind /media/cdrom /var/www/html/centos/6/x86_64
[iyunv@node2 ~]# cp /tmp/myiso/isolinux/ks.cfg /var/www/html/centos6.cfg #提供kickstart文件
[iyunv@node2 ~]# vim /var/www/html/centos6.cfg #做适当修改
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
# Use network installation
url --url="http://192.168.30.20/centos/6/x86_64/"
repo --name="CentOS" --baseurl=http://192.168.30.20/centos/6/x86_64/ --cost=100 #指明安装源
# Root password
rootpw --iscrypted $1$Bmn0VLX0$2o2vCmHL.aWp3zhewY1S..
# System authorization information
auth --useshadow --passalgo=sha512
# Use text mode install
text
firstboot --disable
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux --disabled
# Installation logging level
logging --level=info
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# Network information
network --bootproto=dhcp --device=eth0 --onboot=on
# System bootloader configuration
...
[iyunv@node2 ~]# ksvalidator /var/www/html/centos6.cfg #语法测试无误
[iyunv@node2 ~]# ll /var/lib/tftpboot/pxelinux.cfg/default
-r--r--r-- 1 root root 936 Nov 22 02:50 /var/lib/tftpboot/pxelinux.cfg/default
[iyunv@node2 ~]# chmod u+w /var/lib/tftpboot/pxelinux.cfg/default
[iyunv@node2 ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
...
label linux
menu label ^Install or upgrade an existing system
menu default
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.30.20/centos6.cfg #指明kickstart文件位置,实现自动安装
label vesa
menu label Install system with ^basic video driver
kernel vmlinuz
append initrd=initrd.img xdriver=vesa nomodeset
label rescue
menu label ^Rescue installed system
kernel vmlinuz
append initrd=initrd.img rescue
label local
...
[iyunv@node2 ~]# service dhcpd restart #修改dhcpd配置文件后需重启服务
Shutting down dhcpd: [ OK ]
Starting dhcpd: [ OK ]
[iyunv@node2 ~]# chkconfig tftp on
[iyunv@node2 ~]# service xinetd start
Starting xinetd: [ OK ]
[iyunv@node2 ~]# service httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.30.20 for ServerName
[ OK ]
[iyunv@node2 ~]# netstat -tunlp #可看到67/udp、69/udp、80/tcp都已处于监听状态
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1267/rpcbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1532/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1387/cupsd
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 2645/sshd
tcp 0 0 127.0.0.1:6011 0.0.0.0:* LISTEN 1818/sshd
tcp 0 0 0.0.0.0:56458 0.0.0.0:* LISTEN 1356/rpc.statd
tcp 0 0 :::111 :::* LISTEN 1267/rpcbind
tcp 0 0 :::80 :::* LISTEN 2988/httpd
tcp 0 0 :::22 :::* LISTEN 1532/sshd
tcp 0 0 ::1:631 :::* LISTEN 1387/cupsd
tcp 0 0 ::1:6010 :::* LISTEN 2645/sshd
tcp 0 0 ::1:6011 :::* LISTEN 1818/sshd
tcp 0 0 :::45152 :::* LISTEN 1356/rpc.statd
udp 0 0 0.0.0.0:111 0.0.0.0:* 1267/rpcbind
udp 0 0 0.0.0.0:631 0.0.0.0:* 1387/cupsd
udp 0 0 0.0.0.0:1018 0.0.0.0:* 1267/rpcbind
udp 0 0 0.0.0.0:684 0.0.0.0:* 1356/rpc.statd
udp 0 0 0.0.0.0:46906 0.0.0.0:* 1356/rpc.statd
udp 0 0 0.0.0.0:67 0.0.0.0:* 2952/dhcpd
udp 0 0 0.0.0.0:69 0.0.0.0:* 2976/xinetd
udp 0 0 :::111 :::* 1267/rpcbind
udp 0 0 :::1018 :::* 1267/rpcbind
udp 0 0 :::60937 :::* 1356/rpc.statd
|
在一台新机上测试成功:
|
|