如何在支持ZLIB的情况下重新编译HAProxy



我们在CentOS上运行一个高流量、负载平衡的网站。当我安装haproxy时,我使用了:

make TARGET=linux26 USE_OPENSSL=1 ADDLIB=-lz
make PREFIX=/usr/local/haproxy install

但现在我需要添加zlib支持。

我知道新安装的命令是:

make TARGET=linux26 USE_OPENSSL=1 USE_ZLIB=1 ADDLIB=-lz
make PREFIX=/usr/local/haproxy install

但是,如何在不首先卸载的情况下将其重新编译为现有的haproxy安装?该网站的流量太大,一分钟都无法关闭。

我花了30分钟在谷歌上搜索答案,虽然我发现了一些关于使用make clean进行重新编译的内容,有点像Linux的noob,但我认为我应该询问专家应该如何进行,以及确切的语法。

make clean确实会清理编译目录。

我的建议是:

  • 清理编译目录,而不是安装目录
  • 使用zlib支持重新编译
  • 安装在另一个目录中
  • 将当前安装的非zlib haproxy更改为其他路径

在bash中转换为

make clean
make TARGET=linux26 USE_OPENSSL=1 USE_ZLIB=1 ADDLIB=-lz
make PREFIX=/usr/local/haproxy-zlibed install
mv /usr/local/haproxy /usr/local/haproxy-not-zlibed
ln -s /usr/local/haproxy-not-zlibed /usr/local/haproxy

在这一点上,你的处境和以前完全一样。

然后使用符号链接从当前的haproxy切换到另一个:

使用当前的haproxy(不带zlib)

rm -fr /usr/local/haproxy
ln -s /usr/local/haproxy-not-zlibed /usr/local/haproxy

并重新启动haproxy你通常的方式

或者,使用支持zlib的haproxy

rm -fr /usr/local/haproxy
ln -s /usr/local/haproxy-zlibed /usr/local/haproxy

并重新启动haproxy你通常的方式

这样你就可以测试你的新zlibd haproxy,并在必要时回滚

在Linux上,在重新编译和重新安装之前,不需要卸载甚至停止服务。

这是真的,因为现代(甚至不是那么现代)的文件系统是如何工作的:文件内容附加到inode,inode附加到目录条目(具有1:0.n关系)。因此,您可以删除正在运行的程序的目录条目,但只要它的inode没有被释放(只要它继续运行,就永远不会发生这种情况),它在自己的可执行文件上仍然有一个文件句柄,并且可以继续工作。

现在,特别是HAProxy,支持无缝重启——在新进程启动时,告诉旧进程放弃其侦听套接字,但继续为现有连接提供服务,自己获取新的侦听套接字,告诉旧进程成功了(或者如果失败,在这种情况下,旧进程重新生成自己的侦听套接字),然后允许旧进程在完成时关闭。看见http://www.mgoff.in/2010/04/18/haproxy-reloading-your-config-with-minimal-service-impact/以获取有关进程的记录。

最新更新