ansible部署
ansible的特性:基于Python語言實現,由paramiko,PyYAML和jinjia2三個關鍵模塊 部署簡單,agentless
?默認使用ssh協(xié)議
?? ??? ?(1) 基于秘鑰認證方式
?? ??? ?(2)在inventory文件中配置賬號密碼
主從模式:
?? ??? ?master:ansible,ssh client
?? ??? ?slave:ssh server
支持自定義模塊:支持各種編程語言
支持Playbook
基于“模塊”完成各種“任務”
首先,安裝ansible,在管理端和被管理端配置秘鑰信息;
/etc/ansible/hosts文件下,配置被管理端的組信息。
yum list all *ansible* yum info ansible yum install ansible -y rpm -ql ansible安裝依賴于epel源
配置文件:/etc/ansible/ansible.cfg
invertory:/etc/ansible/hosts
ls /etc/ansible? ?
ansible.cfg hosts roles
ansible.cfg 是 Ansible 工具的配置文件;
hosts 用來配置被管理的機器;
roles 是一個目錄,playbook 將使用它
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1、Ansible 管理機與被管理機做秘鑰認證
ssh-keygen??????? # 生成秘鑰
ssh-copy-id -i /root/.ssh/id_rsa.pub "-p 22 root@ip地址"???? # 將公鑰寫入被管理機
ssh root@ip地址 'ntpdate 另一個ip地址'? ??? ??? ??? ?#同步時間和另一個服務器時間相同。
2、hosts 文件添加被管理機
vim /etc/ansible/hosts
如何查看模塊幫助;
man ansible-doc ansible-doc -l 查看ansible支持的所有的模塊。 ansible-doc -s MODULE_NAME 查看某些模塊如何使用的。 ansible-doc -s yum 查看yum如何使用 ansible-doc -s commandansible命令應用基礎:
語法:ansible <host-pattern> [-f forks] [-m module_name] [-a args]
host-pattern:對哪些主機生效。
-f forks:一批處理多少主機,啟動的并發(fā)線程數。
-m module_name:要使用的模塊。
-a args:模塊特有的參數。
一.常見模塊:
ansible-doc -s MODULE_NAME
1) command:命令模塊,默認模塊,用于遠程執(zhí)行命令
ansible all -a 'data'
ansible 192.168.133.2 -m command -a 'data'?? ?#出現success表示成功。
192.168.12.129 | SUCCESS |rc=0 >>
TUE JUN 23 16:56:41 CST 2018
ansible webservers -m command -a 'data'
ansible all -m command -a 'data'
ansible 192.168.133.2 -m command -a 'tail -2 /etc/passwd'
2)cron模塊
cron:
?? ?state:
?? ??? ?present:安裝
?? ??? ?absent:移除
ansible-doc -s cron:查看如何使用參數,該參數-a后面添加(minute,job,name皆為參數的內容。)
比如在webservers集群中寫個定時計劃任務:每隔10分鐘輸出hello
ansible webservers -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job"'?? ??? ?
ansible webservers -a 'crontab -l'? 查看同步任務列表
ansible webservers -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron job" state=absent'
移除同步任務。默認沒有state是安裝。
3)user用戶模塊
name=:指明創(chuàng)建用戶的名字。
ansible-doc -s user
ansible all -m user -a 'name="user"'
ansible all -m user -a 'name="user" state=absent'
4)group模塊
ansible-doc -s group
ansible webservers -m group -a 'name=mysql gid=306 system=yes'
ansible webservers -m user -a 'name=mysql uid=306 system=yes group=mysql'
5)copy文件模塊
src=:定義本地源文件路徑
dest=:定義遠程目標文件路徑
content:取代src=,表示直接用此處生成的信息生成為目標文件的內容。
ansible all -m copy -a 'src=/etc/fstab dest=/tmp/fstab.ansible ower=root mode=640'
ansible all -m copy -a 'connect="Hello Ansible\nHi Mageedu" dest=/tmp/test.ansible'? \n是轉譯。
6)file:設定文件屬性
path=:指定文件路徑,可以使用name或dest來替換
創(chuàng)建文件符號鏈接:
?? ?src=:指明源文件
?? ?path=:指明符號鏈接文件路徑
7)ping:測試主機是否能連接。
ansible -a 'ping'
8)service:指定運行狀態(tài)
enabled=:是否開機自動啟動,取值為true或者false
name=:服務名稱
state=:狀態(tài),取值為started,stopped,restarted
9)shell:在遠程主機上運行命令
尤其是用到管道等功能的復雜命令時候。
ansible all -m user -a 'name=user1'
ansible all -m command -a 'echo passwd |passwd --stdin user1'
在遠程主機上查看發(fā)現密碼沒改變,是因為他默認可能認為是本機的命令
ansible all -m shell -a 'echo passwd |passwd --stdin user1'
10)script:本地腳本命令復制到遠程并且運行之。該shell腳本只支持相對路徑
11)yum:安裝程序包
name=:指明要安裝的程序包,可以帶上版本號
state=:present,lastest表示安裝,absent表示卸載
ansible all -m yum -a 'name=zsh'
ansible all -m yum -a 'name=zsh state=absent'
12)setup:收集遠程主機的facts
每個被管理的節(jié)點在接受并運行管理命令之前,會將自己的主機相關信息,如操作系統(tǒng),ip地址等報告給遠程的ansible主機。
ansible 192.168.133.4 -m setup?? ?
nginx配置文件中有個work_processes=物理核心數(processor_core * processor_count)-1或者-2
13)get_url 模塊(實現在遠程主機下載指定 URL 到本地,支持 sha256sum 文件校驗)
ansible Client -m get_utl -a "url=http://www.baidu.com dest=/tmp/index.html mode=0440 force=yes"
14) stat 模塊(獲取遠程文件狀態(tài)信息,atime/ctime/mtime/md5/uid/gid 等信息)
ansible Client -m stat -a "path=/etc/syctl.conf"
15) mount 模塊(遠程主機分區(qū)掛載)
ansible Client -m mount -a "name=/mnt/data src=/dev/sd0 fstype=ext4 opts=ro state=present"
綜合
ansible-doc -s 模塊名
command
?? ?-a 'COMMAND'
user
?? ?-a 'name= state={present|absent}' system= uid= '
group
?? ?-a 'name= gid= state= system='
cron
?? ?-a 'name= minute= hour= day= mounth= weekday= job= user= state='
copy
?? ?-a 'dest= src= mode= owner= group= '
file
?? ?-a 'path= mode= owner= group= state={directory|link|present|absent} src='
ping
?? ?無參數
yum
?? ?-a 'name= state={present|lastest|absent}'
service
?? ?-a 'name- state={started|stopped|restarted} enabled='
shell
?? ?-a 'COMMAND'
script
?? ?-a '/path/to/script'
setup
轉載于:https://www.cnblogs.com/fengzhongzhuzu/p/9129732.html
總結
- 上一篇: 7、Node.js EventEmitt
- 下一篇: 多线程利器-队列(queue)