Ansible 一步一步從入門到精通(三)

一:構建測試環境,如下

安裝上一篇博客的方法配置3臺服務器

我的地址分別是:

10.0.0.130(app1)

10.0.0.131(app2)

10.0.0.141(db)

wKioL1fCPh2QLx31AABaO5BBQLs291.jpg-wh_50


配置資源文件

[example]
10.0.0.132

[app]
10.0.0.130
10.0.0.131

[db]
10.0.0.141

[multi:children]
app
db


二:AD-HOC命令使用

查看每個服務器的主機名

$ ansible multi -a "hostname"


使用一個線程執行命令,相當於順序在每個服務器上運行(默認5個線程執行)

$ ansible multi -a "hostname" -f 1


查看你的環境情況:

查看磁盤使用情況

$ ansible multi -a "df -h"

查看內存使用情況

$ ansible multi -a "free -m"

查看時間是否準確

$ ansible multi -a "date"

如果時間不一致,可以使用ntpdate 同步一下

$ ansoble multi -a "ntpdate cn.pool.ntp.org"


三:配置兩臺應用服務器

前提是安裝好epel源和centos base源(可以使用阿里雲的鏡像源)

$ ansible app -m yum -a "name=MySQL-python state=present"
$ ansible app -m yum -a "name=python-setuptools state=present"
$ ansible app -m easy_install -a "name=django"


測試django是否安裝正確

root@~#  ansible app -a "python -c 'import django; print django.get_version()'"
10.0.0.131 | success | rc=0 >>
1.10

10.0.0.130 | success | rc=0 >>
1.10


四:配置數據庫服務器

$ ansible db -m yum -a "name=mysql-server state=present"
$ ansible db -m service -a "name=mysqld state=started enabled=yes"


配置數據庫用戶django,並且賦予權限

$ ansible db  -m yum -a "name=MySQL-python state=present"
$ ansible db  -m mysql_user -a "name=django host=% password=12345 \
priv=*.*:ALL state=present


五:限制命令只在一個服務器上生效

$ ansible app  -a "service ntpd restart" --limit "10.0.0.132"
# Limit hosts with a simple pattern (asterisk is a wildcard).
$ ansible app  -a "service ntpd restart" --limit "*.4"
#以4結尾的ip地址,將會執行命令
# Limit hosts with a regular expression (prefix with a tilde).
$ ansible app  -a "service ntpd restart" --limit ~".*\.4"
#使用正則表達式匹配主機


六:管理系統用戶和組

系統添加admin組

$ ansible app  -m group -a "name=admin state=present"

系統添加jwh566用戶

$ ansible app  -m user -a "name=jwh5566 group=admin createhome=yes"

刪除系統用戶

$ ansible app  -m user -a "name=jwh5566 state=absent remove=yes"


七:管理文件和目錄

獲取文件的信息,權限,所有者等

$ ansible multi -m stat -a "path=/etc/environment"

複製文件到服務器

$ ansible multi -m copy -a "src=/etc/hosts dest=/tmp/hosts"

從服務器接收文件(接收到控制機)

$ ansible multi  -m fetch -a "src=/etc/hosts dest=/tmp"

創建目錄

$ ansible multi -m file -a "dest=/tmp/test mode=644 state=directory"

創建符號鏈接

$ ansible multi -m file -a "src=/src/symlink dest=/dest/symlink \
owner=root group=root state=link"

刪除目錄和文件

$ ansible multi -m file -a "dest=/tmp/test state=absent"


八:運行後臺任務

-B <seconds> 指定運行任務的最大時間

-P <seconds> 指定多久時間去一次服務器查看任務執行的狀態


異步更新服務器(根據系統情況,可能需要很長時間)

$ ansible multi  -B 3600 -a "yum -y update"
    background launch...
    
    10.0.0.132 | success >> {
    "ansible_job_id": "763350539037",
    "results_file": "/root/.ansible_async/763350539037",
    "started": 1


如果說後臺任務還在運行,使用下面的命令查看運行狀態

$ ansible multi -m async_status -a "jid=763350539037"


九:檢查日誌文件

$ ansible multi  -a "tail /var/log/messages"


如果需要grep,需要使用shell模塊

root@~#  ansible multi  -m shell -a "tail /var/log/messages | \
 grep ansible-command | wc -l"
10.0.0.131 | success | rc=0 >>
2

10.0.0.130 | success | rc=0 >>
2

10.0.0.141 | success | rc=0 >>
6

這個命令顯示每臺服務器分別執行了幾次ansible命令


十:管理crontab 任務

$ ansible multi  -m cron -a "name='daily-cron-all-servers' \
hour=4 job='/path/to/daily-script.sh'"

可以使用這個配置ntp 任務


刪除crontab任務

$ ansible multi  -m cron -a "name='daily-cron-all-servers' state=absent"



總結:

第三章,到此爲止,你已經能夠配置一個常用的基礎架構,並且能夠熟練使用常用的模塊,

下一章,將會深入介紹playbook的使用。j_0028.gif

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章