自動化運維工具--Ansible(安裝部署、模塊簡介與操做)

1、Ansible概述

  • 互聯網的快速發展致使產品更新換代速度加快,按照傳統維護操做使得工做效率低下,自動化運維以儘量安全高效的完成工做爲目的,實現代替傳統工做方式。
  • 自動化運維工具劃分爲兩類:
  • 一是須要使用代理工具的,也就是基於agent程序來實現管理功能,例如puppet、func、zabbix等
  • 二是不須要代理配置工具的,能夠直接基於SSH服務來完成管理功能,如ansible,fabric等。mysql

  • 自動化運維工具比較:
工具 開發語言 結構 配置文件格式 運行任務
Ansible Python YAML 支持命令行
SaltStack Python C/S YAML 支持命令行
Puppet Ruby C/S Ruby語法格式 經過模塊實現

Ansible

  • Ansible基於Python開發,集合了衆多優秀運維工具的優勢,實現了批量運行命令、部署程序、配置系統等功能。默認經過SSH協議進行遠程命令執行或下發配置,無需任何客戶端代理軟件,從而使得自動化環境部署變得簡單,同時支持多臺主機並行管理,使得管理主機更加便攜。

2、安裝部署Ansible服務

  • ansible自動化運維環境有控制主機與被管理主機組成,因爲ansible是基於SSH協議進行通訊的,因此控制主機安裝ansible軟件後不須要重啓或者運行任何程序,被管理主機也不須要安裝或者運行任何代理程序。

2.一、安裝部署Ansible

服務器 IP地址 操做系統 組名
控制主機 192.168.144.112 centos7.3 x86_64
被控制主機1 192.168.144.111 centos7.3 x86_64 webserver
被控制主機2 192.168.144.114 centos7.3 x86_64 mysql
  • 1)配置yum源

yum install epel-releaseweb

  • 2)安裝ansible

yum install ansible -y
yum install tree -ysql

  • 3)安裝完成後,利用tree命令查看配置文件結構。

tree /etc/ansibleshell

/etc/ansible/
├── ansible.cfg   //主配置文件
├── hosts         //管控主機文件
└── roles        //角色目錄

自動化運維工具--Ansible(安裝部署、模塊簡介與操做)

2.二、配置主機清單

vim /etc/ansible/hostsvim

[webserver]       //主機分類組名
192.168.144.111   //主機IP地址或者是域名

[mysql]
192.168.144.114

2.三、利用SSH實現登陸

  • 控制服務器上操做,爲了不ansible下發指令時輸入被管理主機的密碼,須要使用SSH證書籤名達到免密登陸效果。使用ssh-keygen產生一對密匙,使用ssh-copy-id來下發公匙。

ssh-keygen -t rsa
ssh-copy-id root@192.168.144.111 //發送公匙給被控服務器
ssh-copy-id root@192.168.144.114centos

  • 當被控制服務器接收到公匙後,實際已經能夠經過ansible進行命令控制,只是,存在每次都須要輸入私鑰密碼交互式驗證較爲麻煩,所以須要設置免交互代理。

ssh-agent bash
ssh-add //輸入私鑰密碼便可安全

自動化運維工具--Ansible(安裝部署、模塊簡介與操做)

3、Ansible應用命令模塊

3.一、ansible命令格式

  • 命令格式:ansible [主機] [-m 模塊] [-a args]
  • ansible-doc -l //列出全部已安裝的模塊 注:按q退出
  • ansible-doc -s user //-s列出user模塊描述信息和操做動做

自動化運維工具--Ansible(安裝部署、模塊簡介與操做)

3.二、command模塊

  • Ansible管理工具默認模塊,若省略-m command,ansible默認使用command的模塊

ansible 192.168.144.111 -m command -a 'date' //指定ip執行date
ansible webserver -m command -a 'date' //指定分類執行date
ansible mysql -m command -a 'date'
ansible all -m command -a 'date' //全部hosts主機執行date命令
ansible all -a 'ls -l /' 若是不加-m模塊,則默認運行command模塊bash

3.二、cron模塊

  • 兩種狀態,present表示添加,默認狀態,absent表示移除

ansible-doc -s cron //查看cron模塊信息
ansible webserver -m cron -a 'minute="*/1" job="/bin/echo heihei" name="test cron job"'服務器

ansible webserver -m cron -a 'hour="23" job="/bin/echo heihei" name="test cron job"'    //天天23點執行,若想每隔23個小時執行須要改爲hour="*/23"
ansible webserver -m cron -a 'weekday="6" job="/bin/echo heihei" name="test cron job"'

ansible-doc -s cron  //結合查看詳細用法

ansible webserver -a 'crontab -l'
ansible webserver -m cron -a 'name="test cron job" state=absent' //移除計劃任務,假如該計劃任務沒有取名字,name=None便可運維

3.三、user模塊

  • 用於建立新用戶,更改刪除已存在用戶,name選項用於指定用戶名稱。
  • user模塊是請求的是useradd, userdel, usermod三個指令
  • 可指定新建用戶的uid,group所屬組

ansible webserver -m user -a 'name="test1"'
ansible webserver -m user -a 'name="test2" shell=/sbin/nologin' //添加用戶指定shell登陸方式
ansible webserver -m command -a 'tail /etc/passwd' //查看用戶
ansible webserver -m user -a 'name="test1" state=absent' //刪除用戶test01

3.四、group模塊

  • 針對用戶的組進行管理,請求groupadd、groupdel、groupmod三個指令

ansible-doc -s group //查看group模塊幫助文檔
ansible mysql -m group -a 'name=mysql gid=306 system=yes' //建立mysql組,指定gid,設置爲系統組
ansible mysql -a 'tail /etc/group'
ansible mysql -m user -a 'name=test01 uid=306 system=yes group=mysql' //使用user模塊添加用戶,並添加到mysql組
ansible mysql -a 'tail /etc/passwd'
ansible mysql -a 'id test01'

3.五、copy模塊

  • 用於實現文件複製和批量文件下發,src用來定義文件源路徑,dest定義被管理主機的文件路徑,owner指定屬主,group指定屬組,mode指定文件權限。

ansible-doc -s copy
ansible mysql -m copy -a 'dest=/opt/123.txt content="heihei" owner=test01 group=test01 mode=600' //新建文件且指定內容
ansible mysql -a 'ls -l /opt'
ansible mysql -m copy -a 'src=/etc/fstab dest=/opt/fstab.back owner=root mode=640' //複製文件

3.六、file模塊

  • 在ansible中使用file模塊來設置文件屬性,其中使用path指定文件路徑,使用src定義源文件路徑,使用name或者dest來替換建立文件的軟連接。

ansible-doc -s file
ansible mysql -m file -a 'owner=root group=root mode=755 path=/opt/123.txt' //更改文件的屬主屬組
ansible mysql -m file -a 'src=/opt/123.txt dest=/opt/123.txt.bk state=link' //建立軟鏈接
ansible mysql -m file -a 'path=/opt/test.txt state=touch' //新建一個空文件,若須要指定內容須要copy模塊,content指定內容

3.七、ping模塊

  • 在ansible中使用ping模塊來檢測指定主機的連通性。

ansible all -m ping

3.八、yum模塊

  • 負責在被管理的主機上安裝與卸載軟件包,可是須要前提在每一個節點配置本身的yum倉庫,其中name指定軟件包名稱,state=absent爲選擇卸載軟件包。

ansible-doc -s yum
ansible mysql -m yum -a 'name=httpd'
ansible mysql -m yum -a 'name=httpd state=absent'
ansible mysql -m command -a 'rpm -q httpd'

3.九、service模塊

  • 控制服務的運行狀態,enabled表示打開開機自啓動,取值爲true或者false,使用name定義服務名稱,使用state指定服務狀態,取值爲started、stopped、restarted.(此處注意不少參數後有ed,注意stopped)

ansible-doc -s service
ansible mysql -m service -a 'name=httpd enabled=true state=started' //設置httpd開啓自啓動,且狀態爲開啓
ansible mysql -m command -a 'systemctl status httpd'

3.十、shell模塊

  • 用於建立用戶無交互模式給用戶設置密碼。

ansible-doc -s shell
ansible mysql -m shell -a 'echo abc123 | passwd --stdin test' //爲test用戶建立面交互式密碼

3.十一、script模塊

  • 能夠將本地腳本複製到被管理主機上進行運行,須要注意的是,使用相對路徑指定腳本!!!

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'

3.十二、setup模塊

  • 查看被管理主機的facts(facts是ansible採集被管理主機設備信息的一個功能)每一個被管理主機在接受並運行管理命令以前,都會將本身的相關信息(操做系統版本IP地址等)發送給控制主機。

ansible-doc -s setup
ansible mysql -m setup

自動化運維工具--Ansible(安裝部署、模塊簡介與操做)

相關文章
相關標籤/搜索