使用Ansible的Playbook批量部署多台LAMP环境

使用Ansible的Playbook批量部署多台LAMP环境

Playbook的使用步骤

playbook是一个不同于使用ansible命令行执行方式的模式,功能更强大更灵活。
1、在playbook中定义任务:

- name: task description   # 任务描述信息
  module_name:module_args     # 需要使用的模块名字: 模块参数

2、ansible-playbook 执行命令:

ansible-playbook site.yml

playbook是由一个或多个”play"组成的列表。play的主要功能在于将事先归为一组的主机装扮成事先通过ansible中的task定义好的角色。

实际操作

使用playbook批量部署LAMP环境
playbook常用文件夹的作用:

  • files: 存放需要同步到被控服务器的源码文件和配置文件;
  • handlers: 当服务的配置文件发生变化时需要进行的操作,比如:重启服务,重新加载配置文件
  • meta:角色定义,可留空
  • tasks: 需要执行的任务
  • templates: 用于执行lamp安装的模板文件,一般为脚本;
  • vars: 本次安装定义的变量

首先,我们可以在ansible服务器上安装LAMP环境,然后,再将配置文件通过ansible拷贝到远程主机上

准备LAMP环境

1、远程节点上安装httpd

yum install -y httpd

2、安装mysql

yum install mariadb-server mariadb -y
mkdir -p /data/data   # 创建目录作为数据存放的位置
chown -R mysql:mysql /data/
vim /etc/my.cnf  #修改数据存放目录
改 datadir=/var/lib/mysql  为 datadir=/data/data

systemctl start mariadb

3、安装PHP和php-mysql模块

yum install php php-mysql -y

4、写一个php的测试页,测试环境

vim /var/www/html/index.php
<?php
	phpinfo();
	?>

启动httpd,在浏览器中访问,确保出现了测试页,要看到mysql已经被整合进来了,在执行下一步操作。

准备ansible相关配置
  • 定义机器组名
vim /etc/ansible/hosts
# 追加机器IP
  • 将公钥信息复制到被控节点。

使用playbook创建一个LAMP构建的任务

1、准备相关文件

mkdir -pv /etc/ansible/lamp/roles/{prepare,httpd,mysql,php}/{tasks,files,templates,vars,meta,default,handlers}
# 将上面准备的LAMP环境的httpd和mysql的配置文件拷贝到对应的目录下面
cd /etc/ansible/
cp /etc/httpd/conf/httpd.conf /etc/ansible/lamp/roles/httpd/files/
cp /etc/my.cnf /etc/ansible/lamp/roles/mysql/files/

写prapare角色的palybooks

vim /etc/ansible/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

2、构建httpd的任务

mv /var/www/html/index.php /etc/ansible/lamp/roles/httpd/files/
vim /etc/ansible/lamp/roles/httpd/task/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运行。

tips:
notify和handler
notify: 这个action可用于在每个paly的最后被触发,这样可以避免多次由改变发生时,每次都执行指定的操作,取而代之,仅在所有的变化发生完成后一次性的执行指定操作。
在notify中列出的操作成为handler,即notify中调用handler中定义的操作。
比如说

--- name: test.yml just fot test
 hosts: testserver 
 vars: 
     region: ap-southeast-1 
 tasks: 
     - name: template configuration
       file template: src=template.j2 dest=/etc/foo.conf 
 notify: 
     - restart memcached 
     - restart apache 
 handlers: 
     - name: restart memcached 
       service: name=memcached state=restarted 
     - name: restart apache 
       service: name=apache state=restarted

handler:
handler也是一些task的列表,通过名字来引用,它们和一般的task并没有什么区别。
handlers是由通知者进行notify,如果没有被norify, handlers不会执行。
不管由多少个通知者进行了notify,等到play中所有task执行完成后,handlers也只会被执行一次。
handlers最佳的应用场景是用来重启服务,或者触发系统重启操作,此外很少用到了。

3、构建httpd的handlers

vim /etc/ansible/lamp/roles/httpd/handlers/main.yml
- name: restart httpd
  service: name=httpd enabled=yes state=restarted

4、部署mariadb
创建mysql服务的任务,需要安装mysql服务,改变属主信息,启动mysql

vim /etc/ansible/lamp/roles/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的任务

vim /etc/ansible/roles/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、定义整个的任务

vim /etc/ansible/lamp/roles/site.yml
- name: LAMP build
  remote_user: root
  hosts: web-servers
  roles:
     - prepare
     - mysql
     - php 
     - httpd

开始部署

ansible-palybook -i /etc/ansible/hosts /etc/ansible/lamp/roles/site.yml --syntax-check   #检查语法错误
ansible-palybook -i /etc/ansible/hosts /etc/ansible/lamp/roles/site.yml

然后在浏览器中访问远程节点主机上的网站了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河越柯衍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值