当我启动 HAProxy 时它显示:
Starting haproxy: [ALERT] 038/154339 (770) : Starting proxy proxy1: cannot bind socket [FAILED]
我的配置:
global
daemon
log /dev/log local4
maxconn 400000
ulimit-n 810000
defaults
log global
contimeout 4000
clitimeout 42000
srvtimeout 43000
listen proxy1 31.***.50.247:8217
mode tcp
balance leastconn
server proxy1_1 198.**.**0.70:25565
我的部分 IP 地址对 serverfault 来说是隐藏的。
答案1
假设这是 RHEL 或某些衍生产品,如果您有 SELinux,它可能不会允许您在策略不熟悉的端口上运行 haproxy。
尝试重新启动该过程,让它失败。然后运行ausearch -ts recent -m avc
。如果它返回结果(文本),则尝试执行这两个命令。
semanage port -a -p tcp -t commplex_port_t 8217
semanage port -a -p tcp -t commplex_port_t 25565
这将修改 SELinux 策略以了解 haproxy 正在监听这些端口。
奇怪的标签“commplex_port_t”是端口 5000 的类型定义(我假设),如果您不选择端口,haproxy 会默认使用该端口。在/etc/services
端口 5000 中声明已注册到服务commplex-main
,因此标签的名称不合适。
答案2
cannot bind socket [FAILED]
这通常意味着以下两件事之一:
- 已经有另一个守护进程在监听该端口。
- 您正在使用 1024 以下的端口,并以非特权用户身份运行 haproxy。
由于看起来您正在使用端口 8217 和 25565,因此 #2 并非如此。
要确定是否已有程序正在监听该端口:
$ sudo netstat -tunlp | grep 8217