通过二进制压缩包将haproxy安装好后,可以通过运行主程序/usr/local/haproxy/sbin/haproxy并指定一个配置文件的方式进行启动,如下:

haproxy无法启动绑定端口 haproxy 启动_linux

但每次通过主程序启动不方便管理,怎样将haproxy配置成通过服务的方式启动呢?

ps:也可以将主程序复制到/usr/sbin或者/usr/bin下,分别可以用root和普通用户以命令的形式调用,如下:

haproxy无法启动绑定端口 haproxy 启动_运维_02

其实,haproxy解压后的目录中就有一个用于service启动的脚本,在解压目录下的examples目录下:

haproxy无法启动绑定端口 haproxy 启动_运维_03

将该启动脚本复制到/etc/init.d下,并且文件名为haproxy:

mkdir /etc/init.d/haproxy
cp /home/haproxy-2.3.4/examples/haproxy.init /etc/init.d/haproxy

/etc/init.d目录中存放的是一系列服务的管理脚本,该目录是指向/etc/rc.d/init.d的软连接。之前安装keepalived就是通过将keepalived管理脚本复制到该目录实现通过service方式启动服务的。

需要赋予启动脚本可执行权限:

haproxy无法启动绑定端口 haproxy 启动_haproxy_04

chmod +x /etc/init.d/haproxy

此时尝试启动服务,会启动失败:

haproxy无法启动绑定端口 haproxy 启动_运维_05

 于是通过journalctl -xe命令查看问题:

haproxy无法启动绑定端口 haproxy 启动_haproxy_06

也就是说haproxy的启动脚本并不能直接使用,需要修改主程序和配置文件的路径。 这里也可以使用haproxy check命令检查启动脚本是否正常。

haproxy无法启动绑定端口 haproxy 启动_运维_07

 我的主程序是在/usr/local/haproxy/sbin/haproxy,确实不在/usr/sbin/haproxy。于是修改启动脚本,修改BIN的值和CFG的值:

#设置为主程序所在路径
BIN=/usr/local/$BASENAME/sbin/$BASENAME
#设置为实际配置文件所在路径
CFG=/etc/$BASENAME/$BASENAME.cfg

修改完成后,通过服务方式启动发现还是报错:

haproxy无法启动绑定端口 haproxy 启动_haproxy无法启动绑定端口_08

 而这种错误通过haproxy check检测不出,证明启动脚本和配置文件不存在错误,但配置文件中有文件路径配置错误。这里是配置文件中stats参数对应的文件路径配置错误,因为没有创建该目录和文件。于是注释掉该配置。

haproxy无法启动绑定端口 haproxy 启动_linux_09

这里chroot和stats文件路径不对都是会报这个错的。 修改完成后再次启动,服务已经可以正常启动了:

haproxy无法启动绑定端口 haproxy 启动_linux_10

当然,通过yum方式安装可以避免以上遇到的这些问题,但yum安装的版本一般都比较老,而我一般会选择较新的版本。如果有yum安装的haproxy,复制它的/etc/init.d/haproxy也可以,对所有软件都通用。

 总结:

1.二进制压缩包安装的haproxy不能通过服务方式启动。

2.要想通过服务启动haproxy需要将默认的启动脚本复制到/etc/init.d下并修改启动脚本中主程序路径和配置文件路径。

3.如果服务启动不了,都可以通过journalctl -xe查看具体问题,但只能查看最近启动服务的问题。

4.配置文件中参数的路径需要已经创建,不然启动会报错。