1.什么是Ansible顽频?
Ansible 是一個(gè)配置管理和應(yīng)用部署工具,即在管理主機(jī)上操作一些命令就能在節(jié)點(diǎn)主機(jī)上進(jìn)行相應(yīng)的動(dòng)作衰絮。
2.Ansible的特點(diǎn)?
- no angents:被管控節(jié)點(diǎn)無(wú)需安裝agent
- no server:無(wú)服務(wù)端翻伺,使用時(shí)直接調(diào)用命名
- modules in any languages:基于模塊工作段多,可以使用任意語(yǔ)言開(kāi)發(fā)模式
- 易讀的語(yǔ)法:基于yaml語(yǔ)法編寫(xiě)playbook
- 基于推送模式:不同于puppet的拉取模式烧给,直接由調(diào)用者控制變更在服務(wù)器上發(fā)生的時(shí)間
- 模塊是冪等性的:定義的任務(wù)已存在則不會(huì)做任何事情迈倍,意味著在同一臺(tái)服務(wù)器上多執(zhí)行同一個(gè)playbook是安全的
3.Ansible中ansible.cfg配置文件 優(yōu)先級(jí)
-
ANSIBLE_CFG
:首先鞋屈,Ansible命令會(huì)先檢查環(huán)境變量追城,及這個(gè)環(huán)境變量將指向的配置文件刹碾;(export ANSIBLE_CONFIG=xxxx配置文件
) -
./ansible.cfg
:其次,將會(huì)檢查當(dāng)前目錄下的ansible.cfg配置文件座柱; -
~/.ansible.cfg
:再次迷帜,將會(huì)檢查當(dāng)前用戶home目錄下的.ansible.cfg
配置文件; -
/etc/ansible/ansible.cfg
:最后色洞,將會(huì)檢查在安裝Ansible時(shí)自動(dòng)生產(chǎn)的配置文件
ansible配置文件的參數(shù)
inventory = /etc/ansible/hosts 這個(gè)參數(shù)表示資源清單inventory文件的位置
library = /usr/share/ansible 指向存放Ansible模塊的目錄戏锹,支持多個(gè)目錄方式,只要用冒號(hào)(:)隔開(kāi)就可以
forks = 5 并發(fā)連接數(shù)锋玲,默認(rèn)為5
sudo_user = root 設(shè)置默認(rèn)執(zhí)行命令的用戶
remote_port = 22 指定連接被管節(jié)點(diǎn)的管理端口景用,默認(rèn)為22端口,建議修改,能夠更加安全
host_key_checking = False 設(shè)置是否檢查SSH主機(jī)的密鑰伞插,值為T(mén)rue/False割粮。關(guān)閉后第一次連接不會(huì)提示配置實(shí)例
timeout = 60 設(shè)置SSH連接的超時(shí)時(shí)間,單位為秒
log_path = /var/log/ansible.log 指定一個(gè)存儲(chǔ)ansible日志的文件(默認(rèn)不記錄日志)
4.定義ansible inventory(主機(jī)列表)
ansible的主要功用在于批量主機(jī)操作媚污,為了便捷地使用其中的部分主機(jī)舀瓢,可以在inventory file中將其分組命名。默認(rèn)的inventory file為/etc/ansible/hosts耗美。
inventory file可以有多個(gè)京髓。
- 1.基于IP地址+密碼的方式
[webservers]
172.16.1.7ansible_ssh_user='root'
ansible_ssh_pass='1'
172.16.1.8ansible_ssh_user='root'
ansible_ssh_pass='1'
- 2.基于密鑰連接,需要先創(chuàng)建公鑰和私鑰商架,并下發(fā)公鑰至被控端
[root@manager ~]ssh-copy-id -I ~/.ssh/id_rsa.pub root@172.16.1.7
[root@manager ~]ssh-copy-id -I ~/.ssh/id_rsa.pub root@172.16.1.8
[root@manager ~]cat hosts
[webservers]
172.16.1.7
172.16.1.8
- 3.主機(jī)組使用方式
[lbservers] #定義lbservers組
172.16.1.5
172.16.1.6
[webservers] #定義webservers組
172.16.1.7
172.16.1.8
[servers:children] #定義servers組包括兩個(gè)子組
[lbservers,webservers]
lbservers
webserver
5.Ansible任務(wù)執(zhí)行模式
- ad-hoc模式(點(diǎn)對(duì)點(diǎn)模塊)
使用單個(gè)模塊,支持批量執(zhí)行單條命令,相當(dāng)與在bash中執(zhí)行一句shell命令 - playbook模式(劇本模式)
ansible主要的管理方式,通過(guò)多個(gè)task的集合完成一類功能,可以理解為多個(gè)ad-hoc的配置文件
ansible ad-Hoc 單條命令
command 執(zhí)行命令 默認(rèn) 不支持管道
shell 執(zhí)行命令 支持管道
yum_reposity yum倉(cāng)庫(kù)配置
yum yum安裝軟件
copy 拷貝配置文件
service|systemd 啟動(dòng)服務(wù)
file 創(chuàng)建目錄 創(chuàng)建文件 遞歸授權(quán)
mount 掛載
cron 定時(shí)任務(wù)
firewalld 防火墻
selinux
1.command
ansible webservers -a "ps axu|grep nginx" -i hosts 不支持管道(簡(jiǎn)單命令)
2.shell
ansible webservers -m shell -a "ps axu|grep nginx" - i hosts 支持管道
3.yum
name 服務(wù)名
state:
present 安裝
absent 卸載
latest 最新
enablerepo 指定使用按個(gè)倉(cāng)庫(kù)
disablerepo 排除使用哪個(gè)倉(cāng)庫(kù)
- 1.安裝最新的httpd服務(wù)
[root@manager project1] # ansible webservers -m yum
-a "name=httpd state=latest disablerepo=webtaticphp" -i hosts - 2.移除httpd服務(wù)
[root@manager project1]# ansible webservers -m yum
-a "name=httpd state=absent disablerepo=webtaticphp" -i host - 3.安裝httpd指定從哪個(gè)倉(cāng)庫(kù)安裝
[root@manager project1]# ansible webservers -m yum
-a "name=httpd state=latest enablerepo=testing" -i
hosts - 4.通過(guò)URL方式進(jìn)行安裝
[root@manager project1]# ansible webservers -m yum
-a "name=https://mirrors.aliyun.com/zabbix/zabbix/3.0/
rhel/7/x86_64/zabbix-agent-3.0.0-1.el7.x86_64.rpm
state=present disablerepo=webtatic-php" -i hosts
4.copy
src 本地路徑,可以是相對(duì),可以是絕對(duì)
dest 目標(biāo)位置
owner 屬主
group 屬組
mode 權(quán)限
backup 備份
[root@manager project1]# ansible webservers -m copy
-a "src=./file/ansible.oldxu.com.conf
dest=/etc/nginx/conf.d/ansible.oldxu.com.conf
owner=root group=root mode=644" -i hosts
[root@manager project1]# ansible webservers -m copy
-a "src=./file/ansible.oldxu.com.conf
dest=/etc/nginx/conf.d/ansible.oldxu.com.conf
owner=root group=root mode=644 backup=yes" -i hosts
5.service|systemd
state
started:?jiǎn)?dòng)
stopped:停止
restarted:重啟
reloaded:重載
enabled 是否開(kāi)機(jī)自啟
yes 是
no 否
[root@manager project1]# ansible webservers -m
systemd -a "name=nginx state=restarted enabled=yes"
-i hosts
6.file
創(chuàng)建/code/ansible
path 路徑
state
touch 創(chuàng)建文件
directory 創(chuàng)建目錄
owner 屬主
group 屬組
mode 權(quán)限
[root@manager project1]# ansible webservers -m file
-a "path=/code/ansible state=directory mode=755
owner=www group=www" -i hosts
7.user group
[root@manager project1]# ansible webservers -m
group -a "name=www gid=666 state=present" -i hosts
user
name 名稱
uid uid
group 組名或gid
create_home 是否創(chuàng)建家目錄
system 是否作為系統(tǒng)組
shell 指定登錄shell
state
present 創(chuàng)建用戶
adsent 刪除用戶不刪除家目錄
remove 移除用戶并刪除家目錄
groups 添加附加組
password 創(chuàng)建密碼
[root@manager project1]# ansible webservers -m user
-a "name=www uid=666 group=666 create_home=no
shell=/sbin/nologin state=present" -i hosts
8.mount
present 寫(xiě)入/etc/fstab
absent 卸載/etc/fstab
mounted 臨時(shí)掛載
unmounted 卸載當(dāng)前掛載
掛載過(guò)程中,如果目錄不存在,則會(huì)創(chuàng)建該目錄
[root@manager project1]# ansible webservers -m
mount -a "src=172.16.1.31:/data/zrlog
path=/test_zrlog fstype=nfs opts=defaults
state=mounted" -i hosts
9.cron
minute 分
hour 時(shí)
day 日
month 月
week 周
job 添加任務(wù)
[root@manager project1]# ansible webservers -m cron
-a 'name=test_job minute=00 hour=02 job="/bin/bash
/server/scripts/client_to_data_server.sh
&>/dev/null"' -i hosts
10.firewalld
開(kāi)啟防火墻
[root@manager project1]# ansible webservers -m
systemd -a "name=firewalld state=started" -i hosts
針對(duì)服務(wù)
[root@manager project1]# ansible webservers -m
firewalld -a "service=http state=enabled" -i hosts
針對(duì)端口
[root@manager project1]# ansible webservers -m
firewalld -a "port=9999/tcp state=enabled" -i hosts
針對(duì)source來(lái)源
ansible webservers -m firewalld -a "source=172.16.1.0/24
state=disabled permanent=no" -i hosts
11.selinux
[root@manager project1]# ansible webservers -m
selinux -a "state=disabled" -i hosts