zoukankan      html  css  js  c++  java
  • anasible优化操作

    1.优化ansible速度

    Ansible使用默认的SSH方式通信,它的效率会远远低于StltStack的Zeromq消息队列。
    但是依然有许多手段可以优化Ansible的执行速度。
    (1)开启SSH长连接
    Ansible对SSH的依赖性非常强,优化SSH将会优化Ansible的执行效率。
    可以在ansible.cfg中设置SSH长连接。
      ssh_args = -o ControlMaster=auto -o ControlPersist=5d
    如果开启长连接,就会减少下次ssh的连接次数。
    ControlPersist=5d表示长连接的时长为5天。

    (2)开启pipelining
    在整个Ansible的执行流程中,有一个过程就是把生成好的本地python脚本传输到各个节点上然后执行。
    如果开启了pipelining,这个过程将会在ssh的会话中进行,可以提高整个执行效率。
      pipelining = True

    (3)开启accelerate模式
    Ansible还有一个accelerate模式,这个模式会使用python程序在远端机器上运行一个守护进程,
    然后Ansible会通过这个守护进程的监听端口进行通信。
    [accelerate]
    accelerate_port = 5099
    accelerate_timeout = 30
    accelerate_connect_timeout = 5.0

    (4)设置facts缓存
    在执行playbook的时候,默认第一个task都是GATHERING FACTS,就是收集每台主机的facts信息。
    如果你不需要facts信息,那么可以在playbook中设置gather_facts:False来提高playbook的效率。

    但是现在我想收集facts的信息,又想加速收集过程,此时就可以使用facts缓存了。
    playbook文件:

    ansible.cfg设置:
    fact默认设置在memory里面,也就是不长时间保存。
      fact_caching = memory
    fact的缓存可以放在json文件、redis数据库里面等。
      fact_caching = jsonfile
      fact_caching_connection=/tmp/ansible_fact_cache

    查看生成的日志:

    它会用主机ip来生成一个json文件,然后写入当前主机的fact信息,这个节点再需要fact的时候就会直接读取这个文件。

    2.目录结构

    第一种方式是通过角色进行划分

    production                # 生产环境的inventory文件
    staging                   # 暂存环境的inventory文件
    
    group_vars/               #组变量定义
       group1.yml             
       group2.yml
    host_vars/                  # 主机变量定义,为每台主机单独定义变量
       hostname1.yml          
       hostname2.yml
    
    library/                  # 自定义模块存放目录
    module_utils/              
    filter_plugins/           # 自定义filter插件存放目录
    
    site.yml                  # playbook的统一入口文件
    webservers.yml            # web服务相关的playbook文件
    dbservers.yml             # 数据库相关的playbook文件,如果还有其它类型,可以继续创建
    
    roles/                    # role存放目录
        common/               # common 角色目录,共用目录
            tasks/            
                main.yml      #  common角色task入口文件
            handlers/         
                main.yml      #  common角色handlers入口文件
            templates/        
                ntp.conf.j2   #  common角色templates文件
            files/            
                bar.txt       #  common角色files资源文件
                foo.sh        #  common角色files资源文件
            vars/             
                main.yml      #  common角色变量定义文件
            defaults/         
                main.yml      #  common角色默认变量定义文件,优先级低
            meta/             
                main.yml      #  common角色依赖文件
            library/          # 角色还可以包含自动一模块
            module_utils/     
            lookup_plugins/   # 还可以包含lookup插件
    
        webtier/              # webtier角色目录,与common同级
        monitoring/           # monitoring角色目录,与common同级
        fooapp/               # fooapp角色目录

    第二种是通过环境进行环境进行划分,比如生产环境、测试环境获知开发环境等

    inventories/              # inventory主要存放的是主机信息,默认是/etc/ansible/hosts
       production/            #生产环境
          hosts               #主机和主机组配置信息
          group_vars/         #组变量
             group1.yml       
             group2.yml
          host_vars/          #主机变量
             hostname1.yml    
             hostname2.yml
    
       staging/              #测试环境
          hosts               
          group_vars/
             group1.yml       
             group2.yml
          host_vars/
             stagehost1.yml  
             stagehost2.yml
    
    library/                #自定义模块存放目录
    module_utils/      
    filter_plugins/         #filter插件存放目录
    
    site.yml                #playbook统一入口文件
    webservers.yml          #web和db服务playbook文件
    dbservers.yml
    
    roles/                  #角色
        common/             #共有
        webtier/            #其它
        monitoring/
        fooapp/

    如果你使用的是云主机,你不应该在静态文件中管理inventory,因为此时inventory信息是动态波动的。
    你应该使用inventory插件或者脚本来实现。

    3.灰度发布和语法检测

     (1)语法检测
    在编写完playbook之后一定要进行语法检测,否则一旦运用到生产环境将是一个大问题。
    只需要在执行playbook的时候使用--syntax-check参数即可。

    (2)灰度发布
    在进行完语法检测之后,你应该先挑一台机器进行测试,将所有的任务跑一遍。
    这样就可以直观感受是否能够达到预期效果。你只需要把一个或多个task使用deletgate_to参数指定到一台设备上进行测试。

    (3)是否达到预期
    在运行playbook的时候使用--diff和--check参数去对比生成后的文件是否为我们所需的文件。

  • 相关阅读:
    排序题目
    力扣二分法题目
    力扣动态相似题目
    875爱吃香蕉的珂珂
    410分割数组的最大值
    1335工作计划的最低难度
    287寻找重复数
    69X的平方根
    力扣相似题目
    解决Linux虚拟机内 /mnt/hgfs路径下文件为空问题
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/12657402.html
Copyright © 2011-2022 走看看