003-Ambari一键自动化部署脚本

根据前两篇 “Ambari大数据平台搭建利器(一)&(二)”, 我们已经完成大数据平台的搭建,但是我们发现安装Ambari的步骤比较繁琐。我们发现手动部署存在以下的劣势:

  • 每个节点都要执行重复的命令,我们前两篇测试的节点只有三个,如果生产环境有上百个节点,这也是工作量比较大的一件事。
  • 如果是基于项目的平台,如果有几十甚至上百个客户,安装平台就是一件比较麻烦的事。
  • 如果我们修改了源代码,在测试环境中,很有可能要来回卸载,安装。
  • 人工操作会有一定的风险。

基于上述,我们打算写一套脚本,主要是安装Ambari server和agent,以及前期的环境检查,准备,修复,卸载。

注:如果只是个人测试学习,或者基于云端部署一套大数据平台,可以手动操作,这种场景是一次性的操作,并且之后很少再重新部署。

本篇主要是基于前两篇的基础上做的,因此需要对前两篇内容需要了解一下。

整体流程

环境检查:检查服务安装的每个节点是否满足安装Ambari的条件,如JDK,OpenSSL,Ambari Server需要检查PostgreSQL等等。

环境修复:如果某些节点或者所有节点不满足安装条件,则需要通过修复来满足安装条件,如JDK没有安装,则需要安装JDK,并且设置环境变量。

安装Ambari:如果条件满足,则在指定的节点安装Ambari Server以及在每个节点安装Ambari agent。

卸载Ambari:卸载Ambari Server及Ambari agent。

技术选型

  • 编程语言:Python
  • 由于要在每个节点执行相同的命令(Server和Agent有区别),所以要选一种封装了SSH的库,我们选择Python中的Fabric。
  • 脚本是运行在安装Ambari Server的节点上的,为了不影响原系统中的Python,我们需要在脚本中搭建Python虚拟环境。

技术实现

  • 配置文件

配置文件主要配置了程序中需要读取的静态属性。

[node_host]: 配置安装agent的节点IP和主机名

节点IP=主机名,如 192.168.163.130 = bigdata001

[domain_name]: 域名配置后缀

suffix = 域名后缀,如 suffix = bdp.com

[host_certification]: 操作用户名密码

host_user = 用户名

host_password = 密码

[server_host]: Ambari Server 安装主机IP

server_ip = 主机IP

[language]: 配置安装时的语言

language = zh_CN

#language = en_US

[ntp]: 配置ntp时间同步server,如果没有配置该项,并且在外网连通的情况下会读取网络时间

#ntp_server = 192.168.163.130

[resource_path]:源相关配置

main_version = 2.6.2.0 #Ambar大i版本号

min_version = 155 #Ambari小版本号

yum_host_ip = 192.168.70.52 #yum源地址

HDP = ambari,HDP,HDP-UTILS #Ambari源的文件夹

[java_home]: JDK 安装路径

java_home = /opt/jdk1.8.0_111

[python_virtual_path]:Python虚拟环境路径

py_path = ~/py_virtual

[software_package]:环境修复,虚拟环境所依赖的软件包

jdk = jdk-8u102-linux-x64.tar.gz

openssl = openssl-1.1.0a.tar.gz

postgresql = postgresql-9.2.15.tar.gz

httpd = httpd-2.2.31.tar.gz

python = Python-2.7.5.tgz

ruby = ruby-2.0.0.tar.gz

ntp = ntp-service-centos7.tar.gz

setuptools = setuptools-36.0.0.tar.gz

ecdsa = ecdsa-0.13.tar.gz

pycrypto = pycrypto-2.6.1.tar.gz

paramiko = paramiko-1.17.2.tar.gz

[remove]:卸载时所删除的包,目录,用户等信息

#############卸载安装包(RPM包)###############

remove_package = hadoop_2*,hdp-select*,ranger*,zookeeper*,bigtop*,atlas-metadata*,ambari-agent,postgresql*,spark*,smartsense-hst,ambari-metrics*,ambari-infra*,ambari-logsearch*,opentsdb*,redis*,hbase*,tez*,hive*,pig*,sqoop*,storm*,flume*,kafka*,zeppelin*,mahout*,slider*,cassandra*,phoenix*,extjs*,knox*,oozie*,accumulo*,elasticsearch_*,mysql_*,mycat_*,keepalived_*,haproxy_*,logstash_*,kibana_*,solr_*,rstudio-server_*,ceph*,kylin_*,greenplum_*

#################删除用户##########################

remove_user = ambari-qa,ams,falcon,flume,hbase,hcat,hdfs,hive,kafka,livy,mahout,mapred,oozie,opentsdb,redis,spark,sqoop,tez,yarn,zeppelin,zookeeper,cassandra,infra- solr,storm,livy,logsearch,knox,atlas,kms,ranger,accumulo,elasticsearch,mysqldb,mycat,keepalived,haproxy,logstash,kibana,solr,rstudio-server,ceph,kylin,gpadmin

####################删除目录###############################

remove_dir = /etc/,/var/lib/,/tmp/,/usr/lib/,/var/log/,/var/run/,/var/tmp/,/usr/bin/,/tmp/,/var/,/opt/,/data/

########################删除文件##################################

remove_file=ambari*,ams*,falcon*,flume*,hadoop*,hbase*,hive*,kafka*,oozie*,opentsdb*,postgresql,spark*,sqoop*,zeppelin,zookeeper*,storm*,smartsense,hadoop*,phoenix*,redis,slider,tez*,pig*,pgsql,cassandra,webhcat,mahout,hcat,accumulo*,hdfs*,mapred*,ranger*,slider*,atlas*,yarn*,worker-lanucher,beeline,logsearch*,knox*,ranger*,elasticsearch,mysqldb,mycat,keepalived,haproxy,logstash,kibana,solr,service_solr,rstudio-server,ceph,kylin,greenplum

########################删除特殊目录#########################################

spec_dir = /usr/hdp,/hadoop,/kafka*,/usr/share/HDP-oozie,/var/local/osd*,/etc/systemd/system/multi-user.target.wants/ceph-osd@*.service

以上就是配置文件内容及说明。

  • Python虚拟环境

思路很简单,期实现就是将系统中的Python重新拷贝一份到指定目录下,然后将Fabric及依赖包进行安装,每次运行时都会去检查配置的虚拟环境路径是否存在,如果存在则直接使用,不存在则创建虚拟环境。

  • 环境检查

我们在该脚本中环境检查项主要包括:JDK,Python,OpenSSL,Httpd,最大文件数,NTP,防火墙,SELinux,SSH,主机名,HOSTS文件,PGSQL,PackageKit。每项检查失败都有对应的修复。

我们以检查防火墙是否关闭为例,来说明环境检查的过程。

check_firewall_status()方法是整个检查的核心部分。

1. 在每个节点执行检查防火墙状态的命令:firewall-cmd status (不同的操作系统,检查的命令略微有区别)

2. 判断返回的内容,如果是 "not runnind" 则表示防火墙已处于关闭的状态。如果返回值为 “command not found” 则表示未安装防火墙指令(一般这种情况比较少,因为系统默认会有安装)。

3. 如果2中的条件都没有满足,则防火墙就处于 running 状态,将改信息写入到临时文件中,在后续修复环境时需要读取改文件。

checkfirewallstatus()方法是利用Fabric的特性,在指定节点执行该方法。

@parallel :表示并行执行

@Roles("remote") : 表示在指定的角色上执行盖方法,其中remote我们配置的所有机器的IP。

上述方法就表示在remote角色中配置的节点上并行执行该方法。

  • 环境修复

我们还是接上面的关闭防火墙来说明环境修复的过程

首先判断firewall是否在临时文件中,如果在则执行修复方法。

修复的过程也就是执行关闭防火墙的过程。

  • 删除Ambari 及安装组件

删除的场景

1. 彻底删除Ambari及全部组件

2. 安装失败,某些节点安装失败,这时候需要删除安装失败的,保留安装成功的,我们在这称为回滚(roll-back)

删除Ambari Server

回滚删除,只删除server,已安装成功的节点不进行删除

删除组件及用户信息

整体运行演示截图:

1. 环境检查,发现防火墙未关闭

2. 修复环境

3.重新检查

4.安装Ambari

5. 安装过程

6. 安装完成

7. 访问http://bigdata001:8080 进行验证,安装组件

8. 卸载Ambari Server和Agent

以上就是Ambari一键自动化部署脚本的思路和演示,下一篇我们将对Ambari的源代码结构进行说明。

扫描二维码,关注BearData

猜你喜欢

转载自blog.csdn.net/zhangxiongcolin/article/details/81569710