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

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

8. עכשיו נגדיר את ה־HAProxy באמצעות קובץ התצורה הבא.
# vi /etc/haproxy/haproxy.cfg
קובץ ההגדרות מחולק לארבעה סעיפים עיקריים.
- הגדרות גלובליות – מגדיר פרמטרים ברמת התהליך.
- ברירות מחדל – מגדיר פרמטרים ברירת מחדל עבור כל הסעיפים האחרים שאחריו.
- קדמה – סעיף זה מתאר קבוצה של חריצי האזנה שמקבלים חיבורי לקוח.
- אחורה – סעיף זה מתאר קבוצת שרתים אליהם הפרוקסי יתחבר כדי להעביר חיבורים נכנסים.
כדי להבין את האפשרויות תחת הגדרות גלובליות ו־ברירות מחדל, קראו את תיעוד ה־HAProxy (קישור נמצא בסוף המאמר). למדריך זה, נשתמש בברירות מחדל.
הגדרת רישום ל־HAProxy
9. כאשר ה־HAProxy פעם אחת תופקד, הוא ישחק תפקיד חשוב בתשתיות המחשוב שלך, לכן תצורת רישום עבורו היא דרישה בסיסית; זה מאפשר לך לקבל תובנות על כל חיבור לשרתי האינטרנט האחוריים שלך.
הפרמטר log (המודגש בתמונת המסך שלהלן) מצהיר על שרת Syslog גלובלי (כגון rsyslog הברירת מחדל ב־CentOS) שיקבל הודעות יומן. ניתן להצהיר על יותר משרת אחד כאן.
התצורה ברירת המחדל מצביעה על ה־localhost (127.0.0.1) ו־local2 הוא קוד היכולת הברירת מחדל המשמש לזיהוי הודעות יומן של HAProxy תחת rsyslog.

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 כפי שמוצג בתמונה הבאה. שמור את הקובץ וסגור אותו.

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/

19. כדי לגשת לדף הסטטיסטיקות של HAProxy, השתמש בכתובת הבאה.
http://10.42.0.247:9000/stats
לאחר מכן השתמש בשם משתמש וסיסמה שהגדרת בקובץ התצורה של HAProxy (ראה לפרמטר התצורה של הסטטיסטיקות).

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

שלב 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

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

שמור את הקובץ וסגור אותו.
22. לאחר מכן, הפעל מחדש את שירות ה-HAProxy כדי ליישם את השינויים החדשים.
# systemctl restart haproxy.service
23. לאחר מכן, פתח דפדפן אינטרנט ונסה לגשת לאתר שוב. הדפדפן יציג שגיאה עקב התעודה שהונפקה עצמית, לחץ על מתקדם כדי להמשיך.



זה הכול לעכשיו! לכל יישום אינטרנט יש את סט הדרישות שלו, עליך לעצב ולהגדיר יישום של שיווב עומס שמתאים לתשתית ה-IT ולדרישות היישום שלך.
כדי לקבל עוד תובנות על חלק מהאפשרויות להגדרה שנעשה במדריך זה, ובכלל איך להשתמש ב-HAProxy, ראה את תיעוד הגרסה הקהילתית של HAProxy או תיעוד הגרסה המסחרית של HAProxy. תוכל לפרסם שאלות או מחשבות דרך טופס המשוב למטה.
Source:
https://www.tecmint.com/setup-nginx-haproxy-load-balancer-in-centos-8/