Ansible實戰:批量部署多臺LAMP(Linux、Apache、Mysql、PHP)環境
阿新 • • 發佈:2022-05-30
先簡單介紹下Playbook常用資料夾作用:
- files:存放需要同步到異地伺服器的原始碼檔案及配置檔案
- handlers:當服務的配置檔案發生改變時需要進行的操作,比如:重啟服務、重新載入配置檔案,handlers處理程式
- meta:角色定義,可留空
- tasks:需要進行的執行的任務
- templates:用於執行lamp安裝的模板檔案, 一般為指令碼
- vars:本次安裝定義的變數
搭建思路
我們搭建LAMP架構,大概需要:
- yum 安裝服務
- service 啟動服務
- 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