Linux 中怎么使用 Ansible 优雅重启大规模集群服务

冬杰君_7393

冬杰君_7393

2026-10-26

623人浏览

原创

优雅重启是按依赖顺序、分批次、带健康检查、可中断回滚的受控运维操作。它通过serial控制并发、pre_tasks/post_tasks联动负载均衡、wait_for/uri校验就绪、block/rescue实现回滚,并需--check预演、assert守卫、Vault加密和日志告警。

linux 中怎么使用 ansible 优雅重启大规模集群服务

在 Linux 中用 Ansible 优雅重启大规模集群服务,核心不是“暴力杀进程再启”,而是**按依赖顺序、分批次、带健康检查、可中断回滚**地完成。它要求你把“重启”这件事当作一个受控的运维操作来设计,而不是一条 shell 命令。

定义什么是“优雅重启”

对服务集群而言,“优雅”意味着:

  • 不中断用户请求:新请求能被剩余健康节点承接(如负载均衡自动摘除+加回)
  • 不丢数据:服务主动拒绝新连接、处理完存量请求后再退出(graceful shutdown)
  • 不雪崩:避免所有节点同时重启导致后端依赖(DB、缓存、下游 API)被打满
  • 可感知状态:每一步执行结果明确,失败时能快速定位是哪台机器、哪个环节卡住

关键步骤:分组 + 滚动 + 校验

Ansible 本身不内置“滚动重启”逻辑,但通过组合参数和模块,可以精准实现:

  • 用 serial 控制并发数:在 Playbook 的 top-level 设置 serial: 2 或 serial: "25%",让每次只对 2 台或 25% 的主机执行该 Play,其余等待
  • 用 pre_tasks 和 post_tasks 补位:例如前置调用负载均衡 API 摘除节点,后置调用 API 加回并等待健康检查通过
  • 用 wait_for 或自定义脚本校验服务就绪:比如检查 curl -f http://localhost:8080/actuator/health 返回 200,或监听端口是否可连通
  • 用 ignore_errors: yes + block + rescue 实现失败回滚:某台机器重启失败时,自动触发还原配置或重启旧版本服务

典型 Playbook 片段示例

以重启 Java Web 服务为例(假设使用 systemd):

- name: Rolling restart of app service
  hosts: app_servers
  serial: 2
  vars:
    app_service_name: myapp.service
  pre_tasks:
    - name: Drain node from LB (e.g., via HTTP API)
      uri:
        url: "https://www.php.cn/link/d637dca8c61547167d887daeec510c16{{ inventory_hostname }}/drain"
        method: POST
        status_code: 200
      delegate_to: localhost
      run_once: true
<p>tasks:</p><div class="aritcle_card flexRow artxards">
											<div class="artcardd flexRow">
												<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill8828" title="Obsidian (Linux)"><img
														src="https://img.php.cn/upload/skill/000/000/081/179228531040284.jpg" alt="Obsidian (Linux)" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
												<div class="aritcle_card_info flexColumn">
													<a rel="nofollow" href="/xiazai/skill8828" title="Obsidian (Linux)" class="overflowclass">Obsidian (Linux)</a>
													<p class="overflowclass">操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。</p>
												</div>
												<a rel="nofollow" href="/xiazai/skill8828" title="Obsidian (Linux)" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
												</a>
											</div>
										</div>
  • name: Stop service gracefully systemd: name: "{{ app_service_name }}" state: stopped force: no

  • name: Wait for port to close (confirm graceful exit) wait_for: port: 8080 state: stopped timeout: 60

  • name: Start service systemd: name: "{{ app_service_name }}" state: started enabled: yes

  • name: Wait for service to be healthy uri: url: "http://{{ inventory_hostname }}:8080/actuator/health" status_code: 200 timeout: 30 register: health_check until: health_check.status == 200 retries: 6 delay: 5

post_tasks:

生产环境必须加的防护项

直接跑上面 Playbook 还不够稳妥,上线前建议补全:

  • 启用 --check 模式预演:先运行 ansible-playbook deploy.yml --check 看哪些主机会被影响、哪些任务会变更,不实际执行
  • 用 assert 模块做前置守卫:比如确认所有目标主机已安装对应 systemd unit 文件、JVM 版本符合要求、磁盘剩余空间 >10GB
  • 敏感操作加 Vault 加密:LB API Token、数据库密码等绝不硬编码在 Playbook 中,统一走 ansible-vault 管理
  • 记录执行日志到文件 + 推送告警:用 callback_plugins 或 log_plays 插件落盘,并在失败时触发企业微信/钉钉通知

本质上,Ansible 不是“重启工具”,而是“运维意图表达语言”。你写下的每行 YAML,都是在声明“我希望集群此刻处于什么状态”。只要这个声明足够精确、覆盖边界、留有退路,大规模服务的重启就能既稳定又可控。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

457

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

960

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

3172

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

1056

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

929

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

494

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2896

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

5432

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

847

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习