sockets - HaProxy(无法绑定(bind)套接字,选择测试失败)

标签 sockets load-balancing high-availability haproxy

大家好, 我正在从事一个高可用性项目,我必须为某些应用程序投入生产 haproxy。经过一些基础测试后一切正常,但我遇到了一些错误并且无法修复。有人有什么想法吗?

这是测试

#/usr/sbin/haproxy -d -f/etc/haproxy/haproxy.cfg

Available polling systems : 

 sepoll : pref=400,  test result OK 
 epoll : pref=300,  test result OK 
 poll : pref=200,  test result OK 
 select : pref=150,  test result FAILED 

Total: 4 (3 usable), will use sepoll. 
Using sepoll() as the polling mechanism. 
[ALERT] 174/160258 (22038) : Starting proxy mysql: cannot bind socket 
[ALERT] 174/160258 (22038) : Starting proxy http: cannot bind socket 

这是我的文件 haproxy.cfg

global 
log 127.0.0.1 local0 notice
user haproxy
group haproxy
maxconn 32000
ulimit-n 65536

defaults
log global
option dontlognull
retries 2
timeout connect 3000
timeout server 5000
timeout client 5000
option redispatch

listen  mysql
bind *:3306
mode tcp
option tcplog
balance roundrobin
option  mysql-check user haproxy_check
server mysql1 10.83.83.167:3306 check
server mysql2 10.83.83.168:3306 check
server mysql3 10.83.83.169:3306 check 

listen  http
mode http
bind *:80
stats enable
stats uri /stats
stats auth admin:HaProxy2014
acl app1_cluster_acl hdr_beg(host) -i app1
acl app2_cluster_acl hdr_beg(host) -i app2
acl mysql_cluster_acl hdr_beg(host) -i mysql
use_backend app1_cluster if app1_cluster_acl
use_backend app2_cluster if app2_cluster_acl
use_backend mysql_cluster if mysql_cluster_acl 

backend app1_cluster
mode http
cookie SERVERID insert indirect nocache
option  forwardfor header X-Real-IP
option  http-server-close
option  httplog
balance roundrobin
server serv1 10.83.83.203:80 check cookie serv1
server serv2 10.83.83.204:80 check cookie serv2 

backend app2_cluster
mode http
cookie SERVERID insert indirect nocache
option  forwardfor header X-Real-IP
option  http-server-close
option  httplog
balance roundrobin
server serv1 10.83.83.187:80 check cookie serv1
server serv2 10.83.83.188:80 check cookie serv2 

backend mysql_cluster
mode http
cookie SERVERID insert indirect nocache
option  forwardfor header X-Real-IP
option  http-server-close
option  httplog
balance roundrobin
server mysql1 10.83.83.167:80 check cookie serv1
server mysql2 10.83.83.168:80 check cookie serv2
server mysql3 10.83.83.169:80 check cookie serv2

最佳答案

如果除了在后端运行之外,我的负载均衡器上已经运行了 mysql 或 http 服务,我也会收到相同的错误。

例如,如果 nginx/apache 已在我的负载均衡器上运行。

$ netstat -anp | grep ":80"
tcp        0      0 127.0.0.1:80            0.0.0.0:*               LISTEN      3646/nginx    

我尝试使用 bind *:80 启动负载均衡器,但出现了类似的错误。

$ haproxy -d -f /etc/haproxy/haproxy.cfg
Available polling systems :
      epoll : pref=300,  test result OK
      poll : pref=200,  test result OK
     select : pref=150,  test result FAILED
Total: 3 (2 usable), will use epoll.
Using epoll() as the polling mechanism.
[ALERT] 195/001456 (1903) : Starting frontend www: cannot bind socket [0.0.0.0:80]

如果您需要有一个 mysql 或 http 实例监听 127.0.0.1,那么您可以在绑定(bind)调用中指定另一个接口(interface)的 IP。

bind: 10.0.0.20:80

使用最新版本的 haproxy,您现在甚至可以使用变量。

bind ${LB1}:80

并从 haproxy 启动脚本或/etc/default/haproxy 导出这些内容

export LB1="10.0.0.20"

否则,您的 haproxy 启动脚本可能存在问题。

关于sockets - HaProxy(无法绑定(bind)套接字,选择测试失败),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24400037/

相关文章:

java - 将两台服务器合并为一台? -Java套接字

OAuth 和粘性 session

apache - 具有 SSL 直通到具有多个后端的多个域的 HAProxy

proxy - 如何使用多个 apiserver 配置 kube-proxy master_url

C++ Google Protocol Buffer 打开 http 套接字

java - 如果我使用Java套接字/netty,其他人可以冒充我的服务器,反之亦然吗?

amazon-web-services - 应用程序控制的 session 粘性: enable stickiness on all cookies?

MYSQL InnoDB Cluster 连接字符串参数

linux - 构建高可用性 OpenStack 集群有哪些方法?

python - 套接字聊天室 - python 3.7