Penyeimbangan beban di Zimbra Open-Source Edition menggunakan HAProxy

Salah satu tugas utama ketika membangun infrastruktur Zimbra OSE skala besar adalah penyeimbangan beban yang tepat. Selain meningkatkan toleransi kesalahan layanan, tanpa penyeimbangan beban, tidak mungkin memastikan respons layanan yang sama untuk semua pengguna. Untuk mengatasi masalah ini, penyeimbang beban digunakan - solusi perangkat lunak dan perangkat keras yang mendistribusikan ulang permintaan antar server. Diantaranya ada yang cukup primitif, seperti RoundRobin, yang hanya mengirimkan setiap permintaan berikutnya ke server berikutnya dalam daftar, dan ada juga yang lebih canggih, misalnya HAProxy, yang banyak digunakan dalam infrastruktur komputasi beban tinggi karena a sejumlah keuntungan yang signifikan. Mari kita lihat bagaimana Anda dapat membuat load balancer HAProxy dan Zimbra OSE bekerja sama.

Penyeimbangan beban di Zimbra Open-Source Edition menggunakan HAProxy

Jadi sesuai ketentuan tugasnya, kita diberikan infrastruktur Zimbra OSE yang memiliki dua Zimbra Proxy, dua server Replika LDAP dan LDAP, empat penyimpanan email dengan masing-masing 1000 kotak surat dan tiga MTA. Mengingat kita berurusan dengan server email, ia akan menerima tiga jenis lalu lintas yang perlu diseimbangkan: HTTP untuk mengunduh klien web, serta POP dan SMTP untuk mengirim email. Dalam hal ini, lalu lintas HTTP akan menuju ke server Proxy Zimbra dengan alamat IP 192.168.0.57 dan 192.168.0.58, dan lalu lintas SMTP akan menuju ke server MTA dengan alamat IP 192.168.0.77 dan 192.168.0.78.

Seperti yang telah disebutkan, untuk memastikan bahwa permintaan didistribusikan secara merata antar server, kami akan menggunakan penyeimbang beban HAProxy, yang akan berjalan pada node ingress infrastruktur Zimbra yang menjalankan Ubuntu 18.04. Menginstal haproxy pada sistem operasi ini dilakukan dengan menggunakan perintah sudo apt-get install haproxy. Setelah ini, Anda memerlukan file /etc/default/haproxy mengubah parameter DIAKTIFKAN = 0 pada DIAKTIFKAN = 1. Sekarang, untuk memastikan haproxy berfungsi, cukup masukkan perintah haproksi layanan. Jika layanan ini berjalan, ini akan terlihat jelas dari output perintah.

Salah satu kelemahan utama HAProxy adalah secara default ia tidak mengirimkan alamat IP klien yang terhubung, menggantikannya dengan miliknya sendiri. Hal ini dapat menyebabkan situasi di mana email yang dikirim oleh penyerang tidak dapat diidentifikasi berdasarkan alamat IP untuk menambahkannya ke daftar hitam. Namun permasalahan ini dapat diatasi. Untuk melakukan ini, Anda perlu mengedit file /opt/zimbra/common/conf/master.cf.in di server dengan Postfix dan tambahkan baris berikut ke dalamnya:

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

Oleh karena itu, kami akan membuka port 26, 466 dan 588, yang akan menerima lalu lintas masuk dari HAProxy. Setelah file disimpan, Anda harus me-restart Postfix di semua server menggunakan perintah zmmtactl restart.

Setelah itu, mari kita mulai menyiapkan HAProxy. Untuk melakukan ini, pertama-tama buat salinan cadangan file pengaturan cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Kemudian buka file sumber di editor teks /etc/haproxy/haproxy.cfg dan mulai menambahkan pengaturan yang diperlukan selangkah demi selangkah. Blok pertama adalah menambahkan server yang mengambil log, mengatur jumlah maksimum koneksi simultan yang diperbolehkan, serta menentukan nama dan grup pengguna yang akan menjadi bagian dari proses eksekusi.

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

Angka 5000 koneksi simultan muncul karena suatu alasan. Karena kami memiliki 4000 kotak surat di infrastruktur kami, kami perlu mempertimbangkan kemungkinan bahwa mereka semua akan mengakses email kantor mereka pada saat yang bersamaan. Selain itu, perlu untuk meninggalkan cadangan kecil jika jumlahnya bertambah.

Sekarang mari tambahkan blok dengan pengaturan default:

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

Blok ini menetapkan batas waktu maksimum bagi klien dan server untuk menutup koneksi ketika habis masa berlakunya, dan juga mengatur mode operasi HAProxy. Dalam kasus kami, penyeimbang beban beroperasi dalam mode TCP, yaitu hanya mengirimkan paket TCP tanpa menganalisis isinya.

Selanjutnya kita akan menambahkan aturan untuk koneksi pada berbagai port. Misalnya, jika port 25 digunakan untuk koneksi SMTP dan email, maka masuk akal untuk meneruskan koneksi ke port tersebut ke MTA yang tersedia di infrastruktur kami. Jika koneksi berada pada port 80, maka ini adalah permintaan http yang perlu diteruskan ke Zimbra Proxy.

Aturan untuk port 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

Aturan untuk port 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

Aturan untuk port 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

Aturan untuk port 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

Aturan untuk port 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

Harap dicatat bahwa dalam aturan untuk meneruskan paket TCP ke MTA, di sebelah alamatnya terdapat parameter kirim-proxy. Hal ini diperlukan agar, sesuai dengan perubahan yang kami buat sebelumnya pada pengaturan Postfix, alamat IP asli pengirimnya dikirimkan bersama dengan paket TCP.

Sekarang semua perubahan yang diperlukan telah dilakukan pada HAProxy, Anda dapat memulai ulang layanan menggunakan perintah layanan haproxy dimulai ulang dan mulai menggunakannya.

Untuk segala pertanyaan terkait Zextras Suite, Anda dapat menghubungi Perwakilan Zextras Ekaterina Triandafilidi melalui email [email dilindungi]

Sumber: www.habr.com

Tambah komentar