uWSGI服务实现优雅重启(graceful reload)的方式

服务端当前使用方式

直接通过svc发送SIGINT/SIGKILL信号

直接触发real_run脚本中的相关信号通知

使用简单

每次重启所有进程(包括master),重启完成为全新的进程

不等待已有请求完成直接结束旧进程,

新进程ready前所有新请求将无法处理,相当于服务down掉一段时间(秒级)–-靠nginx实现fail over

Standard (default/boring) graceful reload (aka SIGHUP)

直接发送SIGHUP信号

master进程本身不重启,等待已有请求处理结束后结束worker

新worker ready前,所有新请求将进入等待队列

使用简单

不会存在不一致状态

基本重置了所有进程状态

等待队列满了之后的新请求将直接报错

新请求可能需要等待较长时间

Workers reloading in lazy-apps mode

write w to The Master FIFO

wait for running workers and then restart each of them.

avoids restarting the whole instance.

和standar方式一样新请求需要进入队列等待

write c to The Master FIFO

已有请求处理完成后reload 一个worker,新worker ready后才重启下一个worker

新请求无需进入等待队列等待,多个worker之中始终有可以接受请求的worker在工作

逐个worker重启降低机器短时负载

只能处理worker代码更新的重启,无法更改uwsgi option配置

需要多个worker配置才能有较好效果

Zerg mode

配置 zerg server 或者 zerg pool(绑定unix socket)

首先spawn 新worker,ready后shutdown 旧worker(具体参见下面的Zerg Dance-自动化这一过程的一种实现)

基本已经算是0停机reload

允许master配置不同的option重启

需要一个额外的进程

相对没那么容易管理

reload时需要拷贝整个uWSGI栈

The Zerg Dance: Pausing instances 通过配置3个Master FIFOs+ uWSGI 高级hooks实现开启新进程,暂停(pause)旧进程

truly zero-downtime reload.

需要使用高级的uWSGI和Unix技术,配置较为复杂

综合考虑,链式重启的方式配置简单,而且在多worker的情况下已经完全能够避免异常1与异常2问题的产生,考虑到实际上更改uWSGI配置的频率非常之低–偶尔需要按照旧有方式有损重启master进程也可以接受,因而采用链式重启实现uWSGI配置的优雅重启即可,实际只需要在原.xml配置文件中加上 (对应.ini文件、命令行参数加上master-fifo也一样) ,表示通过/tmp/uwsgi_api.fifo 管道传输命令,需要重启时执行 echo c > /tmp/uwsgi_api.fifo 即可。

旧配置:

新配置:

PS: 在网上搜索到已经有人分享过 uWSGI平滑重启的方式,多篇文章来源看上去都是同一篇–uwsgi graceful reload,所采用的也是链式重启,都是通过配置 在.ini配置文件中添加:touch-chain-reload=XXX/settings.py <span class="hljs-attr">&#xA0;<span>&#x5B9E;&#x73B0;&#xFF0C;&#x5373;&#x6BCF;&#x6B21;&#x901A;&#x8FC7;touch &#x67D0;&#x4E2A;&#x4EE3;&#x7801;&#x6587;&#x4EF6;&#x7684;&#x65B9;&#x5F0F;&#x5B9E;&#x73B0;&#x89E6;&#x53D1;&#x81EA;&#x52A8;&#x91CD;&#x542F;&#xFF0C;&#x540E;&#x9762;&#x94FE;&#x5F0F;&#x91CD;&#x542F;&#x903B;&#x8F91;&#x672C;&#x8D28;&#x90FD;&#x662F;&#x4E00;&#x6837;&#x7684;&#xFF0C;&#x53EA;&#x5728;&#x4E8E;&#x6211;&#x8FD9;&#x91CC;&#x662F;&#x901A;&#x8FC7;&#x7BA1;&#x9053;&#x53D1;&#x9001;&#x91CD;&#x542F;&#x547D;&#x4EE4;&#xFF0C;&#x800C;&#x524D;&#x8005;&#x662F;&#x901A;&#x8FC7;&#x76D1;&#x63A7;&#x4EE3;&#x7801;&#x6587;&#x4EF6;&#x72B6;&#x6001;&#x5B9E;&#x73B0;&#x3002;&#x4E2A;&#x4EBA;&#x8BA4;&#x4E3A;&#x901A;&#x8FC7;&#x547D;&#x540D;&#x7BA1;&#x9053;&#x65B9;&#x5F0F;&#x89E6;&#x53D1;&#x91CD;&#x542F;&#x66F4;&#x53EF;&#x63A7;&#x4E00;&#x4E9B;&#xFF0C;&#x8FD9;&#x6837;&#x80FD;&#x5C06;&#x91CD;&#x542F;&#x64CD;&#x4F5C;&#x672C;&#x8EAB;&#x4E0E;&#x4EE3;&#x7801;&#x72B6;&#x6001;&#x8FD9;&#x4E24;&#x4E2A;&#x672C;&#x5C31;&#x4E0D;&#x5E94;&#x8BE5;&#x76F8;&#x5173;&#x5185;&#x5BB9;&#x7684;&#x4E8B;&#x52A1;&#x9694;&#x79BB;&#x5F00;&#x6765;&#xFF0C;&#x800C;&#x4E14;&#x91C7;&#x7528;touch&#x65B9;&#x5F0F;&#xFF0C;&#x4EFB;&#x4F55;&#x65F6;&#x5019;&#x7EBF;&#x4E0A;&#x53EA;&#x8981;&#x4E00;&#x53D1;&#x751F;&#x4EE3;&#x7801;&#x66F4;&#x65B0;--git pull&#x65B0;&#x4EE3;&#x7801;&#x3001;cp&#x8986;&#x76D6;&#x65B0;&#x4EE3;&#x7801;&#x4E43;&#x81F3;&#x7F16;&#x8F91;&#x4FEE;&#x6539;&#x4EE3;&#x7801;&#xFF08;&#x5E94;&#x6781;&#x529B;&#x907F;&#x514D;&#xFF09;--&#x65E0;&#x8BBA;&#x662F;&#x6709;&#x610F;&#x65E0;&#x610F;&#xFF0C;&#x90FD;&#x5C06;&#x89E6;&#x53D1;reload&#xFF0C;&#x8FD9;&#x4E0D;&#x4E00;&#x5B9A;&#x662F;&#x64CD;&#x4F5C;&#x8005;&#x672C;&#x8EAB;&#x60F3;&#x8981;&#x7684;&#xFF0C;&#x800C;&#x901A;&#x8FC7;&#x7BA1;&#x9053;&#x65B9;&#x5F0F;&#xFF0C;&#x5219;&#x5F88;&#x660E;&#x786E;&#x8BE5;&#x64CD;&#x4F5C;&#x5C31;&#x662F;&#x9700;&#x8981;&#x91CD;&#x542F;server&#x3002;</span></span>

Original: https://www.cnblogs.com/AcAc-t/p/uWSGI_graceful_reload.html
Author: 及时
Title: uWSGI服务实现优雅重启(graceful reload)的方式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578247/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 网络安全常见术语

    黑客帽子之分 白帽 白帽:亦称白帽黑客、白帽子黑客,是指那些专门研究或者从事网络、计算机技术防御的人,他们通常受雇于各大公司,是维护世界网络、计算机安全的主要力量。很多白帽还受雇于…

    Linux 2023年6月14日
    090
  • [Git系列] Git 基本概念

    版本控制系统 版本控制系统是一种帮助软件开发者实现团队合作和历史版本维护的软件,一个版本控制系统应具备以下列出的这几个基本功能: 允许开发者并发工作; 不允许一个开发者覆写另一个开…

    Linux 2023年6月14日
    0105
  • 内存错误和服务器内存RAS功能-DELL篇-1

    简介 内存子系统错误是现代计算系统中最常见的一些错误类型。了解内存错误是如何发生的以及如何预防或避免它们可能是一个复杂的话题–在过去30年里,这个话题挑战了无数的行业研…

    Linux 2023年6月7日
    0135
  • 防火墙NAT+DHCP+ACL+ACAP

    任务要求: SwitchA作为有线终端网关与DHCP Server,为无线终端与有线终端分配IP地址,并配置ACL访问控制列表控制不同用户的访问权限,客户机只能跟DMZ区域服务器互…

    Linux 2023年6月7日
    079
  • SQLI-LABS(Less-1)

    Less-1(GET-Error-Single quotes-String) 打开Less-1页面,可以看到页面中间有一句 Please input the ID as param…

    Linux 2023年6月6日
    084
  • 关于ubuntu执行32位程序报错execvp():No such file or directory的解决方案

    一、前言 &#x5728;ubuntu 执行一个程序时,居然报错 execvp():No such file or directory ,报错截图如下图所示: ls -al…

    Linux 2023年6月8日
    0115
  • git 的使用

    git 的使用 1、介绍 代码版本管理、协同开发 对文件(代码)进行版本管理 完成协同开发 项目,帮助程序员整合代码 i)帮助开发者合并开发的代码 ii)如果出现冲突代码的合并,会…

    Linux 2023年6月14日
    095
  • Linux FastDFS安装

    1.0、 fastDFS fastDFS介绍 FastDFS是用c语言编写的一款开源的分布式文件系统,它是由淘宝资深架构师余庆编写并开源。FastDFS专为互联网量身定制,充分考虑…

    Linux 2023年6月7日
    087
  • winServer 监控Serv-U服务脚本(停止自动启动)

    Windows Server 服务器监控服务脚本,每60s查询一次,若服务停止即再启动 Serv-U 服务监控 脚本如下: @echo off rem &#x5B9A;&a…

    Linux 2023年6月7日
    090
  • Shell中的特殊符号(special characters)和含义

    之前写过两篇关于Bash语法的blog,分别是: 个人感觉,想要通畅地读懂bash脚本,还差一个部分,那就是符号。 个人网上的讲bash符号的文章有点乱,要么有错,要么不全,要么太…

    Linux 2023年5月28日
    097
  • Linux at命令详解

    大家好,我是良许。 在生活中,我们有太多的场景需要使用闹钟,比如早上7点起床,下午4点开会,晚上8点购物,等等。 [En] In life, we have too many sc…

    Linux 2023年5月27日
    0111
  • SQL51 查找字符串中逗号出现的次数

    本题链接本题表结构如下所示。 +—-+————–+ | id | string | +—-+————–+ | 1 | 10,A,B | …

    Linux 2023年6月13日
    099
  • SQLI-LABS(Less-2)

    Less-2(GET-Error based-Intiger based) 打开 Less-2页面,可以看到页面中间有一句 Please input the ID as param…

    Linux 2023年6月6日
    091
  • Docker常用命令

    Docker常用命令 删除安装包: sudo&#xA0;apt-get&#xA0;purge&#xA0;docker-ce 删除镜像、容器、配置文件等内容:…

    Linux 2023年6月6日
    0160
  • 防止shell script多次运行

    防止shell script多次运行 一个思路是在script初期检测系统中是否存在同名进程。 if [ ps -ef | grep "test.sh" | g…

    Linux 2023年5月28日
    084
  • macOS Catalina new Shell,解决 The default interactive shell is now zsh

    The default interactive shell is now zsh. To update your account to use zsh, please run ch…

    Linux 2023年5月28日
    0148
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球