Salah satu tugas utama dalam membangun infrastruktur Zimbra OSE skala besar adalah penyeimbangan beban yang kompeten. Selain fakta bahwa ia meningkatkan toleransi kesalahan pada layanan, tanpa penyeimbangan muatan, mustahil untuk memberikan respons yang sama dari layanan untuk semua pengguna. Untuk mengatasi masalah ini, load balancers digunakan - solusi perangkat lunak dan perangkat keras yang mendistribusikan kembali permintaan antar server. Di antara mereka, ada beberapa yang agak primitif, seperti RoundRobin, yang hanya mengirim setiap permintaan berikutnya ke server berikutnya dalam daftar, dan ada yang lebih maju, misalnya, HAProxy, yang banyak digunakan dalam infrastruktur komputasi yang sangat dimuat karena sejumlah keunggulan signifikan. Mari kita lihat bagaimana penyeimbang beban HAProxy dan Zimbra OSE dapat bekerja bersama.

Jadi, sesuai dengan kondisi tugas, kami diberikan infrastruktur Zimbra OSE, di mana ada dua Proksi Zimbra, dua server Replika LDAP dan LDAP, empat toko surat dengan 1000 kotak surat di masing-masing dan tiga MTA. Menimbang bahwa kami berurusan dengan server email, ia akan menerima tiga jenis lalu lintas yang perlu seimbang: HTTP untuk mengunduh klien web, serta POP dan SMTP untuk mengirim email. Pada saat yang sama, lalu lintas HTTP akan menuju server Zimbra Proxy dengan alamat ip 192.168.0.57 dan 192.168.0.58, dan lalu lintas SMTP akan pergi ke server MTA dengan alamat ip 192.168.0.77 dan 192.168.0.78.
Seperti yang telah disebutkan, untuk memastikan distribusi permintaan yang seragam antar server, kami akan menggunakan penyeimbang beban HAProxy, yang akan bekerja pada simpul input dari infrastruktur Zimbra yang menjalankan Ubuntu 18.04. Instalasi haproxy pada sistem operasi ini dilakukan dengan menggunakan
perintah haproxy sudo apt-get install . Setelah itu, di file
/ etc / default / haproxy, ubah parameter
ENABLED = 0 menjadi
ENABLED = 1 . Sekarang, untuk memastikan bahwa haproxy berfungsi, cukup masukkan perintah
layanan haproxy . Jika layanan ini berfungsi, maka akan menjadi jelas dari output perintah.
Salah satu kelemahan utama HAProxy adalah bahwa secara default HAProxy tidak mengirimkan alamat IP klien yang terhubung, menggantikannya dengan miliknya sendiri. Ini dapat menyebabkan situasi di mana email yang dikirim oleh penyerang tidak dapat diidentifikasi oleh alamat IP untuk ditambahkan ke daftar hitam. Namun, masalah ini dapat diatasi. Untuk melakukan ini, edit 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
Karena ini, 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 restart zmmtactl.
Setelah itu, mari mulai menyiapkan HAProxy. Untuk melakukan ini, pertama buat salinan cadangan file dengan pengaturan
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak . Kemudian, buka file sumber
/etc/haproxy/haproxy.cfg di editor teks dan mulai secara bertahap menambahkan pengaturan yang diperlukan untuk itu. Blok pertama akan menambahkan server yang menghapus log, mengatur jumlah maksimum koneksi simultan yang dibolehkan, serta menentukan nama dan grup pengguna yang menjadi tempat proses eksekusi.
global user daemon group daemon daemon log 127.0.0.1 daemon maxconn 5000 chroot /var/lib/haproxy
Sosok 5000 koneksi simultan muncul karena suatu alasan. Karena ada 4000 kotak surat di infrastruktur kami, maka perlu untuk memperkirakan kemungkinan bahwa semua dari mereka akan pergi ke surat kantor pada saat yang sama. Selain itu, Anda harus meninggalkan margin kecil jika jumlah mereka meningkat.
Sekarang tambahkan blok dengan pengaturan default:
defaults timeout client 1m log global mode tcp timeout server 1m timeout connect 5s
Dalam blok ini, batas waktu maksimum untuk klien dan server diatur untuk memutuskan koneksi ketika berakhir, dan mode operasi HAProxy juga diatur. Dalam kasus kami, penyeimbang beban berfungsi dalam mode TCP, yaitu, ia hanya mentransmisikan paket TCP tanpa menganalisis isinya.
Selanjutnya, kami akan menambahkan aturan untuk koneksi pada port yang berbeda. Sebagai contoh, jika port 25 digunakan untuk koneksi SMTP dan transfer surat, maka masuk akal untuk mengarahkan koneksi ke MTA yang tersedia di infrastruktur kami. Jika koneksi ada di port 80, maka ini adalah permintaan http yang harus 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 mengirim paket TCP ke MTA, parameter
send-proxy terletak di sebelah alamat mereka. Ini diperlukan agar, sesuai dengan perubahan yang kami buat sebelumnya ke pengaturan Postfix, alamat IP asli pengirimnya dikirim bersama dengan paket TCP.
Sekarang setelah semua perubahan yang diperlukan untuk HAProxy telah dibuat, Anda dapat memulai kembali layanan menggunakan
perintah restart layanan haproxy dan mulai menggunakannya.
Untuk semua pertanyaan yang terkait dengan Zextras Suite, Anda dapat menghubungi perwakilan perusahaan "Zextras" Ekaterina Triandafilidi melalui email katerina@zextras.com