איך להגדיר את HAProxy כמאזן טעינה עבור Nginx על CentOS 8

כדי להבטיח זמינות מקסימלית של אפליקציות האינטרנט, גמישות וביצועים גבוהים, נפוץ כיום ליישם טכנולוגיות שמכניסות אי-אמינות, כגון אשכולות שרתים ואיזון עומס. לדוגמה, להגדיר אשכול של שרתים שכולם מפעילים את אותה היישום(ים) ולאחר מכן להצטייד במאזיני עומס שמפזרים את התעבורה.

HAProxy הוא מאזין עומס חזק, אמין, מאובטח ונפוץ המבוסס על קוד פתוח המיועד להתאמה לאתרי אינטרנט בעלי תעבורה גבוהה מאוד. הוא פועל בצורה אמינה על Linux, Solaris, FreeBSD, OpenBSD וגם מערכות ההפעלה של AIX.

מדריך זה מראה כיצד להגדיר מאזין עומס יציב עם זמינות גבוהה עם HAProxy על CentOS 8 כדי לשלוט בתעבורה באשכול של שרתי NGINX. הוא מדגים גם כיצד להגדיר סיום SSL/TLS בתוך HAProxy.

דרישות מוקדמות:

A total of 4 servers with minimal CentOS 8 installation.

הגדרת סביבת מבחן

----------- HAProxy Server Setup ----------- 
HA Proxy Server - hostname: haproxy-server.tecmint.lan; IP: 10.42.0.247
Test Site Domain: www.tecmint.lan


----------- Client Web Servers Setup ----------- 
Web Server #1 - hostname: websrv1.tecmint.lan; IP: 10.42.0.200
Web Server #2 - hostname: websrv2.tecmint.lan; IP: 10.42.0.21
Web Server #3 - hostname: websrv3.tecmint.lan; IP: 10.42.0.34

שלב 1: התקנת שרת HTTP של Nginx על מכונות הלקוח

1. התחברו לכל המכונות הלקוח שלכם ב- CentOS 8 והתקינו את שרת האינטרנט Nginx באמצעות מנהל החבילות dnf כפי שמוצג.

# dnf install Nginx

2. התחל את שירות ה־Nginx, והפעל אותו להתחיל באופן אוטומטי בעת ההפעלה של המערכת ווודא שהוא פועל על ידי בדיקת מצבו, באמצעות פקודות systemctl (עשה זאת בכל המכונות לקוח).

# systemctl start nginx
# systemctl enable nginx
# systemctl status nginx

3. בנוסף, אם שירות firewalld פועל על כל המכונות לקוח (אשר ניתן לבדוק על ידי הרצת systemctl start firewalld), עליך להוסיף את שירותי HTTP ו־HTTPS בתצורת הגדרת הגישה לגישה ממאזין העומס דרך הגישה לקיר אש לשרתי האינג'ינקס. לאחר מכן, העל את שירות firewalld להשפעת השינויים החדשים (עשה זאת בכל המכונות לקוח).

# firewall-cmd --zone=public --permanent --add-service=http
# firewall-cmd --zone=public --permanent --add-service=https
# firewall-cmd --reload

4. לאחר מכן, פתח דפדפן אינטרנט על המכונות המקומיות שלך ובדוק אם התקנת ה־Nginx עובדת באופן תקין. השתמש ב־IP של הלקוחות כדי לנווט, כאשר אתה רואה את דף הבדיקה של Nginx, זה אומר שהשרת האינטרנט המותקן על מכונת הלקוח פועל כהלכה.

Test Nginx Installation on All CentOS 8 Client Machines

5. לאחר מכן, עלינו ליצור דפי בדיקה על מכונות הלקוח שנשתמש בהם מאוחר יותר כדי לבדוק את ההתקנה של HAProxy.

----------- Web Server #1 ----------- 
# cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
# echo "Showing site from websrv1.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #2 ----------- 
# cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
# echo "Showing site from websrv2.tecmint.lan"> /usr/share/nginx/html/index.html

----------- Web Server #3 ----------- 
# cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
# echo "Showing site from websrv3.tecmint.lan"> /usr/share/nginx/html/index.html

שלב 2: התקנת והגדרת שרת ה־HAProxy על CentOS 8

6.התקן עכשיו את חבילת HAProxy על השרת HAProxy על ידי הרצת הפקודה הבאה.

# dnf install haproxy

7. המשך להפעיל את שירות ה־HAProxy, הפעל אותו להתחלה אוטומטית בהפעלת המערכת ואמת את מצבו.

# systemctl start haproxy
# systemctl enable haproxy
# systemctl status haproxy
Verify HAProxy Status in CentOS 8

8. עכשיו נגדיר את ה־HAProxy באמצעות קובץ התצורה הבא.

# vi /etc/haproxy/haproxy.cfg

קובץ ההגדרות מחולק לארבעה סעיפים עיקריים.

  • הגדרות גלובליות – מגדיר פרמטרים ברמת התהליך.
  • ברירות מחדל – מגדיר פרמטרים ברירת מחדל עבור כל הסעיפים האחרים שאחריו.
  • קדמה – סעיף זה מתאר קבוצה של חריצי האזנה שמקבלים חיבורי לקוח.
  • אחורה – סעיף זה מתאר קבוצת שרתים אליהם הפרוקסי יתחבר כדי להעביר חיבורים נכנסים.

כדי להבין את האפשרויות תחת הגדרות גלובליות ו־ברירות מחדל, קראו את תיעוד ה־HAProxy (קישור נמצא בסוף המאמר). למדריך זה, נשתמש בברירות מחדל.

הגדרת רישום ל־HAProxy

9. כאשר ה־HAProxy פעם אחת תופקד, הוא ישחק תפקיד חשוב בתשתיות המחשוב שלך, לכן תצורת רישום עבורו היא דרישה בסיסית; זה מאפשר לך לקבל תובנות על כל חיבור לשרתי האינטרנט האחוריים שלך.

הפרמטר log (המודגש בתמונת המסך שלהלן) מצהיר על שרת Syslog גלובלי (כגון rsyslog הברירת מחדל ב־CentOS) שיקבל הודעות יומן. ניתן להצהיר על יותר משרת אחד כאן.

התצורה ברירת המחדל מצביעה על ה־localhost (127.0.0.1) ו־local2 הוא קוד היכולת הברירת מחדל המשמש לזיהוי הודעות יומן של HAProxy תחת rsyslog.

HAProxy Default Log Parameter

10. לאחר מכן, עליך לספק לשרת rsyslog איך לקבל ולעבד את הודעות יומן של HAProxy. פתח את קובץ התצורה של rsyslog ב־/etc/rsyslog.conf או צור קובץ חדש בתיקיית /etc/rsyslog.d, לדוגמה /etc/rsyslog.d/haproxy.conf.

# vi /etc/rsyslog.d/haproxy.conf

העתק והדבק את התצורה הבאה כדי לאסוף את הלוג באמצעות ה־UDP בפורט ברירת המחדל 514.

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

כן ניתן להוסיף את השורות הבאות כדי להורות ל־rsyslog לכתוב לשני קבצי לוג נפרדים בהתבסס על החומרה, כאשר local2 הוא קוד היכולת המוגדר בתצורת ה־HAProxy לעיל.

local2.* 	/var/log/haproxy-traffic.log 
local2.notice 	/var/log/haproxy-admin.log

11. שמור את הקובץ וסגור אותו. לאחר מכן, הפעל מחדש את שירות ה־rsyslog כדי ליישם את השינויים האחרונים.

# systemctl restart rsyslog

הגדרת Front-end ו־Back-ends של HAProxy

12. בסעיף זה, נדגים כיצד להגדיר את הפרוקסיים הקדמי והאחורי. חזור לקובץ התצורה של HAProxy ושנה את קטעי הפנים והאחור שברירת המחדל כדלקמן. לא ניכנס להסבר מפורט של כל פרמטר, תמיד ניתן להפנות לתיעוד הרשמי.

ההגדרה הבאה מגדירה קטע listen המשמש לספק את עמוד התצוגה של HAProxy Stats. הפרמטר bind מקצה למאזין נתון לכתובת ה־IP (* לכולם במקרה זה) ול־פורט (9000).

ההגדרה enable מאפשרת את עמוד הסטטיסטיקות שיאוחסן באמצעות ה־URI /stats (כלומר http://server_ip:9000/stats).

ההגדרה auth משמשת להוספת אימות בסיסי בעת גישה לעמוד (להחלפת haproxy ו־Lostp@1ss בשם משתמש וסיסמה שברצונך).

listen stats
    bind *:9000
    stats enable
    stats hide-version
    stats uri /stats
    stats admin if LOCALHOST
    stats auth haproxy:Lostp@1ss

13. ההגדרה הבאה מגדירה קטע פנים בשם TL (תוכל לתת שם לבחירתך). הפרמטר mode מגדיר את מצב הפעולה של HAProxy.

הפרמטר acl (רשימת בקרת גישה) משמש לקבלת החלטות בהתבסס על תוכן שנידף מהבקשה. בדוגמה זו, הבקשה נחשבת כבקשת HTTP רגילה אם היא לא בוצעה דרך SSL.

לאחר מכן, הגדרת http-request set-header משמשת להוספת כותרת HTTP לבקשה. זה עוזר להודיע ל־Nginx שהבקשה הראשית נעשתה דרך HTTP (או דרך פתחה 80).

ההפניה default_backend או ההפניה use_backend מגדירה את שרתי הגב שמשמשים, במקרה זה, המתייחסים אל TL_web_servers.

שימו לב ש־HAProxy יחזיר שגיאת "503 שירות לא זמין" אם הבקשה אינה מופנית על ידי הפניה use_backend או default_backend.

frontend TL
    bind *:80
    mode http
    acl http  ssl_fc,not
    http-request set-header X-Forwarded-Protocol http if http
    default_backend TL_web_servers

14. לאחר מכן עלינו להגדיר חלק גב שבו הגדרת balance מגדירה איך HAProxy בוחר בין שרתי הגב לעיבוד בקשה אם אין שיטת קביעות מקום שמעדיפה את הבחירה הזו.

ההפניה cookie מאפשרת את התמיכה בהתמדות במבוססת עוגיות, היא מורידה ל־הודעות הוראה את HAProxy לשלוח עוגייה בשם SERVERID ללקוח ולהקשר אותה ל־ID של השרת שנתן את התגובה הראשונית.

ההכוונה של ההוראה server היא להגדיר את שרתי ה- upstream בתבנית שם_שרת (לדוגמה websrv1), כתובת_IP_שרת:פורט ו־אפשרויות.

אחת מהאפשרויות המרכזיות היא בדיקה שמספרת ל־HAProxy לבדוק באופן קבוע את זמינות השרת ולדווח על זה בעמוד הסטטיסטיקות.

backend TL_web_servers
    mode http
    balance roundrobin
    option  httpchk HEAD /
    cookie SERVERUID insert indirect nocache
    server  websrv1 10.42.0.200:80 cookie websrv1 check
    server  websrv2 10.42.0.21:80  cookie websrv2 check
    server  websrv3 10.42.0.34:80  cookie websrv3 check

הערת פתגם את כל סעיפי ה־frontend וה־backend כפי שמוצג בתמונה הבאה. שמור את הקובץ וסגור אותו.

Configuring HAProxy Front-end and Back-ends

15. כעת אנו מפעילים מחדש את שירות ה־HAProxy כדי להחיל את השינויים החדשים.

# systemctl restart haproxy

16. לאחר מכן, ודא כי השירותים של HTTP (פורט 80) ו־HTTPS (פורט 433) נפתחים בחומת האש כדי לקבל בקשות מלקוחות כפי שמתואר. כמו כן, פתח פורט 9000 בחומת האש לגישה לדף הסטטיסטיקות וטען מחדש את הגדרות החומה.

# firewall-cmd --zone=public --permanent --add-service=http
# firewall-cmd --zone=public --permanent –add-service=https
# firewall-cmd --zone=public --permanent --add-port=9000/tcp
# firewall-cmd --reload

צעד 3: בדיקת הגדרת HAProxy וצפייה בסטטיסטיקות

17. הגיע הזמן לבדוק את הגדרת ה־HAPrxoy. במחשב השולחני המקומי ממנו אתה גושב מוסיפים את השורה הבאה בקובץ /etc/hosts כדי לאפשר לנו להשתמש בדומיין של האתר המזוייף.

10.42.0.247  www.tecmint.lan

18. לאחר מכן, פתח דפדפן ונווט באמצעות כתובת השרת או דומיין האתר.

http://10.42.0.247/
OR
http://www.tecmint.lan/
Check HAProxy Setup

19. כדי לגשת לדף הסטטיסטיקות של HAProxy, השתמש בכתובת הבאה.

http://10.42.0.247:9000/stats

לאחר מכן השתמש בשם משתמש וסיסמה שהגדרת בקובץ התצורה של HAProxy (ראה לפרמטר התצורה של הסטטיסטיקות).

HAProxy Stats Login Page

לאחר התחברות מוצלחת, תיגע בדף סטטיסטיקות של HAProxy שמציג מדדים המכסים את מצב השרתים שלך, שיעורי בקשות נוכחיים, זמני תגובה, ועוד הרבה יותר.

כדי להדגיש איך דוח המצב עובד לגבי עבודת קודי צבע, הצגנו אחד מהשרתים האחוריים.

HAProxy Statistics Report

שלב 4: הגדרת HTTPS ב-HAProxy באמצעות אישור SSL עצמי

20. בסעיף הסופי זה, נדגים כיצד להגדיר SSL/TLS כדי לאבטח את כל התקשורות בין שרת ה-HAProxy ללקוח. HAProxy תומך בארבעה מצבי הגדרת HTTPS עיקריים, אך למדריך זה נשתמש ב-SSL/TLS לפריקת העומס.

במצב פריקת העומס של SSL/TLS, HAProxy מפענח את התעבורה בצד הלקוח ומתחבר לשרתים האחוריים בתעבורה ברורה.

נתחיל על ידי יצירת ה-תעודה וה-מפתח כפי שמוצג (ענה על השאלות בהתאם לפרטי החברה שלך במהלך יצירת התעודה, כפי שמודגש בלפיד המסך).

# mkdir /etc/ssl/tecmint.lan
# cd /etc/ssl/tecmint.lan/
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/tecmint.lan.key -out /etc/ssl/tecmint.lan.crt
# cd /etc/ssl/tecmint.lan/
# cat tecmint.crt tecmint.key >tecmint.pem
# ls -l
Create SSL for HAProxy

21. לאחר מכן, פתח את קובץ התצורה של HAProxy (/etc/haproxy/haproxy.cfg) וערוך את חלק הקדמי.

frontend TL
    bind *:80
    bind *:443 ssl crt /etc/ssl/tecmint.lan/tecmint.pem
    redirect  scheme  https  if  !{ ssl_fc }
    mode http
    acl http  ssl_fc,not
    acl https ssl_fc
    http-request set-header X-Forwarded-Protocol http if http
    http-request set-header X-Forwarded-Protocol https if https
    default_backend TL_web_servers
Configure HAProxy Front-end with SSL

שמור את הקובץ וסגור אותו.

22. לאחר מכן, הפעל מחדש את שירות ה-HAProxy כדי ליישם את השינויים החדשים.

# systemctl restart haproxy.service

23. לאחר מכן, פתח דפדפן אינטרנט ונסה לגשת לאתר שוב. הדפדפן יציג שגיאה עקב התעודה שהונפקה עצמית, לחץ על מתקדם כדי להמשיך.

HAProxy SSL Connection Error
Proceed with Connection
Access Site Over HTTPS

זה הכול לעכשיו! לכל יישום אינטרנט יש את סט הדרישות שלו, עליך לעצב ולהגדיר יישום של שיווב עומס שמתאים לתשתית ה-IT ולדרישות היישום שלך.

כדי לקבל עוד תובנות על חלק מהאפשרויות להגדרה שנעשה במדריך זה, ובכלל איך להשתמש ב-HAProxy, ראה את תיעוד הגרסה הקהילתית של HAProxy או תיעוד הגרסה המסחרית של HAProxy. תוכל לפרסם שאלות או מחשבות דרך טופס המשוב למטה.

Source:
https://www.tecmint.com/setup-nginx-haproxy-load-balancer-in-centos-8/