ansible批量部署服務

一.ansible

1.概念
ansible是一個基於Python開發的自動化運維工具!
其功能實現基於SSH遠程連接服務!
ansible可以實現批量系統配置、批量軟件部署、批量文件拷貝、批量運行命令等功能
2.網址:
http://docs.ansible.com/ 官網
3.特點
不需要單獨安裝客戶端(no agents),基於系統自帶的sshd服務,sshd就相當於ansible的客戶端。
不需要服務端(no servers)。
需要依靠大量的模塊實現批量管理。
4.優點:
(1) ansible軟件特點:
· 可以實現批量管理/部署
ansible oldboy -m command -a "hostname" 批量執行命令
· 編寫劇本-腳本(playbook)---針對重複性的操作
(2) ansible核心功能:
· pyYAML-----用於ansible編寫劇本所使用的語言格式(saltstack---python)
· paramiko---遠程連接與數據傳輸
· Jinja2-----用於編寫ansible的模板信息(擴展部分)
5.安裝:
yum -y install ansible 管理端安裝軟件
yum -y install libselinux-python 被管理端關閉selinux服務

二.ansible部署

【命令部署】
部署好基於ssh密鑰認證管理方式認證環境
(1)創建密鑰對
ssh-keygen -t rsa
(2)分發密鑰對
ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.41
ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.31
ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.7
(3)登陸驗證
ssh 172.16.1.41
ssh 172.16.1.31
ssh 172.16.1.7
【腳本部署】
1.批量部署
#!/bin/bash
#create key pair
\rm -f /root/.ssh/id_dsa*
ssh-keygen -t dsa -f /root/.ssh/id_dsa -P "" -q
#fenfa key file
for ip in 7 31 41
do
echo "==== fenfa key to host 172.16.1.$ip======================"
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no [email protected].$ip"
echo "=================== fenfa end ==========================="
echo ""
done
2.批量檢查
#!/bin/bash
cmd=$1
for ip in 7 31 41
do
echo "====host 172.16.1.$ip info===="
ssh [email protected].$ip "$cmd"
echo "=============================="
echo ""
done

三.配置ansible hosts文件

ansible主配置文件/etc/ansible/ansible.cfg
配置hosts主機文件 vim /etc/ansible/hosts
[root]
172.16.1.7
172.16.1.31
172.16.1.41

四.ansible 命令語法

(1)指定管理單臺主機方法
例:ansible 172.16.1.11 -m user -a "name=plp state=absent remove=yes"
(2)指定管理主機組
例:ansible KS -m user -a "name=plp group=root"
(3)指定管理所有主機
例:ansible all -m user -a "name=plp group=root"

ansible批量部署服務

ansible批量部署服務

五.ansible重要的模塊項

1.command模塊參數
(1) -k ansible基於密碼口令管理主機
-m 指定模塊
-a 指定動作
例:[root@m01 ~]#ansible 172.16.1.31 -m ping -k
(2)chdir 執行命令前切換到指定目錄
例:ansible root -m command -a "chdir=/tmp touch 123.txt"
(3)creates 執行命令前進行判斷,有就不執行,沒有執行
例:ansible root -m command -a "creates=/tmp/123.txt touch 123.txt"
(4)removes 如果這個參數對應的文件不存在,就不運行command
例:ansible root -m command -a "remove=/tmp/123.txt touch 123.txt"
(5)free_from 可以輸入任何命令,除了特殊變量和符號
2. copy模塊參數(將數據推送遠程主機)
(1)src 源(本地)路徑
(2)dest 目標路徑
例:ansible KS -m copy -a "src=/tmp/888.txt dest=/tmp"
(3)owner 屬主
(4)group 屬組
(5)mode 定義文件/目錄權限
例:ansible root -m cpoy -a “src=/tmp/123.txt dest=/backup owner=oldboy group=oldboy mode=600”
(6)backup 以時間戳名做備份
例:ansible root -m cpoy -a “src=/tmp/123.txt dest=/backup backup=yes”
(7)force 傳輸內容不同時做覆蓋
例:ansible root -m cpoy -a “src=/tmp/123.txt dest=/backup force=no”
(8)content 替代sec傳輸時,將文件內容設置爲指定值(短點)
remote_src 如果爲 False,將搜索源信息在本地/管理及機器上
如果爲True,將到遠程/目標主機的機器上搜索
默認爲false,目前remote_src不支持遞歸拷貝
例:ansible root -m cpoy -a “content=’my world’ dest=/backup/123.txt”
3.shell 模塊參數(執行命令在節點上,萬能模塊)
例:ansible oldboy -m shell -a "uptime;df -h"
ansible oldboy -m shell -a "/server/scripts/test01.sh"
注意:shell模塊運行腳本,需要將腳本推送到遠程主機中,需要授權腳本文件爲執行權限
4.script模塊參數(將本地運行腳本信息在遠程主機中進行)
例:ansible root -m script -a "/server/scripts/yum-ipstate.sh"
5.yum模塊(yum源安裝軟件)
(1)name 軟件名
(2)state 狀態
(3)installed 安裝
例:ansible root -m yum -a "name=tree state=installed"
6.service 模塊(服務管理)
(1)name 服務名
(2)state 狀態
(3)enabled 關閉開啓自啓
例:ansible root -m service -a "name=iptables state=stopped enabled=yes"
7.file 模塊(修改創建文件/目錄)
(1)mode 定義文件/目錄權限
例:ansible root -m file -a "dest=/backup/123.txt mode=0600"
(2)src 要連接的文件路徑
(3)path 指定文件路徑信息(別名dest,name)
(4)state 狀態
=directory 所有不存在的子目錄將會被創建,並且從1.7開始支持設置目錄權限
=file 如果文件不存在將不能被創建
=link 符號鏈接將被創建或更改。
=hard 便會創建出硬鏈接
=absent 錄將被遞歸刪除以及文件,而鏈接將被取消鏈接。
=touch 如果路徑不存在將創建一個空文件
創建文件:
例:ansible root -m file -a "dest=/backup/123.txt state=touch"
創建目錄:
例:ansible root -m file -a "dest=/backup/123 state=directory"
刪除文件:
例:ansible root -m file -a "dest=/backup/123.txt state=absent"
創建連接文件:
例:ansible root -m file -a "dest=/backup/123 state=link"
8.cron模塊(定時任務模塊)
(1)minute----------------分
例:ansible root -m cron -a "name=’rsync system time’ minute=3 job=’/usr/sbin/ntpdate ntp1.aliyun.com’ "
(2)hour-------------------時
(3)day---------------------天
(4)month-----------------月
(5)weekday--------------周
(6)job----------------------做什麼事
(7)name-------------------對定時任務信息做備註
(8)state--------------------present表創建(默認),absent表示刪除
例:ansible root -m cron -a "name=’rsync system time’ state=absent "
(9)disable-----------------yes表註釋/no不註釋
例:ansible root -m cron -a "name=’rsync system time’ minute=3 job=’/usr/sbin/ntpdate ntp1.aliyun.com’ disable=yes"
9.mount模塊
(1)fstype 指定掛載文件系統類型
(2)opts 掛載時指定掛載參數
(3)path 制定掛載路徑
(4)src 指定那個目錄進行掛載
(5)state
=mounted 在fstab文件中的設備將被激活掛載和適當配置
=unmounted 設備將被卸載並不會改變fstab文件信息
例:ansible root -m mount -a "state=mounted fstype=nfs src=’172.168.1.31:/data/’ path=/mnt"
例:ansible mount -m setup -vvvv 輸出詳細信息方法
10.user模塊
name 用戶名
group 用戶組
state=absent 刪除用戶
remove=yes 是否刪除
例:ansible KS -m user -a "name=plp group=root" 創建用戶
ansible 172.16.1.11 -m user -a "name=plp state=absent remove=yes" 刪除用戶

六.ansible軟件顏色信息

綠色:  表示查看信息,對遠程主機未做改動的命令
紅色:  批量管理產生錯誤信息
×××:  對遠程主機做了相應改動
粉色:  對操作提出建議或忠告

七.ansible基於密鑰管理

[root]
172.16.1.41 ansible_ssh_user=root ansible_ssh_pass=123456
172.16.1.31 ansible_ssh_user=root ansible_ssh_pass=123456
172.16.1.7 ansible_ssh_user=root ansible_ssh_pass=123456

八.編寫ansible-playbook劇本

1.編寫格式說明
ansible劇本格式:yaml語法格式(python腳本編寫格式類似)
rsync配置文件格式:ini語法格式
sersync配置文件格式:xml語法格式
2.YAML語法規則
規則一:縮進(一個縮進兩空格,注意一定不用tab)
規則二:冒號(每個冒號後一定要有空格)
規則三:短橫線 - (短橫線後面要空格)
3.編寫案例
ansible-playbook --syntax-check cron.yml 劇本檢查語法方法
ansible-playbook -C cron.yml -C模擬執行劇本
ansible-playbook cron.yml 執行劇本

(1)案例一
ansible批量部署服務
(2)案例二
ansible批量部署服務

4.劇本編寫方式
多主機單任務編寫方式
多主機多任務編寫方式
不同主機多任務編寫方式

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