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参数去对比生成后的文件是否为我们所需的文件。

 

posted @ 2020-04-08 00:51  明王不动心  阅读(464)  评论(0编辑  收藏  举报