讓你的ansible飛起來

1、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

  

測試速度python

[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配置中設置以支持該特性。redis

以下是配置參數,設置長鏈接保持時間爲5天;control_path指定socket文件所保存的位置。json

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

經過上面配置後,ansible中控機上執行一次與遠程主機的鏈接以後,這個鏈接會持久保持設定時間之久。能夠經過netstat命令查看到ESTABLISHED狀態的鏈接信息。vim

注意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的會話中進行,能夠提升整個執行效率。ssh

# 在ansible.cfg配置文件中設置pipelining爲True
pipelining = True

  

須要注意的是:若是開啓pipelining,須要被控的遠程服務器將/etc/sudoers中的」Defaults requiretty」註釋掉,不然會出現相似如:you must have a tty to run sudo 的報錯。socket

3 開啓accelerate模式

accelerate模式相似於SSH的Multiplexing功能,都是使ansible控制服務器和遠程服務器之間保持長鏈接。accelerate模式是使用python程序在遠程服務器上運行一個守護進程,ansible經過這個守護進程監聽的端口進行通訊。memcached

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依賴包。

相關文章
相關標籤/搜索