Postgres Tuesday No. 5: “PostgreSQL thiab Kubernetes. CI/CD. Test automation"

Postgres Tuesday No. 5: “PostgreSQL thiab Kubernetes. CI/CD. Test automation"

Thaum kawg ntawm xyoo tas los, lwm qhov kev tshaj tawm nyob hauv Lavxias PostgreSQL zej zog tau tshwm sim #RuPostgres, thaum lub sij hawm uas nws co-founder Nikolai Samokhvalov tham nrog Flant technical director Dmitry Stolyarov txog qhov DBMS nyob rau hauv cov ntsiab lus ntawm Kubernetes.

Peb tab tom tshaj tawm cov ntawv sau tseg ntawm qhov tseem ceeb ntawm qhov kev sib tham no, thiab ntawm Community YouTube channel Full video posted:

Databases thiab Kubernetes

NS: Peb yuav tsis tham txog VACUUM thiab CHECKPOINTs hnub no. Peb xav tham txog Kubernetes. Kuv paub tias koj muaj ntau xyoo dhau los. Kuv tau saib koj cov yeeb yaj kiab thiab txawm rov saib qee qhov ntawm lawv ... Cia peb ncaj qha mus rau qhov taw tes: vim li cas Postgres lossis MySQL hauv K8s txhua?

DS: Tsis muaj thiab tsis tuaj yeem muaj lus teb meej rau lo lus nug no. Tab sis feem ntau, qhov no yog simplicity thiab yooj yim ... muaj peev xwm. Txhua tus xav tau cov kev pabcuam tswj hwm.

NS: Ua li cas RDS, tsuas yog nyob hauv tsev?

DS: Yog: zoo li RDS, nyob qhov twg.

NS: "Txhua qhov chaw" yog qhov zoo. Hauv cov tuam txhab loj, txhua yam nyob hauv ntau qhov chaw. Yog vim li cas yog tias nws yog ib lub tuam txhab loj, tsis noj cov tshuaj npaj tau? Piv txwv li, Nutanix muaj nws txoj kev txhim kho, lwm lub tuam txhab (VMware ...) muaj tib "RDS, tsuas yog nyob hauv tsev."

DS: Tab sis peb tab tom tham txog kev siv cais uas tsuas yog ua haujlwm raws li qee yam xwm txheej. Thiab yog tias peb tab tom tham txog Kubernetes, ces muaj ntau yam kev tsim kho vaj tse (uas tuaj yeem nyob hauv K8s). Qhov tseem ceeb no yog tus qauv rau APIs rau huab ...

NS: Nws tseem pub dawb!

DS: Nws tsis yog li ntawd tseem ceeb. Kev ywj pheej yog qhov tseem ceeb rau tsis yog ntu loj ntawm kev ua lag luam. Lwm yam tseem ceeb... Tej zaum koj yuav nco qab daim ntawv tshaj tawm "Databases thiab Kubernetes"?

NS: Yog.

DS: Kuv pom tau tias nws tau txais tsis meej pem heev. Qee tus neeg xav tias kuv tau hais tias: "Cov txiv neej, cia peb muab tag nrho cov ntaub ntawv rau hauv Kubernetes!", thaum lwm tus txiav txim siab tias cov no yog cov tsheb kauj vab txaus ntshai. Tab sis kuv xav hais ib yam dab tsi txawv kiag li: “Saib seb muaj dab tsi tshwm sim, muaj teeb meem dab tsi thiab lawv yuav daws tau li cas. Peb puas yuav tsum siv Kubernetes databases tam sim no? Ntau lawm? Zoo, tsuas yog tias koj nyiam ... ua qee yam. Tab sis rau tus dev, kuv tuaj yeem hais tias kuv pom zoo. Rau tus dev, lub zog ntawm kev tsim / tshem tawm ib puag ncig yog qhov tseem ceeb heev. "

NS: Los ntawm dev, koj puas txhais tau tias txhua qhov chaw uas tsis yog khoom? Staging, QA…

DS: Yog tias peb tab tom tham txog perf stands, ces tej zaum tsis yog, vim hais tias cov kev cai muaj tshwj xeeb. Yog tias peb tab tom tham txog cov xwm txheej tshwj xeeb uas yuav tsum muaj cov ntaub ntawv loj heev rau kev teeb tsa, ces tej zaum tsis yog ... Yog tias qhov no yog qhov chaw zoo li qub, nyob ntev, ces qhov txiaj ntsig ntawm kev muaj cov ntaub ntawv nyob hauv K8s yog dab tsi?

NS: Tsis muaj. Tab sis qhov twg peb pom ib puag ncig zoo li qub? Ib puag ncig zoo li qub yuav dhau los tag kis.

DS: Staging yuav zoo li qub. Peb muaj cov neeg siv khoom ...

NS: Yog, kuv muaj ib yam thiab. Nws yog ib qho teeb meem loj yog tias koj muaj 10 TB database thiab 200 GB staging ...

DS: Kuv muaj rooj plaub zoo heev! Nyob rau hauv staging muaj cov khoom database uas hloov pauv. Thiab muaj ib lub pob: "yuav tawm mus rau ntau lawm". Cov kev hloov pauv no - deltas - yog ntxiv (nws zoo li lawv tsuas yog synchronized ntawm API) hauv kev tsim khoom. Qhov no yog ib qho kev xaiv txawv heev.

NS: Kuv tau pom kev pib ua lag luam hauv hav uas zaum hauv RDS lossis txawm tias hauv Heroku - cov no yog cov dab neeg los ntawm 2-3 xyoo dhau los - thiab lawv rub tawm cov pob tseg rau lawv lub laptop. Vim tias cov ntaub ntawv tseem tsuas yog 80 GB, thiab muaj qhov chaw ntawm lub laptop. Tom qab ntawd lawv yuav cov disks ntxiv rau txhua tus kom lawv muaj 3 cov ntaub ntawv los ua cov kev txhim kho sib txawv. Qhov no tshwm sim ib yam nkaus. Kuv kuj pom tias lawv tsis ntshai luam cov khoom rau hauv kev ua yeeb yam - nws nyob ntawm lub tuam txhab ntau heev. Tab sis kuv kuj pom tias lawv ntshai heev, thiab feem ntau lawv tsis muaj sijhawm txaus thiab txhais tes. Tab sis ua ntej peb mus rau lub ntsiab lus no, kuv xav hnov ​​​​txog Kubernetes. Kuv puas nkag siab qhov tseeb tias tsis muaj leej twg nyob hauv kev tsim khoom?

DS: Peb muaj me me databases hauv prod. Peb tab tom tham txog qhov ntim ntawm kaum tawm ntawm gigabytes thiab cov kev pabcuam tsis tseem ceeb uas peb tau tub nkeeg dhau los ua cov khoom qub (thiab tsis muaj qhov xav tau). Thiab muab hais tias muaj ib txwm cia nyob rau hauv Kubernetes. Cov ntaub ntawv no tau ua haujlwm hauv lub tshuab virtual - muaj cai hauv VMware, nyob rau sab saum toj ntawm lub kaw lus cia. Peb muab tso rau hauv PV thiab tam sim no peb tuaj yeem hloov nws ntawm lub tshuab mus rau lub tshuab.

NS: Databases ntawm qhov loj me, txog li 100 GB, tuaj yeem dov tawm hauv ob peb feeb ntawm cov disks zoo thiab lub network zoo, txoj cai? Qhov ceev ntawm 1 GB ib ob yog tsis txawv lawm.

DS: Yog, rau kev ua haujlwm linear no tsis yog teeb meem.

NS: Okay, peb tsuas yog yuav tsum xav txog cov khoom. Thiab yog tias peb tab tom txiav txim siab Kubernetes rau qhov chaw tsis yog khoom lag luam, peb yuav ua li cas? Kuv pom qhov ntawd hauv Zalando ua operator, hauv Crunchy sawing, muaj qee qhov kev xaiv. Thiab muaj OnGres - qhov no yog peb tus phooj ywg zoo Alvaro los ntawm Spain: qhov lawv ua yog qhov tseem ceeb tsis yog tus neeg teb xov tooj, thiab tag nrho cov kev faib tawm (StackGres), nyob rau hauv uas, ntxiv rau Postgres nws tus kheej, lawv kuj tau txiav txim siab muab cov ntaub ntawv thaub qab, Envoy proxy ...

DS: Envoy rau dab tsi? Sib npaug Postgres tsheb tshwj xeeb?

NS: Yog. Ntawd yog, lawv pom nws li: yog tias koj nqa Linux faib thiab ntsiav, tom qab ntawd PostgreSQL ib txwm yog cov ntsiav, thiab lawv xav ua kom muaj kev faib tawm uas yuav ua rau huab huab thiab khiav ntawm Kubernetes. Lawv muab cov khoom sib xyaw ua ke (cov thaub qab, thiab lwm yam) thiab debug lawv kom lawv ua haujlwm zoo.

DS: Zoo heev! Qhov tseem ceeb no yog software los tsim koj tus kheej tswj Postgres.

NS: Linux distributions muaj teeb meem nyob mus ib txhis: yuav ua li cas los tsim cov tsav tsheb kom txhua qhov kho vajtse txhawb nqa. Thiab lawv muaj lub tswv yim tias lawv yuav ua haujlwm hauv Kubernetes. Kuv paub tias hauv Zalando tus neeg teb xov tooj peb nyuam qhuav pom kev sib txuas rau AWS thiab qhov no tsis zoo heev. Yuav tsum tsis muaj kev khi rau ib qho kev tsim kho tshwj xeeb - dab tsi yog qhov ntsiab lus tom qab ntawd?

DS: Kuv tsis paub meej tias qhov xwm txheej twg Zalando tau nkag mus rau hauv, tab sis hauv Kubernetes cia tam sim no tau ua hauv txoj hauv kev uas nws tsis tuaj yeem nqa lub disk thaub qab siv txoj hauv kev dav. Tsis ntev los no hauv tus qauv - hauv qhov tseeb version CSI specifications - Peb tau ua snapshots ua tau, tab sis qhov twg nws siv? Honestly, txhua yam yog tseem raw li ... Peb tab tom sim CSI saum AWS, GCE, Azure, vSphere, tab sis sai li sai tau thaum koj pib siv nws, koj tuaj yeem pom tias nws tseem tsis tau npaj.

NS: Yog vim li cas qee zaum peb yuav tsum tso siab rau kev tsim kho vaj tse. Kuv xav tias qhov no tseem yog theem pib - kev mob loj zuj zus. Nqe Lus Nug: Koj yuav muab cov lus qhia dab tsi rau cov neeg tshiab uas xav sim PgSQL hauv K8s? Tus neeg teb xov tooj yuav ua li cas?

DS: Qhov teeb meem yog Postgres yog 3% rau peb. Peb kuj muaj cov npe loj heev ntawm cov software sib txawv hauv Kubernetes, Kuv yuav tsis sau txhua yam. Piv txwv li, Elasticsearch. Muaj ntau tus neeg khiav dej num: qee qhov kev tsim kho, lwm tus tsis yog. Peb tau tsim cov kev cai rau peb tus kheej txog yam uas tus neeg ua haujlwm yuav tsum muaj nyob rau hauv thiaj li yuav coj nws tiag. Hauv tus neeg teb xov tooj tshwj xeeb rau Kubernetes - tsis yog nyob rau hauv "tus neeg ua haujlwm ua ib yam dab tsi hauv Amazon cov xwm txheej"... Qhov tseeb, peb tau dav heev (= yuav luag txhua tus neeg siv khoom) siv ib tus neeg teb xov tooj - rau Redis (Peb yuav tshaj tawm ib tsab xov xwm txog nws sai sai no).

NS: Thiab tsis yog rau MySQL ib yam? Kuv paub tias Percona... txij li tam sim no lawv tab tom ua haujlwm ntawm MySQL, MongoDB, thiab Postgres, lawv yuav tau tsim qee yam kev daws teeb meem thoob ntiaj teb: rau txhua lub databases, rau txhua tus neeg muab kev pabcuam huab.

DS: Peb tsis muaj sijhawm los saib cov neeg ua haujlwm rau MySQL. Qhov no tsis yog peb lub hom phiaj tseem ceeb tam sim no. MySQL ua haujlwm zoo hauv standalone. Vim li cas thiaj siv tus neeg teb xov tooj yog tias koj tuaj yeem tso cov ntaub ntawv xwb... Koj tuaj yeem tso lub thawv Docker nrog Postrges, lossis koj tuaj yeem tso nws hauv txoj kev yooj yim.

NS: Muaj lus nug txog qhov no thiab. Tsis muaj tus neeg teb xov tooj txhua?

DS: Yog, 100% ntawm peb muaj PostgreSQL khiav tsis muaj tus neeg teb xov tooj. Txog tam sim no. Peb nquag siv tus neeg teb xov tooj rau Prometheus thiab Redis. Peb muaj cov phiaj xwm nrhiav tus neeg teb xov tooj rau Elasticsearch - nws yog qhov feem ntau "ntawm hluav taws", vim peb xav nruab nws hauv Kubernetes hauv 100% ntawm cov xwm txheej. Ib yam li peb xav kom ntseeg tau tias MongoDB tseem yog ib txwm ntsia hauv Kubernetes. Nov yog qee qhov kev xav tau tshwm sim - muaj kev xav tias nyob rau hauv cov xwm txheej no muaj qee yam ua tau. Thiab peb tsis txawm saib Postgres. Tau kawg, peb paub tias muaj ntau txoj kev xaiv, tab sis qhov tseeb peb muaj ib leeg.

DB rau kev sim hauv Kubernetes

NS: Cia peb mus rau lub ntsiab lus ntawm kev sim. Yuav ua li cas dov tawm cov kev hloov pauv rau cov ntaub ntawv - los ntawm DevOps foundations. Muaj microservices, ntau databases, ib yam dab tsi hloov qhov chaw txhua lub sijhawm. Yuav ua li cas kom ntseeg tau li qub CI / CD kom txhua yam nyob rau hauv kev txiav txim los ntawm DBMS foundations. Koj mus kom ze yog dab tsi?

DS: Tsis muaj ib lo lus teb. Muaj ob peb txoj kev xaiv. Thawj yog qhov loj ntawm lub hauv paus uas peb xav kom yob tawm. Koj tus kheej tau hais tias cov tuam txhab muaj tus cwj pwm sib txawv ntawm kev muaj daim ntawv theej ntawm cov khoom database ntawm dev thiab theem.

NS: Thiab nyob rau hauv cov xwm txheej ntawm GDPR, kuv xav tias lawv tau ceev faj ntau dua ... Kuv tuaj yeem hais tias hauv Tebchaws Europe lawv twb tau pib them nyiaj nplua.

DS: Tab sis feem ntau koj tuaj yeem sau software uas siv cov pob tseg los ntawm kev tsim khoom thiab ua rau nws tsis txaus ntseeg. Cov ntaub ntawv tau txais (snapshot, dump, binary copy ...), tab sis nws yog anonymized. Hloov chaw, tuaj yeem tsim cov ntawv sau: cov no tuaj yeem yog cov khoom siv lossis tsuas yog ib tsab ntawv uas tsim cov ntaub ntawv loj. Qhov teeb meem yog: nws siv sijhawm ntev npaum li cas los tsim cov duab hauv paus? Thiab nws yuav siv sijhawm ntev npaum li cas los xa nws mus rau qhov chaw xav tau?

Peb tuaj rau lub tswv yim: yog tias tus neeg siv khoom muaj cov ntaub ntawv ruaj khov (tseem ceeb ntawm cov ntaub ntawv), ces peb siv lawv los ntawm lub neej ntawd. Yog hais tias peb tab tom tham txog kev tshuaj xyuas ib puag ncig, thaum peb tsim ib ceg, peb xa ib qho piv txwv ntawm daim ntawv thov - peb yob tawm ib qho me me database rau ntawd. Tab sis nws muab tawm zoo kev xaiv, thaum peb muab pov tseg los ntawm kev tsim khoom ib hnub ib zaug (thaum tsaus ntuj) thiab tsim lub thawv Docker nrog PostgreSQL thiab MySQL nrog cov ntaub ntawv thauj khoom no raws li nws. Yog tias koj xav tau nthuav dav cov ntaub ntawv 50 zaug los ntawm cov duab no, qhov no ua tiav yooj yim thiab nrawm.

NS: Los ntawm kev luam tawm yooj yim?

DS: Cov ntaub ntawv khaws cia ncaj qha rau hauv Docker duab. Cov. Peb muaj cov duab npaj txhij, txawm tias 100 GB. Ua tsaug rau cov khaubncaws sab nraud povtseg hauv Docker, peb tuaj yeem xa cov duab no sai sai li ntau zaus raws li peb xav tau. Txoj kev yog ruam, tab sis nws ua haujlwm zoo.

NS: Ces, thaum koj sim, nws hloov txoj cai hauv Docker, txoj cai? Luam-on-sau hauv Docker - muab pov tseg thiab rov mus dua, txhua yam zoo. Chav kawm! Thiab koj puas tau siv nws tag nrho?

DS: Tau ntev.

NS: Peb ua tej yam zoo sib xws. Tsuas yog peb tsis siv Docker daim ntawv theej-on-sau, tab sis qee qhov lwm tus.

DS: Nws tsis yog generic. Thiab Docker ua haujlwm txhua qhov chaw.

NS: Hauv kev xav, yog. Tab sis peb kuj muaj cov modules nyob ntawd, koj tuaj yeem ua cov modules sib txawv thiab ua haujlwm nrog cov ntaub ntawv sib txawv. Cas ib pliag nov. Los ntawm Postgres sab, peb saib txhua qhov sib txawv. Tam sim no kuv ntsia ntawm Docker sab thiab pom tias txhua yam ua haujlwm rau koj. Tab sis yog tias cov ntaub ntawv loj, piv txwv li, 1 TB, txhua qhov no yuav siv sijhawm ntev: kev ua haujlwm hmo ntuj, thiab ntim txhua yam rau hauv Docker... Thiab yog tias 5 TB tau ntim rau hauv Docker... Los yog txhua yam zoo?

DS: Dab tsi yog qhov txawv: cov no yog blobs, tsuas yog me ntsis thiab bytes.

NS: Qhov txawv yog qhov no: koj puas ua nws los ntawm pov tseg thiab rov qab?

DS: Tsis tsim nyog. Cov txheej txheem tsim cov duab no tuaj yeem sib txawv.

NS: Rau qee tus neeg siv khoom, peb tau ua nws kom tsis tu ncua tsim cov duab hauv paus, peb niaj hnub khaws nws mus txog hnub. Nws yog qhov tseem ceeb tshaj plaws, tab sis nws tau txais cov ntaub ntawv tsis yog los ntawm tus tswv ncaj qha, tab sis los ntawm kev khaws cia. Lub binary archive qhov twg WALs tau rub tawm txhua hnub, qhov twg cov ntaub ntawv khaws cia ... Cov WALs no ces mus txog lub hauv paus duab nrog qeeb me ntsis (lus 1-2 vib nas this). Peb clone los ntawm nws nyob rau hauv txhua txoj kev - tam sim no peb muaj ZFS los ntawm lub neej ntawd.

DS: Tab sis nrog ZFS koj raug txwv rau ib qho.

NS: Yog. Tab sis ZFS kuj muaj tej yam yees siv xa: nrog nws koj tuaj yeem xa cov duab thaij duab thiab txawm tias (Kuv tseem tsis tau sim qhov no tiag tiag, tab sis ...) koj tuaj yeem xa cov delta ntawm ob PGDATA. Qhov tseeb, peb muaj lwm yam cuab yeej uas peb tsis tau txiav txim siab tiag tiag rau cov haujlwm zoo li no. PostgreSQL muaj pg_rov, uas ua haujlwm zoo li "ntse" rsync, hla ntau yam uas koj tsis tas yuav saib, vim tsis muaj dab tsi hloov pauv. Peb tuaj yeem ua synchronization ceev ntawm ob lub servers thiab rov qab ua tib yam.

Yog li, los ntawm qhov no, ntau DBA sab, peb tab tom sim tsim cov cuab yeej uas tso cai rau peb ua ib yam li koj tau hais: peb muaj ib lub database, tab sis peb xav sim qee yam 50 zaug, yuav luag ib txhij.

DS: 50 zaug txhais tau tias koj yuav tsum tau xaj 50 qhov chaw.

NS: Tsis yog, peb ua txhua yam ntawm ib lub tshuab.

DS: Tab sis koj yuav nthuav dav li cas 50 zaug yog tias qhov no yog ib qho database, hais, terabyte. Feem ntau nws yuav xav tau ib qho kev cai 256 GB ntawm RAM?

NS: Yog, qee zaum koj xav tau ntau lub cim xeeb - qhov ntawd yog qhov qub. Tab sis qhov no yog ib qho piv txwv ntawm lub neej. Lub tshuab tsim muaj 96 cores thiab 600 GB. Tib lub sijhawm, 32 cores (txawm tias 16 cores tam sim no qee zaum) thiab 100-120 GB ntawm lub cim xeeb yog siv rau cov ntaub ntawv.

DS: Thiab 50 daim ntawv haum rau qhov ntawd?

NS: Yog li tsuas muaj ib daim ntawv luam, ces luam-on-write (ZFS) ua haujlwm... Kuv mam li qhia rau koj paub ntau ntxiv.

Piv txwv li, peb muaj 10 TB database. Lawv ua ib tug disk rau nws, ZFS kuj compressed nws loj los ntawm 30-40 feem pua. Txij li thaum peb tsis ua qhov kev sim thauj khoom, lub sijhawm teb cov lus teb tsis yog qhov tseem ceeb rau peb: cia nws mus txog 2 zaug qeeb - qhov ntawd tsis yog.

Peb muab sijhawm rau programmers, QA, DBA, thiab lwm yam. ua kev ntsuam xyuas hauv 1-2 xov. Piv txwv li, lawv yuav khiav qee yam kev tsiv teb tsaws chaw. Nws tsis xav tau 10 cores ib zaug - nws xav tau 1 Postgres backend, 1 cores. Kev tsiv teb tsaws chaw yuav pib - tej zaum autovacuum tseem yuav pib, ces tus tub ntxhais thib ob yuav siv. Peb muaj 16-32 cores faib, yog li 10 tus neeg tuaj yeem ua haujlwm tib lub sijhawm, tsis muaj teeb meem.

Vim lub cev PGDATA tib yam, nws hloov tawm tias peb tau dag Postgres tiag tiag. Qhov ua kom yuam kev yog qhov no: piv txwv li, 10 Postgres tau pib ib txhij. Qhov teeb meem feem ntau yog dab tsi? Lawv tso shared_buffers, peb hais 25%. Raws li, qhov no yog 200 GB. Koj yuav tsis tuaj yeem tso ntau tshaj peb ntawm cov no, vim tias lub cim xeeb yuav ploj mus.

Tab sis ntawm qee lub sijhawm peb pom tau tias qhov no tsis tsim nyog: ​​peb tau teeb tsa shared_buffers rau 2 GB. PostgreSQL muaj effect_cache_size, thiab hauv kev muaj tiag nws tsuas yog ib qho uas cuam tshuam kev npaj. Peb muab nws rau 0,5 TB. Thiab nws tsis tseem ceeb tias lawv tsis muaj nyob: nws ua cov phiaj xwm zoo li lawv muaj.

Raws li, thaum peb sim qee yam kev tsiv teb tsaws, peb tuaj yeem sau tag nrho cov phiaj xwm - peb yuav pom tias nws yuav tshwm sim li cas hauv kev tsim khoom. Lub vib nas this yuav muaj qhov sib txawv (slower), tab sis cov ntaub ntawv uas peb tau nyeem tiag tiag, thiab cov phiaj xwm lawv tus kheej (JOINs dab tsi nyob ntawd, thiab lwm yam) tig tawm raws nraim tib yam li hauv kev tsim khoom. Thiab koj tuaj yeem khiav ntau yam kev kuaj xyuas nyob rau hauv parallel ntawm ib lub tshuab.

DS: Koj tsis xav tias muaj ob peb teeb meem ntawm no? Thawj yog qhov kev daws teeb meem uas tsuas yog ua haujlwm ntawm PostgreSQL. Qhov no txoj kev yog heev ntiag tug, nws tsis yog generic. Qhov thib ob yog Kubernetes (thiab txhua yam uas huab thev naus laus zis mus rau tam sim no) suav nrog ntau cov nodes, thiab cov nodes yog ephemeral. Thiab nyob rau hauv koj rooj plaub nws yog ib tug stateful, persistent node. Tej yam no ua rau kuv tsis sib haum xeeb.

NS: Ua ntej, kuv pom zoo, qhov no yog ib zaj dab neeg ntawm Postgres nkaus xwb. Kuv xav tias yog tias peb muaj qee yam ncaj qha IO thiab lub pas dej tsis sib haum rau yuav luag txhua lub cim xeeb, txoj hauv kev no yuav tsis ua haujlwm - cov phiaj xwm yuav txawv. Tab sis tam sim no peb tsuas yog ua haujlwm nrog Postgres, peb tsis xav txog lwm tus.

Hais txog Kubernetes. Koj tus kheej qhia peb txhua qhov chaw uas peb muaj cov ntaub ntawv tsis tu ncua. Yog tias qhov piv txwv tsis ua tiav, qhov tseem ceeb tshaj plaws yog txuag lub disk. Ntawm no peb kuj muaj tag nrho cov platform hauv Kubernetes, thiab cov khoom siv nrog Postgres cais (txawm tias nws yuav nyob ntawd ib hnub). Yog li ntawd, txhua yam zoo li no: qhov piv txwv poob, tab sis peb tau cawm nws PV thiab tsuas txuas nws mus rau lwm qhov (tshiab) piv txwv, zoo li tsis muaj dab tsi tshwm sim.

DS: Los ntawm kuv qhov kev xav, peb tsim cov pods hauv Kubernetes. K8s - elastic: knots raug txiav txim raws li xav tau. Lub luag haujlwm tsuas yog tsim lub plhaub thiab hais tias nws xav tau X cov peev txheej, thiab tom qab ntawd K8s yuav txiav txim siab nws tus kheej. Tab sis kev txhawb nqa cia hauv Kubernetes tseem tsis ruaj khov: 1.16, nyob rau hauv 1.17 (qhov kev tso tawm no tau tso tawm ntawm lub lim tiam dhau los) cov yam ntxwv no tsuas yog beta xwb.

Rau lub hlis mus rau ib xyoos yuav dhau mus - nws yuav dhau los ua ntau dua lossis tsawg dua, lossis tsawg kawg nws yuav raug tshaj tawm li ntawd. Tom qab ntawd qhov ua tau ntawm snapshots thiab resize daws koj qhov teeb meem kiag li. Vim koj muaj lub hauv paus. Yog lawm, nws yuav tsis nrawm heev, tab sis qhov ceev yog nyob ntawm qhov "hauv qab lub hood", vim tias qee qhov kev siv tau tuaj yeem luam thiab luam-on-sau ntawm qib disk subsystem.

NS: Nws kuj yog qhov tsim nyog rau txhua lub cav (Amazon, Google ...) kom pib txhawb qhov version - qhov no kuj siv sijhawm qee lub sijhawm.

DS: Peb tseem tsis tau siv lawv. Peb siv peb li.

Kev txhim kho hauv zos rau Kubernetes

NS: Koj puas tau tuaj hla qhov kev xav tau thaum koj xav tau nruab tag nrho cov pods ntawm ib lub tshuab thiab ua qhov kev sim me me. Txhawm rau kom tau txais cov ntaub ntawv pov thawj ntawm lub tswv yim sai, pom tias daim ntawv thov khiav hauv Kubernetes, yam tsis tau muab ntau lub tshuab rau nws. Muaj Minikube, txoj cai?

DS: Nws zoo li kuv hais tias rooj plaub no - xa tawm ntawm ib qho ntawm - tsuas yog hais txog kev txhim kho hauv zos. Los yog ib co manifestations ntawm xws li ib tug qauv. Noj Minikube, yog muaj k3s ib, KHAWV. Peb tab tom mus rau kev siv Kubernetes hauv Docker. Tam sim no peb pib ua haujlwm nrog nws rau kev xeem.

NS: Kuv tau xav tias qhov no yog kev sim qhwv tag nrho cov pods hauv ib daim duab Docker. Tab sis nws muab tawm tias qhov no yog hais txog ib yam dab tsi txawv kiag li. Txawm li cas los xij, muaj cov thawv cais, cais cov pods - tsuas yog hauv Docker.

DS: Yog. Thiab muaj ib qho kev lom zem imitation ua, tab sis lub ntsiab lus yog qhov no ... Peb muaj cov khoom siv rau kev xa tawm - werf. Peb xav ua kom nws yog hom kev cai werf up: "Tau kuv lub zos Kubernetes." Thiab ces khiav lub conditional muaj werf follow. Tom qab ntawd tus tsim tawm yuav tuaj yeem hloov kho IDE, thiab cov txheej txheem yuav raug tso tawm hauv lub kaw lus uas pom cov kev hloov pauv thiab rov tsim cov duab, rov ua haujlwm rau hauv K8s hauv zos. Nov yog qhov peb xav sim daws qhov teeb meem ntawm kev txhim kho hauv zos.

Snapshots thiab database cloning hauv K8s kev muaj tiag

NS: Yog tias peb rov qab mus rau luam-on-write. Kuv pom tias cov huab kuj muaj snapshots. Lawv ua hauj lwm txawv. Piv txwv li, hauv GCP: koj muaj qhov piv txwv ntau-terabyte nyob rau sab hnub tuaj ntawm Tebchaws Meskas. Koj nqa snapshots ib ntus. Koj khaws ib daim ntawv theej ntawm sab hnub poob ntawm ntug dej hiav txwv los ntawm ib qho snapshot - hauv ob peb feeb txhua yam yog npaj txhij, nws ua haujlwm sai heev, tsuas yog lub cache yuav tsum tau sau rau hauv lub cim xeeb. Tab sis cov clones (snapshots) yog nyob rau hauv thiaj li yuav 'muab' ib tug tshiab ntim. Qhov no yog qhov txias thaum koj xav tau los tsim ntau qhov xwm txheej.

Tab sis rau kev ntsuam xyuas, nws zoo li kuv tias snapshots, uas koj tham txog hauv Docker lossis kuv tham txog hauv ZFS, btrfs thiab txawm tias LVM ... - lawv tso cai rau koj tsis txhob tsim cov ntaub ntawv tshiab tiag tiag ntawm ib lub tshuab. Hauv huab, koj tseem yuav them rau lawv txhua lub sijhawm thiab tos tsis yog vib nas this, tab sis feeb (thiab hauv rooj plaub tub nkeeg load, tejzaum nws yog watch).

Hloov chaw, koj tuaj yeem tau txais cov ntaub ntawv no hauv ib ob lossis ob, khiav qhov kev sim thiab muab pov tseg. Cov snapshots no daws teeb meem sib txawv. Nyob rau hauv thawj rooj plaub - mus scale thiab tau tshiab replicas, thiab nyob rau hauv lub thib ob - rau kev ntsuam xyuas.

DS: Kuv tsis pom zoo. Ua kom ntim cloning ua haujlwm kom raug yog txoj haujlwm ntawm huab. Kuv tsis tau saib lawv qhov kev siv, tab sis kuv paub tias peb ua li cas ntawm hardware. Peb muaj Ceph, nws tso cai rau txhua lub cev ntim (RBD) hais clone thiab tau txais ib lub ntim thib ob nrog tib yam ntxwv hauv kaum tawm milliseconds, IOPS'kuv, etc. Koj yuav tsum nkag siab tias muaj ib qho tsis yooj yim luam-on-sau hauv. Vim li cas huab yuav tsis ua ib yam? Kuv paub tseeb tias lawv tab tom sim ua qhov no ib txoj kev lossis lwm qhov.

NS: Tab sis nws tseem yuav siv sij hawm lawv vib nas this, kaum vib nas this los tsa ib qho piv txwv, coj Docker mus rau ntawd, thiab lwm yam.

DS: Vim li cas thiaj yuav tsum tau tsa ib qho piv txwv? Peb muaj ib qho piv txwv nrog 32 cores, 16 ... thiab nws tuaj yeem haum rau nws - piv txwv, plaub. Thaum peb xaj tus thib tsib, qhov piv txwv yuav raug tsa, thiab tom qab ntawd nws yuav raug muab tshem tawm.

NS: Yog, nthuav, Kubernetes hloov mus ua ib zaj dab neeg sib txawv. Peb cov ntaub ntawv tsis nyob hauv K8s, thiab peb muaj ib qho piv txwv. Tab sis cloning ib tug multi-terabyte database yuav siv sij hawm tsis ntau tshaj ob vib nas this.

DS: Qhov no zoo heev. Tab sis kuv lub ntsiab lus pib yog tias qhov no tsis yog kev daws teeb meem. Yog, nws txias, tab sis nws tsuas yog tsim nyog rau Postgres thiab tsuas yog ntawm ib qho xwb.

NS: Nws tsim nyog tsis yog rau Postgres nkaus xwb: cov phiaj xwm no, raws li kuv tau piav qhia, yuav tsuas ua haujlwm hauv nws. Tab sis yog tias peb tsis thab txog cov phiaj xwm, thiab peb tsuas yog xav tau tag nrho cov ntaub ntawv rau kev sim ua haujlwm, ces qhov no tsim nyog rau txhua DBMS.

DS: Ntau xyoo dhau los peb tau ua qee yam zoo sib xws ntawm LVM snapshots. Qhov no yog ib qho classic. Txoj kev no tau siv zog heev. Stateful nodes tsuas yog mob. Vim koj yuav tsum tsis txhob tso tseg, koj yuav tsum nco ntsoov lawv ...

NS: Koj puas pom muaj peev xwm ntawm hybrid ntawm no? Cia peb hais tias stateful yog qee hom pod, nws ua haujlwm rau ntau tus neeg (ntau tus neeg sim). Peb muaj ib lub ntim, tab sis ua tsaug rau cov ntaub ntawv kaw lus, cov clones yog hauv zos. Yog tias lub plhaub taum poob, tab sis lub disk tseem nyob, lub plhaub yuav sawv, suav cov ntaub ntawv hais txog tag nrho cov clones, khaws txhua yam ntxiv thiab hais tias: "Ntawm no yog koj cov clones khiav ntawm cov chaw nres nkoj no, txuas ntxiv ua haujlwm nrog lawv."

DS: Technically qhov no txhais tau hais tias nyob rau hauv Kubernetes nws yog ib tug pod nyob rau hauv uas peb khiav ntau Postgres.

NS: Yog. Nws muaj qhov txwv: cia peb hais tias tsis pub ntau tshaj 10 tus neeg ua haujlwm nrog nws tib lub sijhawm. Yog tias koj xav tau 20, peb mam li tso tawm ib qho thib ob xws li pod. Peb yuav tag nrho clone nws, tau txais qhov thib ob puv ntim, nws yuav muaj tib 10 "nyias" clones. Koj tsis pom lub sijhawm no?

DS: Peb yuav tsum ntxiv cov teeb meem kev ruaj ntseg ntawm no. Hom lub koom haum no txhais tau hais tias lub plhaub taum no muaj cov cai tshwj xeeb (muaj peev xwm), vim tias nws tuaj yeem ua haujlwm tsis zoo ntawm cov ntaub ntawv kaw lus ... Tab sis kuv rov hais dua: Kuv ntseeg tias nyob rau lub sijhawm nruab nrab lawv yuav txhim kho kev khaws cia hauv Kubernetes, thiab hauv huab lawv yuav kho tag nrho zaj dab neeg nrog ntim - txhua yam yuav "tsuas yog ua haujlwm". Yuav muaj resize, cloning... Muaj ib lub ntim - peb hais: "Tsim ib tug tshiab raws li qhov ntawd," thiab tom qab ib tug thib ob thiab ib nrab peb tau txais yam peb xav tau.

NS: Kuv tsis ntseeg hauv ib thiab ib nrab vib nas this rau ntau terabytes. Ntawm Ceph koj ua koj tus kheej, tab sis koj tham txog huab. Mus rau hauv huab, ua ib lub clone ntawm ntau-terabyte EBS ntim ntawm EC2 thiab saib seb qhov kev ua tau zoo yuav zoo li cas. Nws yuav tsis siv ob peb feeb. Kuv txaus siab heev rau thaum lawv yuav mus txog qib no. Kuv nkag siab qhov koj hais, tab sis kuv thov kom txawv.

DS: Ok, tab sis kuv hais nyob rau hauv nruab nrab lub sij hawm, tsis yog luv luv. Tau ntau xyoo.

Hais txog tus neeg teb xov tooj rau PostgreSQL los ntawm Zalando

Nyob rau hauv nruab nrab ntawm lub rooj sib tham no, Alexey Klyukin, yav dhau los tus tsim tawm los ntawm Zalando, kuj tau koom nrog thiab hais txog keeb kwm ntawm PostgreSQL tus neeg teb xov tooj:

Nws yog qhov zoo uas lub ntsiab lus no tau cuam tshuam rau feem ntau: ob qho tib si Postgres thiab Kubernetes. Thaum peb pib ua nws ntawm Zalando hauv 2017, nws yog lub ntsiab lus uas txhua tus xav ua, tab sis tsis muaj leej twg ua. Txhua tus twb muaj Kubernetes, tab sis thaum lawv nug tias yuav ua li cas nrog cov ntaub ntawv, txawm tias tib neeg nyiam Kelsey Hightoweruas qhia K8s, hais tej yam zoo li no:

"Mus rau cov kev pabcuam tswj hwm thiab siv lawv, tsis txhob khiav cov ntaub ntawv hauv Kubernetes. Txwv tsis pub, koj K8s yuav txiav txim siab, piv txwv li, txhawm rau txhim kho, tua tag nrho cov nodes, thiab koj cov ntaub ntawv yuav ya mus deb, deb. "

Peb tau txiav txim siab los ua tus neeg teb xov tooj uas tsis sib haum nrog cov lus qhia no, yuav tshaj tawm Postgres database hauv Kubernetes. Thiab peb tau muaj laj thawj zoo - Patroni. Qhov no yog qhov tsis siv neeg tsis siv neeg rau PostgreSQL, ua kom raug, i.e. siv etcd, consul los yog ZooKeeper raws li kev cia cov ntaub ntawv hais txog pawg. Xws li lub chaw cia khoom uas yuav muab txhua tus neeg nug, piv txwv li, tus thawj coj tam sim no yog dab tsi, cov ntaub ntawv tib yam - txawm tias peb muaj txhua yam kev faib tawm - kom tsis muaj lub hlwb tawg. Ntxiv rau peb muaj Docker duab rau nws.

Nyob rau hauv dav dav, lub tuam txhab xav tau rau nws pib tsis ua hauj lwm tshwm sim tom qab migrating los ntawm ib tug internal hardware data center rau huab. Cov huab tau ua raws li tus tswv PaaS (Platform-as-a-Service) kev daws teeb meem. Nws yog Open Source, tab sis nws tau siv ntau txoj haujlwm kom tau txais nws thiab khiav. Nws hu ua STUPS.

Thaum xub thawj, tsis muaj Kubernetes. Ntau qhov tseeb, thaum peb tus kheej cov kev daws teeb meem raug xa mus, K8s twb muaj lawm, tab sis nws yog raw li nws tsis haum rau kev tsim khoom. Nws yog, hauv kuv lub tswv yim, 2015 lossis 2016. Los ntawm 2017, Kubernetes tau dhau los ua neeg paub tab-yuav tsum tau tsiv mus nyob ntawd.

Thiab peb twb muaj lub thawv Docker. Muaj PaaS uas siv Docker. Vim li cas ho tsis sim K8s? Vim li cas ho tsis sau koj tus kheej tus neeg teb xov tooj? Murat Kabilov, uas tuaj rau peb los ntawm Avito, pib qhov no ua ib txoj haujlwm ntawm nws tus kheej txoj haujlwm - "ua si" - thiab qhov project "tawm mus."

Tab sis feem ntau, kuv xav tham txog AWS. Vim li cas thiaj muaj keeb kwm AWS ntsig txog code...

Thaum koj khiav ib yam dab tsi hauv Kubernetes, koj yuav tsum nkag siab tias K8s yog qhov kev ua haujlwm zoo li no. Nws tab tom txhim kho, txhim kho thiab txawm tawg los ntawm lub sijhawm. Koj yuav tsum tau ua tib zoo saib xyuas txhua qhov kev hloov pauv hauv Kubernetes, koj yuav tsum npaj siab dhia mus rau hauv nws yog tias muaj qee yam tshwm sim thiab kawm seb nws ua haujlwm li cas hauv kev nthuav dav - tej zaum ntau dua li qhov koj xav tau. Qhov no, hauv paus ntsiab lus, siv rau txhua lub platform uas koj khiav koj cov databases ...

Yog li, thaum peb ua cov lus, peb muaj Postgres khiav ntawm lub ntim sab nraud (EBS hauv qhov no, txij li peb tau ua haujlwm ntawm AWS). Cov ntaub ntawv loj hlob tuaj, ntawm qee lub sijhawm nws yuav tsum tau hloov kho nws: piv txwv li, thawj qhov loj ntawm EBS yog 100 TB, cov ntaub ntawv loj hlob rau nws, tam sim no peb xav ua EBS 200 TB. Yuav ua li cas? Cia peb hais tias koj tuaj yeem ua qhov pov tseg / rov qab los ntawm qhov piv txwv tshiab, tab sis qhov no yuav siv sijhawm ntev thiab cuam tshuam nrog lub sijhawm poob.

Yog li ntawd, kuv xav tau ib tug resize uas yuav ua rau kom EBS muab faib thiab ces qhia rau cov ntaub ntawv system siv qhov chaw tshiab. Thiab peb tau ua nws, tab sis lub sijhawm ntawd Kubernetes tsis muaj API rau kev hloov pauv loj. Txij li thaum peb ua haujlwm ntawm AWS, peb tau sau code rau nws API.

Tsis muaj leej twg txwv koj los ntawm kev ua ib yam rau lwm lub platform. Tsis muaj lus qhia hauv nqe lus hais tias nws tuaj yeem khiav ntawm AWS nkaus xwb, thiab nws yuav tsis ua haujlwm rau txhua yam. Feem ntau, qhov no yog qhov Open Source project: yog tias leej twg xav kom ceev qhov tshwm sim ntawm kev siv API tshiab, koj zoo siab tos txais. Noj GitHub, rub cov lus thov - pab pawg Zalando sim teb rau lawv sai heev thiab txhawb tus neeg teb xov tooj. Raws li kuv paub, qhov project koom ntawm Google Lub Caij Ntuj Sov ntawm Code thiab qee qhov kev pib zoo sib xws. Zalando ua haujlwm zoo heev rau nws.

PS lawm!

Yog tias koj txaus siab rau lub ntsiab lus ntawm PostgreSQL thiab Kubernetes, ces thov nco ntsoov tias tom ntej Postgres Tuesday tau tshwm sim lub lim tiam dhau los, qhov uas kuv tau tham nrog Nikolai Alexander Kukushkin los ntawm Zalando. Video los ntawm nws yog muaj no.

PPS

Nyeem kuj ntawm peb blog:

Tau qhov twg los: www.hab.com

Ntxiv ib saib