nginx导流进行服务更新流程

1,确保将要切换的目标服务使用正常。

2,更改nginx.conf中被代理的虚拟主机地址,将其改为上面的目标服务(可能是测试,可能是线上其他服务器集群中的一台)。

如 vim /opt/nginx/conf/nginx.conf

server {

    listen       80;
    server_name  testing.com www.google.com;

    #charset koi8-r;

    access_log off;
    #access_log  /home/google/logs/nginx/access.log  google;

    location / {
            #proxy_pass  http://127.0.0.1:8080;
            proxy_pass  http://192.168.1.99:80;

            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
            client_max_body_size       5m;
            proxy_connect_timeout      150;
            proxy_send_timeout         150;
            proxy_read_timeout         150;
            proxy_next_upstream        error timeout invalid_header http_500;
            proxy_buffer_size          32k;
            proxy_buffers              32 64k;
            proxy_busy_buffers_size    128k;
    }

}

更改上面的proxy_pass http://192.168.1.99:80为目标服务器地址如:proxy_pass http://192.168.1.100:80

然后执行/opt/nginx/sbin/nginx -t测试下,如果出现....successfully 字样,则说明配置文件更改没有问题。

然后执行/opt/nginx/sbin/nginx -s reload , 这个不会有输出信息。

此时,所有访问www.google.com通过dns解析到99机器上80端口的请求,全部被转到100机器上的80端口。

注意:为什么强调dns?如果在本地hosts文件中配置了192.168.1.99:80 www.google.com则不会经过dns返回ip地址,直接访问192.168.1.99:80这个地址。

为什么强调80端口?因为服务器上设置了只有80端口可以被外部访问,请求过来后,机器本地才可以访问自己的任何端口,比如8080,8081...

流量切换成功!

执行ps -ef | grep nginx,查看nginx进程的情况:

google 11366 32142 1 16:47 ? 00:00:06 nginx: worker process is shutting down

google 11367 32142 0 16:47 ? 00:00:00 nginx: worker process is shutting down

google 11368 32142 0 16:47 ? 00:00:03 nginx: worker process is shutting down

google 11369 32142 0 16:47 ? 00:00:05 nginx: worker process is shutting down

google 11370 32142 1 16:47 ? 00:00:06 nginx: worker process is shutting down

google 11371 32142 2 16:47 ? 00:00:15 nginx: worker process is shutting down

google 11372 32142 1 16:47 ? 00:00:07 nginx: worker process is shutting down

google 11373 32142 1 16:47 ? 00:00:07 nginx: worker process is shutting down

google 11787 32142 0 16:57 ? 00:00:00 nginx: worker process

google 11788 32142 0 16:57 ? 00:00:00 nginx: worker process

google 11789 32142 0 16:57 ? 00:00:00 nginx: worker process

google 11790 32142 0 16:57 ? 00:00:00 nginx: worker process

google 11791 32142 0 16:57 ? 00:00:00 nginx: worker process

google 11792 32142 3 16:57 ? 00:00:00 nginx: worker process

google 11793 32142 1 16:57 ? 00:00:00 nginx: worker process

google 11794 32142 0 16:57 ? 00:00:00 nginx: worker process

上面执行/opt/nginx/sbin/nginx -s reload时nginx会启动和原来相等数量的进程,然后等待原来进程执行完操作在测试shut down.

待所有线程都shut down后

开始更新99机器上的服务,在此之前,将99机器上的原来的代码备份!!!切记切记,一定要备份!!!!出现意外情况可以迅速回滚!!!

启动,查看进程,看启动成功与否。

在本地hosts配置192.168.1.99 www.google.com可以直接不经过dns访问99机器的服务,看服务正常与否,若正常,再按以上步骤将流量切回。

posted @ 2014-04-15 18:28  xu's thinking  阅读(618)  评论(0编辑  收藏  举报