איך להגדיר העתקה של Redis (עם מצב קרן כבוי) ב־CentOS 8 – חלק 1

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

הוא מציע סט רחב של תכונות שהופכות אותו ליעיל למגוון רחב של מקרים שימוש: כמסד נתונים, שכבת מטמון, שרת הודעות או תור; רלוונטי ביישומים אינטרנטיים, יישומי צ'אט והודעות, משחקים, ניתוחי נתונים בזמן אמת ועוד רבים וטובים.

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

הוא כולל גם נפילות אוטומטיות להפעלה בזמינות גבוהה דרך סנטינל של רדיס, סקריפטים ב־Lua, עסקאות, ועוד רבים וטובים.לרדיס כדאיות מסוימת בביצועים מעל מערכות מסדי נתונים מסורתיות (כמו MySQL/MariaDB, PostgreSQL, וכו'), מכיוון שכל הנתונים שלו נמצאים בזיכרון או מאוחסנים בזיכרון, מה שהופך אותם לזמינים בקלות ליישום, גם אם מסדי נתונים מסורתיים חייבים לכתוב או לקרוא את כל הנתונים מדיסק או ממקור חיצוני.

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

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

Part 1: How To Setup Redis Replication(with Cluster-Mode Disabled) in CentOS 8

מדריך זה מראה כיצד להגדיר שיבוץ של Redis (עם מצב אשכול מנוטרל) ב־ CentOS 8 Linux, כולל התקנת Redis, הגדרת המאסטר והרפליקות, ובדיקת השיבוץ.

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

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

  1. שרתים עם התקנת CentOS 8

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

Redis Master Server: 10.42.0.247
Redis Replica1/Slave1: 10.42.0.21
Redis Replica2/Slave2: 10.42.0.34
Logical Representation of Redis Replication Diagram

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

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

שלב 1: התקנת Redis על CentOS 8

1. תחילה, יש להיכנס לכל נודות CentOS 8 באמצעות SSH, ולהתקין את חבילת Redis בכל הנודות (מאסטר ורפליקות) באמצעות מנהל החבילות DNF כפי שמוצג.

# dnf install @redis

2. לאחר התקנת חבילת Redis, יש להפעיל את שירות ה Redis, לאפשר לו להתחיל אוטומטית בכל אתחול של המערכת ולבדוק שהוא פועל ככה.

# systemctl start redis
# systemctl enable redis
# systemctl status redis

3. ניתן גם לאמת שהשרת Redis פועל על ידי בדיקת הפורטים המאזינים באמצעות הפקודה ss, כפי שמוצג.

# ss -ltpn | grep redis-server
Confirm Redis Server Ports

שלב 2: הגדרת שרת המאסטר של Redis

4. רדיס מוגדר באמצעות קובץ התצורה /etc/redis.conf, קובץ התצורה הדוגמא המתיעות עצמו. תחילה, צרו גיבוי של הקובץ המקורי, ואז פתחו אותו לעריכה באמצעות העורך שלכם בשורת פקודה שתבחרו.

# cp /etc/redis.conf /etc/redis.conf.org
# vi /etc/redis.conf

5. כברירת מחדל, אינסטנס של רדיס מוגדר להאזין ולקבל חיבורים על ממשק ה־loopback, באמצעות ההכוונה ב־bind. כדי לתקשר עם השובצים, יש להגדיר את המאסטר להאזין בכתובת ה־IPv4 של הלולאה ואת כתובת ה־LAN שלו, כמו למשל 10.42.0.247.

bind 127.0.0.1 10.42.0.247

6. לאחר מכן, עלינו להגדיר את הפרמטר של מצב ההגנה ל־no כדי לאפשר תקשורת עם השובצים כמופיע למטה.

protected-mode no

בנוסף, רדיס מאזין בפורט 6379 שמוגדר באמצעות ההכוונה ב־port. זהו פורט הנתונים לתקשורת עם ממשקי ה־API של היישום או לקוחות CLI.

port 6379
Configuring Redis Master Server

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

נשתמש באפשרות הבאה למטרות הדגמה, כדי להראות איך זה עובד.

requirepass  Securep@55Here
Set Authentication Password

8. גם יומני ה-Redis מאוחסנים בקובץ /var/log/redis/redis.log, כך מוגדר באמצעות ההוראה logfile ורמת ההתראה ברירת המחדל של השרת היא notice, המוגדרת באמצעות הפרמטר loglevel.

loglevel  notice
logfile  /var/log/redis/redis.log
Set Redis Log File and Log Level

9. מאחר ו־systemd היא המנהלת המוגדרת כברירת מחדל של המערכת והשירותים ב־CentOS 8, ניתן להגדיר את Redis לשיתוף פעולה עם עץ הפיקוח של systemd על ידי הגדרת הפרמטר supervised ל־systemd.

supervised systemd
Set Redis Supervisor to Systemd

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

# systemctl daemon-reload
# systemctl restart redis

11. כדי לגשת לשרת ה־Redis, עלינו להשתמש ב־redis-cli (ממשק שורת פקודה ל־redis-server). בברירת מחדל, הוא מתחבר לשרת ב־localhost (ב־127.0.0.1 פורט 6379). שים לב כי מכיוון שהשרת מאובטח מלקוחות באמצעות סיסמה, הרצת פקודה לפני האימות צריכה להיכשל.

השתמש בפקודת auth כדי לספק את סיסמת האימות כפי שמוצג בצילום המסך הבא.

# redis-cli
127.0.0.1:6379> client list
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> client list
Access Redis Server via Redis CLI

12. כדי להתחבר ל־רפליקה (לאחר הגדרתם כפי שמתואר בסעיף הבא), השתמש באפשרויות -h ו־-p כדי לציין את כתובת ה־IP/שם המארח של הרפליקה והפורט בהתאמה (שים לב שהפורט 6379 חייב להיות פתוח בגיה של הרפליקה).

# redis-cli -h 10.42.0.21 -p 6379

13. לאחר מכן, פתח את יציאת הנתונים של שרת Redis בגישת האש כדי לאפשר חיבורים נכנסים לשרת הראש, ולאחר מכן טען מחדש את כללי האש באמצעות הפקודה firewall-cmd כפי שמוצג.

# firewall-cmd --zone=public --permanent --add-port=6379/tcp 
# firewall-cmd --reload

שלב 3: הגדרת שרתי Redis כעת שולה/עבד

14. כדי להגדיר במהירות אינסטנס של Redis כשולה באופן מיידי, השתמש בכלי ה-redis-cli וקרא לפקודת REPLICAOF כפי שמוצג.

# redis-cli replicaof 10.42.0.247 6379
OR
# redis-cli
127.0.0.1:6379> REPLICAOF 10.42.0.247 6379
Connect to a Master Redis Instance

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

# cp /etc/redis.conf /etc/redis.conf.org
# vi /etc/redis.conf

16. כדי לאפשר ללקוחות להתחבר לשולה כדי לקרוא נתונים, הוסף את כתובת ה-IP של השולה להכוון של הפקודה bind.

# replica1
bind 127.0.0.1 10.42.0.21

# replica2
bind 127.0.0.1 10.42.0.34

הגדרת אינסטנס של Redis כשולה

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

replicaof 10.42.0.247 6379

הגדרת השולה לאומת לראש

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

masterauth Securep@55Here

19.בנוסף, כאשר כפול מאבד את החיבור שלו עם הראשי, או כאשר השקעה מתבצעת, הכפול מוגדר להגיב לבקשות הלקוח עם נתונים "לא מעודכנים" אולי. אך אם זו הסנכרון הראשון, אז סט הנתונים עשוי פשוט להיות ריק. ההתנהגות הזו מופעלת על ידי פרמטר ה-replica-serve-stale-data.

ומאז Redis 2.6, כפולות כברירת מחדל הם לקריאה בלבד, זה נשלט על ידי הפרמטר replica-read-only. ניתן לבצע התאמות נוספות של הגדרות כפולות כדי להתאים את היישום שלך.

20. לאחר שביצעת את כל השינויים הדרושים, אנא הפעל שוב את שירות ה-Redis בכל הכפולות.

# systemctl restart redis

21. כמו כן, פתח את היציאה 6379 בגדר האש לאפשר חיבורים מהראשי ומלקוחות לכפולות, וטען מחדש את חוקי האש.

# firewall-cmd --zone=public --permanenent --add-port=6379/tcp
# firewall-cmd --reload

שלב 4: בדוק את מצב השקעה ראשי-כפולות

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

בראשי, הפעל את הפקודות הבאות.

# redis-cli
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> info replication
Check Redis Relocation Info on Master

23. כמו כן, בדוק את מצב השקעה על הכפולות/עבדים כך.

# redis-cli
127.0.0.1:6379> info replication
Check Redis Replication Info on Redis Replica 1
Check Redis Replication Info on Redis Replica 2

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

בראשי, עשה את זה:

# redis-cli
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> set domain 'www.tecmint.com'
Set Key Value in Master Instance

24. אז בדוק האם הנתונים סונכרנו לכפולות כפי שמוצג.

# redis-cli
127.0.0.1:6379> get domain
Check Data Sync Status on Replicas

הגנה על המופע הראשי נגד סיכון לאיבוד כתיבות מסוימות

25. ל-Redis יש תכונה המאפשרת למופע ראשי להגביל את הסיכון לאיבוד כתיבות מסוימות במקרה ואין מספיק עותקים זמינים, למספר שניות מסוים.

זה אומר שראשי יכול להפסיק לקבל כתיבות אם יש פחות מ-N עותקים מחוברים, עם פער של שווה או פחות מ-M שניות, כפי שנשלט על ידי האפשרויות min-replicas-to-write ו-min-replicas-max-lag בהתאמה.

כדי להגדיר אותם, הסר את ההערה מהם והגדר את הערכים לפי דרישות ההתקנה שלך ב-/etc/redis.conf, כפי שמוצג בצילום המסך הבא. התצורה הזו אומרת ש, מהפינג האחרון לעותקים, לאחר 10 שניות, אם יש פחות משני עותקים מקוונים, הראשי יפסיק לקבל כתיבות.

min-replicas-to-write 2
min-replicas-max-lag 10
Protecting the Redis Master Against Loss of Write

תוכל למצוא עוד אפשרויות בשאר קובץ התצורה /etc/redis.conf ולקרוא עוד על ריפליקציה ב-תיעוד Redis.

במאמר הבא, נכסה איך להגדיר את Redis לזמינות גבוהה עם Sentinel ב-CentOS 8. עד אז, הישארו מחוברים וזכרו לשתף את דעותיכם ושאלותיכם באמצעות טופס ההערות שלנו למטה הוא זמין עבורכם ליצירת קשר.

Source:
https://www.tecmint.com/setup-redis-replication-in-centos-8/