KickStart安装CentOS,同时安装和配置hadoop

声明:这篇文章是前面是拾人牙慧,我是结合 http://www.111cn.net/sys/linux/59969.htm 和 http://www.cnblogs.com/mchina/p/centos-pxe-kickstart-auto-install-os.html 两篇博客写的。

后面关于IP的部分是自己的

一:系统环境

  实验平台:win7,VMware 12.0.0 build-2985596

  要安装的系统:CentOS 6.7 64位

  要安装的软件:hadoop 1.2.1,java

  假设每台机器的网卡都是eth0

二:实验步骤

  1.在VMware上先安装一个CentOS 6.7 64,网络采用桥接模式;这台机器是DHCP服务器,HTTP服务器,TFTP服务器一体的;这里假设它的IP是192.168.0.57,并且为了方便,我把这台机器叫server,下面所有的配置都是在server上进行的。

  2.关闭server的防火墙和selinux

    service iptables stop     #临时关闭防护墙

    setenforce 0                 #临时关闭selinux

  3.安装并配置http服务

    yum -y install httpd               #安装httpd

    /etc/init.d/httpd start            #启动http服务

    mkdir -p /var/www/html/       #http服务默认的根目录就是这个文件夹,如果没有的话就新建

    http服务默认的端口是80,可以在 /var/www/html/中随便放一个文件如test.txt ,然后在浏览器中输入 http://192.168.0.57:80/test.txt 看看是否显示

  4.挂载Centos的ISO文件

    使用任何方法找一个CentOS的ISO文件,我用的是CentOS-6.7-x86_64-bin-DVD1.iso,把它放入server中某一个位置,我放在 /root 文件夹中(因为是用root操作server的) 

    mkdir -p /var/www/html/os                        #新建一个os文件夹用来存放ISO中的所有文件

    mount -t iso9660 -o loop /root/CentOS-6.7-x86_64-bin-DVD1.iso /var/www/html/os     #把ISO挂载到os文件夹下

    cd /var/www/html/os & ll           #看看是否挂载成功

  5.配置TFTP服务

    yum -y install tftp-server

    修改配置文件:/etc/xinetd.d/tftp    

service tftp 
{ 
        socket_type             = dgram 
        protocol                = udp 
        wait                    = yes 
        user                    = root 
        server                  = /usr/sbin/in.tftpd 
        server_args             = -s /var/lib/tftpboot 
        disable                 = no                         #修改的是这行,原来是yes,改为no
        per_source              = 11 
        cps                     = 100 2 
        flags                   = IPv4 
}

    /etc/init.d/xinetd restart           #因为tftp服务是挂载在超级进程xinetd 下的,所以通过启动xinetd 来启动tftp服务。

  6.配置DHCP服务

    yum -y install dhcp

    cp -f /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample  /etc/dhcp/dhcpd.conf               #注意这里的4.1.1是dhcp的版本,可能会不一样

    修改/etc/dhcp/dhcpd.conf 配置文件,内容如下:    

ddns-update-style interim; 
ignore client-updates; 
filename "pxelinux.0";         #pxelinux 启动文件位置;
next-server 192.168.0.57;  #这里是server的IP地址

subnet 192.168.111.0 netmask 255.255.255.0 {

        option routers                  192.168.0.57;    #这里还是server的IP地址
        option subnet-mask              255.255.255.0;

        range dynamic-bootp 192.168.0.2 192.168.0.200;   #这是分配的IP地址的范围
        default-lease-time 21600; 
        max-lease-time 43200;
}

    /etc/init.d/dhcpd start    #启动DHCP服务

  7.配置支持PXE的启动程序

    cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

    cp /var/www/html/cdrom/images/pxeboot/initrd.img  /var/lib/tftpboot/

    cp /var/www/html/cdrom/images/pxeboot/vmlinuz  /var/lib/tftpboot/

    cp /var/www/html/cdrom/isolinux/*.msg /var/lib/tftpboot/

    mkdir /var/lib/tftpboot/pxelinux.cfg

    vi /var/lib/tftpboot/pxelinux.cfg/default    #default中的所有内容如下,    

default ks     #默认启动的是 'label ks' 中标记的启动内核
prompt 1          #显示 'boot: ' 提示符。为 '0' 时则不提示,将会直接启动 'default' 参数中指定的内容。
timeout 6      #在用户输入之前的超时时间,单位为 1/10 秒。
display boot.msg  #显示某个文件的内容,注意文件的路径。默认是在/var/lib/tftpboot/ 目录下。也可以指定位类似 '/install/boot.msg'这样的,路径+文件名。
F1 boot.msg     #按下 'F1' 这样的键后显示的文件。
F2 options.msg 
F3 general.msg 
F4 param.msg 
F5 rescue.msg 
label linux       #'label' 指定你在 'boot:' 提示符下输入的关键字,比如boot: linux[ENTER],这个会启动'label linux' 下标记的kernel 和initrd.img 文件。
  kernel vmlinuz  #kernel 参数指定要启动的内核。
  append initrd=initrd.img #append 指定追加给内核的参数,能够在grub 里使用的追加给内核的参数,在这里也都可以使用。
label text 
  kernel vmlinuz 
  append initrd=initrd.img text 
label ks 
  kernel vmlinuz 
  append ks=http://192.168.0.57/ks.cfg initrd=initrd.img    #告诉系统,从哪里获取ks.cfg文件 ,这里的IP是server的IP
label local 
  localboot 1 
label memtest86 
  kernel memtest 
  append -

  8.安装Kickstart并配置ks.cfg文件

    yum install system-config-kickstart

    如果已经安装了X Windows 和Desktop,或者就是在图形环境中操作的server,那么运行命令

    system-config-kickstart    #启动图形界面,配置ks.cfg

    如果没有图形界面,那也无所谓,自己生成个ks.cfg也可以。

    按照下面的图形一步步来,最后 File  -> Save 保存到 /var/www/html/文件夹下,文件名是ks.cfg

    

    

    

    

    

    

    

    

    

    

  到这里server的所有配置项已经好了

10. 实验

  再用VMware新建一个空白硬盘的虚拟器,网络还是桥接模式,启动之后会看到屏幕有一行DHCP:/ 然后就进入安装了

关于IP,在hadoop集群中有N多台机器,我需要知道它们的IP并把它们设置到DNS服务器中去,那么我们就需要一个方法收集所有机器的IP!另外每台机器的IP都应该是固定的,不应该是通过DHCP动态获得的!

1.关于收集IP,我一个思路,在server上配置NFS,假设把/ips文件夹共享出去,在每台机器上mount这个文件夹,同时在里面新建一个文件,文件的名称就是该台机器的IP

2.设置静态IP,这个只能通过修改/etc/sysconfig/network-scripts/ifcfg-eth0来进行

 还记得上面第9步的最后一幅图吗?他是设置 Post-Installation Script,那么我们就可以写一个脚本,来实现上面的1,2两步,把下面的脚本拷贝到Post-Installation Script中去,当然该脚本还实现了其他功能,我都有注释。

其他功能包括添加hadoop用户,远程下载hadoop和java,配置PATH,mount hadoop的master服务器的公钥,配置dns,(如果用nfs分享hadoop的配置文件,下面也有)。

#declare -i number=$RANDOM*100/32768         #这两行我注释了,如果集群很大的话,最好取消注释。因为下面很多操作会访问http服务器,如果集群很大同时访问的话,http服务器可能会爆掉,所以先让主线程休眠随机的秒数再开始进行下面的工作
#sleep ${number}                  

NFS_SERVER_ID=192.168.0.57 #不是说要用NFS吗?这里就是NFS服务器的地址 NFS_SERVER_PATH_IPS=/ips             #NFS服务器共享出去的文件夹,这个文件夹的作用是存放名称就是各台机器IP的文件
NFS_SERVER_PATH_HADOOP_CONF=/conf #干脆hadoop的配置文件也有NFS服务器提供吧^_^。这个文件夹的作用是存放hadoop的所有配置文件,不过这样做其实增大了风险,如果NFS服务器挂了。。。
NFS_SERVER_PATH_SSH=/ssh             #要用NFS共享hadoop的master的公钥,这个文件夹的作用是存放master的公钥 PXE_URL
=http://192.168.0.57           #http服务器的地址,我这里还提供了hadoop 和 java的下载; 还记得上面有个文件夹/var/www/html吗?把hadoop和java的gz压缩文件都放在/var/www/html下面就可以了 ROOT_DIR=/opt/modules               # hadoop和java的安装地址 DNS=192.168.0.116 #大型集群肯定用DNS服务器啦,这个是DNS服务器的地址

#yum -y install rpcbind nfs-utils #每个datanode也是NFS的一个客户端,得装上客户端软件,我把这一行注释了,因为在生成ks.cfg文件时,在 Package Selection时可以选择 Servers -> NFS file server /etc/init.d/rpcbind start            #就算是NFS的client,也得启动这两个服务 /etc/init.d/nfslock start chkconfig rpcbind on #开机启动,要不然hadoop就没有conf文件了!!! chkconfig nfslock on
useradd hadoop #添加一个用户 hadoop
echo '123456' | passwd --stdin hadoop #把hadoop用户的密码设置为 123456 mkdir -p ${ROOT_DIR}               #新建hadoop和java的安装根目录 cd ${ROOT_DIR}                   #进入安装根目录 #get hadoop and java wget "${PXE_URL}/jdk-7u79-linux-x64.tar.gz" "${PXE_URL}/hadoop-1.2.1.gz" #从http服务器上下载hadoop和java tar -xf jdk-7u79-linux-x64.tar.gz #解压hadoop tar -xf hadoop-1.2.1.gz #解压java chown -R hadoop ${ROOT_DIR} #把安装根目录下的所有文件和文件夹的所有者改成hadoop
rm -rf ${ROOT_DIR}/hadoop-1.2.1/conf/* #把hadoop现有的配置文件先都删除了
mount -t nfs ${NFS_SERVER_ID}:${NFS_SERVER_PATH_HADOOP_CONF} ${ROOT_DIR}/hadoop-1.2.1/conf/ #把远程的hadoop配置文件mount到本地
ROUTE=$(route -n|grep "^0.0.0.0"|awk '{print $2}') #一直到下面的红色的EOF都是设置静态IP,同时还设置了DNS BROADCAST=$(/sbin/ifconfig eth0|grep -i bcast|awk '{print $3}'|awk -F":" '{print $2}') HWADDR=$(/sbin/ifconfig eth0|grep -i HWaddr|awk '{print $5}') IPADDR=$(/sbin/ifconfig eth0|grep "inet addr"|awk '{print $2}'|awk -F":" '{print $2}') NETMASK=$(/sbin/ifconfig eth0|grep "inet addr"|awk '{print $4}'|awk -F":" '{print $2}') cat >/etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF DEVICE=eth0 BOOTPROTO=static BROADCAST=$BROADCAST HWADDR=$HWADDR IPADDR=$IPADDR NETMASK=$NETMASK GATEWAY=$ROUTEroo ONBOOT=yes DNS1=$DNS EOF mkdir -p /ips mount -t nfs ${NFS_SERVER_ID}:${NFS_SERVER_PATH_IPS} /ips #把NFS远程文件夹mount到本地 touch /ips/${IPADDR}   #在远程文件夹中新建一个文件,文件名称就是该机器的IP,那么在NFS服务器中就收集了整个集群的所有机器的IP
echo "export JAVA_HOME=${ROOT_DIR}/jdk1.7.0.79" >> /home/hadoop/.bash_profile #这三行只是为了操作java和hadoop时方便,也可以不要 echo "export HADOOP_HOME=${ROOT_DIR}/hadoop-1.2.1" >> /home/hadoop/.bash_profile echo "export PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${PATH}" >> /home/hadoop/.bash_profile service network restart #重新启动网络服务,或者这里直接reboot也可以,反正是在装系统,装系统时重启不是很正常吗

  

原文地址:https://www.cnblogs.com/formyjava/p/5237884.html