基於ansible Role實現批量部署lamp平臺

1、ansible Role介紹

# ansilbe自1.2版本引入的新特性,用於層次性、結構化地組織playbook。
# roles可以根據層次型結構自動裝載變量文件、tasks以及handlers等。
# 要使用roles只須要在playbook中使用include指令便可。
#簡單來說,roles就是經過分別將變量、文件、任務、模塊及處理器放置於單獨的目錄中,
# 並能夠便捷地include它們的一種機制。
# 角色通常用於基於主機構建服務的場景中,但也能夠是用於構建守護進程等場景中。


############## 建立role的步驟

(1) 建立以roles命名的目錄;
(2) 在roles目錄中分別建立以各角色名稱命名的目錄,如webservers等。注意:在 roles 
    必須包括 site.yml文件,能夠爲空;
(3) 在每一個角色命名的目錄中分別建立files、handlers、meta、tasks、templates和vars目錄;
    用不到的目錄能夠建立爲空目錄,也能夠不建立;
(4) 在playbook文件中,調用各角色;

############### role內各目錄中可用的文件

tasks目錄:至少應該包含一個名爲main.yml的文件,其定義了此角色的任務列表;
   此文件可使用include包含其它的位於此目錄中的task文件;
files目錄:存放由copy或script等模塊調用的文件;
templates目錄:template模塊會自動在此目錄中尋找Jinja2模板文件;
handlers目錄:此目錄中應當包含一個main.yml文件,用於定義此角色用到的各handler;
    在handler中使用include包含的其它的handler文件也應該位於此目錄中;
vars目錄:應當包含一個main.yml文件,用於定義此角色用到的變量;
meta目錄:應當包含一個main.yml文件,用於定義此角色的特殊設定及其依賴關係;
    ansible 1.3及其之後的版本才支持;
default目錄:爲當前角色設定默認變量時使用此目錄;應當包含一個main.yml文件。

2、基於Role實現 lamp 平臺的批量部署

實驗環境:

控制端:
172.16.10.9 server.magedu.com

被控制端:
172.16.10.22 node2.example.com
172.16.10.33 node3.example.com
172.16.0.50 director1.example.com
172.16.0.51 director2.example.com

計劃:
172.16.10.22 node2.example.com
172.16.10.33 node3.example.com
# 安裝 web php程序,並提供配置文件
172.16.0.50 director1.example.com
172.16.0.51 director2.example.com
# 安裝 mysql mysql-server,並提供配置文件

要求:基於主機名通訊(被控制端均可以解析到其餘的主機名)

配置步驟:

一、配置好 Inventory 文件
# /etc/ansible/hosts
[webhosts]
node2.example.com
node3.example.com

[mysql]
director1.example.com
director2.example.com

二、建立對應的目錄樹
# 執行 tree /root/lamp/roles 查看目錄樹
/root/lamp/roles
|-- common
|   |-- default
|   |-- files
|   |   `-- hosts
|   |-- handlers
|   |-- meta
|   |-- tasks
|   |   `-- main.yml
|   |-- templates
|   `-- vars
|-- db
|   |-- default
|   |-- files
|   |   `-- my.cnf
|   |-- handlers
|   |   `-- main.yml
|   |-- meta
|   |-- tasks
|   |   `-- main.yml
|   |-- templates
|   `-- vars
|-- db.yml
|-- php
|   |-- default
|   |-- files
|   |   `-- php.ini
|   |-- handlers
|   |-- meta
|   |-- tasks
|   |   `-- main.yml
|   |-- templates
|   `-- vars
|-- site.yml
|-- web
|   |-- default
|   |-- files
|   |   `-- httpd.conf
|   |-- handlers
|   |   `-- main.yml
|   |-- meta
|   |-- tasks
|   |   `-- main.yml
|   |-- templates
|   `-- vars
`-- web.yml



三、各個文件的內容
# 當前所在目錄 /root/lamp/roles
# cat db.yml
- name: mysqld servise
  remote_user: root
  hosts: mysql
  roles:  
    - common 
    - db

# cat web.yml
- name: wed servise
  remote_user: root
  hosts: webhosts
  roles: 
    - common 
    - php  
    - web
    
# cat common/files/hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.10.22 node2.example.com
172.16.10.33 node3.example.com
172.16.0.50 director1.example.com
172.16.0.51 director2.example.com

# cat common/tasks/main.yml
- name: Configure hostname resolve
  copy: src=hosts dest=/etc/hosts

# cat php/tasks/main.yml
- name: install php  
  yum: name=php state=present
- name: configuration php
  copy: src=php.ini dest=/etc/php.ini

# cat 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

# cat web/handlers/main.yml
- name: restart httpd
  service: name=httpd state=restarted

# cat 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

# cat db/handlers/main.yml
- name: restart mysqld
  service: name=mysqld state=restarted
  
四、開始批量部署
ansible-playbooks web.yml
ansible-playbooks db.yml

結果示例:

14

15

16

 

至此,批量部署lamp平臺就完成了。以上只是一個示例,具體狀況,還需具體對待。php

相關文章
相關標籤/搜索