貴陽城鄉(xiāng)建設(shè)網(wǎng)站上海網(wǎng)站排名優(yōu)化
1. 概述
1.?自動化運維: 批量管理,批量分發(fā),批量執(zhí)行,維護
2.?無客戶端,基于ssh進行管理與維護
2. 環(huán)境準(zhǔn)備
環(huán)境 主機 ansible 10.0.0.7(管理節(jié)點) nfs01? 10.0.0.31(被管理節(jié)點) backup 10.0.0.41(被管理節(jié)點)
2.1 創(chuàng)建密鑰認(rèn)證
安裝sshpass
yum install -y? sshpass
#!/bin/bash
##############################################################
# File Name:24-ssh.sh
# Version:V1.0
# Author:xzb996
# Organization:www.oldboyedu.com
# Desc:一鍵創(chuàng)建密鑰對,分發(fā)密鑰對
##############################################################
##1.vars
pass=1
ips="10.0.0.31 10.0.0.41"##2.創(chuàng)建密鑰對
if [ ~/.shh/id_rsa] ;thenecho "已經(jīng)有密鑰對了"
elseecho "正在創(chuàng)建密鑰對"ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
fi##3.通過循環(huán)發(fā)送密鑰對
for ip in $ips
do sshpass -p${pass} ssh-copy-id -i ~/.ssh/id_rsa.pub -oStrictHostKeyChecking=no $ip &>/dev/nullecho "$ip 密鑰已發(fā)送..."done
3. 部署與配置
yum install -y ansible
3.1 配置
修改配置文件關(guān)閉主機Host_key_checking .
修改配置文件開啟日志功能
4.?Ans-inventory主機清單?
1. ansible默認(rèn)讀取在/etc/ansible/hosts文件,并非/etc/hosts.
2.未來實際使用中一般我們會把主機清單文件存放在指定的目錄中,運行ansible的時候通過-i選項指定主機清單文件即可
?4.1?主機清單必會格式
主機清單格式:
[分類或分組的名字]? ? ? ? ?#注意分類要體現(xiàn)出服務(wù)器的作用
ip地址或主機名或域名? ? #注意主機名要能解析才行
4.1.1 對主機分組并進行連接測試?
##vim編輯后用gg+dG清空文件內(nèi)容
[nfs]
172.16.1.31
[backup]
172.16.1.41
測試
ansible命令格式:
ansible 主機ip或分組或all? ?-m 指定使用的模塊名字?
這里的ping模塊用于檢查被管理端是否可以訪問
?4.2 子組
創(chuàng)建新的分組data包含已有的分組backup和nfs
[nfs]
172.16.1.31
[backup]
172.16.1.41
##c創(chuàng)建data的子組
[data:children]
nfs
backup
子組使用children關(guān)鍵詞創(chuàng)建
格式:
[data:children]? ? ?#組名字:children即可?
?4.3?指定用戶,密碼
不推薦,推薦先配置密鑰認(rèn)證,然后管理
沒有配置密鑰認(rèn)證,主機清單如何書寫?
[nfs]
172.16.1.31 ansible_user=root ansible_password=1 ansible_port=22 ##指定用戶名,密碼,端口
5.Ansible模塊
1.Ansible中通過各種模塊實現(xiàn)批量管理.
2.一般來說這些模塊對應(yīng)著Linux里面的基本操作或服務(wù)管理
3.?找出Linux場景操作對應(yīng)的模塊即可
5.1?命令與腳本類模塊?
5.1.1?command模塊
是ansible默認(rèn)的模塊,適用于執(zhí)行簡單的命令,不支持特殊符號
?批量獲取所有主機的主機名
ansible all -m command -a 'hostname'
?5.1.2 shell模塊
批量獲取所有主機的IP地址
ansible all -m shell -a "ip a s eth0 |awk -F'[ /]+' 'NR==3{print \$3}'"
shell模塊不推薦執(zhí)行較為復(fù)雜的指令,如果需要執(zhí)行放在腳本中執(zhí)行?
5.1.3 script模塊
1.分發(fā)腳本(傳輸腳本)
2.運行腳本
?批量執(zhí)行腳本獲取主機信息
#!/bin/bash
##############################################################
# File Name:25-ansible-script.sh
# Version:V1.0
# Author:xzb996
# Organization:www.oldboyedu.com
# Desc:系統(tǒng)巡檢腳本
##############################################################
hostname
hostname -I
uptime
whoami
date +%F
ansible all -m script -a '/server/scripts/25-ansible-script.sh'
?5.2 文件相關(guān)模塊
管理文件,管理目錄,軟連接
file模塊 模塊說明 path 路徑(目錄,文件) 必須要寫 src 源文件一般用于link(創(chuàng)建軟連接模式) 用于指定源文件 state 狀態(tài)(模式)
state=directory 創(chuàng)建目錄
state=file (默認(rèn)) 更新文件,如果文件不存在也不創(chuàng)建
state=link 創(chuàng)建軟連接
state=touch 創(chuàng)建文件
state state=absent 刪除 (注意如果是目錄遞歸刪除目錄) mode mode=755創(chuàng)建并修改權(quán)限 onwer onwer=root group group=root
創(chuàng)建/tmp/xzb666.txt
ansible all -m file -a 'path=/tmp/xzb66.txt state=touch'
創(chuàng)建目錄/app/?
ansible all -m file -a 'path=/app/xzb/xzb666 state=directory'
創(chuàng)建軟連接 /etc/hosts創(chuàng)建軟連接到/tmp/下
ansible all -m file -a 'path=/tmp/hosts src=/etc/hosts state=link'
創(chuàng)建/ans-backup目錄 所有者是oldboy
ansible all -m file -a 'path=/ans-backup owner=oldboy group=oldboy mode=700 state=directory'
刪除/ans-backup/
ansible all -m file -a 'path=/ans-backup state=absent'
?5.3?copy模塊
批量分發(fā):scp
copy模塊 src source 源文件 dest destination 目標(biāo) backup backup=yes 則會在覆蓋前進行備份 mode 修改權(quán)限 owner 修改為指定所有者 group 修改為指定用戶組
ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts backup=yes'
5.4?服務(wù)管理模塊-systemd
1.相當(dāng)于是systemctl 命令:
開啟/關(guān)閉/重啟服務(wù)
開機自啟動
systemd模塊 name 用于指定服務(wù)名稱 enabled yes開機自啟動 state 表示服務(wù)開,關(guān),重啟
state=started 開啟
state=stopped 關(guān)閉
state=reloaded 重讀配置文件(服務(wù)支持)
state=restarted 重啟(關(guān)閉再開啟)
daemon-reload yes是否重新加載對應(yīng)的服務(wù)的管理配置文件
?啟動服務(wù)crond
ansible all -m systemd -a 'name=crond enabled=yes state=started'
關(guān)閉firewalld服務(wù)
ansible all -m systemd -a 'name=firewalld enabled=no state=stopped'
5.5?軟件管理模塊
5.5.1?yum模塊
yum模塊 name 指定軟件包名字 state installed 安裝(present)(默認(rèn))
removed 刪除 (absent)
lastest 安裝或更新
update_cache 可以設(shè)置為no加加速,表示不更新本地yum緩存.實際應(yīng)用建議開啟
安裝htop,tree,lrzsz,sshpass服務(wù)
ansible all -m yum -a 'name=htop,tree,lrzsz,sshpass'
5.5.2? get_url模塊
get_url下載功能 url 指定要下載的地址 dest 下載到哪個目錄
https://tengine.taobao.org/download/tengine-2.4.1.tar.gz下載到/app/tools
ansible all -m get_url -a 'url=https://tengine.taobao.org/download/tengine-2.4.1.tar.gz dest=/app/tools'
5.5.3yum_repository模塊
有點雞肋,未來可以書寫好yum配置文件,copy分發(fā)過去即可。
yum_repository模塊
yum源 name yum源中名字 []里面的內(nèi)容 description yum源的注釋說明 對應(yīng)的 是name的內(nèi)容 baseurl yum源中baseurl下載地址 enabled 是否啟動這個源 yes/no gpgcheck 是否啟動gpgcheck功能 no file 指定yum源的文件自動添加.repo 默認(rèn)與模塊名字一致 ?????????
在nfs01上用yum安裝nginx
##nginx官網(wǎng)的yum源文件書寫
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
###用ansible的yum_repostiory模塊安裝
ansible nfs -m yum_repository -a 'name=nginx-stable description=nginx baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ enabled=yes gpgcheck=yes'
5.6?用戶管理?
5.6.1?user模塊
user模塊 name 指定用戶名 uid 指定uid group 指定用戶組 shell 指定命令解釋器 create_home 是否創(chuàng)建家目錄(yes/no) state present 添加
absent刪除
創(chuàng)建www-ans用戶uid 2001虛擬用戶
ansible all -m user -a 'name=ans-www uid=2001 shell=/sbin/nologin create_home=yes state=present'
?批量更新密碼
##下面命令可以更新密碼,密碼為1
ansible all -m user -a "name=xzb66 password={{'1'|password_hash('sha512','xzb666')}} state=present"
?5.7?mount模塊
實現(xiàn)mount命令進行掛載可以修改/etc/fstab實現(xiàn)永久掛載
mount選項 說明 fstype filesystem type指定文件系統(tǒng),xfs,ext4,iso9660,nfs src 源地址(nfs服務(wù)端地址) path 注意這里不是dest,掛載點(要把源掛載到哪里) state 參考下表
mount模塊的state參數(shù)可使用的值 absent 卸載并修改fstab unmounted 卸載不修改/etc/fstab present 僅修改/etc/fstab 不掛載 mounted 掛載并修改/etc/fstab remounted 重新掛載
?通過ans管理在web01上掛載nfs:/data掛載到web01的/ans-upload/
##1.在web01服務(wù)器上安裝nfs
ansible web01 -m yum -a 'name=nfs-utils state=present'
##2.創(chuàng)建掛載點
ansible web01 -m file -a 'name=/ans-upload state=directory'
##3.掛載nfs
ansible web01 -m mount -a 'src=172.16.1.31:/data/ path=/ans-upload fstype=nfs
state=mounted'
#4.檢查
ansible web -a 'df -h'
ansible web -a 'grep upload /etc/fstab'
5.8?cron模塊
用于管理系統(tǒng)的定時任務(wù),替代了crontab -e功能
cron模塊 說明 name 定時任務(wù)名字(一定要加上), 注釋的內(nèi)容 minute 分鐘 minute="*/2" hour 小時 day 日期 month 月份 week 周幾 job 指定命令或腳本(定向到空)
job="/sbin/ntpdate ntp1.aliyun.com &>/dev/null"
state present 添加定時任務(wù)(默認(rèn))
absent 刪除
每3分鐘同步時間
##清理已有的定時任務(wù):
ansible all -a "sed -i '/ntpdate/d' /var/spool/cron/root"
##創(chuàng)建定時任務(wù)
ansible all -m cron -a 'name="sync time by xzb666" minute="*/3" job="/sbin/ntpdatentp1.aliyun.com &>/dev/null" state=present'
##查看定時任務(wù)
ansible all -a 'crontab -l'
##刪除定時任務(wù)
ansible all -m cron -a 'name="time by xzb666" state=absent'