如何使用ZLIB支持重新编译HAProxy?

时间:2014-03-04 15:36:58

标签: centos load-balancing 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菜鸟,我想我应该问专家应该怎么做以及为了确切的语法。

2 个答案:

答案 0 :(得分:1)

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

或者,将haproxy与zlib支持一起使用

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

并以通常的方式重启haproxy

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

答案 1 :(得分:0)

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

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

现在,特别是HAProxy,支持无缝重启 - 新进程启动,告诉旧进程删除其侦听套接字但继续为现有连接提供服务,抓取新的侦听套接字,告诉旧进程这成功了(或者如果它失败了,在这种情况下,旧进程重新调用自己的侦听套接字),然后允许旧进程在完成后关闭。有关流程的说明,请参阅http://www.mgoff.in/2010/04/18/haproxy-reloading-your-config-with-minimal-service-impact/

相关问题