shell 脚本实战笔记(6)--集群环境配置检测
1). 背景:
集群部署的时候, 需要一致的配置和环境设置. 对于虚拟机集群, 可以借助镜像拷贝, 复制和还原集群机器. 对与物理机集群而言, 则不一样, 如果机器一多, 多人去操作和配置, 对于成熟精干的团队还好, 对于不熟悉环境的小团队, 由于水平的参差不齐, 往往会导致不一致的环境. 因此无论如何, 写脚本进行自动化的配置和环境校验总是最佳实践.
2). 假设应用场景:
*) 系统环境:
安装CDH5, 集群规模为16台机器, 每台机器16CPU, 内存16G, 2块SATA盘共500G, 操作系统为Centos 6.4.
集群机器, ip范围为192.168.1.101~192.168.1.116.
*) 基本要求
安装CDH5时, 需要满足以下基本要求
#) 需要配置每台机器的/etc/hosts文件, 使得每台机器拥有集群所有机器的域名
#) 需要关闭防火墙, 并禁止开启启动
#) 需要配置本地yum源
#) 磁盘分区尽量满足/mnt/disk{N}的形式
#) 机器时间基本同步
3). 具体实施
*) 配置集群的ssh无登录登录
选择一台中控机(跳板机), 或者集群的某台机器, 作为自动化脚本的发起端, 作为系统管理员, 采用root用户.
#) 本地创建RSA密钥, 产生RSA公钥/私钥对
mkdir -p ~/.ssh
cd ~/.ssh
ssh-keygen -t rsa -P ''
默认生成id_rsa(私钥), id_rsa.pub(公钥)文件
#) 编辑脚本
ssh-copy-id -i id_rsa root@<target_ip>
#! /bin/bash
username="root"
server_ips=(
"192.168.1.101" "192.168.1.102" "192.168.1.103" "192.168.1.104" "192.168.1.105"
"192.168.1.106" "192.168.1.107" "192.168.1.108" "192.168.1.109" "192.168.1.110"
"192.168.1.111" "192.168.1.112" "192.168.1.113" "192.168.1.114" "192.168.1.115"
"192.168.1.116"
) for (( i = 0; i < ${#server_ips[*]}; i++ )); do
ssh-copy-id -i ~/.ssh/id_rsa $username@${server_ips[i]}
done
执行, 当然这步还是痛苦的, 需要手动输入16次密码(16台机器).
#) 开启RSA验证
编辑/etc/ssh/sshd_conf
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys GSSAPIAuthentication no
UseDNS no
前三项, 用于开启RSA服务, 后两项用于解决初始连接SSH响应慢的问题
#) 重启ssh服务
service sshd restart
*) 编写自动化脚本
#! /bin/bash username="root" server_ips=(
"192.168.1.101" "192.168.1.102" "192.168.1.103" "192.168.1.104" "192.168.1.105"
"192.168.1.106" "192.168.1.107" "192.168.1.108" "192.168.1.109" "192.168.1.110"
"192.168.1.111" "192.168.1.112" "192.168.1.113" "192.168.1.114" "192.168.1.115"
"192.168.1.116"
) # description:
# 在各个节点上, 执行命令, 并把执行结果汇总到一个文件中, 便于对比
# params:
# $1 => command, 要执行的命令
# $2 => filename, 要保存输出结果的文件, 用于结果对比
execute_all_servers() {
ssh_command=$1
result_file=$2
echo "start execute..." > $result_file
for (( i = 0; i < ${#server_ips[*]}; i++ )); do
echo "server_ip: ${server_ips[i]}, execute command: '$ssh_command'" >> $result_file
ssh $username@${server_ips[i]} "$ssh_command" >> $result_file
echo "=================================" >> $result_file
done
}
#) 检测/etc/hosts文件
execute_all_servers "cat /etc/hosts" "check_hosts_result.log"
#) 磁盘分区和挂载检测
execute_all_servers "df -h ; fdisk -l" "check_fdisk_result.log"
#) 防火墙关闭检测
execute_all_servers "service iptables status" "check_iptable_result.log"
#) 防火墙关闭命令
execute_all_servers "service iptables stop ; chkconfig --levels 235 iptables off" "stop_iptables_result.log"
其他需要加的环境检测和环境配置, 皆可采用类似的方式去实现, 这并非完美, 只是提供了一种解决思路
shell 脚本实战笔记(6)--集群环境配置检测的更多相关文章
- shell 脚本实战笔记(3)--集群机器的时间同步设置
背景: 有些分布式服务(比如HBase服务), 依赖于系统时间戳, 如果集群各个节点, 系统时间不一致, 导致服务出现诡异的情况. 解决方案: 那如何同步集群各个节点之间的时间? 采用NTP(Netw ...
- EHCache分布式缓存集群环境配置
EHCache分布式缓存集群环境配置 ehcache提供三种网络连接策略来实现集群,rmi,jgroup还有jms.同时ehcache可以可以实现多播的方式实现集群,也可以手动指定集群主机序列实现集群 ...
- Hive在集群环境配置
本文转载自:https://blog.csdn.net/hanjin7278/article/details/53035739 一.简介 hive是基于Hadoop的一个数据仓库工具,可以将结构化的数 ...
- Kafka集群环境配置
Kafka集群环境配置 1 环境准备 1.1 集群规划 Node02 Node03 Node04 zk zk zk kafka kafka kafka 1.2 jar包下载 安装包:kafka_2.1 ...
- RocketMQ的安装配置:配置jdk环境,配置RocketMQ环境,配置集群环境,配置rocketmq-console
RocketMQ的安装配置 演示虚拟机环境:Centos64-1 (D:\linuxMore\centos6_64) root / itcast : 固定IP 192.168.52.128 一,配置J ...
- redis集群环境配置
为什么需要集群 redis是一个开源的 key->value 高速存储系统,但是由于redis单线程运行,在系统中,只能利用单核的性能 当redis的调用越来越频繁时,可能会出现redis过于繁 ...
- 第2章 CentOS7集群环境配置
目录 2.1 关闭防火墙 2.2 设置固定IP 2.3 修改主机名 2.4 添加用户 2.5 修改用户权限 2.6 新建目录 2.7 安装JDK 1.卸载系统自带的JDK 2.安装JDK 2.8 克隆 ...
- HBase 学习之路(四)—— HBase集群环境配置
一.集群规划 这里搭建一个3节点的HBase集群,其中三台主机上均为Regin Server.同时为了保证高可用,除了在hadoop001上部署主Master服务外,还在hadoop002上部署备用的 ...
- HBase 系列(四)—— HBase 集群环境配置
一.集群规划 这里搭建一个 3 节点的 HBase 集群,其中三台主机上均为 Regin Server.同时为了保证高可用,除了在 hadoop001 上部署主 Master 服务外,还在 hadoo ...
随机推荐
- 李明杰视频 SVN
李明杰视频 SVN 就10-12使用技术SVN 源代码会引发哪些问题? 无法后悔:做错一个操作 版本备份:费控件,费时间 版本混乱:因版本备份太多造成混乱 代码冲突:多人操作同一文件 强烈建议 使用源 ...
- POJ 1068 Parencodings 模拟 难度:0
http://poj.org/problem?id=1068 #include<cstdio> #include <cstring> using namespace std; ...
- MySql插入记录时判断
我们在开发数据库相关的逻辑过程中, 经常检查表中是否已经存在这样的一条记录, 如果存在则更新或者不做操作, 如果没有存在记录,则需要插入一条新的记录. 这样的逻辑固然可以通过两条sql语句完成. SE ...
- [开发笔记]-VS2012打开解决方案崩溃或点击项目崩溃
下午在使用VS2012建立Service服务项目时,只要一切换到设计视图页面中,VS就崩溃重启,从网上找了一种方法来解决,测试可行.但导致该问题的原因未知. 解决方案: 步骤1:开始-->所有程 ...
- bzoj 3529 数表 莫比乌斯反演+树状数组
题目大意: 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有自然数之和.给定a,计算数表中不大于a的数之和. ...
- 父元素与子元素之间的margin-top问题(css hack)(转载)
情况: 父元素的盒子包含一个子元素盒子,给子元素盒子一个垂直外边距margin-top,父元素盒子也会往下走margin-top的值,而子元素和父元素的边距则没有发生变化. 解决方法: 1.修改父元素 ...
- 经典线程同步 信号量Semaphore
阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event& ...
- Java基础01 ------ 从HelloWorld到面向对象
Java是完全面向对象的语言.Java通过虚拟机的运行机制,实现“跨平台”的理念.我在这里想要呈现一个适合初学者的教程,希望对大家有用. "Hello World!" 先来看一个H ...
- HDFS权限问题
HDFS权限问题 Win下Eclipse提交hadoop程序出错:org.apache.hadoop.security.AccessControlException: Permission denie ...
- 我们都遇到过的 Replace Blank Space
题目描述: 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 分析: 看到这个题目,我们都会有 ...