zoukankan      html  css  js  c++  java
  • centos7---ansible批量部署

    CentOS7系统 ansible自动化部署多台服务器部署

     

    Ansible工作机制

     
     
    从图中可以看出ansible分为以下几个部份:
     
    1> Control Node:控制机器
    2> Inventory:主机清单,配置管理主机列表
    3> Playbooks:剧本、任务编排。根据规则定义多个任务,模块组织结构清晰,由ansible自动执行。
    4> Modules(Core | Custom):模块,用于执行某个具体的任务
    5> connection plugin(连接插件):Ansible通过不同的协议连接到远程主机上,执行指定的命令。默认采用ssh协议连接远程主机。
     

    二、Ansible执行流程

     
    简单理解就是Ansible在运行时,首先读取ansible.cfg中的配置,根据规则获取Inventory中的管理主机列表,并行的在这些主机中执行配置的任务,最后等待执行返回的结果。
     

    ansible的优点

    简单易用,学习门槛低、问题少、安装快、执行快,可进行批量命令和模块扩展,操作完全依赖 SSH 而不需要安装 agent。Ansible 结合 Docker、Mesos、Puppet、Vagrant、Git 等系统可以构建出非常好的自动化运维平台。
     

    ansible的缺点

    简单的设计从而导致没有依赖管理功能,另外当被管理的服务器达到一定数量时,执行效率会大大降低。
     
    一台控制主机:192.168.222.137
     
    三台管理主机:
    l 192.168.222.135
    l 192.168.222.136
    l 192.168.222.129
     
    安装要求:
    l 控制服务器:需要安装 Python2.6/2.7
    l 管理服务器:需要安装 Python2.4 以上版本,若低于 Python2.5 需要安装 pythonsimplejson; 若启用了 selinux,则需要安装 libselinux-python。
     
    临时关闭selinux
    setenforce 0
     
    本次安装基于CentOS7系统环境、Python2.7.5、root用户。
     

    yum安装

    yum -y install epel-release ansible
     

    配置

    控制主机:用于控制其它机器的主机 
    管理主机:被控制主机管理的主机

    配置管理主机

    vim /etc/ansible/hosts
    在hosts文件中添加管理主机的IP地址列表:
     
     
     

    配置控制主机SSH密钥

    在控制主机中生成ssh密钥对
    ssh-keygen -t rsa
     
    一路回车即可在$HOME/.ssh目录下生成id_rsa和id_rsa.put私钥和公钥两个文件。

     
    注: 如果在生成密钥的时候设置了密码,ansible每次执行命令的时候,都会提示输入密钥密码,可通过下面的命令记住密码。
     
    ssh-agent bsh
    ssh-add ~/.ssh/id_rsa
     
     

    将公钥拷贝到管理主机中.ssh/authorized_keys文件中,实现免密码登录远程管理主机

    ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.222.135
    ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.222.136
    ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.222.129
     
    注:ssh-copy-id命令会自动将id_rsa.pub文件的内容追加到远程主机root用户下.ssh/authorized_keys文件中。
     
     
     
     
     

    扩展内容:

    免交互批量分发公钥脚本:
          #!/bin/bash
                 m  /root/.ssh/id_dsa*
                ssh-keygen -t dsa -f /root/.ssh/id_dsa -N ""
     
                for ip in 31 41 7
                do
                sshpass -p333333 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 172.16.1.$ip"
                done            
    done密码ssh-copy-id 指定ssh  17524端口在/root/.ssh/下添加config文件内容为port 17524
     

    检查是否可以进行基于密钥远程管理

       ssh 172.16.1.31 uptime
       免交互批量检查测试脚本
     
       #!/bin/bash/
     
       if [ $# -ne 1 ];then
       echo "input one agrs"
       exit 1
       fi
     
       for ip in 31 41 7 8 9
       do
       echo ===== info 172.16.1.$ip =====
       ssh -p17524 172.16.1.$ip $1
       echo ""
       done

    ansible配置

    vim /etc/ansible/ansible.cfg
     
    1> 禁用每次执行ansbile命令检查ssh key host
    host_key_checking = False
     
    2> 开启日志记录
    log_path = /var/log/ansible.log
     
    3> ansible连接加速配置

     
     

    测试

    最后测试下在三台管理机器批量执行一个date命令
    ansible all -m command -a 'date'

     
     

    主机分组管理

    vim /etc/ansible/hosts
     
     
     
    测试ansible
     
     
     

    #参数解释:

     
    n -i:  指定主机列表文件        
    n -u: 指定远程主机登陆用户        
    n -m:指定使用ansible 的模块                
    n -a: 指定模块下使用的参数        
    n -k: 指定远程登陆用户的密码
     
    测试远程主机状态,查看是否存活
     
    ansible all -m ping
     
     
  • 相关阅读:
    导入导出模块
    jQuery复习
    vue记录
    angular 初探之父子组件之间传递数据
    webpack
    go语言语法记录
    dom元素的滚动(如何实现点击展开更多功能)
    正则回忆录
    Attributes 和 properties区别和联系?
    显示 隐藏DIV的技巧
  • 原文地址:https://www.cnblogs.com/duanlinxiao/p/11078997.html
Copyright © 2011-2022 走看看