haproxy - vượt qua ip gốc / từ xa trong chế độ tcp


8

Tôi đã thiết lập haproxy với khả năng cân bằng tải và chuyển đổi dự phòng ip của cụm percona và vì nó hoạt động rất tốt nên tôi muốn sử dụng cùng một lb / failover cho dịch vụ / daemon khác.

Tôi đã cấu hình haproxy theo cách này:

listen my_service 0.0.0.0:4567
    mode tcp
    balance leastconn
    option tcpka
    contimeout      500000
    clitimeout      500000
    srvtimeout      500000

    server host1 xxx.xxx.xxx.xx1:4567 check port 4567 inter 5000 rise 3 fall 3
    server host2 xxx.xxx.xxx.xx2:4567 check port 4567 inter 5000 rise 3 fall 3

Cân bằng tải hoạt động tốt, nhưng dịch vụ nhìn thấy IP của bộ cân bằng tải thay vì IP thực tế của khách hàng. Trong chế độ http, việc chuyển haproxy dọc theo IP từ xa khá dễ dàng, nhưng tôi phải làm thế nào trong chế độ tcp? Điều này rất quan trọng do bản chất của dịch vụ tôi cần tải cân bằng.

Cảm ơn! Vito


đây là tài liệu đầy đủ về haproxy 1.6.6 cbonte.github.io/haproxy-dconv/ gợi

Câu trả lời:


3

Chỉ để tham khảo trong tương lai, keepaliving là một giải pháp cho failover không tải cân bằng (có thể bạn có nghĩa là LVS?). chế độ proxy trong suốt cho HAProxy không liên quan gì đến việc gửi IP gốc, đó là chế độ HTTP không minh bạch thông thường nơi bạn có thể sử dụng tiêu đề HTTP được tiêu chuẩn hóa cho việc này.

Theo tôi, câu trả lời chính xác cho câu hỏi ban đầu là: Bạn có thể biên dịch hỗ trợ proxy trong suốt trong HAProxy trên kernel linux được kích hoạt TPROXY. Điều này cùng với phiên bản hỗ trợ TPROXY thích hợp + cấu hình của iptables trên cùng một máy cho phép hỗ trợ proxy tcp hoàn toàn minh bạch thực tế. Điều này có nghĩa là các máy chủ phụ trợ KHÔNG cần bất kỳ cấu hình đặc biệt nào.

Lưu ý rằng đây thực sự không phải là thiết lập được đề xuất cho HAProxy và chỉ nên được sử dụng nếu bạn thực sự cần nó.


2

Rõ ràng có một số chế độ "trong suốt" cho haproxy mà tôi chưa bao giờ nhìn vào hoặc muốn làm gì với nó, mà bạn có thể thử. Mặt khác, bạn sẽ cần dạy bất cứ dịch vụ phụ trợ nào về cách gửi IP gốc của haproxy ("PROXY blahblah") và yêu cầu dịch vụ rút IP gốc ra khỏi đó.

Tại sao bạn lại bận tâm với haproxy? Bạn đã được bảo quản sẵn, và nó cũng thực hiện cân bằng tải trong suốt thích hợp.


Xin chào, cảm ơn rất nhiều vì câu trả lời của bạn :) Tôi đang đọc một số nội dung về hỗ trợ 'tproxy', tôi đoán đây là ý của bạn? Ngoài ra, tôi đã không cân nhắc tải cân bằng với giữ lại trực tiếp cho việc này. Keepaliving có vượt qua IP gốc của khách hàng không?
Vito Botta

Có, giữ nguyên giữ nguyên IP ban đầu, vì đó là bộ cân bằng tải chứ không phải proxy.
womble

2

Sử dụng send-proxytrong cấu hình của bạn (trên mỗi máy chủ) sẽ cung cấp cho bạn ip nguồn gốc ở phía máy chủ nhận, ngay cả trong chế độ TCP. Điều này đòi hỏi HAProxy 1.5+.

Bạn có thể tìm thêm thông tin về Giao thức Proxy trong Tài liệu HAProxy .

listen my_service 0.0.0.0:4567
mode tcp
balance leastconn
option tcpka
contimeout      500000
clitimeout      500000
srvtimeout      500000

server host1 xxx.xxx.xxx.xx1:4567 send-proxy check port 4567 inter 5000 rise 3 fall 3
server host2 xxx.xxx.xxx.xx2:4567 send-proxy check port 4567 inter 5000 rise 3 fall 3

HI Nils, cảm ơn vì giải pháp, nhưng khi tôi nhập proxy gửi, nó khiến db bị hỏng (haproxy không thể phát hiện ra máy chủ)
neobie 17/8/2015

điều tương tự cũng xảy ra với tôi với DB. bất kì giải pháp nào ?
Peeyush


-4

Cấu hình này làm việc cho tôi. IP nguồn có thể được truy xuất trong $ _SERVER ['HTTP_X_FORWARDED_FOR']:

toàn cầu
        [..... công cụ thông thường .... ]   
        ssl-server-verify

lối vào chính *: 5000
        liên kết *: 443 ssl crt /etc/ssl/mycert_with_private_key.pem
        chế độ http
        tùy chọn chuyển tiếp
        reqadd X-Forwarded-Proto: \ https
        default_backend https_server

phụ trợ https_server
        chế độ http
        cân bằng ít kết nối
        tùy chọn tcpka
        loại bàn dính kích thước ip 200k hết hạn 30m
        máy chủ srv04 192.168.1.10:443 ssl kiểm tra
        máy chủ srv05 192.168.1.11:443 kiểm tra ssl

2
Câu trả lời này không áp dụng. kết nối không phải là HTTP.
longneck

Bạn có đề xuất kết nối https phải ở chế độ tcp không?.
Pedro Sayago

Không, tôi đang nói rằng câu hỏi sử dụng tcp và câu trả lời của bạn chỉ áp dụng cho http / s.
longneck

ok, chúc may mắn sau đó, tôi đã không tìm thấy bất kỳ tài liệu nào liên quan đến haproxy trong ip chuyển tiếp chế độ tcp. Có lẽ lớp nơi yêu cầu được xử lý không thể vượt qua thông tin này.
Pedro Sayago
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.