מיקרוסופט SQL ללינוקס – ההמשך

לפני כשנה כתבתי את הפוסט הזה לגבי Microsoft SQL 2017 גירסת לינוקס שמיקרוסופט הוציאה. מיקרוסופט הסבה את המוצר ללינוקס מכמה סיבות:

  • לכבוש נתח שוק מאורקל
  • לנסות לחדור לכל מיני שווקים שמשתמשים רק בלינוקס

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

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

מיקרוסופט הוכיחה לאחרונה שאין צורך לחשוש. הם בהחלט ממשיכים עם גירסת לינוקס ל-SQL עם Microsoft SQL 2019.

בגירסה החדשה ללינוקס, מיקרוסופט הוסיפה חלקים שלא היו קיימים ב-SQL 2017 ולראשונה יש תמיכה לא רק להרצה בתוך Docker אלא בתוך Kubernetes (אפשר לראות מה חדש כאן) וסוף סוף יש גם רפליקציה טבעית, תמיכה ל-PV/PVC (כלומר Persistent Volumes). הדוגמאות שמיקרוסופט נותנת בתיעוד קשורות אמנם ל-Azure אבל אני מאמין שזה ירוץ גם על Kubernetes מקומי ובשרותים של ספקי ענן ציבוריים מתחרים.

הבעיה היחידה שאני רואה קשורה יותר לתמחור. SQL בסביבה רגילה במצב שרידותי עובד ב-2 שרתים, הן Active/Passive או Active/Active וזה עובד יפה, אך ב-Kubernetes הדברים שונים לחלוטין, אין Active/Passive ודברים כאלו, יש רפליקציות של Pods וקונטיינרים לפי הגדרות שמחליטים, לדוגמא: אם משאבי זכרון/מעבד מגיעים ל-90% – תרים Pod נוסף עם הקונטיינרים הרלוונטיים, בצע Load Balance (תלוי בשכבת הרשת שהוגדרה ל-Kubernetes) בין ה-Pods שמריצים את ה-SQL. מה המחיר שמיקרוסופט תגבה על כל SQL כזה? אי אפשר לגבות מחיר בשיטה הישנה של Cluster.

לסיכום: לא מעט גופים מתחילים/התחילו לעבור לקונטיינרים ורצו או רוצים להשתמש ב-SQL של מיקרוסופט כי מדובר במוצר חזק ויציב והם מאוד שמחים שמיקרוסופט משחררת גירסה ללינוקס כך שאין צורך "לערבב" בין שרתי Windows ללינוקס (במיוחד בסביבות שזה מאוד בעייתי – כמו בעננים ציבוריים). המוצר עצמו יותר "בוגר" בהשוואה ל-SQL 2017 (אני חייב לציין שמיקרוסופט עשתה עבודה ממש מעולה הן בשחרור המוצר והן בתמיכה להפצות לינוקס שונות) – הדבר שיקבע אם הם ישתמשו בכך או לא – יהיה המחיר.

כמה מילים על Microsoft SQL 2017 ללינוקס

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

אתחיל במידע כללי: מדוע מיקרוסופט בעצם שחררה את שרת ה-SQL שלה ללינוקס? התשובה די פשוטה: להתחרות מול אורקל ולהציע לחברות שמריצות לינוקס בפרודקשן בגלל היציבות – את שרת ה-SQL שלהם. בדרך להציע זאת ללקוחות, מיקרוסופט פתחה לעצמה פתח להציע דברים אחרים ללקוחות עם Linux עם פרויקט Draw bridge וזאת מבלי לשנות שום קבצים באפליקציה שלהם ומבלי לשבור תאימות, כך שהכלים של SQL ב-Windows יוכלו להתחבר לשרת לינוקס ולעשות את אותה עבודה. כלל, מבחינה טכנית, כשאתם מורידים SQL Server של מיקרוסופט ללינוקס, אתם מקבלים את האפליקציה + ספריות וגם קבצים בינאריים של .. Windows 8 (אפשר לקרוא על כך ולשחק עם זה, למעוניינים. פרטים כאן).

נעבור לאספקט הטכני: שרת SQL של מיקרוסופט ללינוקס נראה בדיוק כמו כל אפליקציה אחרת ללינוקס. כשרוצים להתקין לדוגמא על שרת CentOS או RHEL או SLE של SuSE – מורידים קובץ אחד של REPO ומשתמשים ב-YUM להתקין (או zypper במקרה של SuSE) (לצערי מיקרוסופט לא כל כך עקבו אחרי תקן ה-LSB ללינוקס והקבצים ימצאו ב-var/opt/mssql/ בשעה שהסטנדרט מדבר על opt/). הנה וידאו על התקנה של SQL על CentOS 7 כולל שימוש בכלי חדש של מיקרוסופט לעבוד עם ה-SQL (אפשר לעבוד כמובן גם עם הכלים הרגילים):

וכאן יש וידאו כיצד לבצע Auto Tune עם SQL על לינוקס:

כלומר מבחינת עבודה עם SQL Server של מיקרוסופט, אתם יכולים לעבוד עליו בדיוק כאילו התקנתם אותו על שרת Windows. הרשיון הוא אותו רשיון ואין צורך בתשלום נוסף ולאנשי ה-DBA אין שינוי כלשהו שצריך לבצע. לעומת זאת, לאנשים שאוהבים לעבוד ב-CLI, מיקרוסופט מספקת את mssql-cli שמאפשר עבודה ב-cli (כפי שמודגם בוידאו הראשון) ויש גם את פקודת sqlcli שמאפשרת לגבות DB, לשחזר וכו' וכו'. מנסיוני, ה-sqlcli עובד יפה (רק חבל שמיקרוסופט לא הטמיעו שיטה להכנסת סיסמאות מוצפנות דרך ה-cli).

אחד העניינים שכמובן חברות גדולות יתעניינו בו, הוא עניין האשכולות (Clusters). מה עושים כשרוצים להריץ SQL Server כ-Cluster בתשתית? התשובה במקרה הזה די פשוטה: משתמשים בכלי לינוקס כמו CoroSync ו-PaceMaker כדי לבצע זאת (הוראות נמצאות כאן).

אבל אחד היתרונות הגדולים של SQL Server של מיקרוסופט בלינוקס – זה שאפשר להריץ אותו כקונטיינר, ואז כל עניין ה-Cluster מתייתר. כל מה שצריך לעשות זה להריץ את גירסת הקונטיינר של SQL Server של מיקרוסופט תחת Kubernetes או OpenShift ואז תקבלו לא רק ביצועים גבוהים, אלא שרידות הרבה יותר גבוהה ממה שהייתם משיגים מכל פתרון Cluster קלאסי (לינוקס או Windows), החל מרמה פשוטה של הרצת SQL ב-Pod שכשהוא נופל אוטומטית Pod אחר קם ואז ניתן לעבוד שוב, וכלה בפתרון של הרצת 3 PODs כשבכל אחד מהם רץ SQL Server וכאשר אחד מהם נופל, מתקיים תהליך "בחירות" אוטומטי והזוכה נהיה ה-Primary. אפשר לראות הדגמה של כך בלינק הזה.

לסיכום: SQL Server של מיקרוסופט מאפשר לכם לעבור מ-Windows ללינוקס מבלי להיתקל ביותר מדי בעיות ומבלי לשלם על רשיון SQL נוסף. תגבו את כל ה-DB בגירסת SQL ל-Windows, תקימו SQL Server ללינוקס, תשחזרו נתונים על הלינוקס ותתחילו לעבוד (וכן, אפשר לחבר את המכונה ל-AD). אתם יכולים גם להשתמש בכלי אוטומציה שקיימים ללינוקס ולבצע פעולות רבות על ה-SQL ללינוקס בדיוק כמו לכל שרת לינוקס אחר. אין Kernel Modules (מיקרוסופט העיפה את כל ה-syscalls של Windows) כך ששום דבר לא אמור להפריע למערכת לעבוד בצורה נורמלית, יש את כל התמיכה ב-SystemD וכן .. זה רץ גם על אובונטו 🙂