自动化运维之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/10/16 19:18:10 阅读更多 →
MySQL到金仓:ON DUPLICATE KEY语句改造——接口入库服务的幂等写入与并发验证

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

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

2026/10/16 23:28:15 阅读更多 →
致远 OA HTTPS 配置避坑指南

致远 OA HTTPS 配置避坑指南

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

2026/10/17 12:21:05 阅读更多 →

最新新闻

MATLAB实现Elman神经网络电力负荷预测:时序建模与工程实践

MATLAB实现Elman神经网络电力负荷预测:时序建模与工程实践

1. 项目概述与核心需求解析电力负荷预测这个题目,在电力系统里是老生常谈,但真正把它做好的人不多。我接触过不少相关项目,也见过很多人拿历史负荷数据直接塞进神经网络里就跑,结果训练集误差看着挺漂亮,一到验证集就原…

2026/10/17 12:54:09 阅读更多 →
帧同步原理与实现:从输入同步到确定性保障

帧同步原理与实现:从输入同步到确定性保障

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 12:54:09 阅读更多 →
算法OJ作业Lecture(4):四重能力压力测试与破题心法

算法OJ作业Lecture(4):四重能力压力测试与破题心法

1. 这不是一节普通课,而是一次算法能力的“压力测试”“程序设计与算法 | (8) Lecture(4) OJ作业”——看到这个标题,很多刚接触算法训练的同学第一反应是:又到在线判题系统(OJ)交作业的时间了。但如果你真这么想&…

2026/10/17 12:54:09 阅读更多 →
North-Micro-Vision-Instruct-bf16 图像输入完全攻略:从本地图片到 URL 的多模态实战

North-Micro-Vision-Instruct-bf16 图像输入完全攻略:从本地图片到 URL 的多模态实战

【免费下载链接】North-Micro-Vision-Instruct-bf16 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/North-Micro-Vision-Instruct-bf16 点击查看 免费下载 North-Micro-Vision-Instruct-bf16 是一款面向 Apple Silicon 的多模态视觉语言模型&#xf…

2026/10/17 12:54:09 阅读更多 →
为什么你的小模型推理变慢了?SmolLM-Instruct_rai_1.8.0_medusa_1.0_npu 性能调优 10 个技巧

为什么你的小模型推理变慢了?SmolLM-Instruct_rai_1.8.0_medusa_1.0_npu 性能调优 10 个技巧

大模型基础模型 【免费下载链接】SmolLM-Instruct_rai_1.8.0_medusa_1.0_npu 项目地址: https://ai.gitcode.com/hf_mirrors/amd/SmolLM-Instruct_rai_1.8.0_medusa_1.0_npu 点击查看 免费下载 小模型推理明明应该飞快,为什么跑起来却越来越慢&#xff…

2026/10/17 12:54:09 阅读更多 →
Docker Harbor 安装配置全解析:从部署到运维的镜像治理实践

Docker Harbor 安装配置全解析:从部署到运维的镜像治理实践

做容器化落地的人迟早会碰到一个问题:镜像越来越多,靠 Docker 自带的 Registry 管不住权限,也管不住审计和复制。Docker Harbor安装配置就成了绕不开的一环——把 Harbor 部署起来,给团队一个靠谱的镜像中心。尤其是当团队规模超过…

2026/10/17 12:53:09 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →