企業——自動化運維 ansible

一.什麼是ansible?

  ansible是新出現的自動化運維工具,基於Python開發,集合了衆多運維工具(puppet、chef、func、fabric)的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。html

  ansible是基於 paramiko 開發的,而且基於模塊化工做,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架。ansible不須要在遠程主機上安裝client/agents,由於它們是基於ssh來和遠程主機通信的。ansible目前已經已經被紅帽官方收購,是自動化運維工具中你們承認度最高的,而且上手容易,學習簡單。是每位運維工程師必須掌握的技能之一。python

  Ansible 與 SaltStackmysql

>> 最大的區別是 Ansible 無需在被監控主機部署任何客戶端代理,默認經過 SSH 通道進行遠程命令執行或下發配置。
>> 相同點是都具有功能強大、靈活的系統管理、狀態配置,都使用 YAML 格式來描述配置,二者都提供豐富的模板及 API,對雲計算平臺、大數據都有很好的支持web

 

 

二.ansible的特色

  1. 部署簡單,只需在主控端部署 Ansible 環境,被控端無需作任何操做;
  2. 默認使用 SSH 協議對設備進行管理;
  3. 有大量常規運維操做模塊,可實現平常絕大部分操做;
  4. 配置簡單、功能強大、擴展性強;
  5. 支持 API 及自定義模塊,可經過 Python 輕鬆擴展;
  6. 經過 Playbooks 來定製強大的配置、狀態管理;
  7. 輕量級,無需在客戶端安裝agent,更新時,只需在操做機上進行一次更新便可;
  8. 提供一個功能強大、操做性強的Web管理界面和REST API接口——AWX平臺。

 

三.ansible的框架

      

  由如下幾個核心組件構成:sql

  ansible(主體):ansible的核心程序,提供一個命令行接口給用戶對ansible進行管理操做;
  Host Inventory(主機清單):爲Ansible定義了管理主機的策略。通常小型環境下咱們只須要在host文件中寫入主機的IP地址便可,可是到了中大型環境咱們有可能須要使用靜態inventory或者動態主機清單來生成咱們所須要執行的目標主機。
  Core Modules(核心模塊):Ansible執行命令的功能模塊,多數爲內置的核心模塊。
  Custom Modules(拓展模塊):若是ansible自帶的模塊沒法知足我麼你的需求,用戶可自定義相應的模塊來知足本身的需求。
  Connection Plugins(鏈接插件):模塊功能的補充,如鏈接類型插件、循環插件、變量插件、過濾插件等,該功能不經常使用
  Playbook(任務劇本):編排定義ansible任務集的配置文件,由ansible順序依次執行,一般是JSON格式的* YML文件
  API:供第三方程序調用的應用程序編程接口

數據庫

ansible 命令執行過程:

  1. 加載本身的配置文件,默認/etc/ansible/ansible.cfg
  2. 查找對應的主機配置文件,找到要執行的主機或者組;
  3. 加載本身對應的模塊文件,如 command;
  4. 經過ansible將模塊或命令生成對應的臨時py文件(python腳本), 並將該文件傳輸至遠程服務器;
  5. 對應執行用戶的家目錄的.ansible/tmp/XXX/XXX.PY文件;
  6. 給文件 +x 執行權限;
  7. 執行並返回結果;
  8. 刪除臨時py文件,sleep 0退出

 

四.ansible的安裝

安裝的環境:

  172.25.254.1  server1編程

  172.25.254.2  server2vim

 

ansible的相關的文件的路徑:  rpm  -aq  |  grep  ansible  (或者 rpm -ql | grep ansible)服務器

  /etc/ansible/ansible.cfg   ##主配置文件,配置ansible工做特性
  /etc/ansible/hosts   ##主機清單
  /etc/ansible/roles/   ##存放角色的目錄框架

 

1.安裝相應的應用軟件

  cd ansible/
  ls
    ansible-2.7.8-1.el7.noarch.rpm
    ansible-tower-setup-bundle-3.4.2-1.el7.tar.gz
    libtomcrypt-1.17-25.el7.x86_64.rpm
    libtommath-0.42.0-5.el7.x86_64.rpm
    python2-crypto-2.6.1-13.el7.x86_64.rpm
    python2-jmespath-0.9.0-1.el7.noarch.rpm
    python-httplib2-0.9.2-0.1.el7.noarch.rpm
    python-keyczar-0.71c-2.el7.noarch.rpm
    python-paramiko-2.1.1-0.9.el7.noarch.rpm
    sshpass-1.06-1.el7.x86_64.rpm
  yum install -y *.rpm  ##將上面列出的安裝包所有安裝,防止有依賴性而安裝不了

 

2.配置主機清單

  cd /etc/ansible/
  ls
    ansible.cfg hosts roles
  vim hosts      ##主機清單,在文件的後面添加
    [web]    ##定義一個主機組
    server1    ##將主機名加進去

    [db]
    server2

 

3.測試   ping模塊:先ping——>輸入yes,再加-k參數

  ansible server1 -m ping     ## -m 執行模塊的名字,默認的是使用 command 模塊

  ansible server1 -m ping -k   ## -k 提示密碼使用sudo,sudo表示提權操做

      

  注意:上面兩條命令不能交換操做的順序,就至關因而,-m 輸入 yes 之後,給了登陸的權限;下一次登陸就會要求輸入密碼登陸。

 

4.配置免密操做

  ssh-keygen   ##生成祕鑰
  ssh-copy-id server1  ##將生成的祕鑰發送給server1
    root@server1's password:
  ssh-copy-id server2  ##將生成的祕鑰發送給server2
    root@server2's password:

 

  ansible server1 -m ping
  ansible server2 -m ping
  ansible all -m ping
  ansible web -m ping
  ansible db -m ping

       

  ansible-doc -l   ##列出全部模塊

  ansible-doc user   ##查看user模塊的使用方法

 

5.測試user模塊:給全部主機添加用戶

  在 server1上執行添加用的命令:ansible all -m user -a "name=wang  password=fang"  

  在server2 上查看是否用戶添加成功: id hui
    uid=1000(wang) gid=1000(wang) groups=1000(wang)
  cat /etc/shadow    ##密碼會以明文顯示
    wang:fang:17979:0:99999:7:::


  ssh-copy-id wang@server1    ##明文的密碼致使不能作免密認證
    Permission denied, please try again.


  passwd hui  ##給server1和server2手動更改密碼,再作免密
  ssh-copy-id wang@server1
    wang@server1's password:
  ssh-copy-id wang@server2
    wang@server2's password:


  ssh wang@server1  ##測試免密登錄
  ssh hui@server2


  vim /etc/sudoers  ##添加用戶受權
    92 wang ALL=(ALL) NOPASSWD: ALL
  vim /etc/sudoers
    92 wang ALL=(ALL) NOPASSWD: ALL


  ansible all -m ping -u hui -b    ##-b切換成root用戶

 

6.測試其餘的模塊

(1)查看主機名

  ansible all -u wang -b -a "hostname"

      

(2)安裝並開啓服務

  ansible server2 -u wang -b -m yum -a "name=httpd state=present"

  rpm -q httpd    ##查看已經安裝上
    httpd-2.4.6-45.el7.x86_64

  ansible server2 -u wang -b -m service  -a "name=httpd state=started"
  systemctl status httpd

      

(3)拷貝文件

在server1上操做:

  vim index.html
    www.westos.org
  ansible server2 -u wang -b -m copy -a "src=index.html dest=/var/www/html/index.html"

在server2上查看:curl 172.25.19.2

    www.westos.org

 (4)建立軟鏈接

  ansible server2 -u wang -b -m file -a "src=/etc/fstab dest=/tmp/fstab state=link"
  在server2上查看: ll /tmp/fstab
    lrwxrwxrwx 1 root root 10 Mar 24 10:45 /tmp/fstab -> /etc/fstab


  ansible server2 -u wang -b -m file -a "dest=/tmp/fstab state=absent"  ##刪除軟鏈接
  ll /tmp/fstab
    ls: cannot access /tmp/fstab: No such file or directory

(5)建立目錄

  ansible server2 -u wang -b -m file -a "dest=/tmp/dir1/dir2 state=directory mode=755"

  在server2上查看:

  cd /tmp/
  ls
    dir1 
  cd dir1/
  ls
    dir2

(6)刪除目錄
  ansible server2 -u wang -b -m file -a "dest=/tmp/dir1/dir2 state=absent"    ##後面能夠加-f參數,指定多少個線程
  在server2上查不到相應的目錄了

(7)在server2上安裝部署mysql


  ansible server2 -m yum -a "name=MySQL-python state=present"
  ansible server2 -m yum -a "name=mariadb-server state=present"
  ansible server2 -m service -a "name=mariadb state=started"

  
  ansible server2 -m mysql_user -a "name=wang password=fang priv=test.*:ALL state=present"
    server2 | CHANGED => {
    "changed": true,
    "user": "hyg"
    }

測試登陸一下數據庫:mysql -u wang -p fang test  MariaDB [test]> quit  Bye

相關文章
相關標籤/搜索