โหลดบาลานซ์ใน Zimbra Open-Source Edition โดยใช้ HAProxy

ภารกิจหลักประการหนึ่งในการสร้างโครงสร้างพื้นฐาน Zimbra OSE ขนาดใหญ่คือการปรับสมดุลโหลดที่มีความสามารถ นอกเหนือจากการเพิ่มความทนทานต่อข้อบกพร่องของบริการแล้ว หากไม่มีการทำโหลดบาลานซ์ เป็นไปไม่ได้ที่จะรับประกันการตอบสนองของบริการที่เหมือนกันสำหรับผู้ใช้ทุกคน เพื่อแก้ปัญหานี้ จึงใช้โหลดบาลานเซอร์ - โซลูชันซอฟต์แวร์และฮาร์ดแวร์ที่กระจายคำขอระหว่างเซิร์ฟเวอร์ ในหมู่พวกเขา มีทั้งแบบที่ค่อนข้างดั้งเดิม เช่น RoundRobin ซึ่งเพียงแค่ส่งทุกคำขอถัดไปไปยังเซิร์ฟเวอร์ถัดไปในรายการ และยังมีขั้นสูงกว่า เช่น HAProxy ซึ่งใช้กันอย่างแพร่หลายในโครงสร้างพื้นฐานการคำนวณที่มีโหลดสูงเนื่องจาก ข้อดีที่สำคัญหลายประการ มาดูกันว่าโหลดบาลานเซอร์ HAProxy และ Zimbra OSE สามารถทำงานร่วมกันได้อย่างไร

โหลดบาลานซ์ใน Zimbra Open-Source Edition โดยใช้ HAProxy

ดังนั้น ตามเงื่อนไขของปัญหา เราได้รับโครงสร้างพื้นฐาน Zimbra OSE ซึ่งมี Zimbra Proxies สองตัว เซิร์ฟเวอร์ LDAP และ LDAP Replica สองแห่ง ที่เก็บเมลสี่แห่งที่มีกล่องจดหมาย 1000 กล่อง และ MTA สามแห่ง เนื่องจากเรากำลังติดต่อกับเมลเซิร์ฟเวอร์ เซิร์ฟเวอร์จะได้รับทราฟฟิกสามประเภทที่ต้องสมดุล: HTTP สำหรับดาวน์โหลดเว็บไคลเอ็นต์ เช่นเดียวกับ POP และ SMTP สำหรับการส่งอีเมล ในกรณีนี้ การรับส่งข้อมูล HTTP จะไปที่เซิร์ฟเวอร์ Zimbra Proxy ที่มีที่อยู่ 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 ติดตั้ง haproxy. หลังจากนั้นก็จำเป็นในไฟล์ /etc/default/haproxy เปลี่ยนพารามิเตอร์ เปิดใช้งาน=0 บน เปิดใช้งาน=1. ตอนนี้เพื่อให้แน่ใจว่า haproxy ใช้งานได้ เพียงป้อนคำสั่ง บริการ haproxy. ในกรณีที่บริการนี้กำลังทำงานอยู่ ผลลัพธ์ของคำสั่งจะชัดเจน

หนึ่งในข้อบกพร่องหลักของ HAProxy คือโดยค่าเริ่มต้นจะไม่ส่งที่อยู่ IP ของไคลเอ็นต์ที่เชื่อมต่อ แทนที่ด้วยที่อยู่ 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 กล่องในโครงสร้างพื้นฐานของเรา จึงจำเป็นต้องจัดเตรียมความเป็นไปได้ที่กล่องจดหมายทั้งหมดจะไปที่จดหมายที่ทำงานพร้อมกัน นอกจากนี้จำเป็นต้องเว้นระยะขอบไว้เล็กน้อยในกรณีที่จำนวนเพิ่มขึ้น

ตอนนี้มาเพิ่มบล็อกด้วยการตั้งค่าเริ่มต้น:

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

บล็อกนี้ตั้งค่าเวลารอไคลเอนต์และเซิร์ฟเวอร์สูงสุดเพื่อปิดการเชื่อมต่อเมื่อหมดอายุ และยังตั้งค่าโหมดการทำงาน HAProxy ในกรณีของเรา ตัวโหลดบาลานเซอร์ทำงานในโหมด TCP นั่นคือเพียงแค่ถ่ายโอนแพ็กเก็ต TCP โดยไม่ต้องวิเคราะห์เนื้อหา

ต่อไป เราจะเพิ่มกฎสำหรับการเชื่อมต่อบนพอร์ตต่างๆ ตัวอย่างเช่น หากใช้พอร์ต 25 สำหรับการเชื่อมต่อ SMTP และการโอนย้ายจดหมาย คุณควรส่งต่อการเชื่อมต่อไปยัง MTA ที่เรามีในโครงสร้างพื้นฐานของเรา หากการเชื่อมต่ออยู่บนพอร์ต 80 นี่เป็นคำขอ http ที่ต้องส่งต่อไปยัง Zimbra Proxy

กฎสำหรับพอร์ต 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 Ekaterina Triandafilidi ทางอีเมล [ป้องกันอีเมล]

ที่มา: will.com

เพิ่มความคิดเห็น