現現在有不少運維自動化的工具,如:Ansible、Puppet、saltStack、Fabric、chef、Cfengine
Ansible 是由 Cobbler與Func的做者 Micheael DeHaan 編寫。2012-03-09發佈0.0.1版本,2015-10-17被紅帽收購 Ansible 是一個配置管理系統(configuration management system)。你只須要可使用ssh訪問你的服務器或設備就能夠;它不一樣於其餘工具,由於它使用的是推送的方式,而不像其餘工具同樣使用拉去安裝agent。
Ansible 能夠幫助咱們完成一些批量任務,或者完成一些須要常常重複的工做;例如:
Ansible安裝包在EPEL源中,自行配置yum源
//Ansible 安裝 yum install -y ansible
> yum -y install python-jinja2 PyYAML python-paramiko > python-babel python-crypto > tar xf ansible-x.x.x.tar.gz > cd ansible-x.x.x > python setup.py build > python setup.py install > mkdir /etc/ansible > cp -r examples/* /etc/ansible
> git clone git://github.com/ansible/ansible.git --recursive > cd ./ansible > source ./hacking/env-setup
> yum install python-pip python-devel > yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel > pip install --upgrade pip > pip install ansible --upgrade
ansible --version ·ansible 2.7.7 ·config file = /etc/ansible/ansible.cfg ·configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ·ansible python module location = /usr/lib/python2.7/site-packages/ansible ·executable location = /usr/bin/ansible ·python version = 2.7.5 (default, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
[defaults] #inventory = /etc/ansible/hosts #主機列表配置文件 #library = /usr/share/my_modules/ #庫文件存放目錄 #remote_tmp = $HOME/.ansible/tmp #臨時py命令文件存放在遠程主機目錄 #local_tmp = $HOME/.ansible/tmp #本機的臨時命令執行目錄 #forks = 5 #默認併發數 #sudo_user = root # 默認sudo 用戶 #ask_sudo_pass = True #每次執行ansible命令是否詢問ssh密碼 #ask_pass = True #remote_port = 22 #默認的節點ssh端口 #host_key_checking = False # 檢查對應服務器的host_key,建議取消註釋
Ansible必須經過Inventory 來管理主機。Ansible 可同時操做屬於一個組的多臺主機,組和主機之間的關係經過 inventory 文件配置。python
//語法格式: //單臺主機 www.test.com //FQDN方式 172.16.1.100 //IP地址 172.16.1.100:12222 //SSH服務端口不是22時使用 //多臺主機 [mysqlServer] //定義一個組名 mysql.test.com //FQDN方式 【定義組內單臺主機的地址】 172.16.1.101 //IP地址 [webServer] 172.16.1.100 //一臺主機能夠在不一樣的組內,它同時屬於[mysqlServer]組 //組嵌套組 [group01:Server] //group01爲自定義的組名,Server是關鍵字,固定語法必須填寫; mysqlServer //group01 組內包含的其餘組名 webServer //group01 組內包含的其餘組名 //有規律的主機地址 www.wj[01:06].test.com //至關於: www.wj01.test.com www.wj02.test.com ........ www.wj06.test.com 能夠定義有規律的ip地址,也能夠定義 有規律的字母地址,例如 [a:f] 還有一個隱藏的組是 [all] 組,不指定機器或組,就默認主機列表中全部機器
主機列表中的參數說明mysql
ansible_ssh_host //將要鏈接的遠程主機名.與你想要設定的主機的別名不一樣的話,可經過此變量設置. ansible_ssh_port //ssh端口號.若是不是默認的端口號,經過此變量設置.這種可使用 ip:端口 192.168.1.100:2222 ansible_ssh_user //默認的 ssh 用戶名 ansible_ssh_pass //ssh 密碼(這種方式並不安全,咱們強烈建議使用 --ask-pass 或 SSH 密鑰) ansible_sudo_pass //sudo 密碼(這種方式並不安全,咱們強烈建議使用 --ask-sudo-pass) ansible_sudo_exe (new in version 1.8) //sudo 命令路徑(適用於1.8及以上版本) ansible_connection //與主機的鏈接類型.好比:local, ssh 或者 paramiko. Ansible 1.2 之前默認使用 paramiko.1.2 之後默認使用 'smart','smart' 方式會根據是否支持 ControlPersist, 來判斷'ssh' 方式是否可行. ansible_ssh_private_key_file //ssh 使用的私鑰文件.適用於有多個密鑰,而你不想使用 SSH 代理的狀況. ansible_shell_type //目標系統的shell類型.默認狀況下,命令的執行使用 'sh' 語法,可設置爲 'csh' 或 'fish'. ansible_python_interpreter //目標主機的 python 路徑.適用於的狀況: 系統中有多個 Python, 或者命令路徑不是"/usr/bin/python",好比 \*BSD, 或者 /usr/bin/python 不是 2.X 版本的 Python. //咱們不使用 "/usr/bin/env" 機制,由於這要求遠程用戶的路徑設置正確,且要求 "python" 可執行程序名不可爲 python之外的名字(實際有可能名爲python26). //與 ansible_python_interpreter 的工做方式相同,可設定如 ruby 或 perl 的路徑....
ansible經過ssh實現配置管理、應用部署、任務執行等功能,建議配置ansible端能基於密鑰認證的方希聯繫各被管理節點
密鑰驗證不具體寫了linux
ansible ansible-doc:顯示模塊磅數 // ansible-doc [option] [module...] //-a 顯示全部模塊的文檔;-l == --list 列出可用模塊;-s == --snippet 顯示指定模塊的playbook片斷 ansible-playbook ansible-vault ansible-console ansible-galaxy ansible-pull
注意:ansible使用,主機清單必需要先配置nginx