本文已参与「新人创作礼」活动,一起开启掘金创作之路。
六、编写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 ********"