zoukankan      html  css  js  c++  java
  • 让你的ansible飞起来

    一、SSH Multiplexing

    1 配置

    vim /etc/ssh/ssh_config

    Host * GSSAPIAuthentication yes # If this option is set to yes then remote X11 clients will have full access # to the original X11 display. As virtually no X11 client supports the untrusted # mode correctly we set this to yes. ForwardX11Trusted yes # Send locale-related environment variables SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE SendEnv XMODIFIERS ControlMaster yes # 这个是新增的 ControlPath /tmp/%r@%h:%p # 这个是新增的 ControlPersist 10m # 这个是新增的

    2 测试

    [root@host-172-20-6-120 playbooks]# ssh -O check 172.20.6.121
    root@172.20.6.121's password: 
    Master running (pid=16802)    # 有这个说明开启成功
    
    上面的不是”零“ 而是大写的0

      

    测试速度

    [root@host-172-20-6-120 playbooks]# time ssh 172.20.6.121 /bin/true
    root@172.20.6.121's password: 
    ControlSocket /tmp/root@172.20.6.121:22 already exists, disabling multiplexing
    
    real	0m2.137s
    user	0m0.032s
    sys	0m0.005s
    

      

    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文件方式

    vim /etc/ansible/ansible.cfg
    
    [defaults]
    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依赖包。

  • 相关阅读:
    Javascript异步编程的4种方法(阮一峰)
    vue 要点
    npm指南
    http请求状态及其含义表
    IOS 7层协议
    js模块化
    UITouch触摸事件
    UIGestureRecognizer手势识别
    UISegmentControl 、UIStepper
    UINavigationController
  • 原文地址:https://www.cnblogs.com/wanstack/p/8652520.html
Copyright © 2011-2022 走看看