1. 程式人生 > 其它 >Ansible實戰:批量部署多臺LAMP(Linux、Apache、Mysql、PHP)環境

Ansible實戰:批量部署多臺LAMP(Linux、Apache、Mysql、PHP)環境

先簡單介紹下Playbook常用資料夾作用:

  • files:存放需要同步到異地伺服器的原始碼檔案及配置檔案
  • handlers:當服務的配置檔案發生改變時需要進行的操作,比如:重啟服務、重新載入配置檔案,handlers處理程式
  • meta:角色定義,可留空
  • tasks:需要進行的執行的任務
  • templates:用於執行lamp安裝的模板檔案, 一般為指令碼
  • vars:本次安裝定義的變數

搭建思路

我們搭建LAMP架構,大概需要:

  1. yum 安裝服務
  2. service 啟動服務
  3. copy:把網站拷貝過去

在playbooks中定義任務:

​ name:task description #任務描述資訊

​ module_name:module_args #需要使用的模組名字

使用Playbook批量部署多臺LAMP環境步驟

我們可以在ansible伺服器上安裝LAMP環境,然後,再將配置檔案通過ansible拷貝到受控主機上。

#第一步:安裝httpd軟體
[root@k8s-master ansible]# yum install -y httpd

#第二步:安裝mysql
[root@k8s-master ansible]# yum install -y mariadb-server mariadb	#安裝mysql服務
[root@k8s-master ~]# mkdir -p /mysqldata/data/			#建立目錄作為資料存放的位置
[root@k8s-master ~]# chown -R mysql:mysql /mysqldata/	#授權
[root@k8s-master ~]# vim /etc/my.cnf
[mysqld]
#datadir=/var/lib/mysql
datadir=/mysqldata/data	#將預設配置修改為自定義配置
[root@k8s-master ~]# systemctl start mariadb	#啟動服務

#第三步:安裝PHP和php-mysql模組
[root@k8s-master ~]# yum -y install php php-mysql

#第四步:提供php的測試頁
[root@k8s-master ~]# vim /var/www/html/index.php
[root@k8s-master ~]# cat /var/www/html/index.php
<?php  
    phpinfo();
?>

#第五步:重啟httpd服務
[root@k8s-master ~]# systemctl reload httpd #啟動httpd服務

#第六步:定義組名
[root@k8s-master ~]# vim /etc/ansible/hosts
[webservers]
192.168.133.11
192.168.133.12

#第七步:將公鑰資訊複製到被控制節點,ansible和兩個節點間通過ssh進行連線
[root@k8s-master ~]# ssh-keygen
[root@k8s-master ~]# ssh-copy-id [email protected]
[root@k8s-master ~]# ssh-copy-id [email protected]

#第八步:使用playbook建立一個LAMP構建的任務
#1、建立相關檔案
[root@k8s-master ~]# mkdir -pv /etc/ansible/lamp/roles/{prepare,httpd,mysql,php}/{tasks,files,templates,vars,meta,default,handlers}
#將上面搭建成功的LAMP環境的httpd和mysql的配置檔案拷貝至對應目錄下
[root@k8s-master ~]# cd /etc/ansible/ 
[root@k8s-master ansible]# cp /etc/httpd/conf/httpd.conf lamp/roles/httpd/files/
[root@k8s-master ansible]# cp /etc/my.cnf lamp/roles/mysql/files/
[root@k8s-master ansible]# 寫prepare(前期準備)角色的playbooks
[root@k8s-master ansible]# vim lamp/roles/prepare/tasks/main.yml
[root@k8s-master ansible]# cat lamp/roles/prepare/tasks/main.yml
- name: delete yum config
  shell: rm -rf /etc/yum.repos.d/*  #刪除原有的yum配置檔案
- name: provide yumrepo file
  shell: wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo   #下載新的yum配置檔案
- name: clean the yum repo
  shell: yum clean all    #清除原有的yum快取資訊
- name: clean the iptables
  shell: iptables -F    #清除原有防火牆規則,不然後可能上不了網
[root@k8s-master ansible]#
#2、構建httpd的任務
[root@k8s-master ansible]# cd /etc/ansible/lamp/roles/
[root@k8s-master roles]# mv /var/www/html/index.php httpd/files/
[root@k8s-master roles]# vim httpd/tasks/main.yml
[root@k8s-master roles]# cat httpd/tasks/main.yml
[root@k8s-master roles]# cat httpd/tasks/main.yml
- name: web server install
 yum: name=httpd state=present    #安裝httpd服務
- name: provide test page
 copy: src=index.php dest=/var/www/html    #提供測試頁
- name: delete apache config


 shell: rm -rf  /etc/httpd/conf/httpd.conf  #刪除原有的apache配置檔案,如果不刪除,下面的copy任務是不會執行的,因為當原始檔httpd.conf和目標檔案一樣時,copy命令是不執行的。如果copy命令不執行,那麼notify將不呼叫handler。
- name: provide configuration file
 copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf    #提供httpd的配置檔案
 notify: restart httpd   #當前面的copy複製成功後,通過notify通知名字為restart httpd的handlers執行
#3、構建httpd的handlers
[root@k8s-master roles]# vim httpd/handlers/main.yml
[root@k8s-master roles]# cat httpd/handlers/main.yml
- name: restart httpd
service: name=httpd enabled=yes state=restarted
[root@k8s-master roles]#
#4、部署MariaDB資料庫
[root@k8s-master roles]# cd /etc/ansible/lamp/roles/
[root@k8s-master roles]# vim mysql/tasks/main.yml
[root@k8s-master roles]# cat mysql/tasks/main.yml

-name: install the mysql
  yum: name=mariadb-server state=present    #安裝mysql服務
- name: mkdir date directory
  shell: mkdir -p /mydata/data    #建立掛載點目錄
- name: provide configration file
  copy: src=my.cnf dest=/etc/my.cnf    #提供mysql的配置檔案
- name: chage the owner
  shell: chown -R mysql:mysql /mydata/    #更改屬主和屬組
- name: start mariadb
  service: name=mariadb enabled=yes state=started    #啟動mysql服務
#5、構建PHP的任務
[root@k8s-master roles]# vim php/tasks/main.yml
- name: install php
yum: name=php state=present    #安裝php
- name: install php-mysql
yum: name=php-mysql state=present    #安裝php與mysql互動的外掛
#6、定義整個任務
[root@k8s-master roles]# cd /etc/ansible/lamp/roles/
[root@k8s-master roles]# vim site.yml
[root@k8s-master roles]# cat site.yml
- name: LAMP build
  remote_user: root
  hosts: web-servers
  roles:
    - prepare
    - mysql
    - php
    - httpd

注意:所有yml的配置檔案中,空格必須嚴格對齊

部署

[root@k8s-master roles]# ansible-playbook -i /etc/ansible/hosts /etc/ansible/lamp/roles/site.yml