第一章 ansible產品簡介python
ansible是新出現的自動化運維工具,基於Python開發,集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。linux
ansible是基於模塊工做的,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:nginx
(1)、鏈接插件connection plugins:負責和被監控端實現通訊;web
(2)、host inventory:指定操做的主機,是一個配置文件裏面定義監控的主機;redis
(3)、各類模塊核心模塊、command模塊、自定義模塊;shell
(4)、藉助於插件完成記錄日誌郵件等功能;網絡
(5)、playbook:劇本執行多個任務時,非必需可讓節點一次性運行多個任務。框架
部署ansible須要跟被管理端開啓免密登陸(強烈不建議使用root用戶),將普通用戶賦予root用戶權限,只容許一個ip登陸。運維
須要跟服務端開啓免密登陸,強烈不建議使用root用戶,將普通用戶賦予root用戶權限,只容許一個ip登陸,須要關閉selinux如若不關閉需安裝yum install libselinux-python -y(建議安裝)!工具
第二章 ansible產品安裝部署
使用yum安裝ansible無需任何介質!
服務端和客戶端需免密登陸。
yum -y install ansible 便可完成安裝。
使用化境變量方式來配置
大多數的Ansible參數能夠經過設置帶有ANSIBLE_開頭的環境變量進行配置,參數名稱必須都是大寫字母,以下配置:
export ANSIBLE_SUDO_USER=root
設置了環境變量以後,ANSIBLE_SUDO_USER就能夠在playbook中直接引用。
二、設置ansible.cfg配置參數
Ansible有不少配置參數,下面列出經常使用的配置參數:
1)inventory
該參數表示資源清單inventory文件的位置,資源清單就是一些Ansible須要鏈接管理的主機列表
inventory = /root/ansible/hosts
2)library
Ansible的操做動做,不管是本地或遠程,都使用一小段代碼來執行,這小段代碼稱爲模塊,這個library參數就是指向存放Ansible模塊的目錄
library = /usr/share/ansible
3)forks
設置默認狀況下Ansible最多能有多少個進程同時工做,默認設置最多5個進程並行處理。具體須要設置多少個,能夠根據控制主機的性能和被管理節點的數量來肯定。
forks = 5
4)sudo_user
這是設置默認執行命令的用戶,也能夠在playbook中從新設置這個參數
sudo_user = root
5)remote_port
這是指定鏈接被關節點的管理端口,默認是22,除非設置了特殊的SSH端口,否則這個參數通常是不須要修改的
remote_port = 22
6)host_key_checking
這是設置是否檢查SSH主機的密鑰。能夠設置爲True或False
host_key_checking = False
7)timeout
這是設置SSH鏈接的超時間隔,單位是秒。
timeout = 20
8)log_path
Ansible系統默認是不記錄日誌的,若是想把Ansible系統的輸出記錄到人i治穩健中,須要設置log_path來指定一個存儲Ansible日誌的文件
log_path = /var/log/ansible.log
另外須要注意,執行Ansible的用戶須要有寫入日誌的權限,模塊將會調用被管節點的syslog來記錄,口令是不會出現的日誌中的
9)host_key_checking
若是有臺被管節點從新安裝系統並在known_hosts中有了與以前不一樣的密鑰信息,就會提示一個密鑰不匹配的錯誤信息,直到被糾正爲止,在使用Ansible時,若是有臺被管理節點沒有在known_hosts中被初始化,將會在使用Ansible或定時執行Ansible時提示對key信息的確認。
若是不想出現這種狀況,而且明白禁用此項行爲的含義,只要修改該參數爲False便可
Hosts文件爲ansible的主機列表存儲文件,在hosts文件中以組爲單位,如圖下:
將主機地址寫進hosts文件,定義主機組名稱如:webservers
如需安裝redis就另建一個主機組名稱如dbservers
使用yum安裝完成ansible在/etc/目錄下會有ansible目錄在目錄下建立roles目錄。如下爲nginx安裝示範:
在roles目錄下建立如下目錄:
將nginx安裝包放在files目錄下,將nginx.conf放在templates目錄下。在各自目錄下建立相應的文件。特別是tasks目錄下的main.yaml要寫以下:
- name: copy package
copy: src=nginx-1.13.3.tar.gz dest=/usr/local/src/nginx-1.13.3.tar.gz
tags: cppkg
- name: tar nginx
shell: cd /usr/local/src;tar -xf nginx-1.13.3.tar.gz
- name: yum install
yum: name={{ item }} state=latest
with_items:
- openssl-devel
- pcre-devel
- gcc
- name: install nginx
shell: useradd nginx;cd /usr/local/src/nginx-1.13.3;./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre;make && make install
- name: copy conf file
template: src=nginx.conf dest=/usr/local/nginx/conf/nginx.conf
- name: systemctl init
template: src=nginx.service dest=/usr/lib/systemd/system/nginx.service
- name: start nginx service
service: name=nginx state=started enabled=true
在/etc/ansible/目錄下編寫nginx.yaml文件,寫入如下內容:
使用ansible-playbook –-syntax=check /etc/ansible/nginx.yaml文件的語法示範正確。以下:
在服務端上使用ansible的命令驗證是否能鏈接客戶端:
命令含義爲:ansible webservers(組名)-m 指定方式爲shell
-a 要copy的文件和重定向的文件。下面顯示綠色提示爲正常鏈接。在客戶端上查看文件是否存在:
使用ansible-playbook命令安裝客戶端的nginx以下:
提示以下就是安裝完畢,去客戶端上查看nginx是否安裝完成,
如圖上所示表示安裝完成。