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

707 阅读4分钟

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

前言

本文有本人指导,Mr.Lu_1实践完成

一、业务场景

大规模集群(几十上百台服务器)搭建ambari,频繁更换登录服务器操作不便并且容易出现操作失误的情况,集群特点是环境基本一致,各节点的操作大部分相同,由此想到做一键部署脚本。

二、选用技术

  1. ansible:新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。执行命令基于ssh
  2. shell :安装各种依赖使用ansible调用shell脚本的方式

三、准备

这里我选用的纯离线安装方式,原因主要是受网络限制 需要下载的依赖包:

  1. ambari-2.5.0.3-centos7.tar.gz
  2. HDP-2.6.5.0-centos7-rpm.tar.gz
  3. HDP-UTILS-1.1.0.21-centos7.tar.gz
  4. ansible-2.4-rpms.el7.tar.gz(包含安装ansible各种依赖)
  5. mysql-5.7.27-el7-x86_64.tar.gz
  6. mysql-connector-java-5.1.47.jar
  7. jdk-8u201-linux-x64.tar.gz (版本根据项目需求自己选择)

四、服务器准备

  • 我这里用了10台centos7.2的没有装过任何软件的服务器

五、配置步骤

1、配置网卡(所有节点)

  • “DEVICE”:网卡对应的设备别名,如ifcfg-eth0第一块网卡;
  • “HWADDR”:网卡物理地址;
  • “BOOTPROTO”:网卡获得ip地址的方式,Static(静态 ip地址)dhcp(通过dhcp协议获取ip) bootip通过bootp协议获得的ip地址;
  • “IPADDR”: 网 卡 IP 地 址 ; “NETMASK”:网卡对应网络掩码;
  • “NETWORK”:网卡对应的网络地址;
  • “ONBOOT”:系统启动时是否设置此网络接口,设置为yes时,系统启动时激活此设备。默认设置 为yes;
  • “DNS”:配置该网络环境下的DNS。 保存上述编辑内容,运行如下命令重启network服务。
service network restart
  • 上传下载好的依赖包 我这边是放在/opt下了
[root@node01 opt]# ll
total ……
drwxr-xr-x. 2 root root      4096 May 20 17:37 playbook # 存放ansible执行playbook文件
drwxr-xr-x. 5 root root      4096 May 20 17:44 srcConfig # 存放实现准备好的配置文件(具体内容放在步骤里)
drwxr-xr-x. 6 root root      4096 May 20 11:57 srcPackage # 存放依赖包
drwxr-xr-x. 2 root root      4096 May 21 10:08 srcScript # 所有编写脚本文件夹(下面的所有脚本都放在这里)

2、配置hosts映射(主节点)

  • 先配好hostname
  • 配置/etc/hosts,编写以下脚本并执行vim addHosts.sh
#! /bin/bash
echo "******** add host -> hosts ********"
# ip 和 hostname 应改为集群对应的
echo "192.168.111.201 node01" >> /etc/hosts
echo "192.168.111.202 node02" >> /etc/hosts
echo "192.168.111.203 node03" >> /etc/hosts
echo "192.168.111.204 node04" >> /etc/hosts
echo "192.168.111.205 node05" >> /etc/hosts
echo "192.168.111.206 node06" >> /etc/hosts
echo "192.168.111.207 node07" >> /etc/hosts
echo "192.168.111.208 node08" >> /etc/hosts
echo "192.168.111.209 node09" >> /etc/hosts
echo "192.168.111.210 node10" >> /etc/hosts
cp /etc/hosts /opt/srcConfig/system/ 
# 拷贝到配置文件源目录,这里只是方便管理统一的配置文件,非必要操作
echo "******** END ********"

优化详见这里

3、配置主节点到各个机器的ssh(主节点)

  • 编写ssh脚本
  • vim sshScript.sh
#! /bin/bash
ssh-keygen -t rsa
# 192.168.111 改为集群所在网段(和hosts中配置对应)
ALL_CLIENTS=`cat /etc/hosts| grep "192.168.111" | awk '{print $2}'`
for client in $ALL_CLIENTS
do
        echo "=============copy-ssh-id $client============="
        ssh-copy-id $client
done                    
  • 此脚本执行的时候需要与人员交互(输入各节点服务器密码),机器比较多的时候可以考虑使用expect

4、安装ansible

  • 依赖包位置
/opt/srcPackage/ansible/ansible-2.4-rpms.el7.tar.gz
  • 编写安装ansible脚本 vim installAnsible.sh
tar -xzvf /opt/srcPackage/ansible/ansible-2.4-rpms.el7.tar.gz -C /opt/srcPackage/ansible/
cd /opt/srcPackage/ansible/ansible-2.4-rpms.el7

rpm -ivh PyYAML*rpm libyaml*rpm python-babel*rpm python-backports*rpm python-backports-ssl_match_hostname*rpm python-cffi*rpm python-enum34*rpm python-httplib2*rpm python-idna*rpm python-ipaddress*rpm python-jinja2*rpm python-markupsafe*rpm python-paramiko*rpm python-passlib*rpm python-ply*rpm python-pycparser*rpm python-setuptools*rpm python-six*rpm python2-cryptography*rpm python2-jmespath*rpm python2-pyasn1*rpm sshpass*rpm --nodeps --force

rpm -ivh ansible-2.4.2.0-2.el7.noarch.rpm
ansible --version

5、配置ansible的hosts(ansible使用的ip和定义主机组的映射)

  • 编写配置脚本vim addAnsibleHosts.sh
#! /bin/bash
echo "******** add ansible host -> ansible hosts ********"
# ip 和 hostname 应改为集群对应的
echo "[test]" >> /etc/ansible/hosts # 主机组(所有节点)名称
echo "192.168.111.201" >> /etc/ansible/hosts
echo "192.168.111.202" >> /etc/ansible/hosts
echo "192.168.111.203" >> /etc/ansible/hosts
echo "192.168.111.204" >> /etc/ansible/hosts
echo "192.168.111.205" >> /etc/ansible/hosts
echo "192.168.111.206" >> /etc/ansible/hosts
echo "192.168.111.207" >> /etc/ansible/hosts
echo "192.168.111.208" >> /etc/ansible/hosts
echo "192.168.111.209" >> /etc/ansible/hosts
echo "192.168.111.210" >> /etc/ansible/hosts

echo "[testmaster]" >> /etc/ansible/hosts # 主机组(主节点)名称
echo "192.168.111.201" >> /etc/ansible/hosts

echo "[testslave]" >> /etc/ansible/hosts # 主机组(从节点)名称
echo "192.168.111.202" >> /etc/ansible/hosts
echo "192.168.111.203" >> /etc/ansible/hosts
echo "192.168.111.204" >> /etc/ansible/hosts
echo "192.168.111.205" >> /etc/ansible/hosts
echo "192.168.111.206" >> /etc/ansible/hosts
echo "192.168.111.207" >> /etc/ansible/hosts
echo "192.168.111.208" >> /etc/ansible/hosts
echo "192.168.111.209" >> /etc/ansible/hosts
echo "192.168.111.210" >> /etc/ansible/hosts

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

优化详见这里