事情起因很简单,代码的改动量很大。而且刚接手服务器,对原有的代码进行了一定程度的重构。虽然在测试服务器上做了较多的测试工作,但是直接将代码送入生产环境还是不放心,万一配置出问题服务直接崩溃怎么解?万一遇到没有测出来的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:利用负载均衡原理实现代码的热部署和灰度发布的更多相关文章

  1. Nginx进阶使用-负载均衡原理及配置实例

    介绍 跨多个应用程序实例的负载平衡是一种用于优化资源利用率,最大化吞吐量,减少延迟和确保容错配置的常用技术.可以将Nginx用作非常有效的HTTP负载平衡器,以将流量分配到多个应用程序服务器,并使用N ...

  2. Nginx详解(正向代理、反向代理、负载均衡原理)

    Nginx配置详解 nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行 ...

  3. 搞懂分布式技术9:Nginx负载均衡原理与实践

    搞懂分布式技术9:Nginx负载均衡原理与实践 本篇摘自<亿级流量网站架构核心技术>第二章 Nginx负载均衡与反向代理 部分内容. 当我们的应用单实例不能支撑用户请求时,此时就需要扩容, ...

  4. windows下利用nginx 做IIS负载均衡

    如果网站流量变大,就想加服务器分担压力,当然就要用到负载均衡,在windows 2003有自带的网络负载均衡,但配置还是挺麻烦的虽然有轮训和iphash的效果,但效果不算好. nginx小巧,下载不到 ...

  5. Nginx 负载均衡原理简介与负载均衡配置详解

    Nginx负载均衡原理简介与负载均衡配置详解   by:授客  QQ:1033553122   测试环境 nginx-1.10.0 负载均衡原理 客户端向反向代理发送请求,接着反向代理根据某种负载机制 ...

  6. nginx负载均衡原理

    负载均衡在服务端开发中算是一个比较重要的特性.因为Nginx除了作为常规的Web服务器外,还会被大规模的用于反向代理前端,因为Nginx的异步框架可以处理很大的并发请求,把这些并发请求hold住之后就 ...

  7. nginx系列8:反向代理和负载均衡原理

    反向代理是nginx的一个非常重要的功能. 反向代理 nginx支持四层反向代理和七层反向代理,如下图. 负载均衡 负载均衡是实现服务高性能和高可用的重要手段,而nginx是实现负载均衡的重要工具.

  8. nginx+tomcat实现负载均衡以及双机热备

    还记得那些年吗? 还记得更新代码之后,服务器起不来被领导训斥吗?还记得更新代码,需要停机过多的时间被渠道部们埋怨吗?还记得更新代码,代码出错时自己吓个半死吗?于是我们聪明勤快的程序员,看着电影待到夜深 ...

  9. 如何使用Weave以及Docker搭建Nginx反向代理/负载均衡服务器

    Hi, 今天我们将会学习如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/负载均衡服务器.Weave 可以创建一个虚拟网络将 Docker 容器彼此连接在一起,支持跨主机部署及自动 ...

随机推荐

  1. vim 对齐线

    ** 从https://github.com/Yggdroot/indentLine下载 indentLine插件 git clone https://github.com/Yggdroot/inde ...

  2. 关于 VirtualBox6 下的 Win10 虚拟机 与 宿主机 共享文件

    1. 概述 需要在 宿主机 和 虚拟机 之间交换文件 复制粘贴 貌似不太好使 2. 问题 设置了共享文件夹之后, 找不到目录 3. 环境 宿主机 OS Win10 开启了 网络发现 略 虚拟机 OS ...

  3. 佛山Uber优步司机奖励政策(7月27日-8月2日)

    周上线时间少于等于7个小时,以下奖励条件无效,仅返还车资.   滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册Uber司机(全国版最新最详细注册流程)/月入2万/ ...

  4. 华为LiteOS系统使用-任务调度函数-第一篇

    1.最近项目遇到华为的LiteOS小型操作系统,使用学习 2. 先打开一个工程LiteOS_Kernel-master\projects\LPC824_LITE_KEIL 3. main.c里面2个关 ...

  5. crash:EXC_ARM_DA_ALIGN(关于内存对齐,memcpy)

    crash:EXC_ARM_DA_ALIGN(关于内存对齐,memcpy) 问题描述 在iOS game开发时做内存拷贝时出现了 crash:EXC_ARM_DA_ALIGN,debug版本不会出现, ...

  6. 如何设置虚拟化的centos内、外网络通畅

    首先要去确定你的本机(本地物理机)是通过以太网(插网线)上网的,还是通过wifi上网的.这个很重要. 如果是通过以太网去上网,那么虚拟化出来的系统,网络配置应当选择桥接模式. 当然了,也不一定非要用桥 ...

  7. JDK1.8改为JDK1.7过程

    电脑之前eclipse版本要求JDK1.8版本,现在要用jboss7.1做性能测试,目前仅支持JDK7.故需要降级. 网上有很多说把1.8删掉,这种做法我是不建议的,那么要用的时候呢?又得装回来多蛋疼 ...

  8. 不老的神器--namp,awvs

    要会使用的工具 NESSUS nmap awvs hydra burpsuit 工具的话,都有文档,应该多使用 -h 多看官方文档,就会用了. 1.namp基本用法 -iL <inputfile ...

  9. Selenium 入门到精通系列:二

    Selenium 入门到精通系列 PS:用户登录 例子 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2019-04-23 16:12 ...

  10. 了解Python控制流语句——while 语句

    while 语句 Python 中 while 语句能够让你在条件为真的前提下重复执行某块语句. while 语句是 循环(Looping) 语句的一种.while 语句同样可以拥有 else 子句作 ...