我们在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菜鸟,我想我应该问专家应该怎么做以及为了确切的语法。
答案 0 :(得分:1)
make clean确实会清理你的编译目录。
我的建议是:
将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/。