DBaaS-i əvəz edə bilən Kubernetes istifadə edərək hibrid bulud necə qurulacaq

Mənim adım Petr Zaitsev, mən CEO, təsisçiyəm Perkona və sizə demək istəyirəm:

  • açıq mənbə həllərindən verilənlər bazasına xidmət kimi necə gəldik;
  • buludda verilənlər bazalarının yerləşdirilməsi üçün hansı yanaşmalar mövcuddur;
  • Kubernetes DBaaS-i necə əvəz edə bilər, satıcıdan asılılığı aradan qaldırır və DBMS-nin xidmət kimi sadəliyini qoruyur.

Məqalə Mail.ru Cloud Solutions & Tarantool tərəfindən @Databases Meetup-dakı hesabat əsasında hazırlanıb. Oxumaq istəmirsinizsə, baxa bilərsiniz:


Buludda bir xidmət kimi açıq mənbədən verilənlər bazasına necə gəldik

Mən 90-cı illərin sonlarından açıq mənbədə işləyirəm. İyirmi il əvvəl verilənlər bazası kimi açıq mənbədən istifadə etmək o qədər də asan deyildi. Mənbə kodunu yükləmək, yamaqlamaq, tərtib etmək və yalnız bundan sonra istifadə etmək lazım idi.

Açıq mənbə daha sonra bir sıra sadələşdirmələrdən keçdi:

  • Tərtib edilməli olan Tar.gz və INSTALL mənbələri;
  • .deb və .rpm kimi asılılıqları olan paketlər, burada yalnız paketlər dəsti quraşdırmaq lazımdır;
  • quraşdırmanın avtomatik olduğu APT və YUM kimi paket depoları;
  • xarici asılılıqlar olmadan quraşdırma yolu ilə paketləri qəbul etməyə imkan verən Docker və Snap kimi həllər.

Nəticədə, açıq mənbə proqram təminatından istifadə etmək asanlaşır və həmçinin bu cür proqramların hazırlanmasına giriş maneəsini azaldır.

Eyni zamanda, 20 il əvvəl hər kəsin montaj mütəxəssisi olduğu vəziyyətdən fərqli olaraq, indi əksər tərtibatçılar istifadə etdikləri alətləri mənbədən qura bilmirlər.

Əslində, bu pis deyil, çünki:

  1. Biz daha mürəkkəb, lakin daha istifadəçi dostu proqram təminatından istifadə edə bilərik. Məsələn, brauzerdən istifadə etmək rahatdır, lakin o, bir çox açıq mənbə komponentlərini ehtiva edir və sıfırdan qurmaq üçün əlverişsizdir.
  2. Daha çox insan açıq mənbə və digər proqram təminatının inkişaf etdiricisi ola bilər, daha çox proqram təminatı müəssisələr tərəfindən istifadə olunur və ona ehtiyac daha böyükdür.

İşin mənfi tərəfi odur ki, sadələşdirmənin növbəti addımı bulud həllərinin istifadəsi ilə bağlıdır və bu, müəyyən bir satıcının bağlanmasına, yəni bir təchizatçıya bağlanmasına səbəb olur. Biz sadə həllərdən istifadə edirik və provayderlər açıq mənbə komponentlərindən istifadə edirlər, lakin əslində onlar böyük buludlardan birinə yapışdırılır. Yəni, açıq mənbəni (və onunla uyğun gələn proqram təminatını) yerləşdirməyin ən asan və sürətli yolu xüsusi API istifadə edərək buludlardadır.

Buludda verilənlər bazasına gəldikdə, iki yanaşma var:

  1. Adi məlumat mərkəzində olduğu kimi verilənlər bazası infrastrukturunu yığın. Yəni standart tikinti bloklarını götürün: hesablama, saxlama və s., onlara Linux və verilənlər bazası quraşdırın və onları konfiqurasiya edin.
  2. Verilənlər bazasından xidmət kimi istifadə edin, burada provayder bulud daxilində hazır verilənlər bazası təklif edir.

DBaaS hazırda sürətlə böyüyən bazardır, çünki o, tərtibatçılara birbaşa verilənlər bazası ilə işləməyə imkan verir və gündəlik işləri minimuma endirir. Provayder Yüksək Əlçatımlılığı və asan miqyaslaşdırma, verilənlər bazası yamaqları, ehtiyat nüsxələri və performans tənzimlənməsini təmin etməyi öhdəsinə götürür.

Açıq mənbə və Kubernetes şəklində alternativə əsaslanan iki növ verilənlər bazası bir xidmət kimi

Açıq verilənlər bazaları üçün xidmət kimi iki növ verilənlər bazası var:

  1. Asan yerləşdirmə və idarəetmə üçün idarəetmə arxa ucunda paketlənmiş standart açıq mənbəli məhsul.
  2. Açıq mənbə ilə uyğun gələn müxtəlif əlavələrlə inkişaf etmiş kommersiya həlli.

Hər iki variant buludlar arasında miqrasiya imkanlarını azaldır və məlumatların və proqramların daşınmasını azaldır. Məsələn, müxtəlif növ buludların mahiyyətcə eyni standart MySQL-i dəstəkləməsinə baxmayaraq, onlar arasında əhəmiyyətli fərqlər var: əməliyyatda, performansda, ehtiyat nüsxədə və s. Bir buluddan digərinə keçmək xüsusilə mürəkkəb proqramlar üçün çətin ola bilər.

Və burada sual yaranır - Verilənlər Bazasının xidmət kimi, lakin sadə açıq mənbə həlli kimi rahatlığını əldə etmək mümkündürmü?

Pis xəbər odur ki, təəssüf ki, hələ bazarda belə həllər yoxdur. Yaxşı xəbər budur ki, bu cür həlləri həyata keçirməyə imkan verən Kubernetes var.

Kubernetes bulud və ya məlumat mərkəzi üçün bir əməliyyat sistemidir ki, bu da sizə proqramları tək hostda deyil, çoxlu serverlərdə yerləşdirməyə və idarə etməyə imkan verir.

İndi Kubernetes bu cür proqram təminatı kateqoriyasında liderdir. Bu cür problemlər üçün çoxlu müxtəlif həll yolları var idi, lakin bu, standart oldu. Əvvəllər alternativ həll yollarına diqqət yetirən bir çox şirkət indi öz məhsullarını Kubernetes-i dəstəkləmək üçün uyğunlaşdırmağa diqqət yetirir.

Bundan əlavə, Kubernetes bir çox təchizatçının şəxsi, ictimai və hibrid buludlarında dəstəklənən universal bir həlldir, məsələn: AWS, Google Cloud, Microsoft Azure, Mail.ru Bulud Həlləri.

Kubernetes verilənlər bazası ilə necə işləyir

Kubernetes əvvəlcə məlumatları emal edən, lakin mikroservislər və ya veb proqramlar kimi heç nə saxlamayan vətəndaşlığı olmayan proqramlar üçün nəzərdə tutulmuşdur. Verilənlər bazaları spektrin digər ucundadır, yəni vəziyyətə uyğun tətbiqlərdir. Və Kubernetes əvvəlcə bu cür tətbiqlər üçün nəzərdə tutulmamışdı.

Bununla belə, Kubernetes-də bu yaxınlarda ortaya çıxan, verilənlər bazası və digər dövlət proqramlarından istifadə etməyə imkan verən xüsusiyyətlər var:

  1. StatefulSet konsepsiyası podların işinin dayandırılması və Graceful Shutdown (tətbiqin proqnozlaşdırıla bilən bağlanması) həyata keçirilməsi ilə bağlı hadisələrin işlənməsi üçün bir sıra primitivlərdir.
  2. Davamlı Həcmlər podlar, Kubernetes idarəetmə obyektləri ilə əlaqəli məlumat anbarlarıdır.
  3. Operator Framework - yəni bir çox qovşaqda paylanmış verilənlər bazası və digər dövlət proqramlarını idarə etmək üçün komponentlər yaratmaq imkanı.

Artıq ictimai buludlarda arxa tərəfi Kubernetes olan böyük bir Xidmət kimi verilənlər bazası var, məsələn: CockroachCloud, InfluxDB, PlanetScale. Yəni Kubernetes-də verilənlər bazası təkcə nəzəri cəhətdən mümkün olan bir şey deyil, həm də praktikada işləyən bir şeydir.

Percona Kubernetes üçün iki açıq mənbə həllinə malikdir:

  1. MongoDB üçün Percona Server üçün Kubernetes Operatoru.
  2. XtraDB CLUSTER üçün Kubernetes Operatoru MySQL ilə uyğun gələn və yüksək əlçatanlıq və ardıcıllıq təmin edən xidmətdir. Əgər yüksək əlçatanlıq tələb olunmursa, məsələn, dev verilənlər bazası üçün tək nodedan da istifadə edə bilərsiniz.

Kubernetes istifadəçilərini iki qrupa bölmək olar. Bəzi insanlar birbaşa Kubernetes Operatorlarından istifadə edirlər - bunlar əsasən texnologiyanın necə işlədiyini yaxşı anlayan qabaqcıl istifadəçilərdir. Digərləri onu arxa planda işlədirlər - belə istifadəçilər bir xidmət kimi verilənlər bazası kimi bir şeylə maraqlanırlar, Kubernetes-in nüanslarını araşdırmaq istəmirlər. İkinci qrup istifadəçilər üçün başqa bir açıq mənbə həllimiz var - Percona DBaaS CLI Aləti. Bu, texnologiyanı dərindən dərk etmədən Kubernetes əsasında açıq mənbəli DBaaS əldə etmək istəyənlər üçün eksperimental həlldir.

Perconanın DBaaS-ni Google Kubernetes Mühərrikində necə işə salmaq olar

Google Kubernetes Engine, mənim fikrimcə, Kubernetes texnologiyasının ən funksional tətbiqlərindən biridir. O, dünyanın bir çox regionlarında mövcuddur və platformanı əl ilə idarə etməkdənsə, skriptlər yaratmağa imkan verən sadə və rahat Komanda Xətti Alətinə (SDK) malikdir.

DBaaS-in işləməsi üçün bizə aşağıdakı komponentlər lazımdır:

  1. Kubectl.
  2. Google Bulud SDK.
  3. Percona DBaaS CLI.

kubectl quraşdırın

Əməliyyat sisteminiz üçün paketi quraşdırırıq, Ubuntu nümunəsinə baxacağıq. Daha ətraflı burada.

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 Bulud SDK quraşdırılır

Proqram paketini eyni şəkildə quraşdırırıq. Daha ətraflı burada.

# 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 quraşdırılması

Percona depolarından quraşdırın. Percona DBaaS CLI Aləti hələ də eksperimental məhsuldur, ona görə də o, artıq Percona repozitoriyalarınız quraşdırılmış olsa belə, ayrıca aktivləşdirilməli olan eksperimental depoda yerləşir.

daha burada.

Quraşdırma alqoritmi:

  1. Percona-reliz alətindən istifadə edərək Percona depolarını qurun. Əvvəlcə Percona-dan rəsmi percona-reliz paketini yükləməli və quraşdırmalısınız:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Eksperimental alət anbarı komponentini aşağıdakı kimi aktivləşdirin:
    sudo percona-release enable tools experimental
    
  3. percona-dbaas-cli paketini quraşdırın:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Komponentlərin işinin qurulması

Parametrlər haqqında ətraflı burada.

Əvvəlcə Google hesabınıza daxil olmalısınız. Bundan əlavə, Google Bulud bir istifadəçiyə bir çox müstəqil layihələrə sahib olmağa imkan verir, ona görə də bu layihənin kodundan istifadə edərək işləyən layihəni təyin etməlisiniz:

gcloud auth login
gcloud config set project hidden-brace-236921

Sonra bir klaster yaradırıq. Demo üçün mən yalnız üç qovşaqdan ibarət Kubernetes klasterini yaratdım - bu, yüksək əlçatanlıq üçün tələb olunan minimumdur:

gcloud container clusters create --zone us-central1-a your-cluster-name --cluster-version 1.15 --num-nodes=3

Aşağıdakı kubectl əmri cari istifadəçimizə istədiyiniz imtiyazları verir:

kubectl create clusterrolebinding cluster-admin-binding-$USER 
--clusterrole=cluster-admin --user=$(gcloud config get-value core/account)

Sonra ad sahəsi yaradaraq onu aktiv edirik. Ad məkanı, təxmini desək, layihə və ya mühit kimidir, lakin artıq Kubernetes klasterinin içərisindədir. O, Google Bulud layihələrindən müstəqildir:

kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace

Klasterin işə salınması

Bu bir neçə addımı keçdikdən sonra bu sadə əmrlə üç düyünlü klasterə başlaya bilərik:

# 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

Bir klasterə necə qoşulmaq olar

Varsayılan olaraq, o, yalnız Kubernetes daxilində mövcuddur. Yəni, “Yarat” əmrini işlətdiyiniz serverdən ona daxil olmaq mümkün deyil. Onu əlçatan etmək üçün, məsələn, müştəri ilə testlər üçün portu Port Xəritəçəkmə vasitəsilə yönləndirmək lazımdır:

kubectl port-forward svc/example-proxysql 3306:3306 $

Sonra MySQL müştərinizi bağlayırıq:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Qabaqcıl klaster idarəetmə əmrləri

İctimai IP-də verilənlər bazası

Klasterin mövcudluğu üçün daha qalıcı bir həll istəyirsinizsə, xarici IP ünvanı əldə edə bilərsiniz. Bu halda verilənlər bazasına istənilən yerdən daxil olmaq mümkün olacaq. Bu daha az təhlükəsizdir, lakin çox vaxt daha rahatdır. Xarici IP üçün aşağıdakı əmrdən istifadə edirik:

# 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

Şifrəni açıq şəkildə təyin edin

Sistem təsadüfi olaraq parol yaratmaq əvəzinə, parolu açıq şəkildə təyin edə bilərsiniz:

# 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

Mən skriptlərin çıxışını insanların oxuna biləcəyi formatda göstərirəm, lakin JSON formatı da dəstəklənir.

Yüksək əlçatanlığın söndürülməsi

Aşağıdakı əmrlə bir node yerləşdirmək üçün yüksək əlçatanlığı aradan buraxa bilərsiniz:

# 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

Bu, MySQL-i mümkün qədər tez və asanlıqla işə salmaq, sınaqdan keçirmək və sonra onu bağlamaq və ya inkişaf etdirmək üçün istifadə etmək üçün test tapşırıqlarının həllidir.

Percona DBaaS CLI aləti Kubernetes-də DBaaS-ə bənzər bir həll əldə etməyə kömək edir. Eyni zamanda, biz onun funksionallığı və yararlılığı üzərində işləməyə davam edirik.

Bu hesabat ilk dəfə olaraq təqdim olunub @Databases Meetup Mail.ru Cloud Solutions&Tarantool tərəfindən. Bax video digər tamaşalar və Telegram-da hadisələrin elanlarına abunə olun Mail.ru Qrupunda Kubernetes ətrafında.

Mövzu ilə bağlı başqa nə oxumaq lazımdır:

  1. Müasir IIoT platformasında verilənlər bazası.
  2. Layihə üçün verilənlər bazasını necə seçmək olar ki, yenidən seçmək məcburiyyətində qalmayasınız.

Mənbə: www.habr.com

Добавить комментарий