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)--集群环境配置检测的更多相关文章

  1. shell 脚本实战笔记(3)--集群机器的时间同步设置

    背景: 有些分布式服务(比如HBase服务), 依赖于系统时间戳, 如果集群各个节点, 系统时间不一致, 导致服务出现诡异的情况. 解决方案: 那如何同步集群各个节点之间的时间? 采用NTP(Netw ...

  2. EHCache分布式缓存集群环境配置

    EHCache分布式缓存集群环境配置 ehcache提供三种网络连接策略来实现集群,rmi,jgroup还有jms.同时ehcache可以可以实现多播的方式实现集群,也可以手动指定集群主机序列实现集群 ...

  3. Hive在集群环境配置

    本文转载自:https://blog.csdn.net/hanjin7278/article/details/53035739 一.简介 hive是基于Hadoop的一个数据仓库工具,可以将结构化的数 ...

  4. Kafka集群环境配置

    Kafka集群环境配置 1 环境准备 1.1 集群规划 Node02 Node03 Node04 zk zk zk kafka kafka kafka 1.2 jar包下载 安装包:kafka_2.1 ...

  5. RocketMQ的安装配置:配置jdk环境,配置RocketMQ环境,配置集群环境,配置rocketmq-console

    RocketMQ的安装配置 演示虚拟机环境:Centos64-1 (D:\linuxMore\centos6_64) root / itcast : 固定IP 192.168.52.128 一,配置J ...

  6. redis集群环境配置

    为什么需要集群 redis是一个开源的 key->value 高速存储系统,但是由于redis单线程运行,在系统中,只能利用单核的性能 当redis的调用越来越频繁时,可能会出现redis过于繁 ...

  7. 第2章 CentOS7集群环境配置

    目录 2.1 关闭防火墙 2.2 设置固定IP 2.3 修改主机名 2.4 添加用户 2.5 修改用户权限 2.6 新建目录 2.7 安装JDK 1.卸载系统自带的JDK 2.安装JDK 2.8 克隆 ...

  8. HBase 学习之路(四)—— HBase集群环境配置

    一.集群规划 这里搭建一个3节点的HBase集群,其中三台主机上均为Regin Server.同时为了保证高可用,除了在hadoop001上部署主Master服务外,还在hadoop002上部署备用的 ...

  9. HBase 系列(四)—— HBase 集群环境配置

    一.集群规划 这里搭建一个 3 节点的 HBase 集群,其中三台主机上均为 Regin Server.同时为了保证高可用,除了在 hadoop001 上部署主 Master 服务外,还在 hadoo ...

随机推荐

  1. MySQL事务隔离级别详解

    原文地址:http://xm-king.iteye.com/blog/770721 SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的.低级别的隔离级 ...

  2. Kafka简要图解

    LinkedIn贡献的分布式消息系统 - 请参考这里 kafka集群:producer写入消息,consumer读取消息 消息分为不同主题,每个主题可以分为多个partition(并行),每个part ...

  3. bzoj 2330: [SCOI2011]糖果

    #include<cstdio> #include<iostream> using namespace std; ],next[],u[],v[],h,t,a[]; ],f[] ...

  4. POJ 2240 && ZOJ 1082 Arbitrage 最短路,c++ stl pass g++ tle 难度:0

    http://poj.org/problem?id=2240 用log化乘法为加法找正圈 c++ 110ms,g++tle #include <string> #include <m ...

  5. 一模 (2) day2

    第一题: 题目大意:给出n种物品和每种物品的件数,求拿k件的方案数.N<=30 解题过程: 1.一开始总想着是组合数学的模型,结果怎么都想不出来..然后写了个爆搜,数据很弱,只有1个点超时. 2 ...

  6. C#获取指定日期为一年中的第几周

    /// <summary> /// 获取指定日期,在为一年中为第几周 /// </summary> /// <param name="dt">指 ...

  7. asp.net mvc 2.o 中使用JQuery.uploadify

    From:http://www.cnblogs.com/strugglesMen/archive/2011/07/01/2095916.html 官方网站http://www.uploadify.co ...

  8. 开始接触BT5-自动登录X界面

    第一种,直接登录root用户的图形界面,不用输入密码 1,安装rungetty 1 # apt-get install rungetty 2,编辑/etc/init/tty1.conf root@bt ...

  9. ognl表达式root中取值顺序

    不加#,先从栈顶取,如果没有(是没有这个属性而不是这个属性没有值),再往下取. 如果栈顶和非栈顶的对象拥有同一个属性名称,想直接取非栈顶的属性可以在ognl中用#root[i].属性名,可以取到属性的 ...

  10. 如何搭建MVC + EF 框架

    1.搭建MVC框架 1.1 VS2010:需要安装WPI 安装 ASP.NET MVC 4 和Visual Studio 2010 系统必备组件 如果上述链接无法打开,请访问:http://www.a ...