zoukankan      html  css  js  c++  java
  • Linux集群软件安装实战

    一、需求和思路

    1. 需求描述

    公司有N个节点的集群,需要统一安装一个软件(jdk)
    需要开发一个脚本程序,实现对集群中的N个节点批量自动下载、安装jdk

    2. 思路

    1)编写一个启动脚本,用来发送一个软件安装脚本到一台机器
    2)然后启动每台机器上的软件安装脚本来执行软件下载和安装

    3. 步骤

    1)搭建web服务器 存放jdk软件
    httpd /var/www/html/jdk.1.7.0.67.tar.gz
    2) scp 分发一个软件安装脚本install.sh给所有机器
    3) 然后启动每台机器的install.sh(ssh 目标机器 /root/install.sh)
    install.sh负责
    下载jdk,解压缩到指定目录,修改配置文件

    问题:使用scp命令远程拷贝文件时,会有人机交互的过程,如何让脚本完成人机交互
    方法:使用expect 软件(记得安装哦)
    用法示例:先观察 ssh localhost 的过程,在看expect 的功能

    #!/bin/bash/expect
    ## exp_test.sh
    # 设置超时时间为永久
    set timeout -1
    spawn ssh localhost;
    expect{
    "(yes/no)" {send "yes
    ";exp_continue;}
    "password:" {send "hadoop
    ";exp_continue}
    eof    {exit:0;}
    }

    执行:expect -f exp_test.sh

    二、准备内网软件下载服务器

    选择一台服务器(hdp01)作为软件源服务器

    1.安装httpd

    • 查看http是否安装: netstat -nltp
    • 设置自启动:chkconfig httpd on
    • 设置本次启动:service httpd on
    • 查看http是否启动成功: netstat -nltp

    将jdk 放到web服务器下 (将需要的软件放在web服务器下)

    • yum install -y httpd
    • service httpd start
    • chkconfig --level 35 httpd on

    2.设置配置文件

    1)在hdp01机器中
    vi /etc/hosts

    ## 设置所有机器的映射
    192.168.33.101 hdp01
    192.168.33.102 hdp02

    2)将此文件拷贝到其他机器
      scp /etc/hosts hdp02:/etc

    3) 将配置文件拷贝到其他机器上

    • 用户软件放在 /var/www/html/soft/
    • 系统软件放在 /var/www/html/centos/

    挂载软件库:mount -t iso9660 -o loop /dev/cdrom /var/www/html/centos/

    修改配置文件:
    cd /etc/yum.repos.d/
    vi localnet.repo
     

     ## 设置下载地址:
     baseurl=http://hdp01/centos
     ##(通过浏览器:http://hdp01/centos可访问)

    scp localnet.repo hdp03:/etc/yum.repos.d/
    4) 查看yum仓库地址
    yum repolist

    三、软件自动安装脚本

    1.启动脚本

    vi boot.sh

    #!/bin/bash
    
    SERVICES="hdp02 hdp03"
    PASSWORD=hadoop
    BASE_SERVICE=192.168.33.101
    
    ## 实现免密登录配置的函数
    auto_ssh_copy_id(){
    ## 用expect命令进行解析
    expect -c "set timeout -1;
    spawn ssh-copy-id $1;
    expect{
    *(yes/no)*{send --yes
    ;exp_continue;}
    *assword:*{send --$2
    ;exp_continue;}
    eof    {exit 0;}
    }
    "
    }
    
    ssh_copy_id_to_all(){
    for SERVICE in $SERVICES
    do
    auto_ssh_copy_id $SERVICE $PASSWORD
    done
    }
    
    ## 调用免密登录配置函数,实现母鸡到各仔鸡的免密登录配置
    ssh_copy_id_to_all
    
    
    ## 完成分发install.sh 到各仔鸡的操作
    ## 并让仔鸡启动install.sh
    for SERVICE in $SERVICES
    do
    ## 将install.sh拷贝到service的root目录下
    scp install.sh root@SERVICE:/root
    ## 远程执行远程机器上的install.sh上的脚本文件
    ## ssh root@$SERVICE /root/install.sh
    ## ssh root@$SERVICE "sh /root/install.sh"ssh root@$SERVICE "chmod +x /root/install.sh;/root/install.sh"
    done

    2.安装执行脚本


    vi install.sh

    #!/bin/bash
    
    BASE_SERVICE=192.168.33.91
    ## 为本机安装wget命令 -y 免提示
    yum install -y wget
    ## 使用wget从母鸡的web服务器上下载jdk压缩包
    wget $BASE_SERVICE/soft/jdk-7u67-linux-x64.gz
    ## 将下载的压缩包解压缩
    tar -zxvf jdk-7u67-linux-x64.gz -C /usr/local
    ## 修改profile配置文件 注意两个EOF之间指定重定向输入内容,通过cat命令追加到执行文件中
    cat>>/etc/profile<<EOF
    export JAVA_HOME=/usr/local/jdk1.7.0_67
    export PATH=$PATH;$JAVA_HOME/bin
    EOF

    3.执行命令

    在hdp01机器上执行:
    ##设置执行权限
    chmod +x boot.sh install.sh

    ## 生成密钥
    ssh-keygen

    ## 执行免密登录脚本
    ./boot.sh

    在hdp02机器上查看安装情况:
    cd /usr/local/
    cat /ect/profile

  • 相关阅读:
    算法——二分法实现sqrt
    java——>> 和>>>
    算法——求n对()有多少种输出方式?
    算法——得到数据流中前K大的数
    SpringBoot+Rocketmq
    jvm——metaspace代替永久代
    rmq——同步、异步、单向、rocketMQ console、消费模式
    三级缓存架构
    kafka——分布式的消息队列系统
    [bzoj 2957] 楼房重建
  • 原文地址:https://www.cnblogs.com/itbuyixiaogong/p/9708494.html
Copyright © 2011-2022 走看看