【nginx】nginx:利用负载均衡原理实现代码的热部署和灰度发布
事情起因很简单,代码的改动量很大。而且刚接手服务器,对原有的代码进行了一定程度的重构。虽然在测试服务器上做了较多的测试工作,但是直接将代码送入生产环境还是不放心,万一配置出问题服务直接崩溃怎么解?万一遇到没有测出来的bug怎么解?so······
nginx负载均衡简介 :
负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
以上是某科的解释,说的简单些就是一件事,按照一定的规则分配给拥有相同配置的机器去完成
服务器的架构:
因为我们生产环境服务器只有一台,所以是在一台机器内完成的。
图片已经把意思说的很明白的,接下来就是do it
Step1:配置nginx的负载均衡
修改nginx的配置文件(我的目录是/etc/nginx/nginx.conf),在http模块中添加:
# 负载均衡配置
upstream balance {
# 开启ip_hash保证同一个用户访问到同一台服务器
ip_hash;
# 老服务器运行在11000+端口
server 127.0.0.1:11001 weight=1;
# 新服务器运行在12000+端口
server 127.0.0.1:12001 weight=1;
}
# 作为负载均衡的虚拟服务器
server {
listen 10001;
location / {
proxy_pass http://balance;
proxy_set_header X-Real-IP $remote_addr;
}
access_log /data/logs/nginx.balance.access.log;
error_log /data/logs/nginx.balance.error.log;
}
配置的字段是什么意思,找某度喽···
当然因为有include,可以把这段代码单独拿出来,减少对nginx配置文件的侵入(我放在/etc/nginx/conf.d/nginx_balance.conf)里面
Step2:新代码部署+启动
我是用supervisor管理进程的,用uwsgi启动代码,下面把相关的配置都放出来了
首先要让老代码运行到11001端口:
server {
listen 11001;
location / {
add_header Access-Control-Allow-Origin *;
root /data/www/app/;
include uwsgi_params;
uwsgi_pass 127.0.0.1:30000;
uwsgi_read_timeout 360;
}
location ~/media/{
root /data/static/;
}
location = /favicon.ico {
log_not_found off;
}
access_log /data/logs/nginx.qianming.access.log;
error_log /data/logs/nginx.qianming.error.log;
}
其次是新代码的nginx配置,运行在12001端口:
server {
listen 12001;
location / {
add_header Access-Control-Allow-Origin *;
root /data/www_new/app/;
include uwsgi_params;
uwsgi_pass 127.0.0.1:31000;
uwsgi_read_timeout 360;
}
location ~/media/{
root /data/static/;
}
location = /favicon.ico {
log_not_found off;
}
access_log /data/logs/nginx.qianming.access.log;
error_log /data/logs/nginx.qianming.error.log;
}
接下来是supervisor的配置:
; 需要将此配置文件软引用到supervisor的配置文件,默认路径:/etc/supervisor/
; 使用supervisor来管理进程,做到自动启动
[program:qianming_old]
directory=/data/www_new/app
command=uwsgi --ini confs/uwsgi.ini
autostart=true
最后是uwsgi的配置:
[uwsgi]
socket = 127.0.0.1:31000
chdir = /data/www_new/app/
wsgi-file = project/wsgi.py
processes = 1
threads = 4
chmod-socket = 664
chown-socket = www:www-data
当然要让配置生效,这里不展开讲了
nginx -t测试通过以后直接可以nginx -s reload加载nginx新的配置,新的代码在supervisor里卖直接启动就可以了,这样旧代码运行在11001端口,新代码运行在12001端口,而访问原先的10001端口会根据自定的规则决定返回11001端口或者12001端口的数据,而这个规则就是通过权重进行配置的,在nginx_balance.conf文件中通过weight配置的。
至此,代码的热部署已经完成。
Step3:测试和灰度发布
要想测试,直接访问12001端口就可以了,因为里面是最新的代码
灰度发布也就是控制weight的值,渐渐增大访问新代码的比例就可以了,直到新代码达到100%,老代码就可以正式宣告退役了^_^
【nginx】nginx:利用负载均衡原理实现代码的热部署和灰度发布的更多相关文章
- Nginx进阶使用-负载均衡原理及配置实例
介绍 跨多个应用程序实例的负载平衡是一种用于优化资源利用率,最大化吞吐量,减少延迟和确保容错配置的常用技术.可以将Nginx用作非常有效的HTTP负载平衡器,以将流量分配到多个应用程序服务器,并使用N ...
- Nginx详解(正向代理、反向代理、负载均衡原理)
Nginx配置详解 nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行 ...
- 搞懂分布式技术9:Nginx负载均衡原理与实践
搞懂分布式技术9:Nginx负载均衡原理与实践 本篇摘自<亿级流量网站架构核心技术>第二章 Nginx负载均衡与反向代理 部分内容. 当我们的应用单实例不能支撑用户请求时,此时就需要扩容, ...
- windows下利用nginx 做IIS负载均衡
如果网站流量变大,就想加服务器分担压力,当然就要用到负载均衡,在windows 2003有自带的网络负载均衡,但配置还是挺麻烦的虽然有轮训和iphash的效果,但效果不算好. nginx小巧,下载不到 ...
- Nginx 负载均衡原理简介与负载均衡配置详解
Nginx负载均衡原理简介与负载均衡配置详解 by:授客 QQ:1033553122 测试环境 nginx-1.10.0 负载均衡原理 客户端向反向代理发送请求,接着反向代理根据某种负载机制 ...
- nginx负载均衡原理
负载均衡在服务端开发中算是一个比较重要的特性.因为Nginx除了作为常规的Web服务器外,还会被大规模的用于反向代理前端,因为Nginx的异步框架可以处理很大的并发请求,把这些并发请求hold住之后就 ...
- nginx系列8:反向代理和负载均衡原理
反向代理是nginx的一个非常重要的功能. 反向代理 nginx支持四层反向代理和七层反向代理,如下图. 负载均衡 负载均衡是实现服务高性能和高可用的重要手段,而nginx是实现负载均衡的重要工具.
- nginx+tomcat实现负载均衡以及双机热备
还记得那些年吗? 还记得更新代码之后,服务器起不来被领导训斥吗?还记得更新代码,需要停机过多的时间被渠道部们埋怨吗?还记得更新代码,代码出错时自己吓个半死吗?于是我们聪明勤快的程序员,看着电影待到夜深 ...
- 如何使用Weave以及Docker搭建Nginx反向代理/负载均衡服务器
Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动 ...
随机推荐
- PHP.50-TP框架商城应用实例-前台2-商品推荐
商品推荐 {抢购,新品,精品,热卖}效果如下 1.在商品表增加促销价格与促销起始时间和结束时间三个字段,字段推荐楼层与排序在后面用到 注意:在增加datetime类型字段时,要添加默认值{datet ...
- Homebrew安装Redis找不到redis.conf文件
使用Homebrew安装redis完成后,使用命令 redis-server 启动redis,如下图所示: 启动信息中存在一条警告信息:没有指定的配置文件 然而在安装目录中并没有发现redis.con ...
- VIO概述 On-Manifold Preintegration for Real-Time Visual--Inertial Odometry
目前的研究方向可以总结为在滤波算法中实现高精度,在优化算法中追求实时性.当加入IMU后,研究方向分为松耦合和紧耦合,松耦合分别单独计算出IMU测量得到的状态和视觉里程计得到的状态然后融合,紧耦合则将I ...
- C++中的引用常见用法
1.引用的内涵 引用就是给变量取外号而已. 2.四种不能使用引用的情况 void &r=x; //不能建立void类型引用 int &&r=x; //不能建立引用的引用 int ...
- 分享一个 UiPath Studio 相关的公众号
RPA 和 UiPath 方面的资料比较少,因此我们自己创建了一个公众号,专门用于传播 UiPath 相关的知识. 会定期发布 UiPath 学习相关的信息.是目前难得的 UiPath 中文资源. 公 ...
- Linux命令应用大词典-第42章 PostgreSQL数据库
42.1 initdb:初始化PostgreSQL数据库 42.2 pg_ctl:控制PostgreSQL服务 42.3 psql:PostgreSQL交互式客户端工具 42.4 createdb:创 ...
- (转载)Unity3d中的属性(Attributes)整理
附加: float字段检视面板修改:[Range(1,10)] 对属性进行分组:[Header("xxx")] 工具栏中调用方法,类文件需在Editor文件夹中:[MenuIte( ...
- html简约风用户登录界面网页制作html5-css-jquary-学习模版
2018--12-12 喜迎双十二,咳咳,,,,我不是打广告哈,购物的节日也不要忘记学习. 大家好,我又来了. 今天抽出来空把自己的学习心得给大家分享,这是一个可开发可扩展的用户登录界面,用于开发学习 ...
- lintcode407 加一
加一 给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组. 该数字按照大小进行排列,最大的数在列表的最前面. 您在真实的面试中是否遇到过这个题? Yes 样例 给定 [1,2,3] ...
- Grid 网格布局
CSS 网格布局(Grid Layout) 是CSS中最强大的布局系统. 这是一个二维系统,这意味着它可以同时处理列和行,不像 flexbox 那样主要是一维系统. 你可以通过将CSS规则应用于父元素 ...