ansible 实现自动化部署ambari(纯离线)二

277 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

六、编写playbook

  • playbook支持yaml文件格式,语法也遵循yaml格式vim installAmbari.yaml
---
- hosts: test # 所有机器
  remote_user: root

  tasks:
# 配置host文件
    - name: copy hosts
      copy: src=/opt/srcConfig/system/hosts dest=/etc/hosts
# 执行脚本统一存放路径,有的脚本需要在所有机器本地执行,在所有机器上创建一个脚本存放路径,方便管理
    - name: mkdir shFile dir
      shell: mkdir -p /opt/shFile
# 关闭大页
# 脚本内容见 下面 七 中的closeTHP.sh
    - name: copy closeTHP file
      copy: src=/opt/srcScript/closeTHP.sh dest=/opt/shFile/closeTHP.sh
# 执行脚本
    - name: closeTHP.sh
      shell: sh /opt/shFile/closeTHP.sh
# 修改linux限制
# 脚本内容见 下面 七 中的modifyLimits.sh
    - name: copy modifyLimits file
      copy: src=/opt/srcScript/modifyLimits.sh dest=/opt/shFile/modifyLimits.sh
# 执行脚本
    - name: modifyLimits.sh
      shell: sh /opt/shFile/modifyLimits.sh


- hosts: testmaster # 主节点
  remote_user: root
# 配置ntp服务 安装http
  tasks:
# ntp server配置
# 脚本内容见 下面 七 中的modifyNtpMaster.sh
    - name: copy modifyNtpMaster file # 脚本需要修改 ip网段
      copy: src=/opt/srcScript/modifyNtpMaster.sh dest=/opt/shFile/modifyNtpMaster.sh
# 执行脚本并安装http服务
    - name: modifyNtpMaster.sh install http
      shell: sh /opt/shFile/modifyNtpMaster.sh
    - shell: yum install httpd -y
    - shell: systemctl start httpd
    - shell: systemctl enable httpd

- hosts: testslave # 从节点
  remote_user: root
# 配置ntp服务  
  tasks:
# ntp agent配置
# 脚本内容见 下面 七 中的modifyNtpSlave.sh
    - name: copy modifyNtpSlave file # 脚本中 变量masterIp需要修改 网段也需要修改
      copy: src=/opt/srcScript/modifyNtpSlave.sh dest=/opt/shFile/modifyNtpSlave.sh
# 执行脚本
    - name: modifyNtpSlave.sh
      shell: sh /opt/shFile/modifyNtpSlave.sh
  
- hosts: test # 所有节点
  remote_user: root
# 关闭防火墙 开启ntp服务
  tasks:
    - name: stop disable firewalld & start enable ntpd
      shell: systemctl stop firewalld.service
    - shell: systemctl disable firewalld.service
    - shell: systemctl start ntpd
    - shell: systemctl enable ntpd
# 安装 openssl jdk     
    - name: install openssl
      shell: yum  install openssl -y
# 修改路径 注意修改脚本中对应的路径
    - name: copy jdk
      copy: src=/opt/srcPackage/jdk dest=/opt
# 脚本内容见 下面 七 中的installJdk.sh
    - name: copy installJdk.sh
      copy: src=/opt/srcScript/installJdk.sh dest=/opt/shFile/installJdk.sh
    - name: chmod installJdk.sh
      shell: chmod u+x /opt/shFile/installJdk.sh
# 执行脚本 并刷新环境变量
    - name: sh installJdk.sh
      shell: sh /opt/shFile/installJdk.sh
      register: jdk_status
# 返回安装jdk状态
    - name: show
      debug: var=jdk_status verbosity=0
# 关闭selinux
# 脚本内容见 下面 七 中的closeSelinux.sh
    - name: copy closeSelinux.sh
      copy: src=/opt/srcScript/closeSelinux.sh dest=/opt/shFile/closeSelinux.sh

    - name: sh closeSelinux.sh
      shell: sh /opt/shFile/closeSelinux.sh
      
- hosts: testmaster # 主节点
  remote_user: root

  tasks:
# 安装mysql
# 脚本内容见 下面 七 中的installMysql.sh 安装过程中遇到了比较恶心的问题有兴趣可以看一下 九 问题mysql部分 
# 脚本中需要使用一个my.cnf 配置文件 内容见  八.1
    - name: copy installMysql.sh 
      copy: src=/opt/srcScript/installMysql.sh dest=/opt/shFile/installMysql.sh
# 执行脚本
    - name: sh installMysql.sh
      shell: sh /opt/shFile/installMysql.sh
      register: installMysql_status
# 返回安装mysql状态
    - name: show
      debug: var=installMysql_status verbosity=0
# 配置ambari HDP HDP-UTILS yum源   
# 解压ambari tar 包
    - name: tar -zxvf ambari-2.5.0.3-centos7.tar.gz 
      shell: tar -zxvf /opt/srcPackage/ambari/ambari-2.5.0.3-centos7.tar.gz -C /var/www/html/
# 使用提前准备好的配置文件 注意路径 
# /opt/srcConfig/ambari/ambari.repo 是我提前写好 存放的路径
# 配置文件内容见 八 中 ambari.repo
    - name: copy ambari.repo # 需要修改ip
      copy: src=/opt/srcConfig/ambari/ambari.repo dest=/etc/yum.repos.d/ambari.repo
# 配置文件内容见 八 中 HDP.repo
    - name: copy HDP.repo # 需要修改ip
      copy: src=/opt/srcConfig/ambari/HDP.repo dest=/etc/yum.repos.d/HDP.repo

    - name: tar -zxvf ambari-2.5.0.3-centos7.tar.gz 
      shell: tar -zxvf /opt/srcPackage/ambari/HDP-2.6.5.0-centos7-rpm.tar.gz -C /var/www/html/

#    - name: copy HDP-UTILS-1.1.0.21-centos7.tar.gz 
#      copy: src=/opt/srcPackage/ambari/HDP-UTILS-1.1.0.21-centos7.tar.gz dest=/var/www/html/HDP-UTILS-1.1.0.21-centos7.tar.gz
# 配置文件内容见 八 中 HDP-UTILS.repo
    - name: copy HDP-UTILS.repo # 需要修改ip
      copy: src=/opt/srcConfig/ambari/HDP-UTILS.repo dest=/etc/yum.repos.d/HDP-UTILS.repo
 
    - name: tar -zxvf HDP-UTILS-1.1.0.21-centos7.tar.gz 
      shell: mkdir -p /var/www/html/HDP-UTILS
    - shell: tar -zxvf /opt/srcPackage/ambari/HDP-UTILS-1.1.0.21-centos7.tar.gz -C /var/www/html/HDP-UTILS
# 配置 mysql-connector
    - name: cp mysql-connector-java-5.1.47.jar
      copy: src=/opt/srcPackage/mysql/mysql-connector-java-5.1.47.jar dest=/usr/share/java/mysql-connector-java.jar

# 安装 ambari-server
    - name: install ambari-server
      shell: yum install ambari-server -y
# 配置mysql 注意mysql密码为自己修改的
    - name: Configure MySQL
      shell: ln -s /usr/local/mysql/bin/mysql /usr/bin
    - shell: mysql -e"use mysql;GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION" -p123456 -h127.0.0.1
    - shell: mysql -e"CREATE USER ambari IDENTIFIED BY '123456'" -p123456 -h127.0.0.1
    - shell: mysql -e"CREATE DATABASE ambari" -p123456 -h127.0.0.1
# 执行ambari的sql脚本 路径默认是一样的
    - shell: mysql  -uroot -p123456 -h127.0.0.1 ambari < /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql
# 赋权
    - shell: mysql -e"grant ALL on ambari.* to ambari;flush  privileges" -uroot -p123456 -h127.0.0.1
# 这一部分是我第一次 ambari-server setup的时候使用expect 进行配置的
# 但是由于每次setup步骤不是固定的,老是出现问题 我这里就换成使用配置文件的方式了
# install expect
#    - name: install expect
#      shell: yum install expect -y
# ambari-server setup 启动ambari-server
#    - name: copy ambari-server setup Script
#      copy: src=/opt/srcScript/ambariSetup-expect.sh dest=/opt/shFile/ambariSetup-expect.sh
#    - name: ambari-server setup
#      shell: expect /opt/shFile/ambariSetup-expect.sh
#    - shell: ambari-server start

# 配置文件内容见 八 中的 ambari.properties 注意该文件的权限为  -rwxr-xr-x.
# password.dat 文件内容为 mysql密码 权限为 -rw-r-----
    - name: ambari-server setup
      shell: cat /opt/srcConfig/ambari/ambari.properties > /etc/ambari-server/conf/ambari.properties
    - shell: cp /opt/srcConfig/ambari/password.dat /etc/ambari-server/conf/
    - name: start ambari-server
      shell: ambari-server start
      register: ambari_server_status
# 返回ambari-server启动状态
    - name: show
      debug: var=ambari_server_status verbosity=0
- hosts: testslave # 从节点
  remote_user: root

  tasks:

    - name: copy ambari.repo
      copy: src=/opt/srcConfig/ambari/ambari.repo dest=/etc/yum.repos.d/ambari.repo
    
    - name: copy HDP.repo
      copy: src=/opt/srcConfig/ambari/HDP.repo dest=/etc/yum.repos.d/HDP.repo

    - name: copy HDP-UTILS.repo
      copy: src=/opt/srcConfig/ambari/HDP-UTILS.repo dest=/etc/yum.repos.d/HDP-UTILS.repo

#    - name: install ambari-agent
#      shell: yum install ambari-agent -y

- hosts:test # 所有节点
  remote_user: root

  tasks:
    - name: install ambari-agent
      shell: yum install ambari-agent -y
    - name: ambari-agent.ini
      shell: sed -i 's/localhost/node01/g' /etc/ambari-agent/conf/ambari-agent.ini  # 应把 node01 改为 ambari-server 节点主机名
    - shell: sed -i 's/verify=platform_default/verify=disable/' /etc/python/cert-verification.cfg
    - shell: sed -i "53 iforce_https_protocol=PROTOCOL_TLSv1_2" /etc/ambari-agent/conf/ambari-agent.ini
    - name: start ambari-agent
      shell: /etc/init.d/ambari-agent start
      register: ambari_agent_status
#返回ambari-agent启动状态
    - name: show
      debug: var=ambari_agent_status verbosity=0

七、附件-脚本

1.closeTHP.sh

#! /bin/bash
echo "******** CLOSE THP *********"
echo "if test -f /sys/kernel/mm/transparent_hugepage/enabled; then" >> /etc/rc.d/rc.local
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.d/rc.local
echo "fi" >> /etc/rc.d/rc.local
echo "if test -f /sys/kernel/mm/transparent_hugepage/defrag; then" >> /etc/rc.d/rc.local
echo "echo never > /sys/kernel/mm/transparent_hugepage/defrag" >> /etc/rc.d/rc.local
echo "fi" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
echo "******** END ********"

2.modifyLimits.sh

#! /bin/bash
echo "******** Modify system limits ********"
echo "* soft nofile 1024000" >> /etc/security/limits.conf
echo "* hard nofile 1024000" >> /etc/security/limits.conf
echo "hive   - nofile 1024000" >> /etc/security/limits.conf
echo "hive   - nproc  1024000" >> /etc/security/limits.conf
echo "******** END ********"

3.modifyNtpMaster.sh

#! /bin/bash
#文件具体怎么修改可参考 我前面安装ntp负的文章
echo "******** MODIFY NTP MASTER CONFIG ********"
localIp=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"|grep "192.168.111"`
file=/etc/ntp.conf
# 行数需按具体情况修改
sed -i "21,24s/^/#/" $file

sed '13 irestrict '$localIp' nomodify notrap nopeer noquery' -i $file
sed '20 irestrict 192.168.111.1 mask 255.255.255.0 nomodify notrap' -i $file
sed '27 iserver 127.127.1.0' -i $file
sed '28 iFudge 127.127.1.0 stratum 10' -i $file

echo "******** END ********" 

4.modifyNtpSlave.sh

#! /bin/bash

echo "******** MODIFY NTP MASTER CONFIG ********"
# ip需改为 ntpserver节点ip
masterIp="10.20.10.129"
# 10.20.10 需改为集群节点所在网段
localIp=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"|grep "10.20.10"`
file=/etc/ntp.conf

sed -i "21,24s/^/#/" $file

sed '13 irestrict '$localIp' nomodify notrap nopeer noquery' -i $file
# 10.20.10.1 需改为集群网关
sed '20 irestrict 10.20.10.1 mask 255.255.255.0 nomodify notrap' -i $file
sed '27 iserver '$masterIp -i $file
sed '28 iFudge '$masterIp' stratum 10' -i $file

echo "******** END ********"     

5.installJdk.sh

#! /bin/bash
echo "******** JDK ********"
tar -xvf /opt/jdk/jdk-8u201-linux-x64.tar.gz -C /opt/jdk
# 我这里是没有配置过环境变量的新机器,所以可以直接在/etc/profile 后追加
# 如果已经有环境变量可根据具体情况使用sed -i等命令配置
echo "export JAVA_HOME=/opt/jdk/jdk1.8.0_201" >> /etc/profile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile
echo "export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar" >> /etc/profile

rm -rf /usr/bin/java
rm -rf /usr/bin/javac
#hostname=`"hostname"`
#ssh $hostname "source /etc/profile;java -version;exit"
source /etc/profile
echo "******* JDK installation completed ********"

6. closeSelinux.sh

#! /bin/bash
echo "******** CLOSE SELINUX *********"
setenforce 0
file=/etc/selinux/config
sed -i "7s/^/#/" $file
sed '7 iSELINUX=disabled' -i $file
echo "******** END ********"

7.installMysql.sh

#! /bin/bash
echo "******** INSTALL MYSQL *********"
#卸载原有的mariadb
OLD_MYSQL=`rpm -qa|grep mariadb`
profile=/etc/profile
for mariadb in $OLD_MYSQL
do
	rpm -e --nodeps $mariadb
done
#删除原有的my.cnf
rm -rf /etc/my.cnf
#添加用户组 用户
groupadd mysql
useradd -g mysql mysql

#解压mysql包并修改名称
tar -zxvf /opt/srcPackage/mysql/mysql-5.7.27-el7-x86_64.tar.gz -C /usr/local
mv /usr/local/mysql-5.7.27-el7-x86_64 /usr/local/mysql
#更改所属的组和用户
chown -R mysql /usr/local/mysql
chgrp -R mysql /usr/local/mysql

mkdir -p /usr/local/mysql/data
chown -R mysql:mysql /usr/local/mysql/data

#粘贴配置文件my.cnf 内容见八 中的 my.cnf
cp /opt/srcConfig/mysql/my.cnf /usr/local/mysql/

# 安装mysql
/usr/local/mysql/bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/

#设置文件及目录权限:
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chown 777 /usr/local/mysql/my.cnf
chmod +x /etc/init.d/mysqld

mkdir /var/lib/mysql
chmod 777  /var/lib/mysql

#启动mysql
/etc/init.d/mysqld start

#设置开机启动
chkconfig --level 35 mysqld on
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld

#修改环境变量 
#行数需根据实际情况修改
sed '78s/$/&:\/usr\/local\/mysql\/bin/' -i $profile
mysqlPw=`sed -n 2p /root/.mysql_secret`
mysqlPwTMP=`sed -n 2p /root/.mysql_secret`1
mysqlNewPw=123456
hostname=`"hostname"`
#ssh $hostname "source /etc/profile;java -version"
ssh $hostname "source /etc/profile;mysqladmin -h127.0.0.1 -uroot -p'$mysqlPw' password '$mysqlPwTMP';mysqladmin -h127.0.0.1 -uroot -p'$mysqlPwTMP' password '$mysqlNewPw';exit"


echo "******** MYSQL installation completed ********"