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 -
spawn ssh localhost;
expect{
"(yes/no)" {send "yes\r";exp_continue;}
"password:" {send "hadoop\r";exp_continue}
eof {exit:;}
}
执行: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 $;
expect{
*(yes/no)*{send --yes\r;exp_continue;}
*assword:*{send --$\r;exp_continue;}
eof {exit ;}
}
"
} 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..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
Linux集群软件安装实战的更多相关文章
- 【Spark】---- 在Linux集群上安装和配置Spark
1 安装JDK 1) 进入JDK官网 2) 下载JDK安装包 3)配置环境变量,在/etc/profile增加以下代码 JAVA_HOME=/home/hadoop/jdk1.6.0_38 PAT ...
- (转)linux下weblogic12c集群的安装部署
本文介绍linux下weblogic12c集群的安装部署,版本12c,其他版本操作会有所不同,但其大体操作基本都是一样的 关于weblogic的集群,在此就不多做介绍了,如果有不了解的朋友可以百度搜索 ...
- 负载均衡集群企业级应用实战—LVS
一.负载均衡集群介绍 1.集群 ① 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技 ...
- 项目实战:负载均衡集群企业级应用实战—LVS详解
目录 一.负载均衡集群介绍 二.lvs 的介绍 三.LVS负载均衡四种工作模式 1.NAT工作模式 2.DR工作模式 3.TUN工作模式 4.full-nat 工作模式 5.四者的区别 四.LVS i ...
- Istio(二):在Kubernetes(k8s)集群上安装部署istio1.14
目录 一.模块概览 二.系统环境 三.安装istio 3.1 使用 Istioctl 安装 3.2 使用 Istio Operator 安装 3.3 生产部署情况如何? 3.4 平台安装指南 四.Ge ...
- linux集群时钟问题
一.ntpd与ntpdate的区别: 摘自:ntpd与ntpdate的区别 - 百事乐 - 博客园 http://www.cnblogs.com/liuyou/archive/2012/07/29/ ...
- Linux 集群
html,body { } .CodeMirror { height: auto } .CodeMirror-scroll { } .CodeMirror-lines { padding: 4px 0 ...
- 实验室 Linux 集群的管理常用命令
实验室有一个Linux集群,本文做一下记录. SSH相关命令 通过SSH登录集群中的其他机器上的操作系统(或虚拟机中的操作系统).操作系统之间已经设置免密码登录. 1. 无选项参数运行 SSH 通常使 ...
- 基于VMware的虚拟Linux集群搭建-lvs+keepalived
基于VMware的虚拟Linux集群搭建-lvs+keepalived 本文通过keepalived实现lvsserver的的双机热备和真实server之间的负载均衡.这方面的blog挺多,可是每一个 ...
随机推荐
- Upgrade to 17.1 from 17.0 problem:UnicodeEncodeError: 'ascii' codec can't encode character '\xc4' in position 50: ordinal not in range(128)
最近 gentoo 从 17.0 更新到 17.1, 需要手动进行升级配置,使用 unsymlink-lib -p --finish 这一步的时候报错,报错如下: /usr/lib/python-ex ...
- spring boot rest 接口集成 spring security(1) - 最简配置
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- spring boot输入数据校验(validation)
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- Postgres psql: 致命错误: 角色 "postgres" 不存在
问题再现 当前环境: postgresql: 11.5 windows 10 企业版LTSC 64位 当运行"C:\Program Files\PostgreSQL\11\scripts\r ...
- 18 12 06 sql 的 基本语句 查询 条件查询 逻辑运算符 模糊查询 范围查询 排序 聚合函数 分组 分页 连接查询 自关联 子查询
-- 数据的准备 -- 创建一个数据库 create database python_test charset=utf8; -- 使用一个数据库 use python_test; -- 显示使用的当前 ...
- C++保存数据到CSV文件
主要是今天工作的时候需要把一些数据保存到本地,因为是一些预测值和标签的对比,还有预测值的概率,所以想到用CSV文件来保存,大概查了一下,还是比较简单的,所以记录一下. 首先要说明的是CSV文件有点类似 ...
- Git 小课堂 002——别名
昨天我们聊了聊 Git 的文件存储,今天我们聊聊 Git 的别名.不知道你是不是熟悉别名,如果你经常使用命令行做一些事情,有一些复杂的命令,或者是一些简单的操作,往往用一些别名方法就很方便很容易,下面 ...
- ZOJ 3765 Lights (zju March I)伸展树Splay
ZJU 三月月赛题,当时见这个题目没辙,没学过splay,敲了个链表TLE了,所以回来好好学了下Splay,这道题目是伸展树的第二题,对于伸展树的各项操作有了更多的理解,这题不同于上一题的用指针表示整 ...
- nginx worker进程循环
worker进程启动后,其首先会初始化自身运行所需要的环境,然后会进入一个循环,在该循环中不断检查是否有需要执行的事件,然后处理事件.在这个过程中,worker进程也是需要与master进程交互的,更 ...
- bootstrap 支持的JavaScript插件
一次性导入: Bootstrap提供了一个单一的文件,这个文件包含了Bootstrap的所有JavaScript插件,即bootstrap.js(压缩版本:bootstrap.min.js). 具体使 ...