工做原理:ansible經過hosts文件和免祕鑰(配置文件用戶名密碼端口號)來實現批量管理主機php
ansible默認併發量-f:5python
Ansible:Ansible的核心程序linux
Host Lnventory:記錄了每個由Ansible管理的主機信息,信息包括ssh端口,root賬號密碼,ip地址等等。能夠經過file來加載,能夠經過CMDB加載git
Playbooks:YAML格式文件,多個任務定義在一個文件中,使用時能夠統一調用,「劇本」用來定義那些主機須要調用那些模塊來完成的功能.web
Core Modules:Ansible執行任何管理任務都不是由Ansible本身完成,而是由核心模塊完成;Ansible管理主機以前,先調用core Modules中的模塊,而後指明管理Host Lnventory中的主機,就能夠完成管理主機。vim
Custom Modules:自定義模塊,完成Ansible核心模塊沒法完成的功能,此模塊支持任何語言編寫。安全
Connection Plugins:鏈接插件,Ansible和Host通訊使用服務器
模塊:1.yaml #用來編寫yaml腳本的語言併發
2.paramiko #模擬ssh協議鏈接linux客戶端ssh
3.jinja2 #模板語言
●Stupied Simple ,上手簡單,學習曲線平滑
●SSH by default ,安全,無需安裝客戶端
●配置簡單、功能強大、擴展性強
●支持API及自定義模塊,可經過Python輕鬆擴展
●經過Playbooks來定製強大的配置、狀態管理
●提供一個功能強大、操做性強的Web管理界面和REST API接口——AWX平臺 #web界面收費,所以企業中都不用
●冪等性:一種操做重複屢次結果相同
yum install epel-release
yum install ansible
服務端:192.168.88.5
客戶端:192.168.88.10
192.168.88.12
第一種方法:
1.server: ssh-keygen
2.scp id_rsa.pub root@192.168.254.25:/root/.ssh/authorized_keys
第二種方法:
第一步:[root@localhost ~]# vim /etc/ansible/hosts
在最後一行編寫以下內容:
定義組名:[testhosts]
客戶端用戶名:ansible_ssh_user=root
客戶端密碼: ansible_ssh_pass=123456
第二步:[root@localhost ~]# vim /etc/ansible/ansible.cfg
將這行的註釋去掉
第三步:測試跟客戶端是否聯通
[root@localhost ~]# ansible 192.168.88.10 -m ping
ansible all -m ping 查看全部客戶端是否連通
ansible testhosts -m ping 查看testhosts組下的因此客戶端是否連通
●查看支持的模塊: ansible-doc -l
●查看模塊用法:ansible-doc -s MODEL_NAME
●ansible命令應用基礎
1.ansible <host-pattern> [options]6
-f forks:啓動併發線程數
-m model_name:要使用的模塊
-a args:特有的參數
設置forks數量:a.export ANSIBLE_FORKS=100在終端運行;
b.在配置文件ansible.cfg裏設置forks=100便可;
c.運行命令時增長參數-f 100便可。
補充:線程是最小的調度單位,進程是最小的管理單元,一個進程裏面至少1個線程,一個線程或者多個線程能夠在一個進程裏面
●查看client端是否正常ping通:ansible all -m ping
●查看客戶端信息:ansible webserver -m setup
●copy文件到client端:ansible webserver -m copy -a 'src=/root/git_test/code.txt dest=/root/test'
實例:將服務端的liang文件複製到客戶端下
[root@localhost ~]# ansible testhosts -m copy -a 'src=/root/liang dest=/root
●建立test用戶:ansible webserver -m user -a "name=test state=present"
實例
● 刪除test用戶:ansible webserver -m user -a "name=test state=absent"
●yum安裝:ansible webserver -m yum -a ‘name=epel-relese state=latest‘
實例:
[root@localhost ~]# ansible testhosts -m yum -a 'name=unzip state=latest'
●中止httpd服務:ansible webserver -m service -a ‘name=httpd state=stopped enabled=no‘
●運行腳本:ansible webserver -m script -a ‘/tmp/test.sh‘
●運行命令:ansible webserver -m command -a 'date'
實例:
若是命令模塊使用的過程當中出現告警的解決辦法:
[root@localhost ~]# vim /etc/ansible/ansible.cfg
將該行的註釋去掉便可。
●tasks
●variables
●templates
●handlers
●roles
yaml介紹(劇本)
yaml是一個可讀性高的用來表達資料序列的格式,yaml參考了其餘多種語言,包括:xml,c語言,python,perl以及電子郵件格式RFC2822等,ClarkEvans在2001年在首次發表了這種語言。
●yaml的可讀性好
●yaml和腳本語言的交互性好
●yaml使用實現語言的數據類型
●yaml有一個一致的信息模型
●yaml易於實現
●yaml能夠基於流程來處理
●yaml表達能力強,擴展性好
建立的yaml的文件格式:.yml/.yaml
執行:ansible-playbook -C copy.yaml -C模擬執行
ansible-playbook copy.yaml
6.1 基礎劇本
劇本說明:
- hosts: all 指定主機組,能夠理解爲這個最大,頂個寫
tasks: 指定下面一系列的動做,這個是第二,須要有兩個空格
- name: 指定名稱,排行第三,須要有三到四個空格
yum: 模塊名 排行第四,須要有四到五個空格
handlers:指定處理器(觸發器),排行第二,須要與tasks對齊
實例1:
6.2 劇本中使用變量
自定義變量的實現方式
1. 直接寫在yaml文件中
2. 在Inventory file中定義
3. 變量的聲明:
vars:
- 變量名: 變量值
4. 變量的引用:{{ var }}
5. vars和tasks同級,並要寫在tasks前面
實例
6.3 劇本中使用觸發器notify
notify觸發的條件是當notify上邊第一個命令執行成功(copy執行成功),會執行下面相對應的任務(systemctl restart httpd),handlers爲觸發的任務內容,- name必須和notify下的名字相同。handlers必須在最後。
6.4 劇本中使用迭代
迭代中的變量必須用item,固定格式
出現這個告警,進行以下操做便可
[root@localhost ~]# vim /etc/ansible/ansible.cfg
6.5 劇本中模板templates
將模塊換成template,固定格式
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
[root@localhost ~]# vim /etc/ansible/hosts
什麼狀況下用到roles
假如咱們如今有3個被管理主機,第一個要配置成httpd,第二個要配置成php服務器,第三個要配置成MySQL服務器。咱們如何來定義playbook?
第一個play用到第一個主機上,用來構建httpd,第二個play用到第二個主機上,用來構建php,第三個play用到第三個主機上,用來構建MySQL。這些個play定義在playbook中比較麻煩,未來也不利於模塊化調用,不利於屢次調。好比說後來又加進來一個主機,這個第4個主機既是httpd服務器,又是php服務器,咱們只能寫第4個play,上面寫上安裝httpd和php。這樣playbook中的代碼就重複了。
1)tasks目錄 tasks目錄用於存放ansible執行的任務,tasks目錄下必須存在main.yml文件,main.yml爲主函數,用於導入須要執行的任務。
2)handlers 目錄 handlers常常和notify搭配使用,當文件、進程及返回狀態發生變化時,notify經過handlers作響應的變動。handlers目錄下也須要包含main.yml,包含在在main.yml中的handlers將被執行
3)templates及file目錄 templates目錄及file目錄均用於ansible目錄文件處理,兩個目錄下均用於存放傳輸的文件,但templates目錄下存放的是」.j2」格式的文件模板,文件中能夠寫變量。
4)vars目錄 vars目錄下用於定義當前roles執行時使用的變量,應當存在main.yml文件。
第一步:建立roles文件
[root@localhost ~]# mkdir -pv playbooks/roles/{webservers,dbservers}/{files,handlers,tasks,vars,templates}
[root@localhost ~]# tree playbooks/
第二步:編輯啓動roles文件
[root@localhost playbooks]# vim site.yml #固定格式
roles:寫你定義的角色
site.yml這個啓動文件下能夠添加不一樣的組(hosts)
第四步:啓動
[root@localhost playbooks]# ansible-playbook site.yml
第三步:
編輯tasks下的文件
[root@localhost ~]# vim playbooks/roles/webservers/tasks/main.yml #固定格式
file文件配置:
[root@localhost ~]# vim playbooks/roles/webservers/tasks/main.yml
[root@localhost ~]# cp /etc/httpd/conf/httpd.conf /root/playbooks/roles/webservers/files/ #將要複製的文件複製到files中
[root@localhost playbooks]# ansible-playbook site.yml
handlers
[root@localhost playbooks]# vim roles/webservers/tasks/main.yml
[root@localhost playbooks]# vim roles/webservers/handlers/main.yml
[root@localhost playbooks]# ansible-playbook site.yml
templates
[root@localhost playbooks]# vim roles/webservers/tasks/main.yml
將要操做的文件複製到templats中。
[root@localhost playbooks]# cp roles/webservers/files/httpd.conf roles/webservers/templates/
[root@localhost playbooks]# vim roles/webservers/templates/httpd.conf
[root@localhost playbooks]# vim /etc/ansible/hosts
[root@localhost playbooks]# ansible-playbook site.yml
vars
[root@localhost playbooks]# vim roles/webservers/vars/main.yml
[root@localhost playbooks]# vim roles/webservers/tasks/main.yml