2016-08-18 25 views
5

Sử dụng HAProxy, tôi đang cố gắng (TCP) cân bằng tải Rserve (một dịch vụ nghe trong TCP socket để gọi R script) chạy tại cổng 6311 trong 2 nút.HAProxy Loadbalancing TCP traffic

Dưới đây là tệp cấu hình của tôi. Khi tôi chạy HAProxy, nó không có vấn đề gì. Nhưng khi tôi kết nối với các nút cân bằng, nhận được lỗi dưới đây. Bất cứ điều gì sai với cấu hình?

Handshake failed: expected 32 bytes header, got -1

#--------------------------------------------------------------------- 
# Global settings 
#--------------------------------------------------------------------- 
global 
    log   127.0.0.1 local2 

    chroot  /var/lib/haproxy 
    pidfile  /var/run/haproxy.pid 
    maxconn  4000 
    user  haproxy 
    group  haproxy 
    daemon 

    # turn on stats unix socket 
    stats socket /var/lib/haproxy/stats 

#--------------------------------------------------------------------- 
# common defaults that all the 'listen' and 'backend' sections will 
# use if not designated in their block 
#--------------------------------------------------------------------- 
defaults 
    mode     tcp 
    log      global 
    option     httplog 
    option     dontlognull 
    option http-server-close 
    #option forwardfor  except 127.0.0.0/8 
    option     redispatch 
    retries     3 
    timeout http-request 10s 
    timeout queue   1m 
    timeout connect   10s 
    timeout client   1m 
    timeout server   1m 
    timeout http-keep-alive 10s 
    timeout check   10s 
    maxconn     3000 


listen haproxy_rserve 
     bind *:81 
     mode tcp 
     option tcplog 
     timeout client 10800s 
     timeout server 10800s 
     balance leastconn 
     server rserve1 rserveHostName1:6311 
     server rserve2 rserveHostName2:6311 

listen stats proxyHostName:8080 
    mode http 
    stats enable 
    stats realm Haproxy\ Statistics 
    stats uri /haproxy_stats 
    stats hide-version 
    stats auth admin:password 

Cố gắng với dưới frontend-backend cách cân bằng là tốt. Cùng một kết quả.

frontend haproxy_rserve 
    bind *:81 
    mode tcp 
    option tcplog 
    timeout client 10800s 
    default_backend rserve 

backend rserve 
    mode tcp 
    option tcplog 
    balance leastconn 
    timeout server 10800s 
    server rserve1 rserveHostName1:6311 
    server rserve2 rserveHostName2:6311 

Trả lời

12

Sau khi đấu tranh cho một tuần cho một giải pháp để cân bằng tải R, bên dưới (full phần mềm miễn phí/mã nguồn mở stack) giải pháp làm việc.

Nếu có nhiều người đề cập đến điều này, tôi sẽ đăng một blog chi tiết về cài đặt lên cấu hình.

Đã có thể tải số dư Yêu cầu tập lệnh R đến Rserve qua bộ cân bằng tải HAProxy TCP với cấu hình dưới đây. Khá giống với cấu hình trong phần câu hỏi, nhưng với lối vào và phần phụ trợ được tách ra.

#Load balancer stats page access at hostname:8080/haproxy_stats 
listen stats <load_balancer_hostname>:8080 
    mode http 
    log global 
    stats enable 
    stats realm Haproxy\ Statistics 
    stats uri /haproxy_stats 
    stats hide-version 
    stats auth admin:[email protected] 

frontend rserve_frontend 
    bind *:81 
    mode tcp 
    option tcplog 
    timeout client 1m 
    default_backend rserve_backend 

backend rserve_backend 
    mode tcp 
    option tcplog 
    option log-health-checks 
    option redispatch 
    log global 
    balance roundrobin 
    timeout connect 10s 
    timeout server 1m 
    server rserve1 <rserve hostname1>:6311 check 
    server rserve2 <rserve hostname2>:6311 check 
    server rserve2 <rserve hostname3>:6311 check 

điều quan trọng là để cho phép kết nối từ xa cho HAproxy với lệnh dưới đây (NO doc rõ ràng về vấn đề này trong hầu hết các bộ phận)

/usr/sbin/setsebool -P haproxy_connect_any 1 

cũng đảm bảo cho phép kết nối từ xa trong Rserve với "phép từ xa "param trong tập tin cấu hình Rserve.

+1

hi - điều này rất thú vị. tại sao bạn không dùng nginx? vì hầu hết chúng ta sử dụng nginx, sẽ rất tuyệt khi thấy một giải pháp ở đó. Do lưu ý rằng nginx hỗ trợ tcp (sử dụng luồng và/hoặc giao thức proxy) – Sandeep

+1

@Sandeep không có lý do cụ thể để không sử dụng nginx. Tìm thấy haproxy là độc quyền cho proxy ngược lại và làm nó tốt trong nhiều thập kỷ và tôi sẽ không cần bất cứ điều gì khác mà nginx cung cấp (như máy chủ web). Vâng. chúng ta có thể sử dụng một phần proxy ngược lại. Nhưng đã ổn định với haproxy. – Anand

+3

@Sandeep Đây là triển khai nginx của ví dụ cân bằng tải TCP. https://www.nginx.com/resources/admin-guide/tcp-load-balancing/ – Anand