通常會把自動化運維工具劃分爲兩類:一類是是須要使用代理工具的,也是就基於專用的Agent程序來王朝管理功能,如: Puppet、Func、Zabbix 等:另一類是不須要代理工具的,能夠直接基於SSH 服務來完成管理功能,如Ansible、Fabric 等···python
Ansible做爲一個python寫的自動化部署更有本身的一些優點, 首先就是agentless, 無需在Linux client安裝任何服務便可無縫鏈接Linux default ssh端口進行部署(windows須要安裝winrm 開啓ssh服務)。mysql
ansible是新出現的自動化運維工具,基於Python開發,集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。
ansible是基於模塊工做的,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:web(1)、鏈接插件connection plugins:負責和被監控端實現通訊;sql
(2)、host inventory:指定操做的主機,是一個配置文件裏面定義監控的主機;shell
(3)、各類模塊核心模塊、command模塊、自定義模塊;windows
(4)、藉助於插件完成記錄日誌郵件等功能;緩存
(5)、playbook:劇本執行多個任務時,非必需可讓節點一次性運行多個任務。安全
- Core modules 合興模塊:是Absible 自帶的模塊,使用這也模塊將資源分配發送到被管理主機,是其執行的頂任務。或匹配特定的狀態
- Custom modules 自定義模塊:用於完成模塊功能的補充。可藉助相關插件完成記錄發送郵件功能
安裝部署
角色 | IP | 組名 | 軟件 |
---|---|---|---|
控制主機 | 192.168.100.20 | epel-release //安裝epel源ansible | |
被控制主機 | 192.168.100.21 | webaervers | |
被控制主機 | 192.168.100.22 | mysql |
1. 安裝epel-release //安裝epel源 yum install -y epel-release //安裝epel源 yum install ansible -y 2. 在全部服務器上關閉防火和加強型安全功能 systemctl stop firewalld.service # 關閉防火牆 setenforce 0 #關閉加強型安全功能 3. 配置主機清單 cd /etc/ansible vi hosts #配置主機清單 可自行定義 [webserver] 192.168.100.21 [mysql] 192.168.100.22 4. 產生公鑰個私鑰實現免交互代理 ssh-keygen -t rsa #使用 ssh-keygen -t rsa命令,生成密鑰文件 ssh-copy-id root@192.168.100.21 #將公鑰文件傳輸的遠程機器,並生效 ssh-copy-id root@192.168.100.22 免交互代理-------------- ssh-agent bash #來保存公鑰身份驗證所使用的私鑰的程序 ssh-add #ssh-add命令是把專用密鑰添加到ssh-agent的高速緩存中。
command模塊 #Ansibler 管理工具使用-m 選項來指定使用模塊,默認使用command 模塊,即-m省略時會運行此模塊,用於被管理主機上運行命令 命令格式:ansible [主機] [-m 模塊] [-a args] ansible-doc -l //列出全部已安裝的模塊 注:按q退出 ansible-doc -s yum //-s列出yum模塊描述信息和操做動做 (1) 使用IP地址指定運行主機 ansible 192.168.100.21 -m command -a 'date' #查看指定主機當前時間 (2) 使用被管理主機的分類運行 ansible webservers -m command -a 'date' #查詢分類中全部的IP地址主機當前時間 (3) 在全部主機清單中的全部主機 ansible all -m command -a 'date' #全部hosts主機執行date命令 (4) 若省略-m 選項,默認運行command模塊 ansible all -a 'tail-1 /etc/passwd' #顯示全部主機中/etc/passed/最後一行
2. cron 模塊 Ansible中的cron模塊用於定義任務計劃。 其中有兩種狀態(state):present表示天機(省略狀態時默認使用),absent表示移除 (1) 添加任務計劃 ansible mysql -m cron -a 'minute="*/1" job="/bin/echo heihei" name="test cron job"' #一分鐘顯示一次heihei (2) 移除計劃性任務 ansible webserver -m cron -a 'name="test cron job" state=absent'
ansible mysql -m user -a 'name="wangwu"' #指定別名主機(組)建立'wangwu' ansible mysql -m command -a 'tail /etc/passwd' #顯示末尾10行 ansible mysql -m user -a 'name="wangwu" state=absent' #刪除用戶wangwu
ansible mysql -m group -a 'name=mysql gid=306 system=yes' #添加mysql組而且qid=306 添加到系統組中 ansible mysql -a 'tail /etc/group' #查看mysql服務器中組 ansible mysql -m user -a 'name=ccc uid=306 system=yes group=mysql' #建立一個用戶爲ccc而且指定uid號 添加到mysql組中 ansible mysql -a 'tail /etc/passwd'
ansible mysql -m copy -a 'src=/etc/fstab dest=/opt/fstab.back owner=root mode=640' #複製自動自動掛在主配置文件 複製到opt/目錄小並給與640權限 ansible mysql -a 'ls -l /opt' #查看目錄 ansible mysql -a 'cat /opt/fstab.back' #查看etc下有關於系統管理員多用戶管理文件 ansible mysql -m copy -a 'content="hello heihei!" dest=/opt/fstab.back' //將hello heihei!寫入/opt/fstab.back ansible mysql -a 'cat /opt/fstab.back'
ansible mysql -m user -a 'name=mysql system=yes' #屬主 ansible mysql -m group -a 'name=mysql system=yes'#屬組 ansible mysql -m file -a 'owner=mysql group=mysql mode=644 path=/opt/fstab.back' #修改文件的屬主屬組權限等 ansible mysql -m file -a 'path=/opt/fstab.link src=/opt/fstab.back state=link' #設置/opt/fstab.link爲/opt/fstab.back的連接文件 ansible mysql -m file -a "path=/opt/fstab.back state=absent" #刪除一個文件 ansible mysql -m file -a "path=/opt/test state=touch" #建立一個文件
ansible all -m ping #ping
ansible mysql -m yum -a 'name=httpd' #yum安裝httpd ansible mysql -m yum -a 'name=httpd state=absent' #卸載httpd
ansible webservers -m yum -a 'name=httpd' #指定組安裝 httpd 服務 ansible webservers -a 'systemctl status httpd' #擦看服務 ansible mysql -m service -a'name=httpd enabled=true state=started' //開機自啓動 systemctl list-unit-files | grep httpd 檢測httpd是否開機自啓動 enabled 爲啓動 disabled是開機不啓動
------shell模塊----- ansible ccc -m shell -a 'echo abc123|passwd --stdin ccc' #建立用戶使用無交互模式給用戶設置密碼
ansible-doc -s script vi test.sh #!/bin/bash echo "hello ansible from script"> /opt/script.txt chmod +x test.sh ansible mysql -m script -a 'test.sh' mysql主機上查看 cat /opt/script.txt
ansible mysql -m setup //獲取mysql組主機的facts信息