ProHoster > Блог > Whakahaerenga > He Tirohanga Poto mo nga Tauākī PostgreSQL mō Kubernetes, ā mātou Kōwhiringa me ā mātou Wheako
He Tirohanga Poto mo nga Tauākī PostgreSQL mō Kubernetes, ā mātou Kōwhiringa me ā mātou Wheako
Kei te piki ake, kei te whiwhi nga kaihoko i nga tono e whai ake nei: "E hiahia ana matou kia rite ki te Amazon RDS, engari he iti ake"; "Kei te pirangi matou kia rite ki te RDS, engari i nga waahi katoa, i nga hanganga katoa." Hei whakatinana i taua otinga whakahaere i runga i te Kubernetes, i titiro matou ki te ahua o naianei o nga kaiwhakahaere rongonui mo PostgreSQL (Stolon, nga kaiwhakahaere mai i Crunchy Data me Zalando) me te whiriwhiri.
Ko tenei tuhinga te wheako i whakawhiwhia e matou mai i te tirohanga ariā (arotake o nga otinga) me te taha mahi (he aha i whiriwhiria me te aha i puta mai). Engari tuatahi, me whakatau he aha nga whakaritenga whanui mo te whakakapinga pea mo te RDS...
He aha te RDS
Ina korero nga tangata mo te RDS, i roto i o maatau wheako, ko te tikanga he ratonga DBMS whakahaere e:
ngawari ki te whirihora;
he kaha ki te mahi me nga whakaahua me te whakaora mai i a raatau (he pai ake me te tautoko PITR);
ka taea e koe te hanga topologies rangatira-pononga;
he rarangi nui o nga toronga;
e whakarato ana i te arotake me te whakahaere kaiwhakamahi/whakauru.
Ko te tikanga, he tino rereke nga huarahi ki te whakatinana i nga mahi kei a koe, engari ko te ara me te Ansible herenga kaore i te tata ki a tatou. (Ko nga hoa mahi mai i te 2GIS i rite ki te whakatau tana nganatanga Waihangahia "he taputapu mo te tuku tere i te roopu failover-a-Postgres.")
Ko nga kaiwhakahaere he huarahi noa mo te whakaoti rapanga rite i roto i te rauwiringa kaiao Kubernetes. Ko te kaiwhakahaere hangarau o "Flanta" kua korero ake mo ratou e pa ana ki nga papaunga raraunga kua whakarewahia ki roto o Kubernetes. distoli roto tetahi o ana ripoata.
NB: Ki te hanga tere i nga kaiwhakahaere ngawari, ka tūtohu matou kia aro ki a maatau taputapu Open Source anga-kaiwhakahaere. Ma te whakamahi, ka taea e koe te mahi me te kore e mohio ki a Haere, engari i nga huarahi e tino mohio ana ki nga kaiwhakahaere punaha: i Bash, Python, etc.
He maha nga kaiwhakahaere K8 rongonui mo PostgreSQL:
Stolon;
Raraunga Crunchy PostgreSQL Kaiwhakahaere;
Zalando Postgres Kaiwhakahaere.
Kia ata titiro tatou ki a raatau.
Kōwhiringa kaiwhakahaere
I tua atu i nga ahuatanga nui kua whakahuahia ake nei, ko matou - he miihini whakahaere hanganga a Kubernetes - i tumanakohia e whai ake nei mai i nga kaiwhakahaere:
te whakauru i te hononga node, te kaiwhiri node ranei;
te whakaurunga o nga here;
te waatea o nga kaha o te whakatika;
nga hangarau mohio me nga whakahau.
Ma te kore e uru ki nga korero mo ia o nga tohu (patai i roto i nga korero mena kei a koe tonu nga patai mo ratou i muri i te panui i te tuhinga katoa), ka kite ahau i te nuinga o te waa e hiahiatia ana enei tawhā ki te whakaahua tika ake i te motuhake o nga kohinga kohinga kia pai ai. tono mo nga tono motuhake. Ma tenei ka taea e tatou te whakatutuki i te pauna tino pai mo te mahi me te utu.
Inaianei me neke atu ki nga kaiwhakahaere PostgreSQL ake.
1. Stolon
Stolon mai i te kamupene Itari Sorint.lab i roto i kua korerohia te ripoata i whakaarohia he momo paerewa i waenga i nga kaiwhakahaere mo te DBMS. He kaupapa tino tawhito tenei: ko tana tukunga tuatahi mo te iwi i puta i te marama o Whiringa-a-rangi 2015(!), A ko te putunga GitHub e whakanui ana i te tata ki te 3000 whetu me te 40+ kaikoha.
Ae, he tauira pai a Stolon mo te hoahoanga whakaaro:
Ko te taputapu o tenei kaiwhakahaere ka kitea i roto i nga korero i roto i te ripoata ranei tuhinga kaupapa. I te nuinga o te waa, kati noa ki te kii ka taea e ia nga mea katoa e whakaahuatia ana: te ngoikore, nga takawaenga mo te urunga o nga kaihoko marama, nga taapiri... I tua atu, ka tukuna e nga takawaenga te uru ma roto i tetahi ratonga mutunga - kaore i rite ki era atu otinga e rua e korerohia ana i raro nei (e rua nga ratonga mo ia tangata. turanga uru).
Heoi, Stolon kahore Rauemi Ritenga, he aha te take e kore ai e taea te tuku kia ngawari me te tere - "penei i nga keke wera" - ki te hanga tauira DBMS i Kubernetes. Ka whakahaerehia te whakahaere ma te whaipainga stolonctl, ka mahia ma te tūtohi Helm, ka tautuhia, ka tohua ki te ConfigMap.
I tetahi taha, ka puta ko te kaiwhakahaere ehara i te tino kaiwhakahaere (i muri i nga mea katoa, kaore i te whakamahi i te CRD). Engari i tetahi atu ringa, he punaha ngawari e taea ai e koe te whirihora i nga rauemi i roto i nga K8s kia rite ki taau e pai ai.
Hei whakarapopototanga, ki a matou ake kaore i tino pai ki te hanga i tetahi tūtohi motuhake mo ia putunga raraunga. Na reira, i timata matou ki te rapu huarahi.
2. Raraunga Crunchy PostgreSQL Kaiwhakahaere
Kaiwhakahaere mai i te Crunchy Data, he rangatahi whakaoho Amerika, he ahua ke atu. Ko te hitori o te iwi ka timata i te tukunga tuatahi i te Maehe 2017, mai i tera wa kua riro mai i te putunga GitHub i raro iho i te 1300 nga whetu me te 50+ o nga kaikoha. Ko te tukunga hou mai i Mahuru i whakamatauria ki te mahi tahi me Kubernetes 1.15-1.18, OpenShift 3.11+ me 4.4+, GKE me VMware Enterprise PKS 1.3+.
Ko te hoahoanga o Crunchy Data PostgreSQL Kaiwhakahaere e tutuki ana i nga whakaritenga kua kiia:
Ka puta te whakahaere ma te whaipainga pgo, heoi, ka whakaputahia e ia nga Rauemi Ritenga mo Kubernetes. Na reira, i pai te kaiwhakahaere ki a matou hei kaiwhakamahi pea:
he mana whakahaere ma te CRD;
te whakahaere kaiwhakamahi ngawari (ma te CRD ano hoki);
te whakauru ki etahi atu waahanga Huanga Ipu Raraunga Crunchy - he kohinga motuhake o nga whakaahua ipu mo te PostgreSQL me nga taputapu mo te mahi ki a ia (tae atu ki te pgBackRest, pgAudit, taapiri mai i te takoha, me etahi atu).
Heoi, ko nga ngana ki te tiimata ki te whakamahi i te kaiwhakahaere mai i te Crunchy Data i kitea he maha nga raru:
Karekau he waahi ka taea - ko te nodeSelector anake ka tukuna.
Ko nga peera i hangaia he waahanga o te Whakamahinga, ahakoa te mea i tukuna e matou he tono mana. Kaore i rite ki nga StatefulSets, kaore e taea e Deployments te hanga kōpae.
Ko te whakahokinga whakamutunga ka arahi ki nga waa rorirori: i runga i te taiao whakamatautau i whakahaerehia e matou nga tauira e 3 me te kopae kotahi. rokiroki rohe, i kii mai te kaiwhakahaere e 3 nga tauira e mahi ana (ahakoa karekau).
Ko tetahi atu ahuatanga o tenei kaiwhakahaere ko tana whakaurunga kua rite ki nga momo punaha tautoko. Hei tauira, he ngawari ki te whakauru i te pgAdmin me te pgBounce, me roto tuhinga Ko te Grafana me te Prometheus i whirihora i mua ka whakaarohia. I tata nei tuku 4.5.0-beta1 Ko te pai ake o te whakaurunga ki te kaupapa ka tuhia motuhake pgMonitor, he mihi ki tenei ka tukuna e te kaiwhakahaere he tirohanga maamaa o nga inenga PgSQL i waho o te pouaka.
Heoi, na te kowhiringa rereke o nga rauemi i hangaia e Kubernetes i arai matou ki te rapu huarahi rereke.
3. Zalando Postgres Kaiwhakahaere
Kua mohio matou ki nga hua Zalando mo te wa roa: kua whai wheako matou ki te whakamahi i te Zalenium me te tikanga, i whakamatau matou Patroni Ko ta ratou otinga HA rongonui mo PostgreSQL. Mo te huarahi a te kamupene ki te hanga Kaiwhakahaere Postgres Ko tetahi o ona kaituhi, Alexey Klyukin, i kii i runga i te rangi Pouaka-Tuare #5, a pai ana matou.
Koinei te otinga iti rawa i korerohia i roto i te tuhinga: ko te tukunga tuatahi i puta i Akuhata 2018. Heoi, ahakoa te iti o nga whakaputanga okawa, kua tae mai te kaupapa, kua eke ki runga ake i te rongonui i te otinga mai i te Crunchy Data me te 1300+ whetu i runga i te GitHub me te nuinga o nga kaikoha (70+).
"I raro i te awhi" ka whakamahia e tenei kaiwhakahaere nga otinga kua whakamatauria i te waa:
Koinei te ahua o te hoahoanga kaiwhakahaere mai i Zalando:
Ka tino whakahaerehia te kaiwhakahaere ma nga Rauemi Ritenga, ka hanga aunoa he StatefulSet mai i nga ipu, katahi ka taea te whakarite ma te taapiri i nga momo waka taha ki te pona. He painga nui tenei katoa ki te whakataurite ki te kaiwhakahaere mai i te Crunchy Data.
I te mea i kowhiria e matou te otinga mai i a Zalando i roto i nga whiringa 3 e whakaarohia ana, ka whakaatuhia he whakamaarama mo ona kaha ki raro, me te mahi tono.
Parakatihi me te Kaiwhakahaere Postgres mai i Zalando
He tino ngawari te whakaurunga a te kaiwhakahaere: tango noa i te tukunga o naianei mai i GitHub ka tono i nga konae YAML mai i te raarangi. whakakitenga. I tua atu, ka taea e koe te whakamahi operatorhub.
I muri i te whakaurunga, me awangawanga koe mo te whakatuu rokiroki mo nga raarangi me nga taapiri. Ka mahia tenei ma te ConfigMap postgres-operator i te mokowāingoa i whakauruhia e koe te kaiwhakahaere. Kia whirihorahia nga putunga, ka taea e koe te toha i to roopu PostgreSQL tuatahi.
Hei tauira, he penei te ahua o ta maatau whakatakotoranga paerewa:
Ka tukuna e tenei whakaaturanga he huinga o nga wa e 3 me te taha o te motuka postgres_exporter, ka tangohia e matou nga inenga tono. Ka taea e koe te kite, he tino ngawari nga mea katoa, a, ki te hiahia koe, ka taea e koe te hanga i te maha o nga tautau.
He mea tika kia aro atu pae tukutuku whakahaere - postgres-operator-ui. Ka tae mai me te kaiwhakahaere ka taea e koe te hanga me te whakakore i nga tautau, me te mahi me nga taapiri i hangaia e te kaiwhakahaere.
Rarangi o nga tautau PostgreSQL
Te whakahaeretanga o te taapiri
Ko tetahi atu mea whakamiharo ko te tautoko API Kapa. Ka hanga aunoa tenei tikanga nga mahi i roto i te PostgreSQL, i runga i te rarangi ingoa ingoa kua puta. Na te API ka taea e koe te whakahoki mai i te rarangi o nga kaiwhakamahi kua hanga aunoatia nga mahi.
Nga raruraru me nga otinga
Heoi, ko te whakamahinga o te kaiwhakawhanake kaore i roa kua kitea etahi ngoikoretanga nui:
te kore tautoko nodeSelector;
te kore e taea te whakakore i nga taapiri;
i te wa e whakamahi ana i te mahi hanga raraunga, kaore e puta nga mana taunoa;
I ia wa, kei te ngaro nga tuhinga, kua tawhito ranei.
Waimarie, he maha o raatau ka taea te whakatau. Me timata mai i te mutunga - nga raruraru me tuhinga.
Ko te nuinga pea, ka tupono koe ki te kore e tino marama me pehea te rehita i te taapiri me te hono i te peere taapiri ki te Kaiwhakahaere UI. Ko nga tuhinga e korero ana mo tenei, engari kei roto te tino whakamaarama PR:
me mahi huna;
tuku atu ki te kaiwhakahaere hei tawhā pod_environment_secret_name i roto i te CRD me nga tautuhinga kaiwhakahaere, i te ConfigMap ranei (i runga i to whakatau ki te whakauru i te kaiwhakahaere).
Heoi, i te mea ka puta, kaore e taea tenei i tenei wa. Koia matou i kohi ai to putanga o te kaiwhakahaere me etahi atu whanaketanga-tuatoru. Mo etahi atu korero mo taua mea, tirohia i raro nei.
Mena ka tukuna e koe nga tawhā mo te taapiri ki te kaiwhakahaere, ara - wal_s3_bucket me nga taviri uru ki AWS S3, katahi ka pūrua nga mea katoa: ehara i te mea ko nga turanga anake i roto i te hanga, engari ano hoki te whakaari. Kaore tenei i pai ki a maatau.
I roto i te whakaahuatanga o nga tawhā mo Spilo, koinei te takai Docker taketake mo PgSQL i te wa e whakamahi ana i te kaiwhakahaere, ka puta: ka taea e koe te tuku i tetahi tawhā. WAL_S3_BUCKET noho kau, na reira ka whakakorehia nga taapiri. Hau atu â, ua ite au i te oaoa rahi kua rite PR, i whakaae tonu matou ki to matou marau. Inaianei me taapiri noa koe enableWALArchiving: false ki tetahi rauemi kohinga PostgreSQL.
Ae, i whai waahi ki te mahi rereke ma te whakahaere i nga kaiwhakahaere 2: kotahi mo te whakaari (kaore he taapiri), me te tuarua mo te hanga. Engari i taea e matou te mahi ki tetahi.
Ae, i ako matou me pehea te whakawhiti i te uru ki nga papaa raraunga mo te S3 ka timata nga taapiri ki te uru ki te rokiroki. Me pehea te mahi i nga wharangi taapiri ki te Kaiwhakahaere UI?
Me taapiri koe kia 3 nga taurangi ki te Kaiwhakahaere UI:
SPILO_S3_BACKUP_BUCKET
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
Whai muri i tenei, ka waatea te whakahaere o nga taapiri, i roto i ta maatau keehi ka ngawari te mahi me te whakaari, ka taea e maatau te tuku poro mai i te whakaputanga ki reira kaore he tuhinga taapiri.
Ko tetahi atu painga ko te mahi me te Teams API me te maha o nga waahi mo te hanga papaa raraunga me nga mahi ma te whakamahi i nga taputapu kaiwhakahaere. Heoi, ko te hanga karekau he motika a nga mahi. Na reira, karekau e taea e te kaiwhakamahi whai mana panui te panui ripanga hou.
He aha tera? Ahakoa te meka i roto i te waehere ko pono ana GRANT, kaore e whakamahia i nga wa katoa. E 2 nga tikanga: syncPreparedDatabases и syncDatabases. Ko te syncPreparedDatabases - ahakoa te mea kei roto i te waahanga preparedDatabasesko he tikanga defaultRoles и defaultUsers ki te hanga tūranga, karekau e whakamahia nga motika taunoa. Kei te whakareri matou i tetahi papaki kia taea ai te whakamahi aunoa i enei motika.
A ko te mea whakamutunga mo nga whakapainga e pa ana ki a maatau - paepae, e taapiri ana i te Affinity Node ki te StatefulSet i hangaia. He maha nga wa e pai ake ana o taatau kaihoko ki te whakaheke i nga utu ma te whakamahi i nga waahi waahi, a kaore e pai ki te manaaki i nga ratonga papaa raraunga. Ka taea te whakatau i tenei take na roto i nga whakaahuru, engari ko te noho mai o Node Affinity ka nui ake te maia.
He aha te mea i tupu?
I runga i nga hua o te whakaoti rapanga i runga ake nei, i mawehe atu matou i te Kaiwhakahaere Postgres mai i Zalando ki roto to putunga, kei reira ka kohia me nga papanga whaihua. A mo te pai ake, i kohia ano e matou Whakaahua Docker.
He rawe ki te tautoko te hapori i enei PR kia eke ki runga ki te awa me te putanga o muri o te kaiwhakahaere (1.6).
Takoha! Nga korero angitu o te hekenga whakaputa
Mena kei te whakamahi koe i te Patroni, ka taea te heke te whakaputanga ora ki te kaiwhakahaere me te iti o te wa heke.
Ka taea e Spilo ki a koe te hanga tautau tatari ma te rokiroki S3 me Wal-E, i te wa e penapena tuatahitia ai te rangitaki takirua PgSQL ki S3 katahi ka panaia e te tauira. Engari me aha mena kei a koe e kore whakamahia e Wal-E i runga i nga hanganga tawhito? Ko te otinga mo tenei raru kua oti i whakaarohia i runga i te puku.
Ko te tukurua arorau PostgreSQL ka tae mai ki te whakaora. Engari, kaore matou e korero mo te hanga tuhinga me nga ohaurunga, na te mea ... he raruraru to maatau mahere.
Ko te meka he maha nga tepu kua utaina ki te papaaarangi me nga miriona rarangi, i tua atu, i whakakiia tonuhia, ka whakakorehia. Ohaurunga ngawari с copy_data, ka kapehia e te tauira hou nga mea katoa mai i te rangatira, kaore e taea e ia te pupuri i te rangatira. Ko te kape i nga ihirangi i mahi mo te wiki, engari kaore i mau ki te rangatira. I te mutunga, i awhina ahau ki te whakaoti rapanga tuhinga nga hoa mahi mai i Avito: ka taea e koe te whakawhiti raraunga ma te whakamahi pg_dump. Ka whakaahua ahau i to maatau (he ahua whakarereke) o tenei algorithm.
Ko te whakaaro ka taea e koe te ohaurunga haua kia herea ki tetahi mokamoka tukurua motuhake, ka whakatika i te tau tauwhitinga. I waatea nga tauira mo nga mahi whakaputa. He mea nui tenei na te mea ka awhina te tauira ki te hanga i te putunga rite tonu ka whiwhi tonu i nga huringa mai i te rangatira.
Ko nga whakahau e whai ake nei e whakaahua ana i te tukanga hekenga ka whakamahi i nga tohu kaihautu e whai ake nei:
ariki — tūmau puna;
tauira1 - te rere tauira i runga i te hanga tawhito;
tauira2 - tauira arorau hou.
Mahere hekenga
1. Waihangahia he ohaurunga ki te rangatira mo nga ripanga katoa i roto i te aronuinga public turanga dbname:
psql -h master -d dbname -c "CREATE PUBLICATION dbname FOR ALL TABLES;"
He mihi ki tenei mahere, i puta te huringa me te iti o te whakaroa.
mutunga
Ka taea e nga kaiwhakahaere Kubernetes te whakangawari i nga momo mahi ma te whakaiti i a raatau ki te hanga rauemi K8s. Heoi, i te mea kua tutuki i a raatau nga mahi miihini me o raatau awhina, he mea tika kia maumahara ka taea ano e ia te kawe mai i nga ahuatanga ohorere, na reira ma te whiriwhiri i o kaiwhakahaere.
I te whai whakaaro ki nga kaiwhakahaere Kubernetes e toru tino rongonui mo PostgreSQL, i kowhiria e matou te kaupapa mai i Zalando. A i kaha taatau ki te wikitoria i etahi raru, engari he tino pai te hua, no reira ka whakamahere matou ki te whakawhānui ake i tenei wheako ki etahi atu whakaurunga PgSQL. Mena he wheako koe ki te whakamahi i nga otinga rite, ka koa matou ki te kite i nga korero i roto i nga korero!