美文网首页
ansible--使用ansible进行lnmp环境部署

ansible--使用ansible进行lnmp环境部署

作者: 妙哇_种字 | 来源:发表于2019-05-06 23:42 被阅读0次

    ansible是什么

        ansible是红帽旗下,使用python语言开发,基于ssh协议工作的一款运维工具,与其相似的工具还有puppet、cfengine、chef、func、saltstack,fabric等。
        ansible融合了其他自动化运维工具的优点,实现了批量操作系统配置、批量程序的部署、批量运行命令等功能。

    ansible的架构

    架构图
    • Ansible:核心引擎
    • Modules:包括 Ansible 自带的核心模块(core modules)及自定义模块 (custom modules);
           1. 核心模块:ansible执行的任何任务都不是有自身进行完成,而是调用各种核心模块进行完成;管理主机之前,先调用croe modules进中的模块,然后指明Host Inventory中的主机,完成指定的任务。
           2.自定义模块:ansible支持使用任务语言进行模块的开发,用于补充核心模块的功能不足。
    • Ansible:核心引擎
    • HostInventory :ansible中的主机清单
    • Playbooks :YAML格式文件,提高ansible使用的复用性
    • Plugins:完成模块功能的补充,包括连接插件、邮件插件等
    • Connection Plugins :连接管理主机的插件
      Inventory:定义 Ansible 管理主机的清单

    ansible的特性

    • 高度模块化:调用特定的模块,完成特定的任务
    • 基于python语言实现
    • 部署简单:无需agent端,更轻量级 。
    • 支持playbook
    • 幂等性(多次运行结果一样)
    • 支持非root用户管理操作,支持sudo

    ansible安装

    环境:

    操作系统

    centos7.6

    IP地址

    • ansible: 192.168.44.100
    • node1: 192.169.44.101

    关闭ansible node1 node2 中的selinux firewalld以防后续干扰使用,如需启用,也可时候再行启动。

    注:本次未使用到ansible的最新特性,仅使用yum的进行安装使用,如需要使用最新特性,请上官方网站上进行下载

    安装

          yum -y install ansible   # 请提前配置好epel的yum源
          [root@ansible ~]# ansible --version  # 本次使用的ansible版本,截止到本次使用时ansible最新版本为2.8
            ansible 2.7.10
            config file = /etc/ansible/ansible.cfg  
            configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
            ansible python module location = /usr/lib/python2.7/site-packages/ansible
            executable location = /usr/bin/ansible
            python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
    

    ansible的简单使用

    使用前需要配置ansible主机可以直接免密登录被管理主机
    配置主机清单
    vim  /etc/ansible/hosts  # 本次使用的是yum安装,默认主机清单路径
      [node1]
      192.168.44.101
    
    1. 可以直接使用命令行工具 ansible
           ansible 主机地址or主机组名or all -m 模块名称-a 模块名称
       例:[root@ansible ~]#   ansible all -m ping 
               192.168.44.101 | SUCCESS => {
               "changed": false, 
               "ping": "pong"
               }
      
    2. ansible-doc
      ansible中有众多模块,可使用-l命令列出,使用-s查看模块的简要使用说明
    [root@ansible ~]# ansible-doc -l 
    a10_server                                           Manage A10 Networks AX/SoftAX/Th...
    a10_server_axapi3                                    Manage A10 Networks AX/SoftAX/Th...
    a10_service_group                                    Manage A10 Networks AX/SoftAX/Th...
    a10_virtual_server                                   Manage A10 Networks AX/SoftAX/Th...
    aci_aaa_user                                         Manage AAA users (aaa:User)     
    aci_aaa_user_certificate                             Manage AAA user certificates (aa...
    aci_access_port_to_interface_policy_leaf_profile     Manage Fabric interface policy l...
    aci_aep                                              Manage attachable Access Entity ...
    aci_aep_to_domain                                    Bind AEPs to Physical or Virtual...
    aci_ap    
    ···                     
    
    1. ansible-playbook
      用于执行ansible的playbook的命令行工具
      playbook的核心元素
      • Hosts 用于执行的主机
      • tasks 主要任务
      • variables 将需要修改的配置抽取为变量,简化配置
      • templates 可以结合facts针对不同的应用场景进行自动修改生成所需的配置文件
      • handle 由特定条件出发的任务
      • roles 用于提高playbook的复用性

    使用playbook进行lnmp的安装

    v1本次使用yum进行nmp的安装,后续如果需要使用编译方式安装自行修改yaml文件即可
    - hosts: node1
      remote_user: root
      tasks:
      - name: install {{ packages }}
        yum: name={{ packages }} state=installed
        vars:
          packages:
            - nginx
            - mariadb-server
            - php-fpm
      - name: create data dir
        command: mkdir -p /data/html
      - name: nginx template        
        template: src=/tmp/nginx.conf dest=/etc/nginx/nginx.conf      
      - name: php test page
        copy : src=/tmp/phptest.php dest=/data/html/    
        notify: restart nginx
      - name: start nginx,php-fpm,mariadb
        systemd: name={{ item }} state=started
        with_items:
        - nginx
        - php-fpm
        - mariadb
      handlers:
      - name: restart nginx
        systemd: name=nginx state=restarted
    
    

    tmp下的两个文件

    phptest.php

    <?php
    phpinfo();
    ?>
    

    nginx.conf中的server段修改内容

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /data/html;
    index index.php index.html index.htm;
    
        include /etc/nginx/default.d/*.conf;
    
        location / {
        }
    location ~ .*\.*.(php|php5)$ {
       fastcgi_pass 127.0.0.1:9000; 
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
       include fastcgi_params;
    }
    
        error_page 404 /404.html;
            location = /40x.html {
        }
    
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
    

    报错及解决

    第一次运行yaml文件时有一个警告

    TASK [install {{ item }}] *********************************************************************************************************************************
    [DEPRECATION WARNING]: Invoking "yum" only once while using a loop via squash_actions is deprecated. Instead of using a loop to supply multiple items and 
    specifying `name: "{{ item }}"`, please use `name: ['nginx', 'php-fpm', 'mariadb']` and remove the loop. This feature will be removed in version 2.11. 
    Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
    

    是因为第一次使用了循环的方式进行安装,后续替换成了上面yaml中的形式后不在有警告,因为在2.7中不建议使用这种方式。

    task was:
    
    - name:  Install base packages
      apt:
        name:  "{{ item }}"
        state: present
        update_cache: yes
      with_items:
        - htop
        - zsh
        - s3cmd
    Very standard.
    
    The new style with Ansible 2.7 should look like:
    
    - name:  Install base packages
      apt:
        name:  "{{ packages }}"
        state: present
        update_cache:  yes
      vars:
        packages:
          - htop
          - zsh
          - s3cmd
    

    v2为提高playbook的可用性,可使用role的方式将playbook进行拆分,并在下次使用时可直接调用相关的yaml文件

    Role的默认存放位置在/etc/ansible/roles

    可通过修改配置文件修改role的存放位置
    以特定的角色名命名目录,子目录命名规则

    • files 存放由copy或者script模块等调用的文件
    • templates template模块查找所需模板文件目录
    • tasks 至少应该包含一个名为main.yaml文件;其他文件需要在此文件中通过include 进行包含
    • handles 至少应该包含一个名为main.yaml文件,其他文件需要通过include进行包含
    • vars 至少应该包含一个名为main.yaml文件,其他文件需要通过include进行包含,格式 name:value
    • meta 至少应该应该包含一个名为main.yaml文件,其他文件通过include进行包含,定义当前角色的特殊设定及其依赖关系
    • default 设定默认变量时使用此目录中的main.yaml文件

    子目录不一定需要都存在,需要哪一个创建哪一个

    使用时写一个playbook将角色应用到主机上

    - hosts: HOSTNAME
      remote_user: REMOTE_USER
      roles:
      - ROLER1
      - ROLER2
      ···
    

    playbook

    - hosts: node1
      remote_user: root
      roles:
      - install_lnmp
    
    

    rolers

    [root@ansible roles]# tree
    .
    └── install_lnmp
        ├── files
        │   └── phptest.php
        ├── handlers
        │   └── main.yaml
        ├── tasks
        │   └── main.yaml
        ├── templates
        │   └── nginx.conf
        └── vars
            └── main.yaml
    
    
    [root@ansible install_lnmp]# cat handlers/main.yaml 
    - name: restart nginx
      systemd: name=nginx state=restarted
    
    [root@ansible install_lnmp]# cat tasks/main.yaml 
    - name: install {{ packages }}
      yum: name={{ packages }} state=installed
    - name: nginx template
      template: src=nginx.conf dest=/etc/nginx.conf
      notify: restart nginx
    - name: create data dir
      shell: mkdir -p /data/html
    - name: php_test page
      copy: src=phptest.php dest=/data/html
    - name: start service
      systemd: name={{ item }} state=started
      with_items:
      - nginx
      - mariadb
      - php-fpm
    
    [root@ansible install_lnmp]# cat vars/main.yaml 
    packages:
    - nginx
    - php-fpm
    - mariadb-server
    
    

    相关文章

      网友评论

          本文标题:ansible--使用ansible进行lnmp环境部署

          本文链接:https://www.haomeiwen.com/subject/kgkkoqtx.html