- 构建SpringBoot项目(nginx-slb : https://gitee.com/liamgmy/nginx-slb)
- 项目动态变量配置文件(ArticleConfiguration)
package club.limeyu.ngixnslb.conf; import lombok.Getter; import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * @Author liangmy * @Description: * @Create: 2021/1/22 下午1:19 */ @Getter @Setter @Component @ConfigurationProperties(prefix = "article") public class ArticleConfiguration { private String whoIam; } - 项目动态变量配置文件(application.properties)
server.port=8080 article.who-iam=I am Coke - 识别服务接口(HelloController)
package club.limeyu.ngixnslb.controller; import club.limeyu.ngixnslb.conf.ArticleConfiguration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @Author liangmy * @Description: * @Create: 2021/1/22 下午1:16 */ @RestController @RequestMapping(value = "/hello") public class HelloController { @Autowired private ArticleConfiguration articleConfiguration; @GetMapping(value = "/whoIam") public String whoIam() { return articleConfiguration.getWhoIam(); } } - 测试项目
- 项目动态变量配置文件(ArticleConfiguration)
- 推送nginx-slb项目到git远程仓库
- 服务器环境配置
- 克隆nginx-slb项目到服务器
[www@10-255-20-89 ~]$ cd /home/www/src [www@10-255-20-89 src]$ git clone git@gitee.com:liamgmy/nginx-slb.git - 配置线上环境 - 主服务 - 配置文件(application.properties)
[www@10-255-20-89 ~]$ cd /home/www/deploy_files/slbA [www@10-255-20-89 slbA]$ vim application.properties server.port=8080 server.context-path=/nginx/slb article.who-iam=I am Coke - 配置线上环境 - 副服务 - 配置文件(application.properties)
[www@10-255-20-89 ~]$ cd /home/www/deploy_files/slbB [www@10-255-20-89 slbB]$ vim application.properties server.port=8081 server.context-path=/nginx/slb article.who-iam=I am Flower - 配置线上环境 - 主服务 - 部署脚本
[www@10-255-20-89 ~]$ cd /home/www/script [www@10-255-20-89 script]$ vim deploy_slbA #!/bin/bash DEPLOY_DIR=/home/www/jars/slbA SRC_DIR=/home/www/src/nginx-slb PROPERTIES_FILE_DIR=/home/www/deploy_files SLB_RES_DIR=src/main/resources SLB_JAR=nginx-slb-1.0.0.jar JARS=($SLB_JAR) cd $SRC_DIR git reset --hard git pull printf "pull code from git complete ....................\n" git log -1 cp -fv $PROPERTIES_FILE_DIR/slbA/* $SLB_RES_DIR mvn clean package -Dmaven.test.skip=true cp -av target/$SLB_JAR $DEPLOY_DIR/ printf "copy jars complete ....................\n" cd $DEPLOY_DIR port=8080 while(($port<=8080)) do netstat -tlnp | awk -F '[ :/]' '$1=="tcp"&&$17=="'${port}'" {print $51}' | xargs kill -9 printf "kill %s process complete....................\n" ${port} let "port++" done for jar in ${JARS[@]} do nohup java -Duser.language=en -Duser.country=DE -jar $jar & done - 配置线上环境 - 副服务 - 部署脚本
[www@10-255-20-89 ~]$ cd /home/www/script [www@10-255-20-89 script]$ vim deploy_slbB #!/bin/bash DEPLOY_DIR=/home/www/jars/slbB SRC_DIR=/home/www/src/nginx-slb PROPERTIES_FILE_DIR=/home/www/deploy_files SLB_RES_DIR=src/main/resources SLB_JAR=nginx-slb-1.0.0.jar JARS=($SLB_JAR) cd $SRC_DIR git reset --hard git pull printf "pull code from git complete ....................\n" git log -1 cp -fv $PROPERTIES_FILE_DIR/slbB/* $SLB_RES_DIR mvn clean package -Dmaven.test.skip=true cp -av target/$SLB_JAR $DEPLOY_DIR/ printf "copy jars complete ....................\n" cd $DEPLOY_DIR port=8081 while(($port<=8081)) do netstat -tlnp | awk -F '[ :/]' '$1=="tcp"&&$17=="'${port}'" {print $51}' | xargs kill -9 printf "kill %s process complete....................\n" ${port} let "port++" done for jar in ${JARS[@]} do nohup java -Duser.language=en -Duser.country=DE -jar $jar & done - 配置线上环境 - 日志
[www@10-255-20-89 ~]$ cd /home/www/deploy_files/slbA [www@10-255-20-89 slbA] vim logback.xml [www@10-255-20-89 ~]$ cd /home/www/deploy_files/slbB [www@10-255-20-89 slbB] vim logback.xml <configuration> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/home/www/log/das/nginx-slb.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/home/www/log/das/nginx-slb-%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>90</maxHistory> </rollingPolicy> <encoder> <pattern> %red(%d{HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{5}) - %cyan(%msg%n)</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="FILE"/> </root> </configuration>
- 克隆nginx-slb项目到服务器
- 配置Nginx负载均衡
www@10-255-20-89 ~]$ sudo vim /etc/nginx/nginx.conf user www; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 3000; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; charset utf-8; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; # 启用OCSP订书机功能 ssl_stapling on; ssl_stapling_verify on; server { server_name nginxslb.autox3.cn; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; #后端平台管理系统接口 location ^~ /nginx/slb/ { proxy_pass http://127.0.0.1:8080/nginx/slb/; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/nginxslb.autox3.cn/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/nginxslb.autox3.cn/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = nginxslb.autox3.cn) { return 301 https://$host$request_uri; } # managed by Certbot server_name nginxslb.autox3.cn; listen 80; return 404; # managed by Certbot } }- 轮询
- 默认轮询
upstream OrdinaryPolling { server 127.0.0.1:8080; server 127.0.0.1:8081; } server { server_name nginxslb.autox3.cn; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; #后端平台管理系统接口 location ^~ /nginx/slb/ { # proxy_pass http://127.0.0.1:8080/nginx/slb/; proxy_pass http://OrdinaryPolling } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/nginxslb.autox3.cn/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/nginxslb.autox3.cn/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } - 权重轮询
upstream WeightPolling { server 127.0.0.1:8080 weight=2; server 127.0.0.1:8081 weight=1; } server { server_name nginxslb.autox3.cn; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; #后端平台管理系统接口 location ^~ /nginx/slb/ { # proxy_pass http://127.0.0.1:8080/nginx/slb/; proxy_pass http://WeightPolling; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/nginxslb.autox3.cn/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/nginxslb.autox3.cn/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot }
- 默认轮询
- hash
- ip_hash
upstream IpHashPolling { server 127.0.0.1:8080; server 127.0.0.1:8081; ip_hash; } server { server_name nginxslb.autox3.cn; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; #后端平台管理系统接口 location ^~ /nginx/slb/ { # proxy_pass http://127.0.0.1:8080/nginx/slb/; proxy_pass http://IpHashPolling; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/nginxslb.autox3.cn/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/nginxslb.autox3.cn/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } - url_hash
- ip_hash
- fair
- least_conn
- 其他
- 轮询
- upstream
- 语法
upstream upstream_name { server ip:port; server ip:port weight=2; server ip:port max_fails=3 fail_timeout=30s; server ip:port down; server ip:port backup; keepalive 32; } sever{ location match_regulation { proxy_pass http://upstream_name; } }
- 语法
- 定时任务
- 通过Redis做分布式锁,控制集群中定时任务多次执行
- 定时任务在集群中只启动一个
- JVM中的缓存替换为Redis缓存,避免主服务器宕机时JVM中的数据丢失。
- 啦啦啦
相关推荐
133.Nginx(二):nginx的三种安装方式,启停命令,不停机升级
nginx的三种安装方式,启停命令,不停机升级
SpringBoot项目–如何不停服更新应用?
在生产环境中,一般都会每个服务部署多个实例。只要多于1个实例,就可以不停服更新应用。:把要停机的那个应用的请求完全切断,将所有请求切到其他机器,停机的那个启动起来之后再允许请求。本文假设解决此问题:微服务user有两个实例:user1和user2,需要在保证user服务不中断的情况下更新user服务。
ArcMap学习笔记(三)地图数字化
地图数字化前言地图数字化实现步骤1.加载地形图2.新建要素图层3.开启编辑环境4.设置捕捉环境5.选择数字化图层6.数字化控制点7.数字化等高线8.数字化图幅边框9.保存数字化成果总结 前言 使用软件:ArcMap10.4.1中文版 如果出现侵权,请在评论留言,我会及时删除,谢谢。 地图数字化 空间数据采集(输入)是将现有的地图、外业观测成果、航空像片、遥感图片数据、文本资料等转换成GIS可以直接...
SpringBoot项目--如何不停服更新应用?
本文介绍Java后端项目如何不停机更新服务。
uniapp监听扫码枪键盘事件|无输入框式监听
一般的扫码枪通过USB或蓝牙连接手机或电脑,充当的是一个外接设备。当扫码后,扫码枪会自动识别内容,然后向连接的电脑或手机发送键盘事件keydown或keyup。
POI 写word,添加标题,表格,图片,自动生成目录,合并单元格
工程地址:https://github.com/zheng-chang-wei/word package com.example.demo1.poi; import org.apache.poi.xwpf.usermodel.XWPFDocument; import java.io.File; import java.io.FileOutputStream; public class ...
Linux部署jar包脚本 实现 不停机 一键部署
本文介绍了一种基于Docker和Nginx的Java应用不停机部署方案。通过双端口策略和动态流量切换,实现零停机更新。方案包含构建Docker镜像、启动新实例、健康检查、流量切换和旧实例优雅退出等关键步骤,并提供完整的Shell脚本实现。该方案支持一键回滚,适用于SpringBoot等微服务应用,能有效解决传统部署方式停机时间长、操作风险高的问题。脚本通过端口监听检测和HTTP探针确保新实例可用性,并预留足够时间处理存量请求。文章还建议结合CI/CD工具实现自动化部署流程。
激光雷达+相机标定避坑指南:手把手教你用KITTI数据完成坐标转换
本文详细介绍了激光雷达与相机标定的实战指南,利用KITTI数据集完成精准坐标转换。从数据准备、工具链搭建到标定矩阵加载与验证,再到坐标转换流水线的工程实现,提供了全面的避坑技巧和工程实践建议。特别强调了多传感器融合中的常见问题及解决方案,帮助开发者提升自动驾驶和机器人感知系统的环境感知精度。
Gemma-3-12B-IT WebUI保姆级教学:模型热更新与不停机版本升级流程
本文介绍了如何在星图GPU平台上自动化部署gemma-3-12b-it高性能开源大语言模型(LLM)WebUI镜像,并实现模型的热更新与不停机升级。该镜像可用于构建零中断的AI对话服务,典型应用场景包括为用户提供持续、流畅的代码调试、学习讨论与创意写作辅助。
CMU的local_planner学习笔记
ros::Subscriber subOdometry = nh.subscribe//当接收到/state_estimation话题消息更新时启动odometryHandler回调函数 (消息格式:nav_msgs::Odometry消息内容:关于机器人或车辆的位置和方向(姿态)信息)pcl::PointCloud::Ptr freePaths(new pcl::PointCloud());
UGUI合批杀手:Mask/RectMask2D为何必断合批?
颜色缓冲负责记录像素颜色;模板缓冲负责记录“这个像素的模板值”(一个小整数);渲染时,你可以设定:只有模板值为 X 的地方才允许画;或者往某些区域写特定的模板值。类似于:先拿一支隐形笔在纸上画出一块区域,给它记一个编号“1”,后面的涂色动作只允许涂在“编号为1”的区域上。合批的前提:渲染状态不变,连续元素能一口气画完。材质、贴图、混合模式、Stencil、裁剪区域……都得一致。Mask / RectMask2D 的本质:在渲染状态上加规则——“只在某个区域内允许写像素”。
Windows下Nginx负载均衡+Tomcat原生集群实现Session共享配置
实施目的 在生产环境中实现不停机部署 实施思路 一.Tomcat原生集群实现不借助第三方工具实现多节点Session共享 二.Nginx配置负载均衡实现某一或多节点停机不影响访问 三.Nginx反向代理Tomcat集群实现80端口访问 Tomcat部分 如果是在同一台机器上,需要保证每个Tomcat的端口(一个Tomcat对应三个端口)不相同 如果是在同一台机器上,
Python爬虫技术应用:体育赛事直播数据抓取与分析
Web爬虫(Web Crawling)是一种通过模拟浏览器行为从网站获取数据的技术。发送请求:发送HTTP请求(通常是GET或POST请求)获取目标网页的HTML内容。解析网页:使用解析工具(如lxml)从HTML中提取出所需要的信息。存储数据:将抓取到的数据存储到数据库、文件或数据结构中,供后续分析和使用。数据分析与展示:使用数据分析工具(如PandasMatplotlib)对数据进行处理、清洗和可视化,生成有价值的报告和图表。Requests:用于发送静态网页的HTTP请求并获取响应。
Nginx+Tomcat 负载均衡实现session共享
本次测试采用的是轮询的方式,weight=1是分配权重,数字越高权重越大,被访问的几率越大,max_fails=1是最大失败次数,超过设置的次数,Nginx会自动标记该服务器为down状态,下次不再访问,fail_timeout=10s是失败超时时间秒数。2.修改每个Tomcat的conf/server.xml下的3个端口,避免端口冲突,我这里设置的是每个节点端口号递增1,如果不是单节点不用配置。#原端口8080,8081设置为8081,8082设置为8082。
基于ESP32 蓝牙游戏手柄设计
介绍使用 ESP32 并通过 BLE 通信的 设计手持游戏手柄,包含原理图与代码
锂电池充电器电路设计 里面有电路
锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。
不停机条件下部署 Django 应用
当我们上线新的服务应用时,经常不得不重启Web服务器以完成部署。但这会对用户造成一定影响,特别是服务器处于繁忙状态时,问题更严重。本文中,作者将针对这一问题,讲述其如何在不停机条件下部署Django应用。 当我的网站 healthchecks.io 每秒接收的请求次数超过一次之后,我就非常清楚地认识到我不能再像以前那样部署代码之后随意重启 web 服务器了。作为一个监控服务,哪怕是...
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
五、nginx负载均衡部署多应用
2019独角兽企业重金招聘Python工程师标准>>> ...
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
小体量Java项目不停机更新方案
最近系统的用户越来越多了,哪怕在深夜升级超过10分钟宕机也会接到好多个电话,但是项目体量又不大,没有专业运维来支撑,和同事讨论了两个可行的方案并且做了一个小对比,特此记录。
Nginx不停机升级
nginx生产环境升级
nginx实现不停机更新
最近在项目测试阶段遇到一个问题,在修改BUG后,更新代码后要经常性的重启服务器,后来发现NIGNX有这个功能,实现不停机更新。 总结了一下大概需要4步。 第一步:需要安装NIGNX,安装后的目录如下。 第二步:项目打jar包,这里需要注意的是你的端口不能与外部访问的端口一致,不然会导致端口冲突。 第三步:我们需要创建一个文件夹来存放我们刚才项目打的jar
Nginx如何优雅的实现负载均衡!(建议收藏)
比如我有3个服务器,分别为A、B、C,然后使用Nginx进行负载均衡,使用轮询策略,此时如果收到了9个请求,那么会均匀的将这9个请求分发给A、B、Cf服务器,每一个服务器处理3个请求,这样的话我们可以利用多台机器集群的特性减少单个服务器的压力。,硬件负载均衡是使用专门的软件和硬件相结合的设备,设备商会提供完整成熟的解决方案,比如F5,在数据的稳定性以及安全性来说非常可靠,但是相比软件而言造价会更加昂贵;如果指定了两个参数,首先,NGINX根据服务器权重随机选择两个服务器,然后使用指定的方法选择其中一个。
零停机部署 / 平滑升级
多实例 + Nginx upstream是最简单的平滑升级方案。通过weight 或注释掉旧版本可以逐步切换流量。reload 配置无需停机,用户几乎感知不到。配合健康检查和 session 保持,可实现生产级零停机部署。
【CI/CD】几种常见的不停机发布方式
何为不停机发布?本文所说的不停机发布,是指在不停止对外服务的前提下完成应用的更新。与热部署的区别在于,热部署关注于应用层面并且以不重启应用为前提,而不停机发布则关注于服务层面。随着摩尔定律逐渐逼近极限和多核时代的到来,分布式应用已经成为事实上的主流。下文首先给出一种通用的适用于分布式应用环境的不停机发布方式,然后再介绍Master/Worker这种常见的适用于单机应用的不停机发布方式。Cluster
Nginx实现动态负载均衡
为什么用nginx nginx是经过实践证明的、安全稳定的反向代理服务器,淘宝、新浪等大型互联网公司都有nginx的身影。nginx经过线上各种网络环境验证,能够帮你隔离各种复杂的网络环境,轻松支持10000+的同时在线连接数,同时拥有多种成熟的负载均衡策略,能够方便横向拓展后端服务。今天我们说一说nginx负载均衡策略。 nginx有以下几种负载均衡策略 1、基于轮询方式 轮询是最基本的配...
如何利用Nginx实现动态负载均衡
为什么用Nginx Nginx是经过实践证明的、安全稳定的反向代理服务器,淘宝、新浪等大型互联网公司都有Nginx的身影。Nginx经过线上各种网络环境验证,能够帮你隔离各种复杂的网络环境,轻松支持10000+的同时在线连接数,同时拥有多种成熟的负载均衡策略,能够方便横向拓展后端服务。今天我们说一说Nginx负载均衡策略。 Nginx有以下几种负载均衡策略 1、基于轮询方式 轮询是最基本的配置方法,它是upstream模块默认的负载均衡默认策略。每个请求会按时间顺序逐一分配到不同的后端服务器。 2
Nginx一篇足够
nginx网站 tengine网站 tengine是淘宝在nginx的基础上针对大量网站的需求,添加了很多高级功能和特性,目的是打造一个高效,稳定,安全,易用的web平台。 1.nginx介绍
503



被折叠的 条评论
为什么被折叠?



