1. 程式人生 > >Centos7-Ansible-Nginx自動化部署

Centos7-Ansible-Nginx自動化部署

Ansible-部署nginx自動化

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

註:清空並關閉以上環境所有主機的防火墻和selinux

關閉防火墻 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自動化部署