Centos7-Ansible-Nginx自動化部署
搭建環境:
主機 系統 網卡 IP
Ansible Centos7 64Bit Vmnet0橋接 192.168.152.158
Web1 Centos7 64Bit Vmnet0橋接 192.168.152.159
Web2 Centos7 64Bit Vmnet0橋接 192.168.152.160
關閉防火墻 systemctl stop firewalld.service
禁止防火墻開機自啟 systemctl disable firewalld.service
關閉selinux sed -i ‘s/SELINUX=enforcing /SELINUX=disabled/g‘
/etc/sysconfig/selinux
重啟 reboot
註:重啟後如果可以互相ping通,那麽就開始搭建ansible服務器
一、Ansible-server安裝
安裝方式:
1、從Ansible項目的GitHub源碼庫提取出來安裝,運行Ansible不需root 權限,也不依賴於其他軟件,沒有後臺進程運行,不需要數據庫支撐。
2、使用yum安裝,需要有合適的yum源,對於RHEL、CentOS的官方yum源中沒有 Ansible安裝包,這就需要先安裝支持第三方的yum倉庫組件,最常用的有EPEL、 Remi、RPMForge等。可國內速度較快的高質量yum源網易 163(http://mirrors.163.com)、阿裏源(https://opsx.alibaba.com/mirror)
註:這裏實驗使用的是默認的centos7自帶的源,並使用yum直接安裝
二、使用yum安裝ansible
1、安裝ansible yum –y install ansible
2、檢查ansible版本: ansible –version
三、設置節點授權的ssh密鑰
1、在Ansible服務端生成密鑰 ssh-keygen
2、使用ssh-copy-id命令來復制Ansible公鑰到節點web1和web2
1)復制Ansible公鑰到節點web1 ssh-copy-id -i [email protected]
2)復制Ansible公鑰到節點web2 ssh-copy-id -i [email protected]
四、配置Ansible定義文件
1、編輯ansible配置文件 vi /etc/ansible/hosts
註:將需要ansible自動化的節點IP添加到這裏
2、測試在ansible服務端運行命令(在互相能ping通的情況下)
ansible -m ping ‘web-servers‘
五、執行shell命令
1)查看ansible節點運行時間(uptime)
ansible -m command -a "uptime" ‘web-servers‘
2)查看節點內核版本(uname -r)
ansible -m command -a "uname -r" ‘web-servers‘
註:以上操作部署已完成ansible服務搭建
六、批量部署nginx服務器
兩種Ansible批量部署nginx服務器方式
方式一:yum安裝nginx,使用的是epel-release源
方式二:使用nginx.tar壓縮包解壓安裝nginx
1、在/root/目錄下創建Ansible YAML文件 vi nginx.yaml
註釋:
第1行表示該文件是YAML文件,非必須
第2行定義該playbook針對的目標主機,all表示針對所有主機
第3行定義該playbook所有的tasks集合,比如下面我們定義的3個task
第4行定義一個task的名稱,非必須,建議根據task實際任務命名
第5行定義一個狀態的action,比如這裏使用yum模塊實現Nginx軟件包的安裝
第6行到第9行使用template模板去管理/etc/nginx/nginx.conf文件,owner group定義該文件的屬主以及屬組,使用validate參數指文件生成後使用nginx -t -c %s命令去做Nginx文件語法驗證,notify是觸發handler狀態,如果同步後,文件 的MD5值有變化會觸發ReStart Nginx Service這個handler
第10行到第12行是定義一個handler狀態讓Nginx服務重啟,handler的名稱是 ReStart Nginx Service
註:書寫yaml文件時,註意左對齊,同級別應在同一列下,並且不能使用Tab鍵,可以使用空格(隨便空格幾個都行,但是同一級別必須對齊)
2、檢測YAML文件
ansible-playbook nginx.yaml --syntax-check nginx.yaml
3、查看YAML文件任務列表 ansible-playbook nginx.yaml --list-task
4、查看針對哪些主機做操作 ansible-playbook nginx.yaml --list-hosts
5、給兩個節點安裝epel-release源
ansible web-servers -m shell -a ‘yum -y install epel-release‘ -i /etc/ansible/hosts
6、給兩個節點安裝nginx
ansible web-servers -m shell -a ‘yum -y install nginx‘ -i /etc/ansible/hosts
7、編輯本地nginx.conf.j2文件(因為本地沒有安裝nginx所以沒有這個文件需要從節點拷貝到當前/root/下再修改,並以這個修改過的模板來下發給節點)
註:根據實際情況要求修改(我這裏使用的默認)
8、確認信息是否正確
ansible-playbook -i /etc/ansible/hosts nginx.yaml -f 2
1)下圖是nginx.conf.j2配置文件未修改,默認執行命令的狀態
2)這是修改過nginx.conf.j2配置文件執行命令的狀態
9、這樣我們就完成了 3臺機器的Nginx安裝部署,下面需要對主機的Nginx服務進行核查,並且確認生成後nginx.conf中的worker_processes參數的值是否正確,執行命令:
ansible -i /etc/ansible/hosts all -m shell -a ‘netstat -utpln |grep 80‘ -f 2
註:上圖紅色字體說明並沒有自動重啟nginx,原因是nginx.conf.j2這文件默認沒有修改的情況不滿足執行條件,所以如果想得到下圖,隨意修改點東西即可。
10、驗證:瀏覽器訪問兩個節點IP
Web1:http://192.168.152.159
Web2:http://192.168.152.160
註:nginx自動化部署完成!
Centos7-Ansible-Nginx自動化部署