原文链接:
http://www.dbaleet.org/how_to_build_a_pxe_virtual_machine_to_reimage_automaticaly_in_exadata/
前面的文章介绍了如何对exadata进行reimage, 试想一台满配(Full Rack)X3-2的Exadata, 一共有8个数据库节点, 14个存储节点。每按照传统的方式每个数据库节点 reimage需要1个小时,每个存储节点 reimage需要1.5个小时来计算, 所花费的实际那为8×1+14×1.5=29小时。如果使用多个usb来并行reimage,时间也接近两天左右。有没有一种更简单的方法来完成这个费力不讨好的工作呢?
答案是肯定的,那就是使用PXE的方式来进行reimage。使用PXE一共分为以下几个步骤:
准备工作
在开始安装以前,需要进行如下准备工作:
- 安装虚拟机,推荐Oracle Virtualbox (可在https://www.virtualbox.org/下载);
- 虚拟机分配的内存在1GB以上,剩余磁盘空间在20G以上;
- 安装Oracle Linux 5.7或者其它Linux发行版。Oracle Linux 可在 https://edelivery.oracle.com/下载;
- 下载Exadata 安装介质。可前往 https://edelivery.oracle.com/,我这里使用的是:11.2.3.1.1版本。
- VirutalBox需要配置两块虚拟网卡,其中网卡1使用的是Bridge的模式,同时安装者需要一个网线连接自己的笔记本电脑到Exadata自带的Cisco交换机。以便网卡一与Exadata的出厂地址处在同一个网段。网卡2采用的是Host Only的模式,配置次网卡的目的主要是为了方便从笔记本连接到PXE虚拟机。
网卡1在Linux操作系统中对应eth0,其网络配置信息如下:
[root@exadatapxe ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
# Intel Corporation 82540EM Gigabit Ethernet Controller
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.1.255
IPADDR=192.168.1.250
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
网卡2在Linux操作系统中对应eth1,其网络配置信息如下:
[root@exadatapxe ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
# Intel Corporation 82540EM Gigabit Ethernet Controller
DEVICE=eth1
BOOTPROTO=static
BROADCAST=192.168.56.255
#HWADDR=08:00:27:E0:F9:28
IPADDR=192.168.56.250
NETMASK=255.255.255.0
NETWORK=192.168.56.0
ONBOOT=yes
制作PXE介质:
1.使用VirtualBox的共享文件夹功能将Exadata介质上传到虚拟机
使用Virtualbox的共享文件夹功能将Exadata的介质上传到虚拟机并解压,最终得到dl180文件夹和dl360文件夹,分别代表存储节点和数据库节点。
2. 使用makeImageMedia制作存储节点的pxe镜像
[root@exadatapxe dl180]# ./makeImageMedia.sh -pxe -pxeout dl180
Please wait. Calculating md5 checksums for cellbits ...
Calculating md5 checksum for exaos.tbz ...
Calculating md5 checksum for cellboot.tbz ...
Calculating md5 checksum for cellfw.tbz ...
Calculating md5 checksum for diag.iso ...
Calculating md5 checksum for kernel.tbz ...
Calculating md5 checksum for ofed.tbz ...
Calculating md5 checksum for sunutils.tbz ...
Calculating md5 checksum for hputils.tbz ...
Calculating md5 checksum for c7rpms.tbz ...
Calculating md5 checksum for commonos.tbz ...
Calculating md5 checksum for debugos.tbz ...
Calculating md5 checksum for cellrpms.tbz ...
Calculating md5 checksum for doclib.zip ...
Calculating md5 checksum for cell.bin ...
Store filename of nfsimg tarball nfsimg-11.2.3.1.1-dl180-DL180.tar inside initrd
Please wait. Making initrd ...
199932 blocks
Please wait. Calculating md5 checksums for boot ...
PXE NFS image: /root/soft/dl180/./PXE/nfsimg-11.2.3.1.1-dl180-DL180.tar
PXE NFS md5 sum: /root/soft/dl180/./PXE/nfsimg-11.2.3.1.1-dl180-DL180.tar.md5
PXE initrd: /root/soft/dl180/./PXE/initrd-11.2.3.1.1-dl180-DL180.img
PXE kernel: /root/soft/dl180/./PXE/vmlinux-11.2.3.1.1-dl180-DL180
3. 创建文件夹用来存放PXE的介质配置文件
[root@exadatapxe PXE]# mkdir /exadata_nfs
[root@exadatapxe PXE]# mkdir /exadata_nfs/dl180
[root@exadatapxe PXE]# mkdir /exadata_nfs/dl360
[root@exadatapxe PXE]# mkdir /exadata_nfs/config
[root@exadatapxe PXE]# mkdir /tftpboot
[root@exadatapxe PXE]# mkdir /tftpboot/pxelinux.cfg
其中:
/exadata_nfs/dl180存放存储节点的安装介质;
/exadata_nfs/dl360存放数据库节点的安装介质;
/exadata_nfs/config存放Exadata的配置文件preconf.csv;
/tftpboot存放tftp的共享信息。
4. 将nfsimg-11.2.3.1.1-dl180-DL180.tar包拷贝到/exadata_nfs/dl180/作为存储节点的安装介质
[root@exadatapxe PXE]# mv nfsimg-11.2.3.1.1-dl180-DL180.tar* /exadata_nfs/dl180/
5. 将剩余的内核引导文件放置到tftp的共享目录/tftpboot下
[root@exadatapxe PXE]# mv * /tftpboot/
6. 解压存储节点的安装镜像
[root@exadatapxe PXE]# cd /exadata_nfs/dl180/
[root@exadatapxe dl180]# tar -pxvf nfsimg-11.2.3.1.1-dl180-DL180.tar
7. 对存储节点安装镜像解压后的文件进行md5校验
[root@exadatapxe dl180]# md5sum *
8. 删除安装存储节点的安装镜像以节省空间
[root@exadatapxe dl180]# rm -rf nfsimg-11.2.3.1.1-dl180-DL180.tar*
9. 使用同样的方式创建数据库节点PXE环境
[root@exadatapxe dl360]# ./makeImageMedia.sh -pxe -pxeout dl360
Please wait. Calculating md5 checksums for cellbits ...
Calculating md5 checksum for exaos.tbz ...
Calculating md5 checksum for dbboot.tbz ...
Calculating md5 checksum for dbfw.tbz ...
Calculating md5 checksum for diag.iso ...
Calculating md5 checksum for kernel.tbz ...
Calculating md5 checksum for ofed.tbz ...
Calculating md5 checksum for sunutils.tbz ...
Calculating md5 checksum for hputils.tbz ...
Calculating md5 checksum for c7rpms.tbz ...
Calculating md5 checksum for commonos.tbz ...
Calculating md5 checksum for debugos.tbz ...
Calculating md5 checksum for dbrpms.tbz ...
Store filename of nfsimg tarball nfsimg-11.2.3.1.1-dl360-DL360.tar inside initrd
Please wait. Making initrd ...
199810 blocks
Please wait. Calculating md5 checksums for boot ...
PXE NFS image: /root/soft/dl360/./PXE/nfsimg-11.2.3.1.1-dl360-DL360.tar
PXE NFS md5 sum: /root/soft/dl360/./PXE/nfsimg-11.2.3.1.1-dl360-DL360.tar.md5
PXE initrd: /root/soft/dl360/./PXE/initrd-11.2.3.1.1-dl360-DL360.img
PXE kernel: /root/soft/dl360/./PXE/vmlinux-11.2.3.1.1-dl360-DL360
[root@exadatapxe PXE]# mv nfsimg-11.2.3.1.1-dl360-DL360.tar* /exadata_nfs/dl360/
[root@exadatapxe PXE]# mv * /tftpboot/
[root@exadatapxe PXE]# cd /exadata_nfs/dl360
[root@exadatapxe dl360]# tar -pxvf nfsimg-11.2.3.1.1-dl360-DL360.tar
[root@exadatapxe dl360]# md5sum *
[root@exadatapxe dl360]# rm -f nfsimg-11.2.3.1.1-dl360-DL360.tar*
TFTP配置
1. 安装tftp的服务端和客户端
[root@exadatapxe Server]# rpm -Uvh tftp-server-0.49-2.0.1.x86_64.rpm
[root@exadatapxe Server]# rpm -Uvh tftp-0.49-2.0.1.x86_64.rpm
2. 修改tftp配置文件
因为tftp 服务由 xinetd 服务管理,故tftp的配置文件位于/etc/xinetd.d/下:
[root@exadatapxe Server]vi /etc/xinetd.d/tftp
唯一一个需要修改的地方是将disable = yes修改为disable = no
3. 启动xinetd服务
[root@exadatapxe ~]# service xinetd start
4. 将xinetd服务配置为始终自动启动
[root@exadatapxe ~]#chkconfig xinetd --level 2345 on
5. 确认配置已生效
[root@exadatapxe ~]#chkconfig --list xinetd
NFS的配置:
1. 修改NFS配置:
修改/etc/exports文件,将以下内容填入到nfs的配置文件中:
[root@exadatapxe ~]#vi /etc/exports
/exadata_nfs 192.168.1.0/24(ro,no_acl,sync,no_root_squash)
2. 使得NFS的配置在当前生效:
[root@exadatapxe ~]# exportfs –a
3. 启动NFS相关服务:
[root@exadatapxe ~]# /etc/init.d/portmap start
[root@exadatapxe ~]# /etc/init.d/nfs start
4. 查看NFS共享目录:
[root@exadatapxe ~]# showmount –e localhost
5. 将NFS相关服务配置为自动启动:
[root@exadatapxe ~]#chkconfig portmap --level 2345 on
[root@exadatapxe ~]#chkconfig nfs --level 2345 on
6. 确认配置已经生效:
[root@exadatapxe ~]# chkconfig --list portmap
[root@exadatapxe ~]# chkconfig --list nfs
DHCP配置
1. 安装dhcp的服务端:
[root@exadatapxe ~]# rpm -qa | grep dhcp
[root@exadatapxe Server]# rpm -ivh dhcp-3.0.5-29.el5.x86_64.rpm
2.上传Exadata配置文件preconf.csv
不要忘记在preconf.csv中第六个逗号和第七个逗号之间添加Exadata主机的mac地址,然后在上传到/exadata_nfs/config目录下。
3. 创建pxe的默认配置文件
[root@exadatapxe ~]# vi /tftpboot/pxelinux.cfg/default
LABEL Exadata_ComputeNode_11.2.3.1.1
kernel vmlinux-11.2.3.1.1-dl360-DL360
append initrd=initrd-11.2.3.1.1-dl180-DL180.img pxe stit updfrm dhcp reboot-on-success dualboot=no notests=diskgroup sk=192.168.1.250:/exadata_nfs preconf=192.168.1.250:/exadata_nfs/config/preconf.csv
LABEL Exadata_CellNode_11.2.3.1.1
kernel vmlinux-11.2.3.1.1-dl180-DL180
append initrd=initrd-11.2.3.1.1-dl180-DL180.img pxe stit updfrm dhcp reboot-on-success notests=diskgroup sk=192.168.1.250:/exadata_nfs/dl180 preconf=192.168.1.250:/exadata_nfs/config/preconf.csv
4. 将pxelinux.0和menu.c32拷贝到/tfptboot/目录
[root@exadatapxe ~]# rpm -ql syslinux | grep pxelinux.0
/usr/lib/syslinux/pxelinux.0
[root@exadatapxe ~]cp /usr/lib/syslinux/pxelinux.0 /tfptboot/
[root@exadatapxe ~]# rpm -ql syslinux | grep menu.c32
/usr/lib/syslinux/menu.c32
[root@exadatapxe ~]cp /usr/lib/syslinux/menu.c32 /tfptboot/
拷贝完成以后,可以看到如下文件信息:
[root@exadatapxe tftpboot]# ls -l
total 75572
-rw-r--r-- 1 root root 34941531 Aug 19 21:35 initrd-11.2.3.1.1-dl180-DL180.img
-rw-r--r-- 1 root root 34936051 Aug 19 23:11 initrd-11.2.3.1.1-dl360-DL360.img
drwxr-xr-x 4 root root 4096 Aug 19 19:43 linux-install
-rw-r--r-- 1 root root 26752 Aug 19 22:18 menu.c32
-rw-r--r-- 1 root root 13148 Aug 19 22:18 pxelinux.0
drwxr-xr-x 2 root root 4096 Aug 20 01:58 pxelinux.cfg
-r-xr-xr-x 1 root root 3677280 Aug 19 21:35 vmlinux-11.2.3.1.1-dl180-DL180
-r-xr-xr-x 1 root root 3677280 Aug 19 23:11 vmlinux-11.2.3.1.1-dl360-DL360
5. 修改dhcp的配置文件:
[root@exadatapxe ~]vi /etc/dhcpd.conf
ddns-update-style none;
allow booting;
allow bootp;
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.250;
option subnet-mask 255.255.255.0;
option domain-name "oracle.com";
option domain-name-servers 192.168.1.250;
range dynamic-bootp 192.168.1.128 192.168.1.240;
default-lease-time 21600;
max-lease-time 43200;
next-server 192.168.1.250;
filename "pxelinux.0";
}
6. 启动DHCP服务:
[root@exadatapxe ~]# service dhcpd start
7. 将DHCP服务配置为自动启动:
[root@exadatapxe ~]#chkconfig dhcpd --level 2345 on
8. 确认配置已经生效:
[root@exadatapxe ~]# chkconfig --list dhcpd
PXE测试
随意创建一个虚拟机进行测试:
开机按下F12,可以看到以下选择界面:
输入l, 选择使用网络模式进行启动。
经过一小段时间以后,会出现可供选择的菜单:
任意选择其中的一个做测试用
安装介质会自动探测到并非Exadata硬件,无法继续。
PXE reimage
在Exadata的第一个数据库节点上执行以下命令:
[root@dm01db01 ~]# dcli –g /opt/oracle.SupportTools/firstconf/<full, half or
quarter> –l root ipmitool chassis bootdev pxe
[root@dm01db01 ~]# dcli –g /opt/oracle.SupportTools/firstconf/<full,half or
quarter> –l root reboot
其中<full,half or quarter> 用您实际的配置代替。运行完这个脚本以后,所有的数据库节点和存储节点都会重启。主机重启以后会自动去找DHCP服务,PXE启动后会出现PXE reimage的菜单,选择对应的版本和节点类型,等待一段时间,reimage完成。
更换PXE介质
如果有新的Exadata版本发布,并不需要再次按照上述步骤重新搭建一个虚拟机,只需要完成以下步骤就可以了:
1. 将新的介质上传到PXE虚拟机,并运行makeImageMedia.sh –pxe命令;
2. 将上述命令生成的nfsimg*拷贝到/exadata_nfs对应的目录;
3. 将initrd*文件和vmlinux文件拷贝到/tftpboot;
4. 更新tftpboot/pxelinux.cfg/default文件;
5. 上传新的preconf.csv文件。
Comment