Ok I just found why, ports can be shared because of SO_REUSEADDR… What’s a 
surprise :)

Is there a way to force disable the use of this flag by HAProxy ?
 
> On 14 Feb 2017, at 09:58, Mathieu Poussin <[email protected]> wrote:
> 
> Hello Daniel.
> 
> I just checked that and you are right.
> I had both the legacy haproxy 1.4 (/usr/sbin/haproxy) and the compiled 1.7 
> (/usr/local/sbin/haproxy) running for an unknown reason…
> 
> The most surprising thing is that they were both listening to the same ports… 
> Aren’t socket binding supposed to be exclusive ? o_O
> 
> tcp        0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN    
>   18493/haproxy
> tcp        0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN    
>   20611/haproxy
> tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN    
>   18493/haproxy
> tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN    
>   20611/haproxy
> tcp        0      0 0.0.0.0:8001            0.0.0.0:*               LISTEN    
>   18493/haproxy
> tcp        0      0 0.0.0.0:8001            0.0.0.0:*               LISTEN    
>   20611/haproxy
> tcp        0      0 0.0.0.0:8002            0.0.0.0:*               LISTEN    
>   18493/haproxy
> tcp        0      0 0.0.0.0:8002            0.0.0.0:*               LISTEN    
>   20611/haproxy
> tcp        0      0 0.0.0.0:8003            0.0.0.0:*               LISTEN    
>   18493/haproxy
> tcp        0      0 0.0.0.0:8003            0.0.0.0:*               LISTEN    
>   20611/haproxy
> tcp        0      0 0.0.0.0:8004            0.0.0.0:*               LISTEN    
>   18493/haproxy
> tcp        0      0 0.0.0.0:8004            0.0.0.0:*               LISTEN    
>   20611/haproxy
> 
> Thank you :)
> Best regards,
> Mathieu
> 
>> On 13 Feb 2017, at 17:38, Daniel Schneller 
>> <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> Mathieu, 
>> 
>> I have often been fooled like this by multiple haproxy instances running at 
>> the same time.
>> Whenever I had restarted them with config changes there were sometimes open 
>> client connections keeping instances with older configs alive. Those would 
>> respond to a random set of the connections.
>> So I suggest you make sure first you have exactly one instance running, e. 
>> g. with “ps aux | grep haproxy”.
>> 
>> Daniel
>> 
>> -- 
>> Daniel Schneller
>> Principal Cloud Engineer
>>  
>> CenterDevice GmbH                  | Hochstraße 11
>>                                    | 42697 Solingen
>> tel: +49 1754155711                | Deutschland
>> [email protected] <mailto:[email protected]>   
>> | www.centerdevice.de <http://www.centerdevice.de/>
>> 
>> Geschäftsführung: Dr. Patrick Peschlow, Dr. Lukas Pustina,
>> Michael Rosbach, Handelsregister-Nr.: HRB 18655,
>> HR-Gericht: Bonn, USt-IdNr.: DE-815299431
>> 
>> 
>>> On 13. Feb. 2017, at 15:45, Mathieu Poussin <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> 
>>> Hello.
>>> 
>>> I have setup HAProxy on our environment and I can see a very strange 
>>> behaviour. 
>>> 
>>> I have the following configuration (Just a part of it) :
>>> 
>>> global
>>>         chroot /var/lib/haproxy
>>>         user haproxy
>>>         group haproxy
>>>         daemon
>>>         tune.maxrewrite 4096
>>> 
>>> ################
>>> ### Defaults ###
>>> ################
>>> 
>>> defaults
>>>         mode    http
>>>         option  httplog
>>>         option  dontlog-normal
>>>         option  dontlognull
>>>         option  log-health-checks
>>>         option  redispatch
>>>         option http-server-close
>>>         unique-id-header X-LB-Request-ID
>>>         log-format %{+Q}r\ %ST\ "%CC"\ "%hr"\ "%CS"\ "%hs"\ %ID
>>> 
>>>         timeout connect 5000
>>>         timeout client 50000
>>>         timeout server 50000
>>> 
>>> frontend websitemanager
>>>         bind *:8004
>>>         log global
>>>         capture request header Host len 128
>>>         capture request header X-Real-IP len 128
>>>         capture request header X-LB-Request-ID len 128
>>>     capture request header X-HAProxy-Key len 128
>>>     http-request set-var(txn.x_haproxy_key) req.hdr(X-HAProxy-Key)
>>>     http-request set-var(txn.x_real_ip) req.hdr(X-Real-IP)
>>>         http-request set-var(txn.url) url
>>>         mode http
>>>         default_backend websitemanager
>>> 
>>> backend websitemanager
>>>         mode http
>>>         log global
>>>         balance roundrobin
>>>         option httpchk GET /health/ HTTP/1.0
>>>         http-check expect ! string false
>>>     acl debug_headers var(txn.x_real_ip) xxx.xxx.xxx.xxx
>>>         acl debug_headers var(txn.x_haproxy_key) -m str -i xxx
>>>         acl debug_headers var(txn.referer) -m sub -i haproxy-key=xxx
>>>         acl debug_headers var(txn.url) -m sub -i haproxy-key=xxx
>>>         http-response set-header X-HAProxy-Frontend-Name "%f" if 
>>> debug_headers
>>>         http-response set-header X-HAProxy-Frontend-Socket "%fi:%fp" if 
>>> debug_headers
>>>         http-response set-header X-HAProxy-Backend-Group "%b" if 
>>> debug_headers
>>>         http-response set-header X-HAProxy-Backend-Name "%s" if 
>>> debug_headers
>>>         http-response set-header X-HAProxy-Backend-Socket "%si:%sp" if 
>>> debug_headers
>>>         http-response set-header X-HAProxy-Via "%H" if debug_headers
>>>         http-response set-header X-HAProxy-TerminationState "%ts" if 
>>> debug_headers
>>>         http-response set-header X-Real-IP "%[var(txn.x_real_ip)]"
>>>         server gc-certmgr-live-1 10.0.0.49:80 check observe layer7 on-error 
>>> mark-down slowstart 10s weight 100
>>>         server gc-certmgr-live-2 10.0.0.50:80 check observe layer7 on-error 
>>> mark-down slowstart 10s weight 100
>>>         server gc-certmgr-live-3 10.0.0.51:80 check observe layer7 on-error 
>>> mark-down slowstart 10s weight 100
>>> 
>>> And many other fronted/backend combo with the same configuration (The same 
>>> ACL).
>>> Basically, I want the X-HAProxy headers to appears in any of the following 
>>> condition :
>>> - The connection is coming from HQ (Specific X-Real-IP header)
>>> - The header X-HAProxy-Key header is present and set to the correct key
>>> - The Referer contains the key
>>> - The URL contains the key as parameter
>>> 
>>> I have a nginx in front of this setup, that is setting up the X-Real-IP.
>>> I’ve checked the logs, and the connection is forwarded to HAProxy in all 
>>> the cases, so nginx is not the cause of the issue (Or at least it’s still 
>>> forwarding to HAProxy)
>>> 
>>> 
>>> Almost half of the requests are failing the ACL where they should work 
>>> without issue (Because the source IP matches or because of the connection 
>>> string.
>>> 
>>> It’s completely random, I have no idea why it’s doing that.
>>> 
>>> What could be the cause ? I could not find much googling for this issue.
>>> 
>>> My version is HA-Proxy version 1.7.2-6edf8f-4
>>> 
>>> Thank you.
>>> Best regards,
>>> Mathieu
>>> 
>> 
> 

Reply via email to