zoukankan      html  css  js  c++  java
  • 自动化运维工具Ansible详细部署

      

    自动化运维工具Ansible详细部署

     一、基础介绍

    1、简介

    ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:

    (1)、连接插件connection plugins:负责和被监控端实现通信;

    (2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;

    (3)、各种模块核心模块、command模块、自定义模块;

    (4)、借助于插件完成记录日志邮件等功能;

    (5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

     2、总体架构

     

     

    3、特性

    (1)、no agents:不需要在被管控主机上安装任何客户端;

    (2)、no server:无服务器端,使用时直接运行命令即可;

    (3)、modules in any languages:基于模块工作,可使用任意语言开发模块;

    (4)、yaml,not code:使用yaml语言定制剧本playbook;

    (5)、ssh by default:基于SSH工作;

    (6)、strong multi-tier solution:可实现多级指挥。

    4、优点
    (1)、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
    (2)、批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
    (3)、使用python编写,维护更简单,ruby语法过于复杂;
    (4)、支持sudo。

    5、任务执行流程

     

    二、Ansible基础安装与配置

    1、使用软件仓库安装

    主要的Linux发行版都有自己的软件包管理系统,能帮你自动解决软件包的依赖关系。比如:

    Fedora 、RHEL、CentOS以及兼容的发行版:

    $ sudo yum -y install ansible

    Ubuntu 、Debian,以及兼容发行版:

    $ apt-get install ansible

    注意:Fedora、RHEL、CentOS要配置epel源仓库

           centos为例:

        1》配置epel源仓库:

          便捷的方法就是直接自己手工添加软件仓库配置文件:

          vi /etc/yum.repos.d/epel.repo

          [epel]
          name=epel
          mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-$releasever&arch=$basearch
          enabled=1

          gpgcheck=0

          添加完毕之后:

          yum clean all && yum update

        2》yum安装

          yum -y install ansible

        3》安装完成后,检查ansible版本:

          ansible --version

    2、配置ssh免密码登陆

       1》生成公钥私钥

          ssh-keygen -t rsa

        2》写入信任文件(将/root/.ssh/id_rsa.pub分发到其他服务器,并在所有服务器上执行如下指令)   

           cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

           chmod 600 /root/.ssh/authorized_keys

    3、ansible配置

        1》主机组定义

          /etc/ansible/hosts

           [liudong]

           192.168.77.128

           192.168.79.128

        2》简单测试

          #ansible storm_cluster -m command -a 'uptime'

          

        3》常用模块使用

          (1)、setup

           用来查看远程主机的一些基本信息

           # ansible storm_cluster -m setup

          (2)、ping

           用来测试远程主机的运行状态

           # ansible storm_cluster -m ping

          (3)、file

           ## 设置文件的属性

            相关选项如下:

            force:需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no

            group:定义文件/目录的属组

            mode:定义文件/目录的权限

            owner:定义文件/目录的属主

            path:必选项,定义文件/目录的路径

            recurse:递归设置文件的属性,只对目录有效

            src:被链接的源文件路径,只应用于state=link的情况

            dest:被链接到的路径,只应用于state=link的情况

            state:

                   directory:如果目录不存在,就创建目录

                   file:即使文件不存在,也不会被创建

                   link:创建软链接

                   hard:创建硬链接

                   touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间

                   absent:删除目录、文件或者取消链接文件   

            示例:

            ## 远程文件符号链接创建

            # ansible storm_cluster -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link"

            

            ##远程文件查看信息

            ansible liudong -m command -a "ls -al /tmp/resolv.conf"

              

            ## 远程文件符号链接删除

            # ansible storm_cluster -m file -a "path=/tmp/resolv.conf state=absent"

            

            ##再次查看文件链接

            

            说明:如上显示,代表文件或链接已经删除。

          (4)、copy        

            ## 复制文件到远程主机

            相关选项如下:

            backup:在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:yes|no

            content:用于替代“src”,可以直接设定指定文件的值

            dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录

            directory_mode:递归设定目录的权限,默认为系统默认权限

            force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes

            others:所有的file模块里的选项都可以在这里使用

            src:被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“/”来结尾,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync。

            示例:

            ## 将本地文件“/etc/ansible/ansible.cfg”复制到远程服务器

            ansible liudong -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644"

             

            ## 远程文件信息查看

            ansible liudong -m command -a "ls -al /tmp/ansible.cfg"

            

            (5)、command

            ## 在远程主机上执行命令

            相关选项如下:

            creates:一个文件名,当该文件存在,则该命令不执行

            free_form:要执行的linux指令

            chdir:在执行指令之前,先切换到该目录

            removes:一个文件名,当该文件不存在,则该选项不执行

            executable:切换shell来执行指令,该执行路径必须是一个绝对路径

            示例:

            # ansible liudong -m command -a "uptime"

            

            (6)、shell      

            示例:

            ## 先在本地创建一个SHELL脚本

            # vim /tmp/rocketliu_test.sh

            #!/bin/sh

            date +%F_%H:%M:%S

            #chmod +x /tmp/rocketliu_test.sh

            ## 将创建的脚本文件分发到远程

            # ansible storm_cluster -m copy -a "src=/tmp/rocketliu_test.sh dest=/tmp/rocketliu_test.sh owner=root group=root mode=0755"

            ## 远程执行

            # ansible storm_cluster -m shell -a "/tmp/rocketliu_test.sh"

            (7)、更多模块      

            其他常用模块,比如:service、cron、yum、synchronize就不一一例举,可以结合自身的系统环境进行测试。

            service:系统服务管理

            cron:计划任务管理

            yum:yum软件包安装管理

            synchronize:使用rsync同步文件

            user:系统用户管理

            group:系统用户组管理

    命令:

    ansible xiamen_flx --list-hosts  #列出xiamen_flx组的所有主机

    src=指明本地文件路径

    dest=远程主机上用来引用的路径,通常是绝对路径

    mode=指定权限

    onwer=指定属主

    group=指定数组

            更多模块可以参考:

            #ansible-doc –l

  • 相关阅读:
    September 17th 2016 Week 38th Saturday
    【2016-09-16】UbuntuServer14.04或更高版本安装问题记录
    September 16th 2016 Week 38th Friday
    September 11th 2016 Week 38th Sunday
    September 12th 2016 Week 38th Monday
    September 10th 2016 Week 37th Saturday
    September 9th 2016 Week 37th Friday
    c++暂停
    八皇后问题
    ( 转转)Android初级开发第九讲--Intent最全用法(打开文件跳转页面等)
  • 原文地址:https://www.cnblogs.com/liuyansheng/p/6093139.html
Copyright © 2011-2022 走看看