1.logo:
2.介紹:
(1)ansible是新出現的自動化運維工具,基於Python開發,集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優勢,
實現了批量系統配置、批量程序部署、批量運行命令等功能。
無客戶端。
(2)咱們要學一些Ansible的安裝和一些基本概念,而後咱們會開始研究一些真正有意思的東西 – playbook,配置管理,部署以及語法編排.咱們將會學習如何使用/usr/bin/ansible執行ad-hoc並行命令,咱們還會學習ansible的核心有什麼樣的模塊可供使用.固然之後你也能夠寫你本身的模塊,咱們會在後期講到.
(3)工做原理:html
1.環境:ansible服務器 10.8.162.86
ansible客戶機:10.8.162.60
2.ansible服務器:域名解析:nginx
vim /etc/hosts
10.8.162.86 ansible
10.8.162.60 host1
注:anisble客戶機只需準備好ip 和yum源環境便可web
3.anisble服務器下載ansible及相關擴展包docker
yum install -y epel-relea
注:安裝epel源,若是您在非學校環境,請使用下方阿里YUM
(1):rm -rf /etc/yum.repos.d/*
(2):wgrt -O /etc/yum.repos.d/epel.repohttp://mirrors.aliyun.com/repo/epel-7.repo
(3)wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
4.>yum install -y ansible
(1)部署是否完成:
shell
5.ansible服務器基礎:
(1)定義主機清單:apache
vim /etc/ansible/host
host1
vim
(2)測試連通性:ansible host1 -m ping 服務器
ansible host1 -m ping 結果失敗了
(3)ansible host2 -m ping -u root -k -o 增長用戶名選項 增長用戶名選項
(4)去掉(yes/no)的詢問 第一次連通會提示輸入yes,因爲我已經作過好幾回了,因此沒顯示,請見諒!
vim /etc/ssh/ssh_config
StrictHostKeyChecking no
重啓sshd:systemctl restart sshd
測試
(5)特殊狀況:
併發(6)ssh-key(可選)
免密碼ssh-key的方式。
ssh-keygen
ssh-copy-id IP地址 推送公鑰
ansible host1 -m ping -o 簡介輸出,直接能成功app
1.含義:清查;存貨清單;財產目錄;主機清單
2.增長主機組:因爲個人只有一臺客戶機,因此我就只把host1拉一個組 >vim /etc/ansible/hosts
[webserver]
host1
輸出這個主機組就能夠了。主機組能夠有多個anisbile客戶機
ansible webserver -m ping -u root -k -o
3.增長用戶名,密碼
(1)vim /etc/ansible/hosts
一臺客戶機這樣寫
[webserver]
host1 ansible_ssh_user='root' ansible_ssh_pass='666666'
測試,不須要密碼了
(2)假入有四臺客戶機這樣寫:
[webserver]
host[1:4] ansible_ssh_user='root' ansible_ssh_pass='666666'
四臺需密碼一致,用戶一致(3)請思考主機和主機的用戶名密碼不一樣。如何設置?
[webservers]
host1 ansible_ssh_user='root' ansible_ssh_pass='777777'
host[2:4] ansible_ssh_user='root' ansible_ssh_pass='666666'
4.增長端口:
(1)請將host1的sshd程序端口修改成2222
vim /etc/ssh/sshd_config
port 222
重啓sshd systemctl restart sshd
ansible webservers -m ping -o 失敗,由於默認端口已更改
(2)解決辦法 配置文件增長端口:
[webserver]
host1 ansible_ssh_user='root' ansible_ssh_pass='666666' ansible_ssh_port='2222'
測試: 成功
請將用戶名密碼和端口回覆原狀
5.組:變量
(1)ansible內部變量能夠幫助咱們簡化主機清單的設置
vim /etc/ansible/hosts 多臺客戶機狀況
[webserver]
host[1:4]
[webserver:vars]
ansible_ssh_user='root'
ansible_ssh_pass='666666'經常使用變量:
6.子分組:在把多個組的組名合到一個組裏面,更利於管理,用於本機硬件問題,就不演示了 ,寫下來給大家看看
(1)vim /etc/ansible/hosts
[apache]
host[1:2]
[nginx]
host[3:4]
[webserver:children]
apache
nginx
[webserver:vars]
ansible_ssh_user='root'
ansible_ssh_pass='666666'自定義主機列表:
(2)>vim hostlist
[dockers]
host1
host2
[dockers:vars]
ansible_ssh_user='root'
ansible_ssh_pass='666666'
ansible -i hostlist dockers -m ping -o
7.Ad-Hoc-點對點模式
(1)簡介:臨時的,在ansible中是指須要快速執行的單條命令,而且不須要保存的命令。對於複雜的命令則爲 playbook。
(2)shell模塊:
①:ansible webserver -m shell -a 'hostname' -o //獲取主機名
②:ansible webserver -m shell -a 'hostname' -o -f 2 //-f 2 指定線程數
-f FORKS, --forks=FORKS Ansible一次命令執行併發的線程數。NUM被指定爲一個整數,默認是5
specify number of parallel processes to use
(default=5)
③ansible host1 -m shell -a 'yum -y install httpd' -o //給host1部署apache
④ansible host1 -m shell -a 'uptime' -o //查看負載信息
(3)複製模塊 :幫助:ansible-doc copy
①:案列1:ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/2.txt owner=root group=bin mode=777'
//把服務器上的/etc/hosts裏的文件拷貝到webserver組的全部客戶端
客戶端的文件
ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/2.txt owner=root group=bin mode=777'
組裏的客戶機收到的文件
②案例:若是文件有多份,能夠進行備份。
再次修改hosts文件
ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/2.txt owner=root group=bin mode=777 backup=yes'
查看客戶機
(3)用戶模式:幫助:ansible-doc user
①建立用戶:ansible webserver -m user -a 'name=xiaowang123 state=present'
客戶機驗證
②:修改密碼:生成加密密碼:echo '777777' | openssl passwd -1 -stdin
生成密碼值:$1$ROZP4CHD$xz0E.6.d1H.8EUAag4JXR1
修改密碼:ansible webserver -m user -a 'name=xiaowang123 password="$1$ROZP4CHD$xz0E.6.d1H.8EUAag4JXR1"'
客戶機驗證:登陸成功
③:修改shell
ansible webserver -m user -a 'name=xiaowang123 shell=/sbin/nologin append=yes'
刪除用戶:
ansible webserver -m user -a 'name=xiaowang123 state=absent'
客戶機驗證
(4)軟件包管理:
①:幫助:ansible-doc yum
②:ansible host1 -m yum -a 'name="*" state=latest' //升級全部包
③:ansible host1 -m yum -a 'name="httpd" state=latest'//安裝apache
(5)服務模塊
①:ansible host1 -m service -a 'name=httpd state=started'//啓動
②:ansible host1 -m service -a 'name=httpd state=started enabled=yes'//開機自啓
③:ansible host1 -m service -a 'name=httpd state=stopped'
//中止
④ansible host1 -m service -a 'name=httpd state=restarted' //重啓
⑤:ansible host1 -m service -a 'name=httpd state=started enabled=no' //開機禁止啓動
(6):文件模塊:
①:幫助:ansible-doc file
②:ansible host1 -m file -a 'path=/tmp/88.txt mode=777 state=touch' //建立文件
③:ansible host1 -m file -a 'path=/tmp/99 mode=777 state=directory' //建立目錄
(7)收集模塊
①:幫助:ansible-doc file
②:ansible host1 -m setup //查詢全部信息
③:ansible host1 -m setup -a'filter=ansible_all_ipv4_addresses'
(8)YAML-YAML Ain’t Markup Language-非標記語言
①:語法:列表:
fruits:
③:實例:
ansible服務器:
準備共做
ansible all -m yum -a 'name=httpd state=removed' -o //清理環境
yum install -y httpd //準備配置文件
mkdir apache
cd apache
cp -rf /etc/httpd/conf/httpd.conf .
grep '^Listen' httpd.conf Listen 8080 修改配置,用做推送編寫劇本
vim apache.yaml
- hosts: host1
tasks:- name: install apache packages
yum: name=httpd state=present- name: copy apache conf
copy: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf- name: ensure apache is running
service: name=httpd state=started enabled=yes
注:裏邊的文件必定要照好,不行能夠複製個人,而後修改裏邊的東西
ansible-playbook apache.yaml --syntax-check //檢測語法
ansible-playbook apache.yaml --list-tasks //列出任務
ansible-playbook apache.yaml --list-tasks //列出主機
ansible-playbook apache.yaml
測試:http://10.8.162.62:8080 //http的測試頁面注:列出客戶機爲什麼起不來的httpd服務
查看端口:是否80端口和別的程序80端口衝突
netstat -tunlp |grep :80 //查看端口 ,若是端口衝突,修改端口
vim /etc/httpd/conf/httpd.conf //修改端口
systemctl start httpd //啓動httpd
systemctl stuts httpd //查看狀態 ,
④:handlers:
下載
若是配置文件發生變化 :Listen 8888
[root@xiaoliu apache]# vim httpd.conf
ansible-playbook apache.yaml //再次執行,命令成功,但配置未生效,因此要增長處理程序。設置觸發器
須要在寫入處理程序;
vim apache.taml
若是配置文件再發生變化。 Listen 9080[root@xiaoliu apache]# vim httpd.conf
ansible-playbook apache.yaml :再次執行,配置生效,觸發成功
測試成功:
(9):Role-角色扮演 yum -y install tree
①:簡介:roles則是在ansible中,playbooks的目錄組織結構。
將代碼或文件進行模塊化,成爲roles的文件目錄組織結構,
易讀,代碼可重用,層次清晰。
②:目標:經過role遠程部署nginx並配置
③:目錄結構:
④:準備目錄結構
mkdir roles/nginx/{files,handlers,tasks,templates,vars} -p
mkdir roles/nginx/{files,handlers,tasks,templates,vars} -p
echo 1234 > roles/nginx/files/index.html
yum install -y nginx && cp /etc/nginx/nginx.conf roles/nginx/templates/nginx.conf.j2
查看: tree roles/
⑤:編寫任務 :vim roles/nginx/tasks/main.yaml
name: install epel-release packge
yum: name=epel-release state=latestname: install nginx packge
yum: name=nginx state=latestname: copy index.html
copy: src=index.html dest=/usr/share/nginx/html/index.htmlname: copy nginx.conf template
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
notify: restart nginx- name: make sure nginx service running
service: name=nginx state=started enabled=yes
⑥:準備配置文件: vim roles/nginx/templates/nginx.conf.j2
worker_processes {{ ansible_processor_cores }}; //調用內部已知變量
worker_connections {{ worker_connections }}; //自定義變量
修改前:
修改後:
⑦:編寫變量:vim roles/nginx/vars/main.yaml //worker_connections: 10240
⑧:編寫處理程序:vim roles/nginx/handlers/main.yaml
’---
‘- name: restart nginx
service: name=nginx state=restarted‘
⑨:編寫劇本:vim roles/site.yaml
- hosts: host4
roles:- nginx
⑩:實施:
cd roles
ansible-playbook site.yaml --syntax-check //測試
ansible-playbook site.yaml //實施劇本
驗證host1