Cân bằng tải trong Phiên bản mã nguồn mở Zimbra sử dụng HAProxy

Một trong những nhiệm vụ chính khi xây dựng cơ sở hạ tầng Zimbra OSE quy mô lớn là cân bằng tải hợp lý. Ngoài thực tế là nó làm tăng khả năng chịu lỗi của dịch vụ, nếu không có cân bằng tải thì không thể đảm bảo khả năng đáp ứng như nhau của dịch vụ cho tất cả người dùng. Để giải quyết vấn đề này, bộ cân bằng tải được sử dụng - giải pháp phần mềm và phần cứng nhằm phân phối lại yêu cầu giữa các máy chủ. Trong số đó có những cái khá nguyên thủy, như RoundRobin, chỉ gửi từng yêu cầu tiếp theo đến máy chủ tiếp theo trong danh sách, và cũng có những yêu cầu nâng cao hơn, ví dụ HAProxy, được sử dụng rộng rãi trong cơ sở hạ tầng điện toán tải cao do số lợi ích đáng kể. Hãy cùng xem cách bạn có thể làm cho bộ cân bằng tải HAProxy và Zimbra OSE hoạt động cùng nhau.

Cân bằng tải trong Phiên bản mã nguồn mở Zimbra sử dụng HAProxy

Vì vậy, theo các điều khoản của nhiệm vụ, chúng tôi được cung cấp cơ sở hạ tầng Zimbra OSE, có hai máy chủ Zimbra Proxy, hai máy chủ LDAP và LDAP Replica, bốn kho lưu trữ thư với 1000 hộp thư mỗi kho và ba MTA. Vì chúng ta đang xử lý một máy chủ thư, nó sẽ nhận được ba loại lưu lượng truy cập cần cân bằng: HTTP để tải xuống ứng dụng khách web, cũng như POP và SMTP để gửi email. Trong trường hợp này, lưu lượng HTTP sẽ đến máy chủ Zimbra Proxy có địa chỉ IP 192.168.0.57 và 192.168.0.58, còn lưu lượng SMTP sẽ đến máy chủ MTA có địa chỉ IP 192.168.0.77 và 192.168.0.78.

Như đã đề cập, để đảm bảo rằng các yêu cầu được phân bổ đồng đều giữa các máy chủ, chúng tôi sẽ sử dụng bộ cân bằng tải HAProxy, bộ cân bằng tải này sẽ chạy trên nút xâm nhập cơ sở hạ tầng Zimbra chạy Ubuntu 18.04. Việc cài đặt haproxy trên hệ điều hành này được thực hiện bằng lệnh sudo apt-get cài đặt haproxy. Sau này bạn cần trong tập tin /etc/mặc định/haproxy thay đổi thông số ENABLED = 0 trên ENABLED = 1. Bây giờ, để đảm bảo haproxy đang hoạt động, chỉ cần nhập lệnh dịch vụ haproxy. Nếu dịch vụ này đang chạy, điều này sẽ rõ ràng từ đầu ra của lệnh.

Một trong những nhược điểm chính của HAProxy là theo mặc định, nó không truyền địa chỉ IP của máy khách đang kết nối mà thay thế bằng địa chỉ của chính nó. Điều này có thể dẫn đến tình huống email do kẻ tấn công gửi không thể được xác định bằng địa chỉ IP để thêm nó vào danh sách đen. Tuy nhiên, vấn đề này có thể được giải quyết. Để làm điều này, bạn cần chỉnh sửa tập tin /opt/zimbra/common/conf/master.cf.in trên các máy chủ có Postfix và thêm các dòng sau vào đó:

26      inet  n       -       n       -       1       postscreen
        -o postscreen_upstream_proxy_protocol=haproxy
 
466    inet  n       -       n       -       -       smtpd
%%uncomment SERVICE:opendkim%%  -o content_filter=scan:[%%zimbraLocalBindAddress%%]:10030
        -o smtpd_tls_wrappermode=yes
        -o smtpd_sasl_auth_enable=yes
        -o smtpd_client_restrictions=
        -o smtpd_data_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_recipient_restrictions=
        -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
        -o syslog_name=postfix/smtps
        -o milter_macro_daemon_name=ORIGINATING
        -o smtpd_upstream_proxy_protocol=haproxy
%%uncomment LOCAL:postjournal_enabled%% -o smtpd_proxy_filter=[%%zimbraLocalBindAddress%%]:10027
%%uncomment LOCAL:postjournal_enabled%% -o smtpd_proxy_options=speed_adjust
 
588 inet n      -       n       -       -       smtpd
%%uncomment SERVICE:opendkim%%  -o content_filter=scan:[%%zimbraLocalBindAddress%%]:10030
        -o smtpd_etrn_restrictions=reject
        -o smtpd_sasl_auth_enable=%%zimbraMtaSaslAuthEnable%%
        -o smtpd_tls_security_level=%%zimbraMtaTlsSecurityLevel%%
        -o smtpd_client_restrictions=permit_sasl_authenticated,reject
        -o smtpd_data_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_recipient_restrictions=
        -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
        -o syslog_name=postfix/submission
        -o milter_macro_daemon_name=ORIGINATING
        -o smtpd_upstream_proxy_protocol=haproxy
%%uncomment LOCAL:postjournal_enabled%% -o smtpd_proxy_filter=[%%zimbraLocalBindAddress%%]:10027
%%uncomment LOCAL:postjournal_enabled%% -o smtpd_proxy_options=speed_adjust

Do đó, chúng tôi sẽ mở các cổng 26, 466 và 588 để nhận lưu lượng truy cập đến từ HAProxy. Sau khi các tệp đã được lưu, bạn nên khởi động lại Postfix trên tất cả các máy chủ bằng lệnh khởi động lại zmmtactl.

Sau đó, chúng ta bắt đầu thiết lập HAProxy. Để thực hiện việc này, trước tiên hãy tạo bản sao lưu của tệp cài đặt cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Sau đó mở tệp nguồn trong trình soạn thảo văn bản /etc/haproxy/haproxy.cfg và bắt đầu thêm các cài đặt cần thiết vào đó từng bước một. Khối đầu tiên sẽ thêm một máy chủ ghi nhật ký, thiết lập số lượng kết nối đồng thời tối đa được phép, cũng như chỉ định tên và nhóm người dùng mà quy trình thực thi sẽ thuộc về.

global
    user daemon
    group daemon
    daemon
    log 127.0.0.1 daemon
    maxconn 5000
    chroot /var/lib/haproxy

Con số 5000 kết nối đồng thời xuất hiện là có lý do. Vì chúng tôi có 4000 hộp thư trong cơ sở hạ tầng của mình nên chúng tôi cần xem xét khả năng tất cả chúng sẽ truy cập email công việc của mình cùng một lúc. Ngoài ra, cần để lại một khoản dự trữ nhỏ đề phòng trường hợp số lượng của chúng tăng lên.

Bây giờ hãy thêm một khối với cài đặt mặc định:

defaults
        timeout client 1m
        log global
        mode tcp
        timeout server 1m
        timeout connect 5s

Khối này đặt thời gian chờ tối đa để máy khách và máy chủ đóng kết nối khi hết hạn, đồng thời đặt chế độ hoạt động của HAProxy. Trong trường hợp của chúng tôi, bộ cân bằng tải hoạt động ở chế độ TCP, nghĩa là nó chỉ truyền các gói TCP mà không phân tích nội dung của chúng.

Tiếp theo chúng tôi sẽ thêm các quy tắc cho kết nối trên các cổng khác nhau. Ví dụ: nếu cổng 25 được sử dụng cho các kết nối và thư SMTP thì việc chuyển tiếp các kết nối tới cổng đó tới các MTA có sẵn trong cơ sở hạ tầng của chúng tôi là điều hợp lý. Nếu kết nối ở cổng 80 thì đây là yêu cầu http cần được chuyển tiếp tới Zimbra Proxy.

Quy tắc cho cổng 25:

frontend smtp-25
bind *:27
default_backend backend-smtp-25
 
backend backend-smtp-25
server mta1 192.168.0.77:26 send-proxy
server mta2 192.168.0.78:26 send-proxy

Quy tắc cho cổng 465:

frontend smtp-465
bind *:467
default_backend backend-smtp-465

backend backend-smtp-465
server mta1 192.168.0.77:466 send-proxy
server mta2 192.168.0.78:466 send-proxy

Quy tắc cho cổng 587:

frontend smtp-587
bind *:589
default_backend backend-smtp-587
 
backend backend-smtp-587
server mail1 192.168.0.77:588 send-proxy
server mail2 192.168.0.78:588 send-proxy

Quy tắc cho cổng 80:

frontend http-80
bind    *:80
default_backend http-80
 
backend http-80
mode tcp
server zproxy1 192.168.0.57:80 check
server zproxy2 192.168.0.58:80 check

Quy tắc cho cổng 443:

frontend https
bind  *:443
default_backend https-443
 
backend https-443
mode tcp
server zproxy1 192.168.0.57:80 check
server zproxy2 192.168.0.58:80 check

Xin lưu ý rằng trong quy tắc chuyển tiếp gói TCP tới MTA, bên cạnh địa chỉ của chúng có một tham số gửi proxy. Điều này là cần thiết để theo những thay đổi mà chúng tôi đã thực hiện trước đó đối với cài đặt Postfix, địa chỉ IP ban đầu của người gửi sẽ được gửi cùng với các gói TCP.

Bây giờ tất cả các thay đổi cần thiết đã được thực hiện đối với HAProxy, bạn có thể khởi động lại dịch vụ bằng lệnh khởi động lại dịch vụ haproxy và bắt đầu sử dụng nó.

Đối với tất cả các câu hỏi liên quan đến Zextras Suite, bạn có thể liên hệ với Đại diện Zextras Ekaterina Triandafilidi qua email [email được bảo vệ]

Nguồn: www.habr.com

Thêm một lời nhận xét