zoukankan      html  css  js  c++  java
  • ansible的优化

    Ansible企业实战环境中,如果管理的服务器越来越多,Ansibe执行效率会变得比较慢,可以通过优化Ansible提供工作效率,由于Ansible基于SSH协议通信,SSH连接慢会导致整个基于Ansible执行变得缓慢,也需要对Openssh进行优化,具体优化的方法如下:

    1 开启SSH长连接

    ansible是通过使用ssh和远程主机进行通信,所以对ssh有这很强的依赖。在OpenSSH 5.6以后支持Multiplexing这个特性,可以通过在ansible配置中设置以支持该特性。

    如下是配置参数,设置长连接保持时间为5天;control_path指定socket文件所保存的位置。

    ssh_args = -o ControlMaster=auto -o ControlPersist=5d
    control_path = /etc/ansible/ssh-socket/%%h-%%p-%%r

    通过上面配置后,ansible中控机上执行一次与远程主机的连接之后,这个连接会持久保持设定时间之久。可以通过netstat命令查看到ESTABLISHED状态的连接信息。

    注意1:OpenSSH需要5.6以上版本,低版本需要升级才能使用。 
    Centos7系统上安装的OpenSSH版本是较新的,可以直接支持;对于Centos6的系统,自带的OpenSSH版本较低,可以用下面这个yum源进行升级yum update openssh-clients:

    # /etc/yum.repos.d/openssh.repo 
    [CentALT]
    name=CentALT Packages for Enterprise Linux 6
    baseurl=http://mirror.neu.edu.cn/CentALT/6/$basearch/
    enabled=1
    gpgcheck=0

    注意2:control_path指定的目录不存在,或执行ansible命令的用户没有写权限的话是会报错的。

    2 开启pipelining

    默认情况下,ansible的执行流程是把生成好的本地python脚本PUT到远程服务器然后运行。如果开启了pipelining,整个流程少了一个PUT脚本到远程服务器的步骤,直接在SSH的会话中进行,可以提高整个执行效率。

    # 在ansible.cfg配置文件中设置pipelining为True
    pipelining = True

    需要注意的是:如果开启pipelining,需要被控的远程服务器将/etc/sudoers中的”Defaults requiretty”注释掉,否则会出现类似如:you must have a tty to run sudo 的报错。

    3 开启accelerate模式

    accelerate模式类似于SSH的Multiplexing功能,都是使ansible控制服务器和远程服务器之间保持长连接。accelerate模式是使用python程序在远程服务器上运行一个守护进程,ansible通过这个守护进程监听的端口进行通信。

    accelerate模式的开启方法很简单,只要在playbook中配置accelerate: true即可。ansible.cfg配置文件中需要配置一些accelerate参数,如:

    [accelerate]
    accelerate_port = 5099
    accelerate_timeout = 30
    accelerate_connect_timeout = 5.0

    注意:使用accelerate模式,需要控制服务器和远程服务器都安装python-keyczar包

    4 对facts设置优化

    ansible playbook默认第一个task是Gathering Facts收集各主机的facts信息,以方便我们在paybook中直接引用facts里的信息。

    如果不需要用到facts信息的话,可以设置gather_facts: false,来省去facts采集这一步以提高playbook效率。

    如果既想用facts信息,有希望能提高playbook的效率的话,可以采用facts缓存来实现。 
    facts缓存支持多种方式:json文件方式,redis方式,memcache方式等。各种方式的配置都是在ansible.cfg中配置。

    1)json文件方式

    gathering=smart
    fact_caching_timeout=86400
    fact_caching=jsonfile
    fact_caching_connection=/path/to/ansible_fact_cache

    这里的86400单位为秒,表示缓存的过期时间。保存facts信息的json文件保存在/path/to/ansible_fact_cache下面,文件名是按照inventory hostname来命名的。

    2)redis方式

    gathering=smart
    fact_caching_timeout=86400
    fact_caching=redis

    需要注意的是,facts存储不支持远端的redis,需要在ansible的控制服务器上安装redis;同时,还需要安装python的redis模块。

    3)memcache方式

    gathering=smart
    fact_caching_timeout=86400
    fact_caching=memcached

    与redis方式类似,需要运行memcached服务,同时,安装python的memcached依赖包。

  • 相关阅读:
    线程同步锁的使用方式
    EventBus简单封装
    Dagger2不自动生成daggerXXXcomponent
    android mvp模式
    第八天
    单词统计续
    学习进度第十一周
    第七天
    第六天
    第五天
  • 原文地址:https://www.cnblogs.com/YatHo/p/8042815.html
Copyright © 2011-2022 走看看