שמי פטר זייצב, אני המנכ"ל, מייסד ואני רוצה להגיד לך:
- איך הגענו מפתרונות קוד פתוח ל-Database as a Service;
- אילו גישות קיימות לפריסת מסדי נתונים בענן;
- כיצד Kubernetes יכול להחליף את DBaaS, לבטל את התלות בספקים ולשמור על הפשטות של DBMS כשירות.
המאמר הוכן על סמך דוח ב-@Databases Meetup על ידי Mail.ru Cloud Solutions & Tarantool. אם אתה לא רוצה לקרוא, אתה יכול לצפות:

איך הגענו מקוד פתוח ל-Database as a Service בענן
אני עובד בקוד פתוח מאז סוף שנות ה-90. לפני XNUMX שנה, השימוש בקוד פתוח, כמו מסדי נתונים, לא היה כל כך קל. היה צורך להוריד את קוד המקור, לתקן אותו, לקמפל אותו ורק אז להשתמש בו.
הקוד הפתוח עבר אז סדרה של הפשטות:
- מקורות Tar.gz ו-INSTALL שהיו צריכים להידור;
- חבילות עם תלות כמו .deb ו-.rpm, שבהן אתה רק צריך להתקין קבוצה של חבילות;
- מאגרי חבילות כמו APT ו-YUM, שאיתם ההתקנה היא אוטומטית;
- פתרונות כגון Docker ו-Snap, המאפשרים לקבל חבילות בהתקנה ללא תלות חיצונית.
כתוצאה מכך, קל יותר להשתמש בתוכנת קוד פתוח וגם מוריד את מחסום הכניסה לפיתוח יישומים כאלה.
יחד עם זאת, בניגוד למצב לפני 20 שנה, כשכולם היו מומחים להרכבה, כיום רוב המפתחים לא יכולים לבנות את הכלים שהם משתמשים בהם מהמקור.
למעשה, זה לא רע, כי:
- אנחנו יכולים להשתמש בתוכנה מורכבת יותר אך ידידותית יותר למשתמש. לדוגמה, דפדפן נוח לשימוש, אך הוא כולל רכיבי קוד פתוח רבים ואינו נוח לבנייה מאפס.
- יותר אנשים יכולים להפוך למפתחי קוד פתוח ותוכנות אחרות, יותר תוכנות משמשות עסקים, והצורך בה גדול יותר.
החיסרון הוא שהשלב הבא בפישוט קשור לשימוש בפתרונות ענן, וזה מוביל לנעילה מסוימת של ספקים, כלומר התחייבות לספק אחד. אנו משתמשים בפתרונות פשוטים וספקים משתמשים ברכיבי קוד פתוח, אך למעשה הם ממוסמרים לאחד העננים הגדולים. כלומר, הדרך הקלה והמהירה ביותר לפרוס קוד פתוח (ותוכנות התואמות לו) היא בעננים, באמצעות API קנייני.
כשזה מגיע לבסיסי נתונים בענן, ישנן שתי גישות:
- הרכב את תשתית מסד הנתונים כמו במרכז נתונים רגיל. כלומר, לקחת את אבני הבניין הסטנדרטיות: מחשוב, אחסון וכן הלאה, ולהתקין אותן. Linux, מסד נתונים, הגדרה.
- השתמש ב-Database as a Service, כאשר הספק מציע מסד נתונים מוכן בתוך הענן.
DBaaS הוא שוק שצומח במהירות כעת מכיוון שהוא מאפשר למפתחים לעבוד ישירות עם מסדי נתונים ומצמצם את העבודה השגרתית. הספק מתחייב להבטיח זמינות גבוהה ושינוי קנה מידה קל, תיקון מסד נתונים, גיבויים וכוונון ביצועים.
שני סוגים של מסד נתונים כשירות המבוסס על קוד פתוח ואלטרנטיבה בצורה של Kubernetes
ישנם שני סוגים של מסד נתונים כשירות עבור מסדי נתונים פתוחים:
- מוצר קוד פתוח סטנדרטי ארוז ב-backend של ניהול לפריסה וניהול קלים.
- פתרון מסחרי מתקדם עם תוספות שונות, תואם קוד פתוח.
שתי האפשרויות מפחיתות את אפשרות ההגירה בין העננים ומצמצמות את ניידות הנתונים והאפליקציות. למשל, למרות העובדה שסוגים שונים של עננים תומכים בעצם באותו MySQL סטנדרטי, ישנם הבדלים משמעותיים ביניהם: בתפעול, בביצועים, בגיבוי וכדומה. מעבר מענן אחד למשנהו יכול להיות מאתגר, במיוחד עבור יישומים מורכבים.
וכאן נשאלת השאלה - האם ניתן לקבל את הנוחות של Database as a Service, אלא כפתרון פשוט בקוד פתוח?
החדשות הרעות הן שלמרבה הצער, עדיין אין פתרונות כאלה בשוק. החדשות הטובות הן שיש Kubernetes, שמאפשרת ליישם פתרונות כאלה.
Kubernetes היא מערכת הפעלה לענן או למרכז הנתונים המאפשרת לך לפרוס ולנהל אפליקציה על פני מספר שרתים באשכול ולא על מארח יחיד.
כעת Kubernetes היא המובילה בקטגוריית תוכנות כאלה. היו הרבה פתרונות שונים לבעיות כאלה, אבל זה הפך לסטנדרט. חברות רבות שבעבר התמקדו בפתרונות חלופיים מתמקדות כעת בהתאמת המוצרים שלהן לתמיכה ב-Kubernetes.
בנוסף, Kubernetes הוא פתרון אוניברסלי הנתמך בעננים פרטיים, ציבוריים והיברידיים של ספקים רבים, למשל: AWS, Google Cloud, Microsoft Azure, .
איך Kubernetes עובד עם מסדי נתונים
Kubernetes תוכנן במקור עבור יישומים חסרי מדינה המעבדים נתונים אך אינם מאחסנים דבר, כגון שירותי מיקרו או יישומי אינטרנט. מסדי נתונים נמצאים בקצה השני של הספקטרום, כלומר, הם יישומים סטטיסטיים. ו-Kubernetes לא נועד במקור ליישומים כאלה.
עם זאת, ישנן תכונות שהופיעו ב-Kubernetes לאחרונה המאפשרות שימוש בבסיסי נתונים ויישומים מתקינים אחרים:
- הקונספט של StatefulSet הוא סדרה שלמה של פרימיטיבים לעיבוד אירועים בנושא הפסקת עבודת הפודים והטמעת Graceful Shutdown (כיבוי צפוי של האפליקציה).
- נפחים מתמשכים הם מאגרי נתונים המשויכים ל-pods, אובייקטי ניהול Kubernetes.
- Operator Framework - כלומר, היכולת ליצור רכיבים לניהול מסדי נתונים ויישומים מצביים אחרים המופצים על פני צמתים רבים.
כבר עכשיו בעננים ציבוריים יש מסדי נתונים גדולים כשירות, שהקצה האחורי שלהם הוא Kubernetes, למשל: CockroachCloud, InfluxDB, PlanetScale. כלומר, מסד נתונים על Kubernetes הוא לא רק דבר אפשרי תיאורטית, אלא גם משהו שעובד בפועל.
לפרקונה יש שני פתרונות קוד פתוח עבור Kubernetes:
- מפעיל Kubernetes עבור Percona Server עבור MongoDB.
- Kubernetes Operator for XtraDB CLUSTER הוא שירות התואם ל-MySQL ומספק זמינות גבוהה ועקביות. אתה יכול גם להשתמש בצומת בודד אם אין צורך בזמינות גבוהה, למשל עבור מסד נתונים של מפתחים.
ניתן לחלק את משתמשי Kubernetes לשתי קבוצות. יש אנשים שמשתמשים ישירות ב-Kubernetes Operators - אלו הם בעיקר משתמשים מתקדמים שיש להם הבנה טובה של איך הטכנולוגיה עובדת. אחרים מריצים את זה ב-backend - משתמשים כאלה מעוניינים במשהו כמו Database as a Service, הם לא רוצים להתעמק בניואנסים של Kubernetes. לקבוצת המשתמשים השנייה, יש לנו פתרון קוד פתוח נוסף - Percona DBaaS CLI Tool. זהו פתרון ניסיוני למי שרוצה לקבל DBaaS בקוד פתוח המבוסס על Kubernetes ללא הבנה מעמיקה של הטכנולוגיה.
כיצד להפעיל את DBaaS של Percona במנוע Google Kubernetes
Google Kubernetes Engine, לדעתי, הוא אחד המימושים הפונקציונליים ביותר של טכנולוגיית Kubernetes. הוא זמין באזורים רבים בעולם ויש לו כלי שורת פקודה (SDK) פשוט ונוח, המאפשר לך ליצור סקריפטים במקום לנהל את הפלטפורמה באופן ידני.
כדי ש-DBaaS שלנו יעבוד, אנחנו צריכים את הרכיבים הבאים:
- קובקטל.
- Google Cloud SDK.
- Percona DBaaS CLI.
התקן את kubectl
אנו מתקינים את החבילה עבור מערכת ההפעלה שלך, נבחן דוגמה Ubuntu... פרטים נוספים .
sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl
התקנת Google Cloud SDK
אנו מתקינים את חבילת התוכנה באותו אופן. פרטים נוספים .
# Add the Cloud SDK distribution URI as a package source
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg]
http://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
# Import the Google Cloud Platform public key
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
# Update the package list and install the Cloud SDK
sudo apt-get update && sudo apt-get install google-cloud-sdk
התקנת Percona DBaaS CLI
התקן ממאגרי Percona. Percona DBaaS CLI Tool הוא עדיין מוצר ניסיוני, ולכן הוא ממוקם במאגר הניסיוני, אותו יש להפעיל בנפרד, גם אם כבר התקנתם מאגרי Percona.
קרא עוד .
אלגוריתם התקנה:
- הגדר מאגרי Percona באמצעות הכלי percona-release. ראשית עליך להוריד ולהתקין את חבילת ה-percona-release הרשמית מ-Percona:
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb sudo dpkg -i percona-release_latest.generic_all.deb - הפעל את רכיב מאגר הכלים הניסיוני באופן הבא:
sudo percona-release enable tools experimental - התקן את חבילת percona-dbaas-cli:
sudo apt-get update sudo apt-get install percona-dbaas-cli
הגדרת פעולת רכיבים
עוד על הגדרות .
ראשית עליך להיכנס לחשבון Google שלך. יתר על כן, Google Cloud מאפשר למשתמש אחד להחזיק פרויקטים עצמאיים רבים, לכן עליך לציין פרויקט עובד באמצעות הקוד עבור פרויקט זה:
gcloud auth login
gcloud config set project hidden-brace-236921
לאחר מכן, אנו יוצרים אשכול. לצורך ההדגמה, יצרתי אשכול Kubernetes של שלושה צמתים בלבד - זה המינימום הנדרש לזמינות גבוהה:
gcloud container clusters create --zone us-central1-a your-cluster-name --cluster-version 1.15 --num-nodes=3
הפקודה הבאה kubectl נותנת את ההרשאות הרצויות למשתמש הנוכחי שלנו:
kubectl create clusterrolebinding cluster-admin-binding-$USER
--clusterrole=cluster-admin --user=$(gcloud config get-value core/account)לאחר מכן אנו יוצרים מרחב שמות והופכים אותו לפעיל. מרחב השמות הוא, באופן גס, גם כמו פרויקט או סביבה, אבל כבר בתוך אשכול Kubernetes. זה לא תלוי בפרויקטים של Google Cloud:
kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace
התחלת האשכול
לאחר שעברנו את מספר השלבים הללו, נוכל להפעיל אשכול בן שלושה צמתים עם הפקודה הפשוטה הזו:
# percona-dbaas mysql create-db example
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider: k8s
Engine: pxc
Resource Name: example
Resource Endpoint: example-proxysql.my-namespace.pxc.svc.local
Port: 3306
User: root
Pass: Nt9YZquajW7nfVXTTrP
Status: ready
כיצד להתחבר לאשכול
כברירת מחדל, הוא זמין רק בתוך Kubernetes. כלומר, זה לא נגיש מהשרת הזה שממנו הפעלת את הפקודה "צור". כדי להפוך אותו לזמין, למשל, לבדיקות עם לקוח, עליך להעביר את היציאה דרך מיפוי יציאות:
kubectl port-forward svc/example-proxysql 3306:3306 $לאחר מכן אנו מחברים את לקוח MySQL שלך:
mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP
פקודות ניהול אשכולות מתקדמות
מאגר מידע על IP ציבורי
אם אתה רוצה פתרון קבוע יותר לזמינות האשכולות, אתה יכול לקבל כתובת IP חיצונית. במקרה זה, בסיס הנתונים יהיה נגיש מכל מקום. זה פחות בטוח, אבל לרוב נוח יותר. עבור IP חיצוני אנו משתמשים בפקודה הבאה:
# percona-dbaas mysql create-db exposed
--options="proxysql.serviceType=LoadBalancer"
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider: k8s
Engine: pxc
Resource Name: exposed
Resource Endpoint: 104.154.133.197
Port: 3306
User: root
Pass: k0QVxTr8EVfgyCLYse
Status: ready
To access database please run the following command:
mysql -h 104.154.133.197 -P 3306 -uroot -pk0QVxTr8EVfgyCLYse
הגדר במפורש את הסיסמה
במקום שהמערכת תיצור סיסמה באופן אקראי, אתה יכול להגדיר את הסיסמה במפורש:
# percona-dbaas mysql create-db withpw --password=mypassword
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider: k8s
Engine: pxc
Resource Name: withpw
Resource Endpoint: withpw-proxysql.my-namespace.pxc.svc.local
Port: 3306
User: root
Pass: mypassword
Status: ready
אני מציג את הפלט של הסקריפטים בפורמט קריא אנושי, אבל גם פורמט JSON נתמך.
כיבוי זמינות גבוהה
בעזרת הפקודה הבאה תוכל להשבית זמינות גבוהה לפריסת צומת בודד:
# percona-dbaas mysql create-db singlenode
--options="proxysql.enabled=false, allowUnsafeConfigurations=true,pxc.size=1"
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider: k8s
Engine: pxc
Resource Name: singlenode
Resource Endpoint: singlenode-pxc.my-namespace.pxc.svc.local
Port: 3306
User: root
Pass: 22VqFD96mvRnmPMGg
Status: ready
זהו פתרון לבדיקת משימות כדי להפעיל את MySQL במהירות ובקלות ככל האפשר, לבדוק אותה ולאחר מכן לכבות אותה או להשתמש בה לפיתוח.
כלי Percona DBaaS CLI עוזר לך להשיג פתרון דמוי DBaaS ב-Kubernetes. במקביל, אנו ממשיכים לעבוד על הפונקציונליות והשימושיות שלו.
דוח זה הוצג לראשונה ב מאת Mail.ru Cloud Solutions&Tarantool. תראה הופעות אחרות והירשם להודעות על אירועים בטלגרם .
מה עוד כדאי לקרוא בנושא:
מקור: www.habr.com
