自动化运维之Ansible
所有主机配置解析Ansible安装[rootserver1 ~]# yum install -y ansible-coreAnsible配置文件[rootserver1 ~]# cd /etc/ansible/[rootserver1 ansible]# ansible-config init --disabled ansible.cfg[rootserver1 ansible]# vim hosts[rootserver1 ansible]# ansible-inventory --graphAnsible Ad-hoc语法[rootansible ~]# ansible pattern -m module_name -a arguments参数详解pattern: inventory文件里定义的主机组名,主机名,IP,别名等,all表示所有的主机,支持通配符,正则: -冒号,多个组,组名之间用冒号隔开web-组名或主机名中含web的webservers[0] - webservers组中的第一台主机, -1表示最后一台主机,支持切片(正):[1:2]表示组中的第二台和第三台all所有-m module_name:模块名称,默认为command-a arguments:传递给模块的参数-i file_name:指定inventory文件,默认为/etc/ansible/hosts-k :询问密码.如果没有传密钥到被管理端,必须要接此选项配置过程:1.在控制节点安装ansible2.编辑主机清单文件,加入被管控节点3.在控制节点生成密钥,把公钥传到所有的被控制节点(可选)帮助信息查看# ansible-doc -l #查看所有模块信息# ansible-doc module_name #查看模块帮助信息Ansible Modules1.主机连通性[rootserver1 ansible]# ansible web -m ping -k这样就说明我们的主机是连通状态的。接下来的操作才可以正常进行。2. command模块这个模块可以直接在远程主机上执行shell命令并将结果返回本主机。[rootserver1 ansible]# ansible web -m command -a ss -ntl -k3. shell模块[rootserver1 ~]# ansible web -m shell -a cat /etc/passwd |grep devops4. copy模块这个模块用于将文件复制到远程主机同时支持给定内容生成文件和修改权限等。① 复制文件[rootserver1 ~]# ansible web -m copy -a src~/hello dest/data/hello② 给定内容生成文件并制定权限[rootserver1 ~]# ansible web -m copy -a contentI am keer\n dest/root/name mode666我们现在可以去查看一下我们生成的文件及其权限[rootserver1 ~]# ansible web -m shell -a ls -l /root/③ 关于覆盖我们把文件的内容修改一下然后选择覆盖备份[rootserver1 ~]# ansible web -m copy -a contentI am keerya\n backupyes dest/root/name mode666现在我们可以去查看一下[rootserver1 ~]# ansible web -m shell -a ls -l /root/可以看出我们的源文件已经被备份我们还可以查看一下name文件的内容[rootserver1 ~]# ansible web -m shell -a cat /root/name5. file模块该模块主要用于设置文件的属性比如创建文件、创建链接文件、删除文件等① 创建目录[rootserver1 ~]# ansible web -m file -a path/data/app statedirectory② 创建链接文件[rootserver1 ~]# ansible web -m file -a path/data/bbb.jpg srcaaa.jpg statelink③ 删除文件[rootserver1 ~]# ansible web -m file -a path/data/aaa.jpg stateabsent6. fetch模块该模块用于从远程某主机获取复制文件到本地。有两个选项dest#用来存放文件的目录src#在远程拉取的文件并且必须是一个file不能是目录[rootserver1 ~]# ansible web -m fetch -a src/data/hello.txt dest/root我们可以在本机上查看一下文件是否复制成功。要注意文件保存的路径是我们设置的接收目录下的被管制主机ip目录下7. cron模块该模块适用于管理cron计划任务的其使用的语法跟我们的crontab文件中的语法一致[rootserver1 ~]# ansible web -m cron -a namentp update every 5 min minute*/5 job/sbin/ntpdate 172.17.0.1 /dev/null[rootserver1 ~]# ansible web -m shell -a crontab -lAnsible Playbook剧本基本写法server1上创建devops用户[rootserver1 ~]# useradd devops[rootserver1 ~]# su - devops[devopsserver1 ~]$ mkdir ansible[devopsserver1 ~]$ cd ansible/[devopsserver1 ansible]$ vim apache.ymlserver2上创建devops用户[rootserver2 ~]# useradd devops[rootserver2 ~]# passwd devops配置目标机 sudo 免密[rootserver2 ~]# echo devops ALL(ALL) NOPASSWD: ALL /etc/sudoers.d/devops[rootserver2 ~]# chmod 440 /etc/sudoers.d/devopsserver1上执行[devopsserver1 ansible]$ ansible-playbook apache.yml -k[devopsserver1 ansible]$ curl server2前置配置配置ssh免密[devopsserver1 ~]$ ssh-keygen[devopsserver1 ~]$ ssh-copy-id devops192.168.247.143配置主机清单[devopsserver1 ansible]$ vim hosts生成Ansible 配置模板文件[devopsserver1 ansible]$ ansible-config init --disabled ansible.cfg修改配置文件[devopsserver1 ansible]$ vim ansible.cfg让 Ansible 在执行任务时自动以 root身份运行将 Ansible 的默认主机清单Inventory路径指定为当前工作目录下的./hosts文件[devopsserver1 ansible]$ ansible-inventory --graph[devopsserver1 ansible]$ ansible-playbook apache.yml全局指定 Ansible 连接远程主机时使用的 SSH 登录用户为devops[devopsserver1 ansible]$ vim ansible.cfg修改 Apache 监听端口为 8080[devopsserver1 ansible]$ vim apache.yml[devopsserver1 ansible]$ ansible-playbook apache.ymlhandlers[devopsserver1 ansible]$ vim apache.yml对比项之前的配置现在的配置端口修改后处理❌ 无后续操作端口变更不会立即生效✅ 通过notify触发 handler 重启服务服务重启机制不存在新增handlers段定义重启任务幂等性每次运行都执行所有 taskhandler 仅在 notify 被触发时才执行Ansible 的Facts事实机制[devopsserver1 ansible]$ vim apache.ymlansible_hostname是 Ansible 在连接目标主机时自动采集的内置变量值为该主机的短主机名gather_facts参数指定了在以下任务部分执行前是否先执行setup模块获取主机相关信息这在后面的task会使用到setup获取的信息时用到部署后自动化验证在 web 服务器部署完成后从控制节点本地发起 HTTP 请求验证网站是否可正常访问并输出页面内容[devopsserver1 ansible]$ vim apache.yml[devopsserver1 ansible]$ ansible-playbook apache.yml变量定义及使用vars[devopsserver1 ansible]$ vim apache.yml对不同主机部署不同端口的 Apache 服务[devopsserver1 ansible]$ vim hosts[devopsserver1 ansible]$ vim apache.yml[devopsserver1 ansible]$ ansible-playbook apache.yml[devopsserver1 ansible]$ curl node1:8080从lineinfile改为template[devopsserver1 ansible]$ vim apache.yml[devopsserver1 ansible]$ scp server2:/etc/httpd/conf/httpd.conf .[devopsserver1 ansible]$ mv httpd.conf httpd.conf.j2[devopsserver1 ansible]$ vim httpd.conf.j2[devopsserver1 ansible]$ ansible-playbook apache.ymlgroup variable组变量[devopsserver1 ansible]$ vim hosts[devopsserver1 ansible]$ ansible-playbook apache.yml部署keepalived[rootserver1 ~]# passwd devops[rootserver1 ~]# su - devops[devopsserver1 ~]$ ssh-copy-id 192.168.247.142[rootserver1 ~]# visudo[devopsserver1 ansible]$ vim hosts[devopsserver1 ansible]$ vim keepalved.yml[rootserver2 ~]# yum install -y keepalived[devopsserver1 ansible]$ scp server2:/etc/keepalived/keepalived.conf .[devopsserver1 ansible]$ mv keepalived.conf keepalived.conf.j2[devopsserver1 ansible]$ ansible-playbook keepalived.yml[rootserver1 ~]# systemctl stop keepalived[rootserver2 ~]# tail -f /var/log/messages添加用户[devopsserver1 ansible]$ vim user.yml[devopsserver1 ansible]$ ansible-playbook user.yml添加主机解析[devopsserver1 ansible]$ vim lineinfile.yml[devopsserver1 ansible]$ ansible-playbook lineinfile.yml魔法变量[devopsserver1 ansible]$ vim hosts[devopsserver1 ansible]$ vim groups.yml[devopsserver1 ansible]$ cp /etc/hosts test.j2[devopsserver1 ansible]$ vim test.j2[devopsserver1 ansible]$ ansible-playbook groups.yml[devopsserver1 ansible]$ cat /etc/hostsHaproxy[devopsserver1 ansible]$ vim hosts停掉之前的keepalived服务[devopsserver1 ansible]$ vim keepalived.yml[devopsserver1 ansible]$ ansible-playbook keepalived.yml --tagst1[devopsserver1 ansible]$ cp /etc/haproxy/haproxy.cfg .[devopsserver1 ansible]$ mv haproxy.cfg haproxy.cfg.j2[devopsserver1 ansible]$ vim haproxy.cfg.j2[devopsserver1 ansible]$ vim haproxy.yml---- hosts: haproxy,webserverstasks:- name: deploy haproxyblock:- name: install haproxyansible.builtin.yum:name: haproxystate: present- name: configure the haproxyansible.builtin.template:src: haproxy.cfg.j2dest: /etc/haproxy/haproxy.cfgnotify: restart service haproxy- name: enable service haproxyansible.builtin.service:name: haproxystate: startedenabled: yeswhen: haproxy in group_names- name: deploy apacheblock:- name: Install the Apacheansible.builtin.yum:name: httpdstate: present- name: Ensure the default Apache port is {{ http_port }}ansible.builtin.template:src: httpd.conf.j2dest: /etc/httpd/conf/httpd.confnotify: restart service httpd- name: Start service httpdansible.builtin.service:name: httpdstate: startedenabled: yes- name: create index.htmlansible.builtin.copy:content: {{ ansible_hostname }}\ndest: /var/www/html/index.htmlwhen: webservers in group_nameshandlers:- name: restart service haproxyansible.builtin.service:name: haproxystate: restarted- name: restart service httpdansible.builtin.service:name: httpdstate: restarted[devopsserver1 ansible]$ ansible-playbook haproxy.yml成功之后可以验证负载均衡

相关新闻

从“零部件测绘与CAD成图技术”竞赛看中职技能人才培养——以石家庄东华铁路学校为例

从“零部件测绘与CAD成图技术”竞赛看中职技能人才培养——以石家庄东华铁路学校为例

一、背景 职业教育领域的技能竞赛,正在成为衡量中职学校教学质量的重要标尺。 以石家庄市东华铁路中等专业学校为例,这所创办于1995年的老牌中专,近两年在省市级技能大赛中屡获佳绩,尤其是在零部件测绘与CAD成图技术赛项中表现突出…

2026/8/16 23:58:07 阅读更多 →
MySQL到金仓:ON DUPLICATE KEY语句改造——接口入库服务的幂等写入与并发验证

MySQL到金仓:ON DUPLICATE KEY语句改造——接口入库服务的幂等写入与并发验证

文章目录每日一句正能量1. 背景与问题:ON DUPLICATE KEY迁移的不是SQL语法,而是“重复请求怎么处理”的协议2. 环境与数据:先盘点唯一键,再盘点UPSERT2.1 MySQL的真实语义比“有就更新”复杂2.2 先建立 UPSERT 清单3. 复现过程&am…

2026/8/16 23:58:07 阅读更多 →
致远 OA HTTPS 配置避坑指南

致远 OA HTTPS 配置避坑指南

致远 OA HTTPS 配置避坑指南 环境说明 产品版本:致远 A6-V5 企业版 V5.6SP1部署环境:Windows Server 2008 R2 Standard应用部署方式:单机 Tomcat 部署Tomcat 端口:8080HTTPS 方式:Nginx 反向代理域名:oa.xx…

2026/8/16 23:57:07 阅读更多 →

最新新闻

本科生必备AI工具指南:8款实测推荐与避坑技巧

本科生必备AI工具指南:8款实测推荐与避坑技巧

1. 项目概述:本科生如何高效筛选AI工具作为一名经历过本科阶段的过来人,我深知在学术研究和日常学习中,选择合适的AI工具能极大提升效率。但市面上工具鱼龙混杂,很多同学常常陷入"选择困难症"——要么被复杂功能吓退&am…

2026/8/17 2:00:49 阅读更多 →
Win11下Python虚拟环境配置指南:VSCode中venv、virtualenv与Conda实战

Win11下Python虚拟环境配置指南:VSCode中venv、virtualenv与Conda实战

1. 为什么在Win11上配置Python虚拟环境是开发者的第一课如果你刚开始用VScode写Python,或者刚从PyCharm、Jupyter Notebook转过来,大概率会直接在你的系统Python里pip install各种包。头几次可能很顺利,直到某天你接手一个老项目,…

2026/8/17 2:00:49 阅读更多 →
四线无刷风扇PWM调速全攻略:从硬件接线到闭环控制

四线无刷风扇PWM调速全攻略:从硬件接线到闭环控制

1. 项目概述:从“会转”到“可控”的飞跃玩过单片机或者树莓派的朋友,手上或多或少都积攒了一些从旧设备上拆下来的小风扇,尤其是那种带四根线(红、黑、黄、蓝)的无刷直流风扇。它们安静、高效、寿命长,直接…

2026/8/17 2:00:49 阅读更多 →
构建通用智能体规划:从任务分解到动态执行的工程实践

构建通用智能体规划:从任务分解到动态执行的工程实践

1. 项目概述:从“魔法”到“通用”的智能体规划之路最近在AI圈子里,“Agent”这个词的热度简直要爆了。从OpenAI的Codex到DeepSeek的动向,从Hermes Agent的安装到各种Agent框架的讨论,感觉一夜之间,所有开发者都在琢磨…

2026/8/17 1:59:49 阅读更多 →
LaTeX公式排版完全指南:从入门到精通

LaTeX公式排版完全指南:从入门到精通

1. 项目概述:从“手忙脚乱”到“优雅排版”的公式之旅如果你曾经为了在文档里插入一个复杂的数学公式,在Word的公式编辑器里点得鼠标冒烟,或者为了对齐一个求和符号的上下标而抓狂,那么你一定能理解我最初接触LaTeX时的那种“相见…

2026/8/17 1:59:49 阅读更多 →
联想拯救者工具箱完全免费开源:游戏本调校一篇讲透,告别后台臃肿与卡顿

联想拯救者工具箱完全免费开源:游戏本调校一篇讲透,告别后台臃肿与卡顿

联想拯救者工具箱完全免费开源:游戏本调校一篇讲透,告别后台臃肿与卡顿 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoL…

2026/8/17 1:59:49 阅读更多 →

日新闻

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必修课? 如果你用LabVIEW做过稍微复杂点的项目,尤其是涉及界面响应、多任务并行或者硬件IO等待的场景,大概率遇到过这样的窘境:前面板点个按钮,整个程序就“卡死…

2026/8/17 0:00:08 阅读更多 →
LabVIEW异步调用实战:解决界面卡顿与并行处理难题

LabVIEW异步调用实战:解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必经之路如果你在LabVIEW里写过稍微复杂点的程序,尤其是涉及到界面响应、多任务并行或者硬件IO等待,大概率会遇到一个头疼的问题:程序“卡”住了。前面板点不动,进度条不更新…

2026/8/17 0:00:08 阅读更多 →
飞书局域网文件传输实战:3种方案实现高速点对点传输

飞书局域网文件传输实战:3种方案实现高速点对点传输

1. 项目概述:为什么要在局域网内用飞书传文件? 飞书作为一款主流的协同办公套件,其核心功能是围绕云端协作设计的。无论是文档、表格还是文件,通常的分享逻辑都是“上传到云端 -> 生成链接 -> 分享给同事”。这个流程在互联…

2026/8/17 0:00:08 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/16 6:00:23 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/16 6:00:24 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/16 6:00:27 阅读更多 →