【Nginx】Nginx 安装(平滑升级和回滚)

一、 Nginx 概述

Nginx 介绍
Nginx engine X 2002 年开发,分为社区版和商业版 (nginx plus )
2019 3 11 F5 Networks 6.7 亿美元的价格收购
Nginx 是免费的、开源的、高性能的 HTTP 和反向代理服务器、邮件代理服务器、以及 TCP/UDP 代理服务器解决C10K 问题( 10K Connections
Nginx 官网: http://nginx.org
nginx 的其它的二次发行版:
Tengine 由淘宝网发起的 Web 服务器项目。它在 Nginx 的基础上,针对大访问量网站的需求,添加
了很多高级功能和特性。 Tengine 的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了
很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的 Web 平台。从 2011 12 月开始,Tengine成为一个开源项目官网 : http://tengine.taobao.org/
OpenResty :基于 Nginx Lua 语言的高性能 Web 平台, 章亦春团队开发,官网: http://openr
esty.org/cn/
Nginx 功能介绍
  • 静态的web资源服务器html,图片,jscsstxt等静态资源
  • http/https协议的反向代理
  • 结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求
  • tcp/udp协议的请求转发(反向代理)
  • imap4/pop3协议的反向代理

基础特性

  • 模块化设计,较好的扩展性
  • 高可靠性
  • 支持热部署:不停机更新配置文件,升级版本,更换日志文件
  • 低内存消耗:10000keep-alive连接模式下的非活动连接,仅需2.5M内存
  • event-driven,aio,mmapsendfile
 Web 服务相关的功能
  • 虚拟主机(server
  • 支持 keep-alive 和管道连接(利用一个连接做多次请求)
  • 访问日志(支持基于日志缓冲提高其性能)url rewirte
  • 路径别名
  • 基于IP及用户的访问控制
  • 支持速率限制及并发数限制
  • 重新配置和在线升级而无须中断客户的工作进程

Nginx 安装

 Nginx 版本和安装方式
Nginx 版本
Mainline version 主要开发版本 , 一般为奇数版本号 , 比如 1.19
Stable version 当前最新稳定版 , 一般为偶数版本 , :1.20
Legacy versions 旧的稳定版 , 一般为偶数版本 , :1.18
Nginx 安装可以使用 yum 或源码安装,但是推荐使用源码编译安装
yum 的版本比较旧
编译安装可以更方便自定义相关路径
使用源码编译可以自定义相关功能,更方便业务的上的使用
Nginx 编译安装
编译器介绍
源码安装需要提前准备标准的编译器, GCC 的全称是( GNU Compiler collection ),其有 GNU 开发,并以GPL即 LGPL 许可,是自由的类 UNIX 即苹果电脑 Mac OS X 操作系统的标准编译器,因为 GCC 原本只能处理 C 语言,所以原名为GNU C 语言编译器,后来得到快速发展,可以处理 C++,Fortran pascal objective C, java以及 Ada 等其他语言,此外还需要 Automake 工具,以完成自动创建 Makefile 的工作, Nginx 的一些模块需要依赖第三方库,比如: pcre (支持 rewrite ), zlib (支持 gzip 模块)和 openssl (支持 ssl 模块)等。
  编译安装 Nginx

官方源码包下载地址

https://nginx.org/en/download.html
[root@Nginx ~]# dnf install gcc pcre-devel zlib-devel openssl-devel -y
[root@Nginx nginx-1.24.0]# useradd -s /sbin/nologin -M nginx
[root@Nginx nginx]# tar zxf nginx-1.24.0.tar.gz
[root@Nginx nginx-1.24.0]# useradd -s /sbin/nologin -M nginx
[root@Nginx nginx]# cd nginx-1.24.0/
[root@Nginx nginx-1.24.0]# ls
auto CHANGES.ru configure html Makefile objs src
CHANGES conf contrib LICENSE man README
[root@Nginx nginx-1.24.0]# ./configure --prefix=/usr/local/nginx \
--user=nginx \ # 指定nginx运行用户
--group=nginx \ # 指定nginx运行组
--with-http_ssl_module \ # 支持https://
--with-http_v2_module \ # 支持http版本2
--with-http_realip_module \ # 支持ip透传
--with-http_stub_status_module \ # 支持状态页面
--with-http_gzip_static_module \ # 支持压缩
--with-pcre \ # 支持正则
--with-stream \ # 支持tcp反向代理
--with-stream_ssl_module \ # 支持tcp的ssl加密
--with-stream_realip_module # 支持tcp的透传ip
[root@Nginx nginx-1.24.0]# make && make install
下载1.24版本的

下载c语言的编译器:

下载负载的软件包:
最后效果:makefile配置文件(make规则)

 将make文件与c语言合成,最后生成nginx文件

下载文件到/usr/local/ngnix/sbin
查看内存:
删除nginx
关闭debug功能
下载最小内存的nginx:
编辑
访问:
升级稳定版本1.26:
有时候我们需要对 Nginx 版本进行升级以满足对其功能的需求,例如添加新模块,需要新功能,而此时Nginx又在跑着业务无法停掉,这时我们就可能选择平滑升级
  • 将旧Nginx二进制文件换成新Nginx程序文件(注意先备份)
  • master进程发送USR2信号
  • master进程修改pid文件名加上后缀.oldbin,成为nginx.pid.oldbin
  • master进程用新Nginx文件启动新master进程成为旧master的子进程,系统中将有新旧两个Nginx
  • 进程共同提供Web服务,当前新的请求仍然由旧Nginxworker进程进行处理,将新生成的master
  • 程的PID存放至新生成的pid文件nginx.pid
  • 向旧的Nginx服务进程发送WINCH信号,使旧的Nginx worker进程平滑停止
  • 向旧master进程发送QUIT信号,关闭老master,并删除Nginx.pid.oldbin文件
  • 如果发现升级有问题,可以回滚∶向老master发送HUP,向新master发送QUIT

更改nginx名字变量:

平滑升级和回滚
准备环境:
重新make install进行下载
[root@node1 nginx-1.24.0]# cd /usr/local/nginx/
[root@node1 nginx]# ls
conf  html  logs  sbin
[root@node1 nginx]# cd sbin/
[root@node1 sbin]# ls
nginx
[root@node1 sbin]# nginx 
[root@node1 sbin]# curl -I 172.25.254.100
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Sat, 17 Aug 2024 12:25:34 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Sat, 17 Aug 2024 12:24:43 GMT
Connection: keep-alive
ETag: "66c0968b-267"
Accept-Ranges: bytes[root@node1 sbin]# cp nginx nginx.old
[root@node1 sbin]# ls
nginx  nginx.old
[root@node1 sbin]# \cp -f /root/nginx-1.26.1/objs/nginx /usr/local/nginx/sbin/
[root@node1 sbin]# date
Sat Aug 17 08:29:10 PM CST 2024
[root@node1 sbin]# date
Sat Aug 17 08:29:13 PM CST 2024
[root@node1 sbin]# ll
total 7216
-rwxr-xr-x 1 root root 6150176 Aug 17 20:29 nginx
-rwxr-xr-x 1 root root 1235800 Aug 17 20:26 nginx.old
[root@node1 sbin]# ps aux | grep nginx
root       19471  0.0  0.0   9860   928 ?        Ss   20:25   0:00 nginx: master process nginx
nginx      19472  0.0  0.1  13756  5472 ?        S    20:25   0:00 nginx: worker process
root       19531  0.0  0.0 221664  2356 pts/1    S+   20:30   0:00 grep --color=autonginx
[root@node1 sbin]# pidof nginx
19472 19471
[root@node1 sbin]# kill -USR2 19471
[root@node1 sbin]# ps aux | grep nginx
root       19471  0.0  0.0   9860  2552 ?        Ss   20:25   0:00 nginx: master process nginx
nginx      19472  0.0  0.1  13756  5472 ?        S    20:25   0:00 nginx: worker process
root       19537  0.0  0.1   9760  5964 ?        S    20:31   0:00 nginx: master process nginx
nginx      19538  0.0  0.1  13788  4924 ?        S    20:31   0:00 nginx: worker process
root       19540  0.0  0.0 221664  2372 pts/1    S+   20:31   0:00 grep --color=autonginx
[root@node1 sbin]# kill -WINCH 19471
[root@node1 sbin]# ps aux | grep nginx
root       19471  0.0  0.0   9860  2552 ?        Ss   20:25   0:00 nginx: master process nginx
root       19537  0.0  0.1   9760  5964 ?        S    20:31   0:00 nginx: master process nginx
nginx      19538  0.0  0.1  13788  4924 ?        S    20:31   0:00 nginx: worker process
root       19542  0.0  0.0 221664  2372 pts/1    S+   20:33   0:00 grep --color=autonginx
[root@node1 sbin]# curl -I 172.25.254.100
HTTP/1.1 200 OK
Server: nginx/1.26.1
Date: Sat, 17 Aug 2024 12:34:27 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Sat, 17 Aug 2024 12:24:43 GMT
Connection: keep-alive
ETag: "66c0968b-267"
Accept-Ranges: bytes[root@node1 sbin]# kill -HUP 19471
[root@node1 sbin]# curl -I 172.25.254.100
HTTP/1.1 200 OK
Server: nginx/1.26.1
Date: Sat, 17 Aug 2024 12:35:15 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Sat, 17 Aug 2024 12:24:43 GMT
Connection: keep-alive
ETag: "66c0968b-267"
Accept-Ranges: bytes[root@node1 sbin]# ps aux | grep nginx
root       19471  0.0  0.0   9860  2552 ?        Ss   20:25   0:00 nginx: master process nginx
root       19537  0.0  0.1   9760  5964 ?        S    20:31   0:00 nginx: master process nginx
nginx      19538  0.0  0.1  13788  4924 ?        S    20:31   0:00 nginx: worker process
nginx      19544  0.0  0.1  13756  4872 ?        S    20:35   0:00 nginx: worker process
root       19547  0.0  0.0 221664  2372 pts/1    S+   20:35   0:00 grep --color=autonginx
[root@node1 sbin]# kill -WINCH 19544
[root@node1 sbin]# ps aux | grep nginx
root       19471  0.0  0.0   9860  2552 ?        Ss   20:25   0:00 nginx: master process nginx
root       19537  0.0  0.1   9760  5964 ?        S    20:31   0:00 nginx: master process nginx
nginx      19538  0.0  0.1  13788  4924 ?        S    20:31   0:00 nginx: worker process
nginx      19549  0.0  0.1  13756  4872 ?        S    20:36   0:00 nginx: worker process
root       19551  0.0  0.0 221664  2372 pts/1    S+   20:36   0:00 grep --color=autonginx
[root@node1 sbin]# curl -I 172.25.254.100
HTTP/1.1 200 OK
Server: nginx/1.26.1
Date: Sat, 17 Aug 2024 12:36:29 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Sat, 17 Aug 2024 12:24:43 GMT
Connection: keep-alive
ETag: "66c0968b-267"
Accept-Ranges: bytes[root@node1 sbin]# 
[root@node1 sbin]# 
[root@node1 sbin]# kill -WINCH 19537
[root@node1 sbin]# curl -I 172.25.254.100
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Sat, 17 Aug 2024 12:37:19 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Sat, 17 Aug 2024 12:24:43 GMT
Connection: keep-alive
ETag: "66c0968b-267"
Accept-Ranges: bytes[root@node1 sbin]# ps aux | grep nginx
root       19471  0.0  0.0   9860  2552 ?        Ss   20:25   0:00 nginx: master process nginx
root       19537  0.0  0.1   9760  6524 ?        S    20:31   0:00 nginx: master process nginx
nginx      19549  0.0  0.1  13756  5472 ?        S    20:36   0:00 nginx: worker process
root       19556  0.0  0.0 221664  2376 pts/1    S+   20:37   0:00 grep --color=autonginx
[root@node1 sbin]# LS
bash: LS: command not found...
Similar command is: 'ls'
[root@node1 sbin]# ls
nginx  nginx.old
[root@node1 sbin]# cp nginx nginx.new
[root@node1 sbin]# \cp -f nginx.old nginx
[root@node1 sbin]# ls
nginx  nginx.new  nginx.old
[root@node1 sbin]# ps aux | grep nginx
root       19471  0.0  0.0   9860  2552 ?        Ss   20:25   0:00 nginx: master process nginx
root       19537  0.0  0.1   9760  6524 ?        S    20:31   0:00 nginx: master process nginx
nginx      19549  0.0  0.1  13756  5472 ?        S    20:36   0:00 nginx: worker process
root       19579  0.0  0.0 221664  2360 pts/1    S+   20:39   0:00 grep --color=autonginx
[root@node1 sbin]# kill -9 19537
[root@node1 sbin]# ps aux | grep nginx
root       19471  0.0  0.0   9860  2552 ?        Ss   20:25   0:00 nginx: master process nginx
nginx      19549  0.0  0.1  13756  5472 ?        S    20:36   0:00 nginx: worker process
root       19581  0.0  0.0 221664  2372 pts/1    S+   20:40   0:00 grep --color=autonginx
[root@node1 sbin]# 
复制1.24的版本作为备份
查看进程
查看两个进程的状态
回收旧版本:

 回滚老版本:

 最后回归新版本:

[root@Nginx nginx]# tar zxf nginx-1.26.1.tar.gz
[root@Nginx nginx]# cd nginx-1.26.1/
#开始编译新版本
[root@Nginx nginx-1.26.1]# ./configure --with-http_ssl_module --withhttp_v2_module --with-http_realip_module --with-http_stub_status_module --withhttp_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --
with-stream_realip_module
#只要make无需要make install
[root@Nginx nginx-1.26.1]# make
#查看两个版本
[root@Nginx nginx-1.26.1]# ll objs/nginx /usr/local/nginx/sbin/nginx
-rwxr-xr-x 1 root root 1239416 Jul 18 15:08 objs/nginx
-rwxr-xr-x 1 root root 5671488 Jul 18 11:41 /usr/local/nginx/sbin/nginx
#把之前的旧版的nginx命令备份
[root@Nginx ~]# cd /usr/local/nginx/sbin/
[root@Nginx sbin]# cp nginx nginx.24
#把新版本的nginx命令复制过去
[root@Nginx sbin]# \cp -f /root/nginx/nginx-1.26.1/objs/nginx
/usr/local/nginx/sbin
#检测一下有没有问题
[root@Nginx sbin]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@Nginx sbin]# kill -USR2 48732 #nginx worker ID
#USR2 平滑升级可执行程序,将存储有旧版本主进程PID的文件重命名为nginx.pid.oldbin,并启动新的
nginx
#此时两个master的进程都在运行,只是旧的master不在监听,由新的master监听80
#此时Nginx开启一个新的master进程,这个master进程会生成新的worker进程,这就是升级后的Nginx进
程,此时老的进程不会自动退出,但是当接收到新的请求不作处理而是交给新的进程处理。
[root@Nginx sbin]# ps aux | grep nginx
root 48732 0.0 0.1 9868 2436 ? Ss 14:17 0:00 nginx: master
process /usr/local/nginx/sbin/nginx
nobody 48733 0.0 0.2 14200 4868 ? S 14:17 0:00 nginx: worker
process
root 52075 0.0 0.3 9876 6528 ? S 15:41 0:00 nginx: master
process /usr/local/nginx/sbin/nginx
nobody 52076 0.0 0.2 14208 4868 ? S 15:41 0:00 nginx: worker
process
[root@Nginx sbin]# curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.24.0 ##依旧是旧版本生生效
Date: Thu, 18 Jul 2024 07:45:58 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Thu, 18 Jul 2024 03:41:13 GMT
Connection: keep-alive
ETag: "66988ed9-267"
Accept-Ranges: bytes
#回收旧版本
[root@Nginx sbin]# kill -WINCH 48732
[root@Nginx sbin]# ps aux | grep nginx
root 48732 0.0 0.1 9868 2436 ? Ss 14:17 0:00 nginx: master
process /usr/local/nginx/sbin/nginx
root 52075 0.0 0.3 9876 6528 ? S 15:41 0:00 nginx: master
process /usr/local/nginx/sbin/nginx
nobody 52076 0.0 0.2 14208 4868 ? S 15:41 0:00 nginx: worker
process
#检测版本信息
[root@Nginx sbin]# curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.26.1 #新版本生效
Date: Thu, 18 Jul 2024 07:59:45 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Thu, 18 Jul 2024 03:41:13 GMT
Connection: keep-alive
ETag: "66988ed9-267"
Accept-Ranges: bytes
#回滚
#如果升级的版本发现问题需要回滚,可以重新拉起旧版本的worker
[root@Nginx sbin]# cp nginx nginx.26
[root@Nginx sbin]# ls
nginx nginx.24 nginx.26
[root@Nginx sbin]# mv nginx.24 nginx
mv: overwrite 'nginx'? y
[root@Nginx sbin]# kill -HUP 48732
[root@Nginx sbin]# ps aux | grep nginx
root 48732 0.0 0.1 9868 2436 ? Ss 14:17 0:00 nginx: master
process /usr/local/nginx/sbin/nginx
root 52075 0.0 0.3 9876 6528 ? S 15:41 0:00 nginx: master
process /usr/local/nginx/sbin/nginx
nobody 52076 0.0 0.2 14208 5124 ? S 15:41 0:00 nginx: worker
process
nobody 52130 0.0 0.2 14200 4868 ? S 16:30 0:00 nginx: worker
process
[root@Nginx sbin]# kill -WINCH 52075
[root@Nginx sbin]# ps aux | grep nginx
root 48732 0.0 0.1 9868 2436 ? Ss 14:17 0:00 nginx: master
process /usr/local/nginx/sbin/nginx
root 52075 0.0 0.3 9876 6528 ? S 15:41 0:00 nginx: master
process /usr/local/nginx/sbin/nginx
nobody 52130 0.0 0.2 14200 4868 ? S 16:30 0:00 nginx: worker
process
root 52137 0.0 0.1 221664 2176 pts/0 S+ 16:31 0:00 grep --
color=auto nginx
[root@Nginx sbin]# curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.24.0 ##版本回滚完成
Date: Thu, 18 Jul 2024 08:31:51 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Thu, 18 Jul 2024 03:41:13 GMT
Connection: keep-alive
ETag: "66988ed9-267"
Accept-Ranges: bytes

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/404046.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【word】修改图名/表名/公式编号后快速更新交叉引用的内容;交叉引用的字体不跟随正文如何解决

本文解决两个问题,不是什么特别正规的方法,主打一个迅速且通用。 问题描述 修改图名/表名/方程编号后快速更新交叉引用的内容 假设我们现在word文档中某处用了交叉引用。显然,图 1两个字颜色更深,就是我交叉引用的地方。 由于某…

贝莱德与摩根大通的最新季度持仓分析

近期,华尔街的两大投资巨头贝莱德和摩根大通公布了其2024年第二季度的13F报告,揭示了他们在投资组合上的最新动向。通过分析这些持仓数据,我们可以更清楚地了解这些顶级投资机构的投资策略和市场偏好。 贝莱德的科技巨头与能源投资 根据贝莱…

SpringBoot教程(二十二) | SpringBoot实现分布式定时任务之elastic-job

SpringBoot教程(二十二) | SpringBoot实现分布式定时任务之elastic-job 简介前置条件:需要ZooKeeper配合1、引入相关依赖2、application.yml中配置注册中心和作业调度巨坑(配置修改无效)3、job实例4、ElasticJob-UI监控…

网络编程-网络基础

IO进程: 进程和进程之间的通信 - 信号 信号量 消息队列 有名管道 无名管道 共享内存 套接字 套接字: 不同主机 不同操作系统之间的 进程通信 干什么: 实现无线 局域网:同一局域网下IP网段一致 IP地址 1) IP地址 是 网络中的 主机的标识, 本质是二进制数字。 2…

37_DC-5靶机渗透测试、nmap使用、kail漏洞库使用、系统提权、反弹shell到kali、留后门、蚁剑连接webshell、文件包含漏洞利用、NC用法

环境准备 靶机下载地址:https://www.vulnhub.com/entry/dc-5,314/ 百度网盘:https://pan.baidu.com/s/1lqFMjoqQpIl4DA-Amb00pA?pwd9LJY 攻击机:kali(192.168.58.130,IP是各自不同的) 靶机&#xff1…

SystemUI手势操作隐藏显示导航栏

在Android 12中,通过SystemUI手势操作来隐藏和显示导航栏主要涉及对系统UI的定制和编程控制。以下是一些实现这一功能的方法: 默认是隐藏 向上滑动 第一类. 使用WindowInsetsController Android 12引入了一个新的WindowInsetsController类,它…

【数据分享】1999—2022年地级市地区生产总值及一二三产构成数据(Shp/Excel格式)

在之前的文章中,我们分享过基于2000-2023年《中国城市统计年鉴》整理的1999-2022年地级市的人口相关数据、各类用地面积数据、污染物排放和环境治理相关数据、房地产投资情况和商品房销售面积、社会消费品零售总额和年末金融机构存贷款余额、一般公共预算收支状况、…

bootchart抓Android系统启动各阶段性能数据

最近在做Android系统启动优化,首要任务是找到启动过程中各阶段耗时点,进而有针对性地进行优化。主要用bootchart抓开机数据,本文主要记录下工具的使用方法。 1.抓开机数据 adb root adb shell ‘touch /data/bootchart/enabled’ adb rebo…

STM32标准库学习笔记-6.定时器-输入捕获

参考教程:【STM32入门教程-2023版 细致讲解 中文字幕】 定时器输入捕获 IC(Input Capture)输入捕获输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率…

8.14-LVS主从+nginx的haproxy+mysql的haproxy+读写分离

一、LVS-主从数据库 # nat # 添加规则 [rootDS ~]# ipvsadm -A -t 192.168.2.130:3306 -s rr [rootDS ~]# ipvsadm -a -t 192.168.2.130:3306 -r 192.168.2.40:3306 -m [rootDS ~]# ipvsadm -a -t 192.168.2.130:3306 -r 192.168.2.42:3310 -m [rootDS ~]# ipvsadm -Ln IP Vir…

计算机毕业设计选什么题目好? springboot 大学志愿填报系统

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

ffmpeg的基础命令

文章目录 ffmpeg/ffplay/ffprobe区别ffmpeg 的作用ffplay的作用ffprobe的作用 ffmpeg使用概述功能概述转码过程简单使用FFMPEG -i常用的 -i例子 ff***工具之间共享的选项ffmpeg主要选项ffmpeg提取音视频数据ffmpeg命令修改原有的视频格式ffmpeg命令裁剪和合并视频拼接视频的方式…

数据结构—— 初识二叉树

1.树概念及结构 1.1树的概念 树是由根和子树构成 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的 1. 树有…

20240819 每日AI必读资讯

📚AI爆料人遭全网封禁!OpenAI等25个机构祭大招,一眼辨别AI机器人 - 最近半个月,全网被OpenAI的「AI爆料人」「草莓哥」iruletheworldmo愚弄。所有人没有等他预测的GPT-4o large模型,反被AI初创MultiOn创始人揭穿身份—…

Git安装包及怎么再windows上运行

第一步:下载git。 国内 Git for Windows. 国内镜像 感谢GitHub - waylau/git-for-win: Git for Windows. 国内直接从官网下载比较困难,需要翻墙。这里提供一个国内的下载站,方便网友下载 安装步骤: Git for Windows安装和基本…

【C语言可变参数函数的使用与原理分析】

文章目录 1 前言2 实例2.1实例程序2.2程序执行结果2.3 程序分析 3 补充4 总结 1 前言 在编程过程中,有时会遇到需要定义参数数量不固定的函数的情况。 C语言提供了一种灵活的解决方案:变参函数。这种函数能够根据实际调用时的需求,接受任意…

ansible相关模块

copy模块(重点) copy模块⽤于对⽂件的远程拷⻉操作(如把本地的⽂件拷⻉到远程 的机器上) https://docs.ansible.com/ansible/latest/modules/copy_module.htm l#copy-module 在master上准备⼀个⽂件,拷⻉此⽂件到group1的所有机器上 使⽤content参数直…

zabbix-配置监控远程主机

1.在被监控主机上配置zabbix-agent 1.获取zabbix官方源 rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm# 替换阿里源,这一步很重要 sed -i s#http://repo.zabbix.com#https://mirrors.aliyun.com/zabb…

微服务架构设计中的常见的10种设计模式

微服务架构设计的概念 微服务架构(Microservices Architecture)是一种用于构建分布式系统的软件设计模式。它将大型应用程序拆分成一组小型、自治的服务,每个服务都运行在其独立的进程中,服务之间通过轻量级的通信机制&#xff08…

clickhouse集群+Zk优化-解决只读模式,主节点磁盘增长快

问题1:数据库进入只读模式 最近在项目中使用clickhouse的时候,遇到了一个批量插入后报错的问题。报错的内容是数据库进入了只读模式,导致数据写不进去。发现有大量的批量写入报错日志信息。(关键异常信息:DB::Exceptio…