IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]HDP一键配置

    fansy1990发表于 2015-05-25 16:17:40
    love 0

    本篇博客针对HortonWorks Data Platform平台配置,使用此配置完成后,可以直接在浏览器登陆ambari进行集群配置,即此配置是前置条件配置!

    脚本可在HDP一键部署下载!

    环境:

    操作系统:CentOS6.6 、HDP2.2 (hdp:2.2.0.0,hdp-util:1.1.0.20)、ambari:1.7;

    这里使用的机器全部是安装完操作系统后(最小化安装,同时所有机器安装的操作系统版本需保持一致),配置完网络后的机器。

    1. 网络配置:

    /etc/sysconfig/network :

    NETWORKING=yes
    HOSTNAME=node80.example.com
    GATEWAY=192.168.0.2
    其中HOSTNAME配置为全称,同时还应配置GATEWAY

    /etc/sysconfig/network-scripts/ifcfg-eth0

    DEVICE="eth0"
    BOOTPROTO="static"
    HWADDR="00:0C:29:71:33:61"
    IPV6INIT="no"
    NM_CONTROLLED="no"
    ONBOOT="yes"
    TYPE="Ethernet"
    UUID="827078f8-57da-4105-a803-2c8011d72092"
    
    IPADDR=192.168.0.80
    NETMASK=255.255.255.0
    GATEWAY=192.168.0.2
    DNS1=192.168.0.80
    DOMAIN=example.com
    
    静态ip、配置dns为主节点、配置DOMAIN、关闭ipv6。

    2. 安装需要文件(放在/opt目录下):

    其中需要的文件是:ambari-1.7.0-centos6.tar.gz (需固定)、 HDP-UTILS-1.1.0.20-centos6.tar.gz(需固定)
    CentOS-6.6-x86_64-bin-DVD1.iso(可替换,根据操作系统的不同而不同)
    HDP-2.2.0.0-centos6-rpm.tar.gz (需固定)、 jdk-7u80-linux-x64.tar.gz(可替换),一共有5个文件,把这5个文件放在/opt目录下面,这个是必须的!!!(在代码里把这个参数写死了的)

    3. hdp一键部署脚本分析:

    脚本可以在HDP一键部署下载!

    (一般需要增加文件的执行权限,下载解压后,进入文件夹,运行:chmod +x *.sh)


    3.1 打开one_key.sh:

    #!/bin/bash
    # HDP一键安装
    # 拷贝iso安装文件、jdk、HDP、HDP-UTILS、Ambari安装文件到/opt目录
    # 配置好主节点和各slaves节点ip,注意配置dns为主节点
    # 修改本目录hosts文件,第一行为主节点
    # 修改本文件中的password为root的密码,必须使用root用户
    
    user=root
    password=admin
    
    ./create_local_yum.sh && echo "create_local_yum.sh  执行成功"
    
    ./update_master.sh && echo "update_master.sh 执行成功"
    
    ./generate_ssh.sh $user $password && echo "generate_ssh.sh 执行成功"
    
    ./install_jdk_on_all_hosts.sh && echo "install_jdk_on_all_hosts.sh 执行成功"
    
    ./update_slaves.sh && echo "update_slave.sh 执行成功"
    
    
    echo "一键安装配置完成,开始配置ambari..."
    source /etc/profile
    yum -y install ambari-server && ambari-server setup -j $JAVA_HOME -s && ambari-server start && echo "Ambari安装完成,请在浏览器中输入http://$HOSTNAME:8080 进行配置!"
    
    # 重启所有机器
    ./reboot_all.sh 
    这里分为6步:

    1、制作本地yum源,安装必要软件;

    2、更新主节点;

    3、在主节点配置ssh无密码登录,同时配置到其他slave节点的无密码登录;

    4、在所有节点安装并配置jdk;

    5、 更新slaves节点所需软件及服务;

    6、安装、配置ambari-server,并重启所有节点;

    3.2 create_local_yum.sh

    #!/bin/bash
    
    # 使用提供的iso安装文件来挂载本地yum源
    
    iso_path=/opt/`ls /opt/ | grep ".iso"`
    
    echo "Iso file path is :" $iso_path
    
    #创建挂载目录
    yum_path=/mnt/rhel
    
    echo 'Creating mount directory :' $yum_path
    mkdir $yum_path
    
    #######################################
    mount -o loop $iso_path $yum_path && echo 'Finished mount yum repository'
    ##########################################
    echo 'Updating /etc/yum.repos.d/ files...'
    rm -rf /etc/yum.repos.d/* 
    touch /etc/yum.repos.d/rhel.repo
    
    echo "
    [rhel-local]
    name=rhel-local
    baseurl=file://$yum_path
    gpgcheck=0
    enabled=1
    " >> /etc/yum.repos.d/rhel.repo
    
    yum clean all && echo 'yum repository has been updated! '
    此步骤即把安装文件iso挂载在/mnt/rhel目录,然后更新本地yum.repos.d中的文件,为下面的安装软件提供支持!

    3.3 update_master.sh

    #!/bin/bash
    # 应该首先安装expect,这一步前 应该确认yum可用
    
    #往本机/etc/hosts添加hosts文件内容#############
    
    cat hosts >> /etc/hosts;
    echo "添加hosts到/etc/hosts文件完成";
    
    host_ip=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
    suffix_ip=${host_ip%.*}
    suffix_ip=${suffix_ip%.*}
    
    # 安装必要的软件并制作http源###################
    
    yum -y install vim httpd createrepo perl bind-utils openssh-clients ntp vim wget unzip bind && chkconfig httpd on && mkdir /var/www/html/centos && mkdir /var/www/html/centos/Packages &&echo; "拷贝文件中..." && cp /mnt/rhel/Packages /var/www/html/centos/Packages -r && echo "拷贝文件完成,生成源中..." && createrepo /var/www/html/centos/Packages && rm -rf /etc/yum.repos.d/* && echo "http源拷贝完成,更新yum..."
    
    touch /etc/yum.repos.d/rhel.repo
    
    echo "
    [rhel-http]
    name=rhel-http
    baseurl=http://$HOSTNAME/centos/Packages
    gpgcheck=0
    enabled=1
    " >> /etc/yum.repos.d/rhel.repo
    service httpd start && chkconfig httpd on && yum clean all
    
    echo "http 源已经配置完成"
    
    #配置dns#######################
    echo "开始配置dns..."
    #cp named.conf /etc/named.conf && cp db.* /var/named/ && service named start && chkconfig named on && echo "dns 配置完成"
    
    sh generate_named.conf.sh && sh generate_db.192.sh && sh generate_db.hortonworks.com.sh && service named start && chkconfig named on && echo "dns 配置完成"
    
    # 配置 ntp#########################
    echo "开始配置ntp..."
    chkconfig ntpd on 
    
    #cp ntp.conf /etc/ntp.conf 
    # 写入ntp.conf文件
    echo "
    driftfile /var/lib/ntp/drift
    
    restrict default kod nomodify notrap nopeer noquery
    restrict -6 default kod nomodify notrap nopeer noquery
    
    restrict 127.0.0.1 
    restrict -6 ::1
    # 这里注意 mask是否是255.255.255.0 ,同时注意前面的ip
    restrict $suffix_ip.0.0 mask 255.255.255.0 nomodify notrap
    
    restrict 0.rhel.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
    restrict 1.rhel.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
    restrict 2.rhel.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery
    
    server	127.127.1.0	# local clock
    fudge	127.127.1.0 stratum 10	
    
    includefile /etc/ntp/crypto/pw
    
    keys /etc/ntp/keys
    
    " > /etc/ntp.conf
    service ntpd start && echo "ntp 配置完成!"
    
    ## 配置 hdp yum####################
    echo "开始配置hdp..."
    tar -zxvf /opt/ambari-1.7.0-centos6.tar.gz -C /var/www/html;
    tar -zxvf /opt/HDP-2.2.0.0-centos6-rpm.tar.gz -C /var/www/html;
    tar -zxvf /opt/HDP-UTILS-1.1.0.20-centos6.tar.gz -C /var/www/html;
    
    
    # 写入文件
    touch /etc/yum.repos.d/ambari.repo
    touch /etc/yum.repos.d/hdp.repo
    
    echo "
    [ambari-1.x]
    name=Ambari 1.x
    baseurl=http://$HOSTNAME/ambari/centos6/1.x/updates/1.7.0
    gpgcheck=0
    enabled=1
    priority=1
    " >> /etc/yum.repos.d/ambari.repo
    
    echo "
    [HDP-2.2.0.0]
    name=Hortonworks Data Platform Version - HDP-2.2.0.0
    baseurl=http://$HOSTNAME/HDP/centos6/2.x/GA/2.2.0.0
    gpgcheck=0
    enabled=1
    priority=1
    
    [HDP-UTILS-1.1.0.20]
    name=Hortonworks Data Platform Utils Version - HDP-UTILS-1.1.0.20
    baseurl=http://$HOSTNAME/HDP-UTILS-1.1.0.20/repos/centos6
    gpgcheck=0
    enabled=1
    priority=1
    " >> /etc/yum.repos.d/hdp.repo
    
    yum clean all && echo "HDP 配置完成"
    
    # 配置selinux#############
    echo "开始配置selinux..."
    sed -i 's/enforcing/disabled/' /etc/selinux/config && echo "selinux 配置完成"
    
    # 配置 iptalbes###########
    echo "开始配置iptables..."
    service iptables stop && chkconfig iptables off && service ip6tables stop && chkconfig ip6tables off && echo "iptables配置完成"
    
    # 关闭 THP################
    echo "关闭THP..."
    echo "if test -f /sys/kernel/mm/redhat_transparent_hugepage/defrag;then echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag fi" >> /etc/rc.local && echo "闭THP完成"
    
    echo "更新主节点完成"

    更新主节点主要包括:

    a. 更新/etc/hosts文件;

    b. 安装必要的软件;

    c. 更新/etc/yum.repos.d中的文件,添加操作系统的安装包的http资源;

    d. 配置dns(这里引入了三个文件生成脚本:generate_named.conf.sh 、 generate_db.192.sh 、generate_db.hortonworks.com.sh);

    e. 配置ntp;

    f. 解压HDP相关安装文件,并生成yum.repos.d下面的文件,制作http资源;

    g. 配置 selinux、iptables、关闭THP;

    3.4 generate_ssh.sh

    #!/bin/bash
    
    # 本机产生无密码登录,同时设置其他机器无密码登录
    # 必须使用root用户
    
    if [ $# -lt 2 ]; then  
    echo " HELP  
     generate_ssh.sh --generate ssh key for login without typing password;  
    this script should run on the namenode machine and user should edit the ip-list file  
      
    USAGE: ./generate_ssh.sh user pasaword  
      
    EXAMPLE: ./generate_ssh root admin
    HELP  
    "
            exit 0  
    fi 
    
    yum -y install expect && echo "expect 安装完成"
    
    user=$1
    ip=$HOSTNAME
    pass=$2
    rm -rf /root/.ssh/*
    
    echo "##################################"
    echo " generate the rsa public key on $HOSTNAME ..."
    echo "##################################"
    
    expect -c "  
        set timeout -1  
        spawn ssh-keygen -t rsa
        expect \"*id_rsa*\" 
        send \"\r\"
        expect \"*passphrase*\" 
        send \"\r\"
        expect \"*again*\"
        send \"\r\"  
    expect eof  
    " 
    cat hosts | while read line
    do
    #提取ip
    	ip_i=${line% *}
    	full_hostname_i=${ip_i##* }
    	ip_i=${ip_i% *}
    	hostname_i=${line##* }
    	expect -c "
    	set timeout -1
    	spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $hostname_i
    	expect \"yes/no\"
    	send \"yes\r\"
    	expect \"password:\"
    	send \"$pass\r\"
    	expect \"#\"
    	
    expect eof
    "
    done
    
    echo "ssh配置完成"
    

    generate_ssh.sh 首先安装expect工具,然后使用此工具以及提供的用户名和密码生成ssh无密码登录,并授权到slaves机器;(这里注意必须使用root用户)

    3.5 install_jdk_on_all_hosts.sh

    #!/bin/bash
    # 拷贝jdk安装脚本并 
    #拷贝jdk到所有host,并安装配置jdk
    
    cat hosts | while read line
    do
    #提取ip
    #	ip_i=${line% *}
    #	full_hostname_i=${ip_i##* }
    #	ip_i=${ip_i% *}
    	hostname_i=${line##* }
    echo "hostname:$hostname_i"
    scp /opt/jdk-* $hostname_i:/opt/
    scp ./install_jdk.sh $hostname_i:/opt/
    
    expect -c "
    	set timeout -1
    	spawn ssh $hostname_i
    	expect \"#\"
    	send \"/opt/install_jdk.sh\r\"
    	expect \"#\"
    	send \"exit\r\"	
    expect eof
    "
    echo "$hostname_i 节点安装jdk完成"
    done
    
    这里变量hosts文件中的slaves机器,使用scp命令拷贝jdk、install_jdk.sh到各个slaves机器,接着使用expect命令远程登录到各个slaves机器,运行刚才拷贝的install_jdk.sh文件。install_jdk.sh文件主要是配置、安装jdk。

    3.6 update_slave.sh

    #!/bin/bash
    # 1. 把yum源拷贝到slaves,并更新
    # 2. 在slaves安装软件
    # 3. 执行slaves.sh ,进行配置
    
    #往slaves 机器拷贝yum、hosts文件#############
    
    lines=`cat hosts |wc -l`
    let lines=lines-1
    tail -n $lines hosts | while read line
    do
    	hostname_i=${line##* }
    	echo "hostname:$hostname_i"
    	scp /etc/yum.repos.d/* $hostname_i:/etc/yum.repos.d/
    	scp hosts $hostname_i:/opt/
    	scp slaves.sh $hostname_i:/opt/
    	
    	echo "yum、hosts、slaves.sh 拷贝完成"
    	
    	expect -c "
    		set timeout -1
    		spawn ssh $hostname_i
    		expect \"#\"
    		send \"/opt/slaves.sh &\r\"
    		send \"exit\r\"
    		expect eof
    	"
    	echo "$hostname_i配置完成"
    done
    

    update_slaves.sh脚本原理和install_jdk_on_all_hosts.sh一致,同时是先拷贝必要的文件到各个slaves节点,然后使用expect工具远程登录到slaves节点运行slaves.sh脚本,进行配置

    3.7 slaves.sh

    #!/bin/bash
    
    #往slave /etc/hosts添加hosts文件内容#############
    
    cat /opt/hosts >> /etc/hosts;
    echo "添加/opt/hosts到/etc/hosts文件完成";
    master_ip=`head -n 1 /opt/hosts`
    master_ip=${master_ip% *}
    master_ip=${master_ip% *}
    echo "master_ip:$master_ip"
    # 更新yum源
    rm -rf /etc/yum.repos.d/CentOS* && yum clean all && yum -y install perl bind-utils openssh-clients ntp vim wget unzip && echo "yum源更新完成 ,相关软件安装完成"
    
    
    # 配置 ntp#########################
    echo "开始配置ntp..."
    chkconfig ntpd on 
    
    #cp ntp.conf /etc/ntp.conf 
    # 写入ntp.conf文件
    echo "
    driftfile /var/lib/ntp/drift
    restrict default kod nomodify notrap nopeer noquery
    restrict -6 default kod nomodify notrap nopeer noquery
    restrict 127.0.0.1 
    restrict -6 ::1
    restrict default ignore
    restrict $master_ip mask 255.255.255.255 nomodify notrap noquery
    server $master_ip
    includefile /etc/ntp/crypto/pw
    keys /etc/ntp/keys
    " > /etc/ntp.conf
    service ntpd start && echo "ntp 配置完成!"
    
    echo "开始配置selinux..."
    sed -i 's/enforcing/disabled/' /etc/selinux/config && echo "selinux 配置完成"
    
    # 配置 iptalbes###########
    echo "开始配置iptables..."
    service iptables stop && chkconfig iptables off && service ip6tables stop && chkconfig ip6tables off && echo "iptables配置完成"
    
    # 关闭 THP################
    echo "关闭THP..."
    echo "
    if test -f /sys/kernel/mm/redhat_transparent_hugepage/defrag;then echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag fi" >> /etc/rc.local && echo "关闭THP完成"
    
    echo "更新$HOSTNAME完成"
    

    slaves.sh的配置很多是和master节点一致。

    3.8 reboot_all.sh

    #!/bin/bash
    
    #重启slaves机器#############
    
    lines=`cat hosts |wc -l`
    let lines=lines-1
    tail -n $lines hosts | while read line
    do
    	hostname_i=${line##* }
    	echo "hostname:$hostname_i"
    	
    	expect -c "
    		set timeout -1
    		spawn ssh $hostname_i
    		expect \"#\"
    		send \"reboot\r\"
    		expect \"#\"	
    		expect eof
    	"
    	echo "$hostname_i重启中"
    done
    
    ## 重启本机
    reboot
    
    reboot_all.sh 首先使用expect工具远程登录到各个slaves节点,然后执行重启命令,最后再本机执行重启即可。

    运行:

    0)配置过程中全程使用root用户;

    1)确保网络配置ok;

    2)拷贝5个安装文件到/opt目录下面;

    3)下载HDP一键安装脚本,并解压,添加运行权限;

    4)修改HDP一键安装脚本中的hosts文件,改为自己集群所需机器名;

    5)修改one_key.sh中的用户名和密码;

    6)进入解压目录,运行:./one_key.sh >> one_key.log &

    7)tail -f one_key.log 实时查看log输出;

    8)等待重启完成后,可以手动检查dns、ntp、iptables等等配置是否正确;

    9)如果配置正确,即可在浏览器访问8080端口开始集群的配置!


    分享,成长,快乐

    脚踏实地,专注

    转载请注明blog地址:http://blog.csdn.net/fansy1990





沪ICP备19023445号-2号
友情链接