通过二进制压缩包将haproxy安装好后,可以通过运行主程序/usr/local/haproxy/sbin/haproxy并指定一个配置文件的方式进行启动,如下:
但每次通过主程序启动不方便管理,怎样将haproxy配置成通过服务的方式启动呢?
ps:也可以将主程序复制到/usr/sbin或者/usr/bin下,分别可以用root和普通用户以命令的形式调用,如下:
其实,haproxy解压后的目录中就有一个用于service启动的脚本,在解压目录下的examples目录下:
将该启动脚本复制到/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方式启动服务的。
需要赋予启动脚本可执行权限:
chmod +x /etc/init.d/haproxy
此时尝试启动服务,会启动失败:
于是通过journalctl -xe命令查看问题:
也就是说haproxy的启动脚本并不能直接使用,需要修改主程序和配置文件的路径。 这里也可以使用haproxy check命令检查启动脚本是否正常。
我的主程序是在/usr/local/haproxy/sbin/haproxy,确实不在/usr/sbin/haproxy。于是修改启动脚本,修改BIN的值和CFG的值:
#设置为主程序所在路径
BIN=/usr/local/$BASENAME/sbin/$BASENAME
#设置为实际配置文件所在路径
CFG=/etc/$BASENAME/$BASENAME.cfg
修改完成后,通过服务方式启动发现还是报错:
而这种错误通过haproxy check检测不出,证明启动脚本和配置文件不存在错误,但配置文件中有文件路径配置错误。这里是配置文件中stats参数对应的文件路径配置错误,因为没有创建该目录和文件。于是注释掉该配置。
这里chroot和stats文件路径不对都是会报这个错的。 修改完成后再次启动,服务已经可以正常启动了:
当然,通过yum方式安装可以避免以上遇到的这些问题,但yum安装的版本一般都比较老,而我一般会选择较新的版本。如果有yum安装的haproxy,复制它的/etc/init.d/haproxy也可以,对所有软件都通用。
总结:
1.二进制压缩包安装的haproxy不能通过服务方式启动。
2.要想通过服务启动haproxy需要将默认的启动脚本复制到/etc/init.d下并修改启动脚本中主程序路径和配置文件路径。
3.如果服务启动不了,都可以通过journalctl -xe查看具体问题,但只能查看最近启动服务的问题。
4.配置文件中参数的路径需要已经创建,不然启动会报错。