חלק מהמערכות תומכות גם בשכפול עם מספר עותקים ראשיים בו ניתן לבצע את העדכונים בכל אחד מעותקי מסד נתונים ולאחר מכן הם מופצים למסדי הנתונים האחרים. בעוד זהו לעיתים קרובות המצב הרצוי הרי הוא מגדיל באופן משמעותי את העלויות והמורכבות של המערכת במידה העלולה להפוך אותה לבלתי מעשית במצבים מסוימים. הבעיה הנפוצה בסוג כזה של מערכות היא מניעת התנגשויות בין טרנזקציות או פתרון שלהן. רוב הפתרונות למניעת התנגשויות הם סנכרוניים או כאלו הדורשים את כל הנתונים, בעוד הפתרונות האסינכרוניים דורשים פתרון של ההתנגשויות. לדוגמה, אם רשומה שונתה בשני מחשבים בו זמנית, מערכת השכפול הדורשת את כל הנתונים מאתרת את הבעיה לפני מתן האישור לבצע את הפעולה ומבטלת את הטרנזקציה בעוד מערכת שכפול שאיננה דורשת את כל הנתונים תאפשר לשתי הטרנזקציות להתבצע ותפעיל פתרון להתנגשויות במהלך הסינכרון מחדש. ההחלטה על פתרון התנגשויות כזה עשויה להיות מבוססת על חותמת הזמן של הטרנזקציה, על היררכיה של השרתים או על לוגיקה מורכבת יותר אשר חייבת להיות עקבית בכל המחשבים.
באופן עקרוני השכפול של מסד נתונים הופך קשה ככל שהמערכת גדלה. בדרך כלל, מודדים את ההיקף בשני ממדים - אופקי ואנכי: המימד האופקי מודד את מספר העותקים של הנתונים והסולם האנכי את העתקי הנתונים הממוקמים במקום מרוחק.
גישות מקובלות לשכפול נתונים במערכות מסדי נתונים כוללות את:
בנוסף לגישות אלו המתמקדות בשכפול "פנימי" של מסד הנתונים ניתן לשכפל (גם או רק) את האחסון עליו נשמרים קובצי מסד הנתונים. למשל אורקל תומך ב־ASM שהוא סוג של LVM המיועד למטרה זו ומסדי נתונים אחרים תומכים במערכות חיצוניות למטרה זו (לדוגמה MySQL תומך ב־DBRD למטרה זו). יצירת תמונת נתונים (כל הנתונים בזמן מסוים) נתמכת על ידי סוגי מסדי הנתונים - על ידי רישום של הפעולות שבוצעו ביומן, או על ידי שמירת רישום של הפעולות האחרונות במסד הנתונים (למשל rollback segments או undo tablespace באורקל) או על ידי יצירת תמונות בקבצים נפרדים (למשל ב־SQL Serever בסיוע Volume Shadow Copy Service של חלונות). גם אשכולות יכולים לשמש למטרה זו (דוגמאות לכך כוללות את RAC של אורקל ושימוש ב־memcached עבור MySQL).
ניתן גם לבצע את השכפול באמצעות וירטואלזציה של מסד הנתונים (בין אם בצד השרת ובין אם בצד הלקוח) כך שכל פעולת כתיבה תכתב למספר מסדי נתונים.
תוצאות השכפול יכולות (עם תלות מסוימת בגישה בה משתמשים בשביל לבצע את השכפול) להיות משלושה סוגים:
שכפול האחסון.
שכפול פעיל (בזמן אמת) של האחסון מיושם בדרך כלל על ידי הפצת עדכונים של התקן הבלוקים של הדיסק הלוגי לכמה דיסקים פיזיים כך שניתן לשכפל את כל מערכות הקבצים הנתמכות על ידי מערכת משום שקוד מערכת הקבצים עובד מעל לשכבה זו. יכולת זו יכולה להיות מיושמת בחומרה (בבקר מערך הדיסקים, ב־HBA או בהתקן רשת) או בתוכנה (במנהל ההתקן).
השיטה הבסיסית ביותר למימוש השכפול של האחסון היא שיקוף דיסק והיא זו שנמצאת לרוב בשימוש עבור דיסקים המחוברים ישירות לשרת (DAS). ההבדלה בין שיקוף לשכפול היא לוגית יותר מאשר מעשית, כאשר שיקוף מתייחס לרוב לפעולה מקומית (ולא על שימוש בשכפול מרחוק) ולעומת זאת שכפול ניתן לביצוע בכל נקודה ברחבי הרשת כך שאת הדיסקים ניתן למקם במקומות רחוקים פיזית.
שכפול מרוחק נועד למנוע את הנזק שעלול להיגרם במקרה של כשלים מקומיים או אסונות ולשפר את הזמינות של הנתונים, בדרך כלל על ידי שימוש במודל ראשי-משני.
פתרונות אלו מסווגים לרוב לפי טיפולם בפעולות כתיבה:
שלושת סוגי השכפולים הראשונים מחייבים שמירה על סדר הכתיבה של הנתונים וזאת מכיוון שמרבית התוכנות דורשות כתיבת הנתונים בסדר מסוים ובמיוחד למקרים של דריסת הנתונים הישנים על ידי נתונים מאוחרים יותר, בלי הקפדה זו הנתונים המאוחרים עשויים להיכתב בעוד קודמיהם לא נכתבו ובכך להשאיר את המערכת בלתי עקבית ולעיתים קרובות גם בלתי שמישה.
שכפול מבוסס שרת.
בשיטה זו השכפול מבוצע בשרת היישומים (או לעיתים בשרת הקבצים) על ידי תוכנה (בדרך כלל מערכת הקבצים או ה־LVM) התומכת בתמונות מידע או שכפול מרחוק (או בשניהם) והוא לרוב שקוף ליישום. במקרה של שכפול מרוחק, סוג של פתרון בדרך כלל דורש עוד שרת (שרת היעד) הפועל באתר מרוחק כיעד עבור הנתונים המשוכפלים (באופן סינכרוני או אסכרוני, דרך ה־LAN, ה־WAN או ה־SAN) ומחליף את השרת הראשי כאשר מתרחשת תקלה.
גרסה שונה במקצת של שיטה זו מאפשרת שכפול של קבצים ספציפיים, מה שעשוי להקל על העתקה למערכת הפעלה אחרת (או לגרסה שונה על אותה מערכת הפעלה). שכפול כזה עשוי לאפשר שימוש בפרוטוקולים סטנדרטיים להעתקה כזאת כמו FTP ובכך לבטל את הצורך בתוכנה ייעודית באחד מהצדדים.
חלק מהפתרונות מבוססי התוכנה יכולים לשכפל את הנתונים למכשיר ייעודי באתר היעד, מה שמבטל את הצורך בהפעלה קבועה של שרת הגיבוי ואף עשוי לאפשר לא להפעילו כלל (מה שעלול להאריך את זמן ההתאוששות). כמה פתרונות מבוססי שרת יכולים אפילו לבטל כפולות נתונים בשרת על מנת להקטין את דרישות רוחב הפס לאתר הגיבוי.
שכפול מבוסס שרת עשוי להתבצע על ידי מודלים של מערכות ההפעלה המספקים שירותי שכפול נתונים בסיסיים כגון Microsoft Data Protection Manager (DPM) או מערכת המבוססת על פתרונות של ZFS, QFS. ו־SAMfs.
כאשר משתמשים במכונה וירטואלית ניתן להשתמש במערכות הרצות על סביבת השרת הפיזי (ואז הן מאפשרות שכפול עבור כל המכונות הווירטואליות) או על המכונה הווירטואלית (ואז יש צורך במנגנון שכפול נפרד עבור כל מכונה וירטואלית).
יתרונות של השיטה הזאת כוללים:
חסרונותיה של השיטה כוללים בין השאר:
מימושים נפוצים:
שכפול בהתקני הרשת.
שכפול מבוסס רשת (המכונה גם שכפול מבוסס SAN) תומך בכל סוגי השכפול ומתבצע בהתקן אשר נמצא בנתיב הקלט/פלט בין השרת לבין האחסון, בדרך כלל ברשת ה־SAN. ההתקן בודק האם כתובת היעד של פעולת הקלט/פלט הנכנסת מתייחסת לאחסון המשוכפל ואם כן הוא מעביר עותק (הנחשב מבחינה טכנית לפעולה חדשה) של פעולת הקלט/פלט ליעד השכפול. פתרון כזה מועיל בעיקר במערכות הטרוגניות, כאלו שיש בהם הן מערכות אחסון והן מערכות הפעלה שונות כך שאין אפשרות לבצע את תהליך השכפול על מערכות האחסון או על השרתים עצמם (עם זאת, בדרך כלל יש צורך בהומוגניות בין התקני הרשת עצמם). לחלק ממערכות יש תמיכה בשכפול גם במקרה שרשת ה־SAN מועברת על גבי רשת IP רגילה (למשל באמצעות פרוטוקול iSCSI).
ההתקנים המיישמים מערכות כזו מספקים לעיתים קרובות גם יכולות אחסון אחרות כמו וירטואליציה של האחסון וביטול כפילויות והם יכולים לשלב גם מימוש של מערכות רשתיות אחרות (למשל Switch).
ישנן שתי גרסאות עיקריות של מנגנון כזה:
יתרונות שיטה זו:
חסרונותיה של שיטה זו:
מימושים נפוצים:
שכפול מבוסס מערך דיסקים.
שכפול מבוסס מערך הדיסקים משתמש במערכת המיחשובית הקיימת במערך הדיסקים (SAN או NAS) כדי לשכפל את הנתונים ישירות אל מערך אחסון אחר מאותו סוג (או לעיתים נדירות, מסוג אחר). גישה זו נחשבת לבשלה ביותר וניתן לבצעה בכמעט כל פלטפורמת שרת או מערכת הפעלה, כולל מערכות שקשה להשיג להם תמיכה בגישות האחרות כמו מיינפריים (שם זאת גישת שכפול האחסון הנפוצה ביותר), שרתי AS400 ומערכות VMS. למעשה יכולת השכפול בגישה זו היוותה אף אחת מהסיבות העיקריות לאימוץ SAN על ידי ארגונים רבים.
יתרונותיה של השיטה כוללים:
חסרונותיה של השיטה כוללים:
מימושים נפוצים:
שכפול בזיכרון משותף מבוזר.
בזיכרון משותף מבוזר שרתים רבים חולקים את אותו דף זיכרון כאשר בדרך כלל לכל שרת יש עותק נפרד של דף זה, מצב המחייב שכפול של המידע בין השרתים. השכפול יכול להיות חלקי כלומר יש רק שרת מרכזי אחד שבו כותבים (ואז יש צורך במנהל של סט הנתונים שיכול להיות קבוע או דינמי) או להיות מלא כאשר כל הכתיבה יכולה להתבצע בכל שרת. וראציות נוספות של תהליך כזה כוללות העברה של נתונים הזקוקים לעדכון בלבד ועדכון לפי עלות (זמן, משאבים וכיוצא באלו). מנגנון כזה עשוי להיות ממומש בתוכנה (ספריה תוכנה, מערכת ההפעלה, שפת התכנות וכדומה), בחומרה (שכפול השקוף לתוכנה שנעשה במעבד או באפיק המחשב) או משולב. מנגנון כתיבה מחייב שמירה על עקביות ולכן נדרש פרוטוקול כתיבה לעותקים. המימוש בתוכנה עשוי להתרחש בתגובה לתקלת דף או על שימוש ביכולות סנכרון בין תהליכים (קטע קריטי למשל).
שכפול ראשי-גיבוי ושרתים ראשיים מרובים.
גישות קלאסיות רבות לשכפול מבוססות על מודל ראשי-גיבוי בו להתקן אחד או לתהליך אחד יש שליטה חד צדדית על אחד או יותר תהליכים או התקנים אחרים. לדוגמה, השרת הראשי מבצע חישוב מסוים, מעביר את יומן עדכונים לתהליך גיבוי (שבהמתנה), שיכול לבצע את החישוב במקרה של כשל התהליך הראשי. גישה זו היא אחת הנפוצות ביותר עבור שכפול מסדי נתונים, למרות הסיכון כי אם חלק ביומן יאבד במהלך הכישלון, הגיבוי לא יכול להיות במצב זהה לזה שהראשי היה בו וטרנזקציות עלולות ללכת לאיבוד.
חיסרון נוסף של גישת ראשי-גיבוי הוא הצורך בהגדרה של שני תהליכים היכולים להיות פעילים בזמן שרק אחד הוא למעשה מבצע את הפעולות כך שמתקבלת אמנם סובלנות לתקלות אבל העלות מוכפלת על מנת להשיג את התכונה הזו. מסיבה זו, החלו להיחקר באמצע שנות השמונים שיטות אלטרנטיביות של שכפול נתונים במערכות מבוזרות ומהן נוצרה קבוצה של אפשרויות שבהן קבוצת עותקים יכולה לשתף פעולה, בעוד כל תהליך מגבה את האחרים וכולם מתחלקים בעבודה.