前言
作為運維人員,當面對幾十臺或上百臺服務器需要修改某個參數或部署某個平臺,你將從何入手呢?ansible的出現很好的解決了這一困擾,ansible基于Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。本文帶來的是基于Ansible Role實現LAMP平臺批量部署。
ansible簡介
特性
-
No agents:不需要在被管控主機上安裝任意客戶端
-
No server:無服務器端,使用時直接運行命令即可
-
Modules in any languages:基于模塊工作,可使用任意語言開發模塊
-
YAML,not code:使用yaml語言定制劇本playbook
-
SSH by default:基于SSH工作
-
Strong multi-tier solution:可實現多級指揮
基本架構
命令格式
#常用格式 ansible <host-pattern> [-f forks] [-m module] [-a args] host-pattern # 可以是all,或者配置文件中的主機組名 -f forks # 指定并行處理的進程數 -m module # 指定使用的模塊,默認模塊為command -a args # 指定模塊的參數 #查看各模塊 ansible-doc [options] [modules] # 主要選項有: -l或--list # 列出可用的模塊 -s或--snippet #顯示指定模塊的簡略使用方法
其他知識點介紹詳見官方文檔,我們直接進入正題
ansible role實現LAMP平臺批量部署
ansible role
ansilbe自1.2版本引入的新特性,用于層次性、結構化地組織playbook。roles能夠根據層次型結構自動裝載變量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。簡單來講,roles就是通過分別將變量、文件、任務、模塊及處理器放置于單獨的目錄中,并可以便捷地include它們的一種機制。角色一般用于基于主機構建服務的場景中,但也可以是用于構建守護進程等場景中。
#創建role的步驟 (1) 創建以roles命名的目錄; (2) 在roles目錄中分別創建以各角色名稱命名的目錄,如webservers等; (3) 在每個角色命名的目錄中分別創建files、handlers、meta、tasks、templates和vars目錄;用不 到的目錄可以創建為空目錄,也可以不創建; (4) 在playbook文件中,調用各角色; #role內各目錄中可用的文件 tasks目錄:至少應該包含一個名為main.yml的文件,其定義了此角色的任務列表;此文件可以使用in clude包含其它的位于此目錄中的task文件; files目錄:存放由copy或script等模塊調用的文件; templates目錄:template模塊會自動在此目錄中尋找Jinja2模板文件; handlers目錄:此目錄中應當包含一個main.yml文件,用于定義此角色用到的各handler;在handler 中使用include包含的其它的handler文件也應該位于此目錄中; vars目錄:應當包含一個main.yml文件,用于定義此角色用到的變量; meta目錄:應當包含一個main.yml文件,用于定義此角色的特殊設定及其依賴關系; default目錄:為當前角色設定默認變量時使用此目錄;應當包含一個main.yml文件;
實驗拓撲
配置過程
安裝ansible
[root@scholar ~]# yum install ansible -y #需epel源
配置inventory文件
[root@scholar ~]# vim /etc/ansible/hosts #定義被控主機 [webservers] 172.16.10.123 ansible_ssh_user=root ansible_ssh_pass=centos 172.16.10.124 ansible_ssh_user=root ansible_ssh_pass=centos [dbservers] 172.16.10.125 ansible_ssh_user=root ansible_ssh_pass=centos
實現基于ssh密鑰通信
[root@scholar ~]# ssh-keygen -t rsa -P '' [root@scholar ~]# yum install sshpass -y #請確保安裝sshpass,不然無法通信
#另外一組也執行以上操作 #此時可以將/etc/ansible/hosts改為 [webservers] 172.16.10.123 172.16.10.124 [dbservers] 172.16.10.125
創建各目錄
[root@scholar ~]# mkdir lamp/role -pv [root@scholar role]# mkdir web/{files,handlers,meta,tasks,templates,vars,default} db/{fil es,handlers,meta,tasks,templates,vars,default} php/{files,handlers,meta,tasks,templates,v ars,default} -p
準備各服務配置文件
[root@scholar role]# cp /etc/httpd/conf/httpd.conf web/files/ [root@scholar role]# cp /etc/php.ini php/files/ [root@scholar role]# cp /etc/my.cnf db/files/
創建各劇本
[root@scholar role]# touch web.yml php.yml db.yml site.yml [root@scholar role]# touch web/{handlers,tasks}/main.yml db/{handlers,tasks}/main.yml php /tasks/main.yml [root@scholar role]# vim web.yml - name: web service remote_user: root hosts: webservers roles: - web [root@scholar role]# vim php.yml - name: php service remote_user: root hosts: webservers roles: - php [root@scholar role]# vim db.yml - name: mysql service remote_user: root hosts: dbservers roles: - db [root@scholar role]# vim web/tasks/main.yml - name: install httpd yum: name=httpd state=present - name: configuration httpd copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf notify: - restart httpd - name: service httpd start service: name=httpd enabled=no state=started [root@scholar role]# vim web/handlers/main.yml - name: restart httpd service: name=httpd state=restarted [root@scholar role]# vim php/tasks/main.yml - name: install php yum: name=php state=present - name: configuration php copy: src=php.ini dest=/etc/php.ini [root@scholar role]# vim db/tasks/main.yml - name: install mysql yum: name=mysql state=present - name: install mysql-server yum: name=mysql-server state=present - name: configuration mysqld copy: src=my.cnf dest=/etc/my.cnf notify: - restart mysqld - name: service mysqld start service: name=mysqld enabled=no state=started [root@scholar role]# vim db/handlers/main.yml - name: restart mysqld service: name=mysqld state=restarted
批量部署
部署httpd
部署php
部署mysql
查看各節點服務端口是否被監聽
The end
基于ansible role實現LAMP平臺批量部署就簡單說到這里了,以上僅是牛刀小試,其他高難度部署還有待探究,實驗過程中坑也不少,具體遇到問題可留言交流。以上僅為個人學習整理,如有錯漏,大神勿噴~~~
原創文章,作者:書生,如若轉載,請注明出處:http://www.www58058.com/5206
既然是部署LAMP,http的配置文件從哪里來的?