Nginx平滑升级问题

Avril 发布于 2014/06/21 14:27
阅读 602
收藏 0

我想在Nginx添加一个新的模块,重新编译生成新的nginx可执行程序,然后旧的nginx重命名为那个nginx.old,把新的nginx复制到/usr/local/nginx/sbin/下,启动新的nginx,出现如下错误:

网上的解决方发是kill掉原来nginx进程,可是这就不符合平滑升级了,请问有没有什么解决办法?

加载中
0
运维技术
运维技术
kill -USR2 旧版程序的主进程号或进程文件名
Avril
Avril
这样做了还是不行,旧版程序还在,新版起不来
0
mingshun
mingshun
kill -USR2 [旧master进程号]
kill -WINCH [旧master进程号]

# 待旧的worker进程全部退出后,如果不想恢复到旧版就直接,就可以关闭旧版的master进程
kill -TERM [旧master进程号]

# 若发现新版有问题想恢复到旧版,在没有关闭旧版的master进程前提下恢复到旧版
kill -HUP [旧master进程号]
kill -QUIT [新master进程号]
kill -TERM [新master进程号]
# 若因为一些错误导致新worker无法退出,就直接kill掉
kill -KILL [新worker进程号]



0
狂飙的小蜗牛
狂飙的小蜗牛
http://urchin.blog.51cto.com/4356076/988860
0
ayanmw
ayanmw
nginx不是有参数处理平滑升级的吗?
0
渠富林
渠富林

1、编译一份新代码,但是不覆盖原先的,监听端口改一下,如原来是80,新编译的监听8080

2、启动新的nginx

3、设置linux的端口映射,将80映射到8080上(瞬间完成)

4、关闭旧的nginx服务

4、再编译一份新的nginx,覆盖原先的,监听80端口

5、启动

6、将端口映射去掉

7、停止监听8080的服务,删除文件

0
eechen
eechen
Nginx官方源里提供有Nginx服务管理脚本,里面的平滑升级脚本函数:
do_upgrade() {
    OLDBINPIDFILE=$PIDFILE.oldbin

    do_configtest -q || return 6
    start-stop-daemon --stop --signal USR2 --quiet --pidfile $PIDFILE --name $NAME
    RETVAL="$?"
    sleep 1
    if [ -f $OLDBINPIDFILE -a -f $PIDFILE ]; then
        start-stop-daemon --stop --signal QUIT --quiet --pidfile $OLDBINPIDFILE --name $NAME
        RETVAL="$?"
    else
        echo $"Upgrade failed!"
        RETVAL=1
        return $RETVAL
    fi
}

在Nginx平滑upgrade时: 首先发送USR2信号(平滑升级可执行程序)给原master,原master进程会额外启动一个master进程和若干worker进程,新旧worker进程同时提供对外服务. 第二步发送WINCH信号(从容关闭工作进程),原worker进程停止服务并退出. 最后发送QUIT信号(从容关闭)给原master使之退出,只保留新的master和worker.


返回顶部
顶部