实战-使用 Playbook 批量部署多台 LAMP 环境

ops/2025/3/5 2:16:12/

实战-使用 Playbook 批量部署多台 LAMP 环境

playbooks 使用步骤

playbook 是一个不同于使用 ansible 命令行执行方式的模式,功能更强大更灵活。

1、在 playbooks 中定义任务:
- name: task description #任务描述信息
module_name: module_args #需要使用的模块名字: 模块参数
2、ansible-playbook 执行 命令:
[root@xuegod63 ~]# ansible-playbook site.yml
playbook 是由一个或多个"play"组成的列表。play 的主要功能在于将事先归为一组的主机装扮成事先通过Ansible 中的 task 定义好的角色。
github 上提供了大量的实例供大家参考 https://github.com/ansible/ansible-examples

实战 1:使用 Playbook 批量部署多台 LAMP 环境

Playbook 常用文件夹作用:
files:存放需要同步到异地服务器的源码文件及配置文件;
handlers:当服务的配置文件发生变化时需要进行的操作,比如:重启服务,重新加载配置文件,handlers['hændlə z] 处理程序
meta:角色定义,可留空; meta ['metə] 元
tasks:需要进行的执行的任务;
templates:用于执行 lamp 安装的模板文件,一般为脚本; templates ['templɪts] 模板
vars:本次安装定义的变量

首先,我们可以在 Ansible 服务器上安装 LAMP 环境,然后,再将配置文件通过 Ansible 拷贝到远程主机上
第一步:安装 httpd 软件
[root@xuegod63 ~]# yum install httpd -y
第二部:安装 MySQL
root@xuegod63 ~]# yum install mariadb-server mariadb -y
[root@xuegod63 ~]# mkdir -p /mydata/data #创建目录作为数据存放的位置
[root@xuegod63 ~]# chown -R mysql:mysql /mydata/
[root@xuegod63 ~]# vim /etc/my.cnf #改变数据存放目录
改:2 datadir=/var/lib/mysql 
为:2 datadir=/mydata/data
[root@xuegod63 ~]# systemctl start mariadb #启动 MariaDB

第三步:安装 PHP 和 php-mysql 模块
[root@xuegod63 ~]# yum install php php-mysql –y
第四步:提供 php 的测试页
[root@xuegod63 ~]# vim /var/www/html/index.php
<?php
phpinfo();
?>
启动 httpd 服务,在浏览器中访问

[root@xuegod63 ~]# systemctl restart httpd 
[root@xuegod63 ~]# iptables -F
测试:http://192.168.1.63/index.php

确保已经出现上面的测试页,而且,要看到 MySQL 已经被整合进来了,才能进行下一步操作
定义组名:
[root@xuegod63 ~]# vim /etc/ansible/hosts #还使用之前定义好的,这里不用修改
[web-servers]
192.168.1.63
192.168.1.64

然后,将公钥信息复制到被控制节点,Ansible 和两个节点间通过 ssh 进行连接。下面 3 个命令之前已经做过,
不用执行了。
[root@xuegod63 ~]# ssh-keygen
[root@xuegod63 ~]# ssh-copy-id root@192.168.1.63
[root@xuegod63 ~]# ssh-copy-id root@192.168.1.64

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

1、创建相关文件
[root@xuegod63 ~]# mkdir -pv 
/etc/ansible/lamp/roles/{prepare,httpd,mysql,php}/{tasks,files,templates,vars,meta,default,handler
s}
我们将上面搭建成功的 LAMP 环境的 httpd 和 MySQL 的配置文件拷贝到对应目录下
[root@xuegod63 ~]# cd /etc/ansible/ 
[root@xuegod63 ~]# cp /etc/httpd/conf/httpd.conf lamp/roles/httpd/files/
[root@xuegod63 ~]# cp /etc/my.cnf lamp/roles/mysql/files/写 prepare(前期准备)角色的 playbooks
[root@xuegod63 ansible]# vim lamp/roles/prepare/tasks/main.yml #复制以下红色内容到文件中,
配置好 yum 源
- 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 的任务
[root@xuegod63 ansible]# cd /etc/ansible/lamp/roles 
[root@xuegod63 roles]# mv /var/www/html/index.php httpd/files/
[root@xuegod63 roles]# vim 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运行。

扩展:notify 和 handlers notify [ˈnə ʊ tɪfaɪ] 通知
notify: 这个 action 可用于在每个 play 的最后被触发,这样可以避免多次有改变发生时,每次都执行指定的操作,取而代之,仅在所有的变化发生完成后一次性地执行指定操作。

在 notify 中列出的操作称为 handler,也即 notify 中调用 handler 中定义的操作。
---- name: test.yml just for 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

handlers 概述:
Handlers 也是一些 task 的列表,通过名字来引用,它们和一般的 task 并没有什么区别。
Handlers 是由通知者进行 notify, 如果没有被 notify,handlers 不会执行。
不管有多少个通知者进行了 notify,等到 play 中的所有 task 执行完成之后,handlers 也只会被执行一次。
Handlers 最佳的应用场景是用来重启服务,或者触发系统重启操作.除此以外很少用到了。
3、构建 httpd 的 handlers
[root@xuegod63 roles]# vim httpd/handlers/main.yml
- name: restart httpd
service: name=httpd enabled=yes state=restarted
4、部署我们的 MariaDB 数据库
创建 MySQL 服务的任务,需要安装 MySQL 服务,改变属主信息,启动 MySQL
[root@xuegod63 roles]# cd /etc/ansible/lamp/roles 
[root@xuegod63 roles]# vim 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@xuegod63 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@xuegod63 roles]# cd /etc/ansible/lamp/roles
[root@xuegod63 roles]# vim site.yml #写入以下内容
- name: LAMP build

remote_user: root
 hosts: web-servers
 roles:
 - prepare
 - mysql
 - php 
- httpd

注:所有 yml 的配置文件中,空格必须严格对齐

开始部署:
[root@xuegod63 roles]# ansible-playbook -i /etc/ansible/hosts 
/etc/ansible/lamp/roles/site.yml
然后,在浏览器中访问这两台节点主机,可以直接访问成功。
http://192.168.1.63/index.php

注:
1、默认情况下,首次登陆一台服务器,系统会提示是否要记住对端的指纹,用 Ansible 也会这样,这样会导致需要手工输入 yes 或 no,Ansible 才可以往下执行。如需避免这种情况,需要在 /etc/ansible/ansible.cfg 文件中设置 host_key_checking = False
例 1:
[root@xuegod63 roles]# rm -rf /root/.ssh/known_hosts 
[root@xuegod63 roles]# ansible-playbook -i /etc/ansible/hosts ./site.yml #发现需要输入 yes,
来保存对端的指纹
解决:
[root@xuegod63 roles]# vim /etc/ansible/ansible.cfg
改:62 #host_key_checking = False #就是把前面的#号去了
为:host_key_checking = False 

[root@xuegod63 roles]# rm -rf /root/.ssh/known_hosts 
[root@xuegod63 roles]# ansible-playbook -i /etc/ansible/hosts ./site.yml #发现不需要输入 yes,
可以自动安装了


http://www.ppmy.cn/ops/163182.html

相关文章

微前端开发模式解析与实践

微前端&#xff08;Micro Frontends&#xff09;是一种将前端应用拆分为多个独立模块的开发模式&#xff0c;允许不同团队独立开发、部署和维护各自的模块&#xff0c;最终组合成一个完整的应用。以下是关于微前端开发的详细解析&#xff1a; 一、微前端的核心思想 独立开发 每…

服务流程设计和服务或端口重定向及其websocket等应用示例

服务流程设计和服务或端口重定向及其websocket等应用示例 目录 服务或端口重定向的服务设计和websocket等应用示例 一、通用请求控制流程 1.1、入口 1.2、所有GET请求首先预检控制单元 1.3、http请求会分别自动307重定向 1.4、所有请求首先执行跨源控制单元 1.5、然后…

Logstash:数据搬运工的奇幻漂流

Logstash&#xff1a;数据搬运工的奇幻漂流 1. 什么是 Logstash&#xff1f; 想象一下&#xff0c;你的系统每天都在疯狂地产生日志&#xff0c;像一个话痨一样滔滔不绝。而你要从这些海量数据中找出有用的信息&#xff0c;比如监控系统异常、分析用户行为等等。这时候&#…

【动态规划学习】区间dp

区间dp概述 区间dp&#xff0c;就是在一段区间上进行动态规划&#xff0c;求解一段区间的最优解。最后合并小区间上的最优解从而得到全局最优解的算法。 【问题引入】 石子合并问题 N堆石子摆成一条线。现要将石子有次序地合并成一堆。规定每次只能选相邻的两堆石子合并成新的…

Linux文档编辑相关命令详解

Linux文档编辑相关命令 1. grep grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。 1.1 语法 grep [options] pattern [files] 1.2 常用选项 -i&#xff1a;忽略大小写进行匹配。-v&#xff1a;反向查找&#xff0c;只打印不匹配的行。-…

【愚公系列】《Python网络爬虫从入门到精通》040-Matplotlib 概述

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…

基于专利合作地址匹配的数据构建区域协同矩阵

文章目录 地区地址提取完成的处理代码 在专利合作申请表中&#xff0c;有多家公司合作申请。在专利权人地址中&#xff0c; 有多个公司的地址信息。故想利用这里多个地址。想用这里的地址来代表区域之间的专利合作情况代表区域之间的协同、协作情况。 下图是专利合作表的一部分…

深入解析 ASP.NET Core 的内存管理与垃圾回收优化

在现代高并发的 Web 应用中&#xff0c;内存管理和垃圾回收&#xff08;GC&#xff09;是影响性能和稳定性的重要因素。ASP.NET Core 作为基于 .NET Core 平台的高效 Web 框架&#xff0c;其内存管理和垃圾回收机制设计上考虑了高吞吐量、低延迟的需求。在本文中&#xff0c;我…