自動化運維之-ansible

1.緣起

由於公司沒有運維人員,每次發佈項目都須要手動編譯,手工發佈,特別浪費時間,發佈幾回之後就煩了,就想着全換成自動化方式打包發佈,通過幾個篩選終於選定用ansible來作自動化打包發佈。今後節約大把的時間來聽聽歌看看書喝喝茶了。。。通過實踐表面,在沒有運維崗的時候,ansible絕對是中小創業公司項目發佈的最佳選擇!python

2.介紹

ansible其實就是一個能夠經過SSH與遠程服務器進行鏈接交互的工具,它內置了不少模塊可讓你輕鬆的經過 命令或者編寫playbook劇本操做遠程服務器,linux

3.安裝與簡單測試

  1. 安裝ansible很簡單,個人系統是centsos7.2,直接敲,yum install ansible -y 便可 
    windows系統能夠考慮安裝個cygwin,來模擬進行linux操做,在cygwin的虛擬linux上安裝ansible與遠程服務器進行交互。 
    安裝好之後ansible --version進行查看 
    以下: 
    [root@localhost ~]# ansible --version 
    ansible 2.3.1.0 
    config file = /etc/ansible/ansible.cfg 
    configured module search path = Default w/o overrides 
    python version = 2.7.5 (default, Nov 6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
    git

  2. 安裝好ansible之後,建議配置ssh免密碼登陸遠程服務器,不會操做的能夠自行百度github

  3. ansible有個host配置,yum安裝之後,在/etc/ansible/hosts裏能夠能夠添加遠程服務器主機的ip地址,或者一組ip服務器地址,例如咱們的服務是分佈式部署,有三臺服務,配置以下web

#[]裏是服務器組的name,後續每行跟着的是服務器的ip地址
[yrServer]
192.168.9.50
192.168.9.51
192.168.9.52
  1. 命令行測試 
    ansible yrServer -m ping 
    服務器返回 

    [root@localhost ~]# ansible all -m ping 
    192.168.9.50 | SUCCESS => { 
    "changed": false, 
    "ping": "pong" 

    192.168.9.51 | SUCCESS => { 
    "changed": false, 
    "ping": "pong" 

    192.168.9.52 | SUCCESS => { 
    "changed": false, 
    "ping": "pong" 


    表示三臺服務器都已經ping通,其中參數裏的changed的false表明,主機沒有任何改動 
    ping後面pong標識已經ping通shell

ansible能夠經過相似上面的命令行與主機進行交互,其實經過ansible進行遠程主機操做,就是把ansible腳本轉換層shell腳本與命令在遠程主機上進行操做,可是自動化運維是一組命令跟腳本的組合,因此就須要學習一下ansible的殺手鐗playbook了apache

4.Playbook

playbook是一組ansible命令的組合,咱們能夠稱他爲劇本,你徹底能夠理解成playbook就是拍戲的那個劇本,演員只要照着劇本演戲,就能完成拍戲任務,咱們把咱們想作的操做編排成劇本,ansible就能夠編排有序的執行任務,並給與咱們反饋。Playbooks 可用於聲明配置,更強大的地方在於,在 playbooks 中能夠編排有序的執行過程,甚至於作到在多組機器間,來回有序的執行特別指定的步驟.而且能夠同步或異步的發起任務.windows

4.1 Playbook示例

playbook的格式是YAML,語法比較簡單, 
playbook 由一個或多個 ‘plays’ 組成.它的內容是一個以 ‘plays’ 爲元素的列表. 
「plays」 算是一個體育方面的類比,你能夠經過多個 plays 告訴你的系統作不一樣的事情,不只是定義一種特定的狀態或模型.你能夠在不一樣時間運行不一樣的 plays. 
這裏有一個從github源碼demo裏找到的playbook示例,其中僅包含一個 play: 仔細看注視服務器

---#必須---開頭
- hosts: webservers#hosts裏定義的組名或者直接服務器ip
 vars:#參數
   http_port: 80
   max_clients: 200
 remote_user: root #執行的帳戶名
 tasks:#執行的任務
 - name: ensure apache is at the latest version#任務名稱是安裝最新版本的apache
   yum: pkg=httpd state=latest#執行的命令是ansible yum模塊安裝httpd
 - name: write the apache config file#任務名稱是修改apache的config配置文件
   template: src=/srv/httpd.j2 dest=/etc/httpd.conf  #採用模版文件,從從src複製到dest,名字最終爲httpd.conf
   notify:#事件通知,一有修改配置文件,就通知的名字爲restart apache,會執行handlers相同名字的service進行執行重啓
   - restart apache
 - name: ensure apache is running #任務名稱
   service: name=httpd state=started #任務操做是:啓動httpd
 handlers:
   - name: restart apache #任務名稱
     service: name=httpd state=restarted #任務操做是重啓httpd服務

執行ansible playbook 
ansible-playbook demo.yml 
就能夠查看結果app

相關文章
相關標籤/搜索