手记

基于ansible Role实现批量部署lamp平台


一、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文件。

二、基于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,并提供配置文件

要求:基于主机名通信(被控制端都可以解析到其他的主机名)

配置步骤:

1、配置好 Inventory 文件

# /etc/ansible/hosts

[webhosts]

node2.example.com

node3.example.com

[mysql]

director1.example.com

director2.example.com

2、创建对应的目录树

# 执行 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

3、各个文件的内容

# 当前所在目录 /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

  

4、开始批量部署

ansible-playbooks web.yml

ansible-playbooks db.yml

结果示例:

14

15

16

 

至此,批量部署lamp平台就完成了。以上只是一个示例,具体情况,还需具体对待。

附件:http://down.51cto.com/data/2364869

©著作权归作者所有:来自51CTO博客作者羊木狼的原创作品,如需转载,请注明出处,否则将追究法律责任

批量部署ansible role自动化运维


0人推荐
随时随地看视频
慕课网APP