Ukwandisa, abathengi bafumana ezi zicelo zilandelayo: "Sifuna njenge-Amazon RDS, kodwa ingabizi"; "Siyifuna njenge-RDS, kodwa kuyo yonke indawo, kuyo nayiphi na isiseko." Ukuphumeza isisombululo esinjalo esilawulwayo kwi-Kubernetes, sijonge imeko yangoku yabaqhubi abadumileyo be-PostgreSQL (i-Stolon, abaqhubi abavela kwi-Crunchy Data kunye ne-Zalando) kwaye senze ukhetho lwethu.
Eli nqaku ngamava esiwafumene kokubini kwimbono yethiyori (uphononongo lwezisombululo) kwaye ukusuka kwicala elisebenzayo (yintoni ekhethiweyo kunye nento eyafika kuyo). Kodwa kuqala, makhe sijonge ukuba zeziphi iimfuno jikelele zokutshintshwa okunokubakho kwe-RDS...
Yintoni i-RDS
Xa abantu bethetha nge-RDS, kumava ethu, bathetha inkonzo elawulwayo ye-DBMS ethi:
- kulula ukuyiqwalasela;
- inamandla okusebenza ngeesnapshots kwaye iphinde ibuyiselwe kuzo (ngokukhethekileyo ngenkxaso
I-PITR ); - ikuvumela ukuba wenze i-topology ye-master-slave;
- inoluhlu olutyebileyo lwezandiso;
- ibonelela ngophicotho-zincwadi kunye nolawulo lomsebenzisi/ufikelelo.
Ngokuqhelekileyo, iindlela zokuphumeza umsebenzi okhoyo zinokwahluka kakhulu, kodwa indlela enemeko enokuthi i-Ansible ayisondeli kuthi. (Abalingane abavela kwi-2GIS bafikelela kwisigqibo esifanayo njengesiphumo
Abaqhubi bayindlela eqhelekileyo yokusombulula iingxaki ezifanayo kwi-ecosystem ye-Kubernetes. Umlawuli wezobugcisa we "Flanta" sele ethethe ngokubanzi malunga nabo ngokumalunga nedatha eqaliswe ngaphakathi kweKubernetes.
NB: Ukudala ngokukhawuleza abaqhubi abalula, sicebisa ukuba sinikele ingqalelo kuMthombo ovulekileyo oluncedo
Kukho uninzi lwabasebenzisi be-K8s abadumileyo bePostgreSQL:
- Stolon;
- I-Crunchy Data PostgreSQL Operator;
- Zalando Postgres Operator.
Masizijonge ngakumbi.
Ukhetho lomsebenzisi
Ukongeza kwizinto ezibalulekileyo esele zikhankanyiwe ngasentla, thina - njengeenjineli zokusebenza kweziseko ezingundoqo zeKubernetes - sikwalindele oku kulandelayo kubasebenzi:
- ukuthunyelwa ukusuka kwiGit kunye ne
Custom Resources ; - inkxaso ye-pod anti-affinity;
- ukufaka i-node affinity okanye umkhethi we-node;
- ukufakwa kokunyamezela;
- ukufumaneka kobuchule bokushuna;
- itekhnoloji eqondakalayo kunye nemiyalelo.
Ngaphandle kokungena kwiinkcukacha kwinqaku ngalinye (buza kumagqabantshintshi ukuba usenemibuzo malunga nabo emva kokufunda lonke inqaku), ndiya kuqaphela ngokubanzi ukuba ezi parameters ziyafuneka ukuchaza ngokuchanekileyo ngakumbi ubungcali beendawo zeqela ukuze ziodole kwizicelo ezithile. Ngale ndlela sinokufikelela kwibhalansi efanelekileyo malunga nokusebenza kunye neendleko.
Ngoku masiqhubele phambili kubasebenzisi bePostgreSQL ngokwabo.
1. Stolon
Ewe, uStolon ngumzekelo obalaseleyo woyilo olucingisisiweyo:
Isixhobo salo mqhubi sinokufumaneka ngokweenkcukacha kwingxelo okanye
Nangona kunjalo, uStolon stolonctl
, unikezelo lwenziwa ngetshathi yeHelm, kwaye ezo siko zichaziwe kwaye zicaciswe kwiConfigMap.
Ngakolunye uhlangothi, kubonakala ukuba umqhubi akayena ngokwenene umqhubi (emva koko, akasebenzisi i-CRD). Kodwa kwelinye icala, yinkqubo eguquguqukayo ekuvumela ukuba uqwalasele izixhobo kwii-K8s njengoko ubona kufanelekile.
Ukushwankathela, kuthi ngokobuqu akukhange kubonakale kufanelekile ukwenza itshathi eyahlukileyo yesiseko sedatha ngasinye. Ngoko ke, saqalisa ukukhangela ezinye iindlela.
2. I-Crunchy Data PostgreSQL Operator
Uyilo lweCrunchy Data PostgreSQL Operator ikwahlangabezana neemfuno ezichaziweyo:
Ulawulo lwenzeka ngokusetyenziswa pgo
, nangona kunjalo, ivelisa iZibonelelo zeSiko leKubernetes. Ke ngoko, umsebenzisi ukholisiwe kuthi njengabasebenzisi abanokubakho:
- kukho ulawulo ngeCRD;
- ulawulo lomsebenzisi olufanelekileyo (ngokusebenzisa iCRD);
- ukudibanisa namanye amacandelo
I-Crunchy Data Container Suite - ingqokelela ekhethekileyo yemifanekiso yesikhongozeli sePostgreSQL kunye nezixhobo zokusebenza kunye nayo (kubandakanywa ne-pgBackRest, pgAudit, izandiso ezivela kwi-contrib, njl.).
Nangona kunjalo, iinzame zokuqalisa ukusebenzisa umsebenzisi ovela kwiDatha yeCrunchy zibonakalise iingxaki ezininzi:
- Kwakungekho nto yokunyamezela - kuphela i-nodeSelector inikezelwa.
- Iipods ezenziweyo beziyinxalenye yokusasazwa, ngaphandle kwento yokuba siye safaka isicelo esisemthethweni. Ngokungafaniyo ne-StatefulSets, ukuhanjiswa akukwazi ukwenza iidiski.
I-drawback yokugqibela ikhokelela kwixesha elihlekisayo: kwindawo yokuvavanya sikwazi ukuqhuba ii-replicas ezi-3 ngediski enye indawo yokugcina, ebangela ukuba umqhubi anike ingxelo yokuba ii-replicas ezi-3 zazisebenza (nangona zazingekho).
Olunye uphawu lwalo mqhubi ludibaniso olulungeleyo kunye neenkqubo ezahlukeneyo ezincedisayo. Umzekelo, kulula ukuyifaka i-pgAdmin kunye ne-pgBounce, kwaye kwi
Nangona kunjalo, ukhetho olungaqhelekanga lwezixhobo eziveliswe nguKubernetes zasikhokelela kwisidingo sokufumana isisombululo esahlukileyo.
3. Zalando Postgres Operator
Siyazi iimveliso zeZalando ixesha elide: sinamava ngokusebenzisa iZalenium kwaye, ngokuqinisekileyo, sizamile
Esi sesona sisombululo sincinci sixutyushwa kwinqaku: ukukhutshwa kokuqala kwenzeka ngo-Agasti 2018. Nangona kunjalo, nangona inani elincinci lokukhutshwa ngokusemthethweni, le projekthi ifikile indlela ende, sele idlula ekuthandeni isisombululo esivela kwi-Crunchy Data kunye neenkwenkwezi ze-1300 + kwi-GitHub kunye nenani eliphezulu labaxhasi (70+).
"Ngaphantsi kwe-hood" lo mqhubi usebenzisa izisombululo ezivavanywa ixesha:
Yile ndlela uyilo lwabasebenzi oluvela eZalando luboniswa:
Umsebenzisi ulawulwa ngokupheleleyo ngeZibonelelo zeSiko, uzenzele ngokuzenzekelayo iStatefulSet kwizikhongozeli, ezinokuthi emva koko zenziwe ngokwezifiso ngokongeza ii-sidecars ezahlukeneyo kwipod. Konke oku kuluncedo olukhulu xa kuthelekiswa nomsebenzisi ovela kwiCrunchy Data.
Ekubeni sikhethe isisombululo esivela ku-Zalando phakathi kweenketho ze-3 ezicatshangelwayo, inkcazo eyongezelelweyo yezakhono zayo iya kuboniswa ngezantsi, ngokukhawuleza kunye nokusebenza kwesicelo.
Ziqhelanise nePostgres Operator evela eZalando
Ubeko lomsebenzisi lulula kakhulu: khuphela nje ukhupho lwangoku kwiGitHub kwaye usebenzise iifayile zeYAML kulawulo.
Emva kofakelo, kufuneka ukhathazeke ngokuseta postgres-operator
kwindawo yegama apho ufake khona umsebenzisi. Nje ukuba iindawo zokugcina ziqwalaselwe, ungathumela iqela lakho lokuqala lePostgreSQL.
Umzekelo, ukuhanjiswa kwethu okusemgangathweni kujongeka ngolu hlobo:
apiVersion: acid.zalan.do/v1
kind: postgresql
metadata:
name: staging-db
spec:
numberOfInstances: 3
patroni:
synchronous_mode: true
postgresql:
version: "12"
resources:
limits:
cpu: 100m
memory: 1Gi
requests:
cpu: 100m
memory: 1Gi
sidecars:
- env:
- name: DATA_SOURCE_URI
value: 127.0.0.1:5432
- name: DATA_SOURCE_PASS
valueFrom:
secretKeyRef:
key: password
name: postgres.staging-db.credentials
- name: DATA_SOURCE_USER
value: postgres
image: wrouesnel/postgres_exporter
name: prometheus-exporter
resources:
limits:
cpu: 500m
memory: 100Mi
requests:
cpu: 100m
memory: 100Mi
teamId: staging
volume:
size: 2Gi
Lo mboniso usasaza iqela leemeko ezi-3 ezinemoto esecaleni ngendlela
Kufanelekile ukunikela ingqalelo iphaneli yolawulo lwewebhu -
Uluhlu lwamaqela e-PostgreSQL
Ulawulo logcino
Enye into enomdla yinkxaso
Iingxaki kunye nezisombululo
Nangona kunjalo, ukusetyenziswa komqhubi ngokukhawuleza kubonise iintsilelo ezininzi ezibalulekileyo:
- ukungabikho kwe-nodeSelector inkxaso;
- ukungakwazi ukukhubaza i-backups;
- xa usebenzisa umsebenzi wokudala wesiseko sedata, amalungelo angagqibekanga awabonakali;
- Ngamanye amaxesha amaxwebhu alahlekile okanye aphelelwe lixesha.
Ngethamsanqa, ezininzi zazo zinokusonjululwa. Masiqale ukusuka ekugqibeleni - iingxaki nge uxwebhu.
Okunokwenzeka, uya kudibana nenyaniso yokuba ayisoloko icacile indlela yokubhalisa i-backup kunye nendlela yokudibanisa ibhakethi yokugcina kwi-UI yoMsebenzisi. Amaxwebhu athetha ngale nto ngokudlulayo, kodwa inkcazo yokwenyani ingaphakathi
- kufuneka wenze imfihlo;
- yigqithisele kumsebenzisi njenge parameter
pod_environment_secret_name
kwi-CRD ngoseto lomsebenzisi okanye kwi-ConfigMap (kuxhomekeke kwindlela ogqiba ngayo ukufaka umsebenzisi).
Nangona kunjalo, njengoko kuvela, oku akunakwenzeka okwangoku. Yiyo loo nto siqokelele
Ukuba ugqithisa iiparameters zogcino kumsebenzisi, oko kukuthi - wal_s3_bucket
kunye nezitshixo zokufikelela kwi-AWS S3, emva koko izogcina yonke into: kungekhona kuphela iziseko kwimveliso, kodwa kunye nesiteji. Oku bekungasifanelanga.
Kwinkcazo yeeparamitha zeSpilo, esisiseko seDocker esongayo sePgSQL xa usebenzisa umsebenzisi, kwavela: ungadlula iparameter. WAL_S3_BUCKET
engenanto, ngokwenza oko ikhubaza ugcino. Ngaphezu koko, ndafumana uvuyo olukhulu enableWALArchiving: false
kumthombo weqela lePostgreSQL.
Ewe, bekukho ithuba lokuyenza ngokuhlukileyo ngokuqhuba abaqhubi be-2: enye ye-staging (ngaphandle kwe-backups), kunye neyesibini kwimveliso. Kodwa sakwazi ukwenza enye.
Kulungile, sifunde indlela yokudlulisa ukufikelela kwi-database ye-S3 kunye nee-backups zaqala ukungena kwindawo yokugcina. Uwenza njani amaphepha agcinwayo asebenze kwi-UI yoMsebenzisi?
Kuya kufuneka udibanise izinto ezi-3 kwi-UI yoMsebenzisi:
-
SPILO_S3_BACKUP_BUCKET
-
AWS_ACCESS_KEY_ID
-
AWS_SECRET_ACCESS_KEY
Emva koku, ulawulo lwee-backups luya kufumaneka, oluya kuthi kwimeko yethu lube lula umsebenzi kunye nesiteji, ukusivumela ukuba sihambise iziqwenga ezivela kwimveliso apho ngaphandle kwezikripthi ezongezelelweyo.
Enye inzuzo yayingumsebenzi kunye ne-API yeQela kunye namathuba amaninzi okudala i-database kunye neendima usebenzisa izixhobo zokusebenza. Nangona kunjalo, yenziwe iindima zazingenamalungelo ngokungagqibekanga. Ngokufanelekileyo, umsebenzisi onamalungelo okufunda akakwazanga ukufunda iitafile ezintsha.
Kutheni kunjalo? Nangona kunjalo kwikhowudi GRANT
, azisoloko zisetyenziswa. Kukho iindlela ezi-2: syncPreparedDatabases
ΠΈ syncDatabases
. Ku syncPreparedDatabases
- nangona kunjalo kwicandelo preparedDatabases
defaultRoles
ΠΈ defaultUsers
ukwenza iindima, amalungelo angagqibekanga awasetyenziswa. Sikwinkqubo yokulungisa isiqwenga ukuze la malungelo asetyenziswe ngokuzenzekelayo.
Kwaye inqaku lokugqibela kuphuculo olufanelekileyo kuthi -
Kweneke ntoni?
Ngokusekwe kwiziphumo zokusombulula ezi ngxaki zingentla, safoxa iPostgres Operator ukusuka eZalando ukuya
Uluhlu lweePRs zamkelwe kwifolokhwe:
ukwakha umfanekiso okhuselekileyo wobunzima bomsebenzi kwiDocker ;ikhubaza i-backups ;ukuhlaziya iinguqulelo zemithombo yeenguqulelo zangoku zee-k8s ;ukuphunyezwa kweNode Affinity .
Kuya kuba kuhle ukuba uluntu luxhasa ezi PRs ukwenzela ukuba zinyuke ngenguqu elandelayo yomsebenzisi (1.6).
Ibhonasi! Ibali lempumelelo yokufuduka kwemveliso
Ukuba usebenzisa iPatroni, imveliso ephilayo inokufuduselwa kumqhubi ngexesha elincinci lokuphumla.
I-Spilo ikuvumela ukuba wenze amaqela alindileyo nge-S3 yokugcina nge
Ukuphindaphinda okunengqiqo kwePostgreSQL kuza kuhlangula. Nangona kunjalo, asiyi kungena kwiinkcukacha malunga nendlela yokwenza iimpapasho kunye nokubhaliselwa, kuba ... isicwangciso sethu sasiyi-fiasco.
Inyani kukuba i-database yayineetafile ezininzi ezilayishiweyo kunye nezigidi zemigca, ezo, ngaphezu koko, zazihlala zizaliswa kwaye zicinywa. copy_data
, xa i-replica entsha ikopisha zonke iziqulatho ezivela kwi-master, ayinakukwazi ukuhambelana nenkosi. Ukukopa umxholo usebenze iveki, kodwa awuzange ubanjwe nenkosi. Ekugqibeleni, yandinceda ukusombulula ingxaki pg_dump
. Ndiza kuchaza inguqulelo yethu (eguqulwe kancinane) yale algorithm.
Umbono kukuba ungenza umrhumo okhubazekileyo ubotshelelwe kwindawo ethile yokuphindaphinda, kwaye emva koko ulungise inombolo yentengiselwano. Kwakukho iikopi ezifumanekayo zomsebenzi wokuvelisa. Oku kubalulekile kuba i-replica iya kunceda ukudala ukulahla okuhambelanayo kwaye uqhubeke nokufumana utshintsho oluvela kwinkosi.
Imiyalelo elandelayo echaza inkqubo yokufuduka iya kusebenzisa olu lwazi lulandelayo.
- inkosi - iseva yomthombo;
- ikopi1 - i-replica yokusakaza kwimveliso yakudala;
- ikopi2 -Ireplica entsha enengqiqo.
Isicwangciso sokufuduka
1. Yenza umrhumo kwinkosi yazo zonke iitafile ezikwi-schema public
isiseko dbname
:
psql -h master -d dbname -c "CREATE PUBLICATION dbname FOR ALL TABLES;"
2. Yenza indawo yokuphindaphinda kwinkosi:
psql -h master -c "select pg_create_logical_replication_slot('repl', 'pgoutput');"
3. Yeka ukuphindaphinda kwikopi endala:
psql -h replica1 -c "select pg_wal_replay_pause();"
4. Fumana inombolo yetransekshini kumphathi:
psql -h master -c "select replay_lsn from pg_stat_replication where client_addr = 'replica1';"
5. Susa inkunkuma kwikopi endala. Siza kwenza oku kwimisonto emininzi, eya kunceda ukukhawulezisa inkqubo:
pg_dump -h replica1 --no-publications --no-subscriptions -O -C -F d -j 8 -f dump/ dbname
6. Layisha ukulahla kwiseva entsha:
pg_restore -h replica2 -F d -j 8 -d dbname dump/
7. Emva kokukhuphela ukulahla, ungaqala ukuphindaphinda kwi-replica yostrimisho:
psql -h replica1 -c "select pg_wal_replay_resume();"
7. Masenze umrhumo kwikopi entsha enengqiqo:
psql -h replica2 -c "create subscription oldprod connection 'host=replica1 port=5432 user=postgres password=secret dbname=dbname' publication dbname with (enabled = false, create_slot = false, copy_data = false, slot_name='repl');"
8. Makhe sifumane oid
imirhumo:
psql -h replica2 -d dbname -c "select oid, * from pg_subscription;"
9. Masithi yamkelwe oid=1000
. Masisebenzise inombolo yetransekshini kumrhumo:
psql -h replica2 -d dbname -c "select pg_replication_origin_advance('pg_1000', 'AA/AAAAAAAA');"
10. Masiqale ukuphindaphinda:
psql -h replica2 -d dbname -c "alter subscription oldprod enable;"
11. Jonga ubume bomrhumo, ukuphindaphinda kufuneka kusebenze:
psql -h replica2 -d dbname -c "select * from pg_replication_origin_status;"
psql -h master -d dbname -c "select slot_name, restart_lsn, confirmed_flush_lsn from pg_replication_slots;"
12. Emva kokuba uphindaphindo luqalisiwe kwaye oovimba beenkcukacha bangqamaniswe, ungatshintsha.
13. Emva kokuvala ukuphindaphinda, kufuneka ulungise ulandelelwano. Oku kuchazwe kakuhle
Ngombulelo kwesi sicwangciso, utshintsho lwenzeka ngokulibaziseka okuncinci.
isiphelo
Abaqhubi be-Kubernetes bakuvumela ukuba wenze lula izenzo ezahlukeneyo ngokuzinciphisa ekudalweni kwezixhobo ze-K8s. Nangona kunjalo, ukuba ufezekise i-automation ephawulekayo ngoncedo lwabo, kuyafaneleka ukukhumbula ukuba kunokuzisa inani lee-nuances ezingalindelekanga, ngoko khetha abaqhubi bakho ngobulumko.
Emva kokuqwalasela abaqhubi abathathu abadumileyo be-Kubernetes kwi-PostgreSQL, sikhethe iprojekthi kwi-Zalando. Kwaye kuye kwafuneka soyise ubunzima obuthile ngayo, kodwa isiphumo besikholisa ngokwenene, ke siceba ukwandisa la mava kolunye ufakelo lwePgSQL. Ukuba unamava usebenzisa izisombululo ezifanayo, siya kuvuya ukubona iinkcukacha kwizimvo!
PS
Funda nakwibhlog yethu:
- Β«
Iidatabase kunye neKubernetes (uphononongo kunye nengxelo yevidiyo) "; - Β«
I-Postgres ngoLwesibini #5: I-PostgreSQL kunye ne-Kubernetes. CI/CD. Uvavanyo oluzenzekelayo "; - Β«
Ibali elinye kunye nomsebenzisi weRedis kwi-K8s kunye nophononongo oluncinci lwezinto eziluncedo zokuhlalutya idatha kule database. Β».
umthombo: www.habr.com