Εξισορρόπηση φορτίου στην Έκδοση Ανοικτού Κώδικα Zimbra με χρήση HAProxy

Ένα από τα κύρια καθήκοντα κατά την κατασκευή υποδομών μεγάλης κλίμακας Zimbra OSE είναι η σωστή εξισορρόπηση φορτίου. Εκτός από το γεγονός ότι αυξάνει την ανοχή σφαλμάτων της υπηρεσίας, χωρίς εξισορρόπηση φορτίου είναι αδύνατο να διασφαλιστεί η ίδια ανταπόκριση της υπηρεσίας για όλους τους χρήστες. Για την επίλυση αυτού του προβλήματος, χρησιμοποιούνται εξισορροπητές φορτίου - λύσεις λογισμικού και υλικού που αναδιανέμουν αιτήματα μεταξύ διακομιστών. Ανάμεσά τους υπάρχουν αρκετά πρωτόγονα, όπως το RoundRobin, το οποίο απλώς στέλνει κάθε επόμενο αίτημα στον επόμενο διακομιστή της λίστας, και υπάρχουν επίσης πιο προηγμένα, για παράδειγμα το HAProxy, το οποίο χρησιμοποιείται ευρέως σε υποδομές υπολογιστών υψηλού φορτίου λόγω πολλά σημαντικά πλεονεκτήματα. Ας ρίξουμε μια ματιά στο πώς μπορείτε να κάνετε το HAProxy load balancer και το Zimbra OSE να λειτουργούν μαζί.

Εξισορρόπηση φορτίου στην Έκδοση Ανοικτού Κώδικα Zimbra με χρήση HAProxy

Έτσι, σύμφωνα με τους όρους της εργασίας, μας δίνεται η υποδομή Zimbra OSE, η οποία διαθέτει δύο διακομιστές Zimbra Proxy, δύο διακομιστές LDAP και LDAP Replica, τέσσερις αποθηκευτικούς χώρους αλληλογραφίας με 1000 γραμματοκιβώτια ο καθένας και τρεις MTA. Δεδομένου ότι έχουμε να κάνουμε με διακομιστή αλληλογραφίας, θα λαμβάνει τρεις τύπους κίνησης που χρειάζονται εξισορρόπηση: HTTP για τη λήψη του προγράμματος-πελάτη ιστού, καθώς και POP και SMTP για την αποστολή email. Σε αυτήν την περίπτωση, η κίνηση HTTP θα πηγαίνει σε διακομιστές μεσολάβησης Zimbra με διευθύνσεις IP 192.168.0.57 και 192.168.0.58 και η κίνηση SMTP θα πηγαίνει σε διακομιστές MTA με διευθύνσεις IP 192.168.0.77 και 192.168.0.78.

Όπως αναφέρθηκε ήδη, για να διασφαλίσουμε ότι τα αιτήματα κατανέμονται ομοιόμορφα μεταξύ των διακομιστών, θα χρησιμοποιήσουμε τον εξισορροπητή φορτίου HAProxy, ο οποίος θα εκτελείται στον κόμβο εισόδου της υποδομής Zimbra που εκτελεί το Ubuntu 18.04. Η εγκατάσταση του haproxy σε αυτό το λειτουργικό σύστημα γίνεται χρησιμοποιώντας την εντολή sudo apt-get install aproxy. Μετά από αυτό χρειάζεστε στο αρχείο /etc/default/haproxy αλλαγή παραμέτρου ΕΝΕΡΓΟΠΟΙΗΜΕΝΟ=0 επί ΕΝΕΡΓΟΠΟΙΗΜΕΝΟ=1. Τώρα, για να βεβαιωθείτε ότι το haproxy λειτουργεί, απλώς εισάγετε την εντολή σέρβις χαπροξί. Εάν αυτή η υπηρεσία εκτελείται, αυτό θα είναι σαφές από την έξοδο της εντολής.

Ένα από τα κύρια μειονεκτήματα του HAProxy είναι ότι από προεπιλογή δεν μεταδίδει τη διεύθυνση IP του συνδεδεμένου πελάτη, αντικαθιστώντας το με τη δική του. Αυτό μπορεί να οδηγήσει σε καταστάσεις όπου τα μηνύματα ηλεκτρονικού ταχυδρομείου που αποστέλλονται από εισβολείς δεν μπορούν να αναγνωριστούν από τη διεύθυνση IP προκειμένου να προστεθούν στη μαύρη λίστα. Ωστόσο, αυτό το ζήτημα μπορεί να επιλυθεί. Για να γίνει αυτό πρέπει να επεξεργαστείτε το αρχείο /opt/zimbra/common/conf/master.cf.in σε διακομιστές με Postfix και προσθέστε τις ακόλουθες γραμμές σε αυτό:

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

Λόγω αυτού, θα ανοίξουμε τις θύρες 26, 466 και 588, οι οποίες θα λαμβάνουν εισερχόμενη κίνηση από το HAProxy. Αφού αποθηκευτούν τα αρχεία, θα πρέπει να επανεκκινήσετε το Postfix σε όλους τους διακομιστές χρησιμοποιώντας την εντολή επανεκκίνησης zmmtactl.

Μετά από αυτό, ας ξεκινήσουμε τη ρύθμιση του HAProxy. Για να το κάνετε αυτό, δημιουργήστε πρώτα ένα αντίγραφο ασφαλείας του αρχείου ρυθμίσεων cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Στη συνέχεια, ανοίξτε το αρχείο προέλευσης σε ένα πρόγραμμα επεξεργασίας κειμένου /etc/haproxy/haproxy.cfg και ξεκινήστε να προσθέτετε τις απαραίτητες ρυθμίσεις σε αυτό βήμα προς βήμα. Το πρώτο μπλοκ θα είναι η προσθήκη ενός διακομιστή που λαμβάνει αρχεία καταγραφής, ο καθορισμός του μέγιστου επιτρεπόμενου αριθμού ταυτόχρονων συνδέσεων, καθώς και ο καθορισμός του ονόματος και της ομάδας του χρήστη στον οποίο θα ανήκει η διαδικασία εκτέλεσης.

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

Ο αριθμός των 5000 ταυτόχρονων συνδέσεων εμφανίστηκε για κάποιο λόγο. Δεδομένου ότι έχουμε 4000 γραμματοκιβώτια στην υποδομή μας, πρέπει να εξετάσουμε το ενδεχόμενο να έχουν όλοι πρόσβαση στο email εργασίας τους ταυτόχρονα. Επιπλέον, είναι απαραίτητο να αφήσετε ένα μικρό αποθεματικό σε περίπτωση που αυξηθεί ο αριθμός τους.

Τώρα ας προσθέσουμε ένα μπλοκ με προεπιλεγμένες ρυθμίσεις:

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

Αυτό το μπλοκ ορίζει το μέγιστο χρονικό όριο λήξης για τον πελάτη και τον διακομιστή ώστε να κλείσει η σύνδεση όταν λήξει και επίσης ορίζει τον τρόπο λειτουργίας του HAProxy. Στην περίπτωσή μας, το load balancer λειτουργεί σε λειτουργία TCP, δηλαδή απλώς μεταδίδει πακέτα TCP χωρίς να αναλύει το περιεχόμενό τους.

Στη συνέχεια θα προσθέσουμε κανόνες για συνδέσεις σε διάφορες θύρες. Για παράδειγμα, εάν η θύρα 25 χρησιμοποιείται για συνδέσεις SMTP και αλληλογραφία, τότε είναι λογικό να προωθούνται οι συνδέσεις σε αυτήν στα MTA που είναι διαθέσιμα στην υποδομή μας. Εάν η σύνδεση είναι στη θύρα 80, τότε αυτό είναι ένα αίτημα http που πρέπει να προωθηθεί στον διακομιστή μεσολάβησης Zimbra.

Κανόνας για τη θύρα 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

Κανόνας για τη θύρα 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

Κανόνας για τη θύρα 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

Κανόνας για τη θύρα 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

Κανόνας για τη θύρα 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

Λάβετε υπόψη ότι στους κανόνες για την προώθηση πακέτων TCP στο MTA, δίπλα στις διευθύνσεις τους υπάρχει μια παράμετρος αποστολή-διαμεσολαβητής. Αυτό είναι απαραίτητο ώστε, σύμφωνα με τις αλλαγές που κάναμε νωρίτερα στις ρυθμίσεις Postfix, να αποσταλεί η αρχική διεύθυνση IP του αποστολέα του μαζί με πακέτα TCP.

Τώρα που έχουν γίνει όλες οι απαραίτητες αλλαγές στο HAProxy, μπορείτε να επανεκκινήσετε την υπηρεσία χρησιμοποιώντας την εντολή επανεκκίνηση της υπηρεσίας haproxy και αρχίστε να το χρησιμοποιείτε.

Για όλες τις ερωτήσεις που σχετίζονται με το Zextras Suite, μπορείτε να επικοινωνήσετε με την Εκπρόσωπο της Zextras Αικατερίνα Τριανταφυλλίδη μέσω e-mail [προστασία μέσω email]

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο