Lub ntsiab lus luv luv ntawm PostgreSQL Cov Lus Qhia rau Kubernetes, Peb Cov Kev Xaiv thiab Kev Paub

Lub ntsiab lus luv luv ntawm PostgreSQL Cov Lus Qhia rau Kubernetes, Peb Cov Kev Xaiv thiab Kev Paub

Ntau ntxiv, cov neeg siv khoom tau txais cov lus thov hauv qab no: "Peb xav tau nws zoo li Amazon RDS, tab sis pheej yig dua"; "Peb xav kom nws zoo li RDS, tab sis txhua qhov chaw, hauv txhua qhov chaw." Txhawm rau ua raws li kev tswj hwm kev daws teeb meem ntawm Kubernetes, peb tau saib lub xeev tam sim no ntawm cov neeg ua haujlwm nrov tshaj plaws rau PostgreSQL (Stolon, cov neeg ua haujlwm ntawm Crunchy Data thiab Zalando) thiab ua rau peb xaiv.

Kab lus no yog qhov kev paub uas peb tau txais ob qho tib si los ntawm qhov kev xav ntawm kev xav (kev tshuaj xyuas ntawm cov kev daws teeb meem) thiab los ntawm cov tswv yim sab (dab tsi tau xaiv thiab dab tsi los ntawm nws). Tab sis ua ntej, cia peb txiav txim siab seb qhov kev xav tau dav dav yog dab tsi rau kev hloov pauv rau RDS ...

RDS yog dab tsi

Thaum tib neeg tham txog RDS, hauv peb qhov kev paub dhau los, lawv txhais tau tias muaj kev pabcuam DBMS uas:

  1. yooj yim rau configure;
  2. muaj peev xwm ua haujlwm nrog snapshots thiab rov qab los ntawm lawv (zoo dua nrog kev txhawb nqa PITR);
  3. tso cai rau koj los tsim master-slave topologies;
  4. muaj cov npe nplua nuj ntawm kev txuas ntxiv;
  5. muab auditing thiab user/access management.

Feem ntau hais lus, txoj hauv kev los ua txoj haujlwm ntawm tes yuav txawv heev, tab sis txoj hauv kev nrog Ansible tsis nyob ze rau peb. (Cov npoj yaig los ntawm 2GIS tuaj rau qhov zoo sib xws raws li qhov tshwm sim nws sim tsim "ib qho cuab yeej rau kev xa tawm sai sai ntawm Postgres-raws li kev ua tsis tiav pawg.")

Cov neeg ua haujlwm yog ib txoj hauv kev los daws cov teeb meem zoo sib xws hauv Kubernetes ecosystem. Tus thawj coj ntawm "Flanta" twb tau hais ntau yam ntxiv txog lawv nyob rau hauv kev cuam tshuam rau cov ntaub ntawv tsim tawm hauv Kubernetes. disstol, nyob rau hauv ib qho ntawm nws cov lus ceeb toom.

NB: Txhawm rau tsim kom yooj yim cov tswv lag luam sai sai, peb pom zoo kom ua tib zoo saib peb cov khoom siv Open Source shell-operator. Siv nws, koj tuaj yeem ua qhov no yam tsis muaj kev paub txog Go, tab sis nyob rau hauv txoj kev paub ntau dua rau cov thawj tswj hwm: hauv Bash, Python, thiab lwm yam.

Muaj ntau tus neeg ua haujlwm K8s nrov rau PostgreSQL:

  • Stolon;
  • Crunchy Data PostgreSQL tus neeg teb xov tooj;
  • Zalando Postgres Operator.

Cia peb saib lawv ntau dua.

Kev xaiv tus neeg ua haujlwm

Ntxiv rau cov yam ntxwv tseem ceeb uas twb tau hais los saum toj no, peb - ​​raws li Kubernetes cov kws tshaj lij kev tsim kho vaj tse - kuj xav tau cov hauv qab no los ntawm cov neeg ua haujlwm:

  • xa tawm los ntawm Git thiab nrog Custom Resources;
  • pod tiv thaiv affinity txhawb;
  • txhim kho node affinity lossis node selector;
  • installation ntawm tolerances;
  • muaj peev xwm tuning;
  • nkag siab technologies thiab txawm commands.

Tsis tas yuav nkag mus rau cov ntsiab lus ntawm txhua lub ntsiab lus (nug hauv cov lus yog tias koj tseem muaj lus nug txog lawv tom qab nyeem tag nrho tsab xov xwm), Kuv yuav nco ntsoov feem ntau tias cov kev txwv no yuav tsum tau piav qhia meej dua qhov tshwj xeeb ntawm pawg nodes thiaj li xaj lawv rau cov ntawv thov tshwj xeeb. Txoj kev no peb tuaj yeem ua tiav qhov kev pom zoo sib npaug ntawm kev ua haujlwm thiab tus nqi.

Tam sim no cia peb tsiv mus rau PostgreSQL tus neeg ua haujlwm lawv tus kheej.

1. Stolon

Stolon los ntawm Italian tuam txhab Sorint.lab nyob rau hauv twb hais qhia tau suav tias yog ib hom qauv ntawm cov neeg ua haujlwm rau DBMS. Qhov no yog ib txoj haujlwm qub qub: nws thawj qhov kev tshaj tawm pej xeem tau rov qab los rau lub Kaum Ib Hlis 2015 (!), thiab GitHub qhov chaw cia khoom boasts yuav luag 3000 hnub qub thiab 40+ cov neeg koom.

Tseeb, Stolon yog ib qho piv txwv zoo ntawm kev xav txog architecture:

Lub ntsiab lus luv luv ntawm PostgreSQL Cov Lus Qhia rau Kubernetes, Peb Cov Kev Xaiv thiab Kev Paub
Cov cuab yeej ntawm tus neeg teb xov tooj no tuaj yeem pom hauv kev nthuav dav hauv daim ntawv tshaj tawm lossis cov ntaub ntawv project. Feem ntau, nws txaus los hais tias nws tuaj yeem ua tau txhua yam uas tau piav qhia: kev ua tsis tiav, tus neeg sawv cev rau kev nkag mus rau cov neeg siv khoom pob tshab, kev thaub qab... Ntxiv mus, cov neeg sawv cev muab kev nkag mus los ntawm ib qho kev pabcuam kawg - tsis zoo li ob txoj kev daws teeb meem hauv qab no (lawv txhua tus muaj ob qhov kev pabcuam rau nkag mus rau hauv paus).

Txawm li cas los xij, Stolon tsis muaj Custom Resources, uas yog vim li cas nws tsis tuaj yeem xa mus rau hauv txoj hauv kev uas nws yooj yim thiab ceev - "zoo li cov ncuav kub" - los tsim DBMS piv txwv hauv Kubernetes. Kev tswj hwm yog ua los ntawm kev siv hluav taws xob stolonctl, kev xa tawm yog ua tiav los ntawm Helm daim ntawv qhia, thiab cov kev cai yog txhais thiab teev hauv ConfigMap.

Ntawm qhov tod tes, nws hloov tawm tias tus neeg teb xov tooj tsis yog tus neeg teb xov tooj tiag tiag (tom qab tag nrho, nws tsis siv CRD). Tab sis ntawm qhov tod tes, nws yog qhov hloov tau yooj yim uas tso cai rau koj los teeb tsa cov peev txheej hauv K8s raws li koj pom zoo.

Txhawm rau kom ua tiav, rau peb tus kheej nws tsis zoo li qhov zoo los tsim ib daim ntawv qhia cais rau txhua qhov database. Yog li ntawd, peb pib nrhiav lwm txoj hauv kev.

2. Crunchy Data PostgreSQL tus neeg teb xov tooj

Operator los ntawm Crunchy Data, ib tug hluas American startup, zoo li ib qho kev xaiv qhov kev xav. Nws cov keeb kwm pej xeem pib nrog thawj zaug tso tawm thaum Lub Peb Hlis 2017, txij li thaum ntawd GitHub qhov chaw cia khoom tau txais qis dua 1300 hnub qub thiab 50+ tus neeg koom nrog. Qhov tseeb tshaj tawm los ntawm lub Cuaj Hli tau sim ua haujlwm nrog Kubernetes 1.15-1.18, OpenShift 3.11+ thiab 4.4+, GKE thiab VMware Enterprise PKS 1.3+.

Lub architecture ntawm Crunchy Data PostgreSQL tus neeg teb xov tooj kuj ua tau raws li qhov yuav tsum tau muaj:

Lub ntsiab lus luv luv ntawm PostgreSQL Cov Lus Qhia rau Kubernetes, Peb Cov Kev Xaiv thiab Kev Paub

Kev tswj hwm tshwm sim los ntawm kev siv hluav taws xob pgoTxawm li cas los xij, nws nyob rau hauv lem generates Custom Resources rau Kubernetes. Yog li ntawd, tus neeg teb xov tooj txaus siab rau peb raws li cov neeg siv khoom muaj peev xwm:

  • muaj kev tswj ntawm CRD;
  • yooj yim tswj cov neeg siv (tseem ntawm CRD);
  • kev koom ua ke nrog lwm cov khoom Crunchy Data Container Suite - kev sau tshwj xeeb ntawm cov duab ntim rau PostgreSQL thiab cov khoom siv rau kev ua haujlwm nrog nws (xws li pgBackRest, pgAudit, txuas ntxiv los ntawm kev koom tes, thiab lwm yam).

Txawm li cas los xij, sim pib siv tus neeg teb xov tooj los ntawm Crunchy Data qhia ntau yam teeb meem:

  • Tsis muaj peev xwm zam tau - tsuas yog nodeSelector yog muab.
  • Cov pods tsim tau yog ib feem ntawm Kev Tshaj Tawm, txawm hais tias peb tau siv ib daim ntawv thov tseem ceeb. Tsis zoo li StatefulSets, Deployments tsis tuaj yeem tsim cov disks.

Qhov kawg qhov tsis zoo ua rau lub sijhawm lom zem: ntawm qhov chaw sim peb tau tswj kom khiav 3 replicas nrog ib disk hauv zos cia, ua rau tus neeg teb xov tooj ceeb toom tias 3 replicas tau ua haujlwm (txawm tias tsis yog).

Lwm feature ntawm tus neeg teb xov tooj no yog nws npaj txhij-ua kev koom ua ke nrog ntau yam auxiliary systems. Piv txwv li, nws yooj yim rau nruab pgAdmin thiab pgBounce, thiab hauv cov ntaub ntawv Pre-configured Grafana thiab Prometheus raug txiav txim siab. Nyob rau hauv tsis ntev los no tso tawm 4.5.0-beta1 Kev txhim kho kev koom ua ke nrog qhov project yog cais pgMonitor, ua tsaug uas tus neeg teb xov tooj muab qhov pom tseeb ntawm PgSQL metrics tawm ntawm lub thawv.

Txawm li cas los xij, qhov kev xaiv coj txawv txawv ntawm Kubernetes-tsim cov peev txheej coj peb mus rau qhov xav tau los nrhiav kev daws teeb meem sib txawv.

3. Zalando Postgres Operator

Peb tau paub Zalando cov khoom tau ntev lawm: peb muaj kev paub siv Zalenium thiab, tau kawg, peb sim Patroni yog lawv cov tshuaj HA nrov rau PostgreSQL. Txog lub tuam txhab txoj hauv kev los tsim Postgres Operator ib tug ntawm nws cov kws sau ntawv, Alexey Klyukin, tau hais saum huab cua Postgres-Tuesday #5, thiab peb nyiam nws.

Qhov no yog qhov kev daws teeb meem yau tshaj plaws tau tham hauv tsab xov xwm: thawj zaug tso tawm thaum Lub Yim Hli 2018. Txawm li cas los xij, txawm tias muaj tsawg tsawg ntawm kev tso tawm, qhov project tau los ntev heev, twb dhau los ntawm qhov muaj koob npe ntawm kev daws teeb meem los ntawm Crunchy Cov ntaub ntawv nrog 1300+ hnub qub ntawm GitHub thiab ntau tus neeg koom nrog (70+).

"Nyob rau hauv lub hood" tus neeg teb xov tooj no siv sij hawm sim daws teeb meem:

  • Patroni thiab Spilo Rau kev tsav tsheb,
  • WAL-E - rau thaub qab,
  • PgBouncer - raws li lub pas dej sib txuas.

Nov yog li cas tus neeg teb xov tooj architecture ntawm Zalando tau nthuav tawm:

Lub ntsiab lus luv luv ntawm PostgreSQL Cov Lus Qhia rau Kubernetes, Peb Cov Kev Xaiv thiab Kev Paub

Tus neeg teb xov tooj tau tswj hwm tag nrho los ntawm Custom Resources, cia li tsim ib lub StatefulSet los ntawm cov thawv, uas tuaj yeem hloov kho los ntawm kev ntxiv ntau yam khoom siv rau lub pod. Tag nrho cov no yog qhov txiaj ntsig tseem ceeb hauv kev sib piv nrog tus neeg teb xov tooj los ntawm Crunchy Data.

Txij li thaum peb xaiv qhov kev daws teeb meem los ntawm Zalando ntawm 3 qhov kev xaiv nyob rau hauv kev txiav txim siab, ib qho kev piav qhia ntxiv ntawm nws lub peev xwm yuav raug nthuav tawm hauv qab no, tam sim ntawd nrog rau kev xyaum ua daim ntawv thov.

Xyaum nrog Postgres Operator los ntawm Zalando

Kev xa tawm tus neeg teb xov tooj yog qhov yooj yim heev: tsuas yog rub tawm qhov kev tso tawm tam sim no los ntawm GitHub thiab siv YAML cov ntaub ntawv los ntawm cov npe. tshwm sim. Xwb, koj tuaj yeem siv tau operatorhub.

Tom qab installation, koj yuav tsum txhawj xeeb txog kev teeb tsa cia rau cov cav thiab thaub qab. Qhov no ua tiav ntawm ConfigMap postgres-operator nyob rau hauv lub namespace qhov twg koj ntsia tus neeg teb xov tooj. Thaum lub repositories tau teeb tsa, koj tuaj yeem xa koj thawj PostgreSQL pawg.

Piv txwv li, peb tus qauv xa tawm zoo li no:

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

Qhov no manifest deploys ib pawg ntawm 3 piv txwv nrog ib tug sidecar nyob rau hauv daim ntawv postgres_exporter, los ntawm qhov uas peb coj daim ntawv thov metrics. Raws li koj tuaj yeem pom, txhua yam yog qhov yooj yim heev, thiab yog tias koj xav tau, koj tuaj yeem tsim ib qho tsis txwv cov pawg.

Nws yog tsim nyog them sai sai rau web tswj vaj huam sib luag - postgres-operator-ui. Nws los nrog tus neeg teb xov tooj thiab tso cai rau koj los tsim thiab tshem tawm pawg, nrog rau kev ua haujlwm nrog cov thaub qab los ntawm tus neeg teb xov tooj.

Lub ntsiab lus luv luv ntawm PostgreSQL Cov Lus Qhia rau Kubernetes, Peb Cov Kev Xaiv thiab Kev Paub
Cov npe ntawm PostgreSQL pawg

Lub ntsiab lus luv luv ntawm PostgreSQL Cov Lus Qhia rau Kubernetes, Peb Cov Kev Xaiv thiab Kev Paub
Kev tswj hwm thaub qab

Lwm qhov nthuav tshwj xeeb yog kev txhawb nqa Pab pawg API. Qhov no mechanism yeej tsim Lub luag haujlwm hauv PostgreSQL, raws li qhov tshwm sim ntawm cov npe siv. API tom qab ntawd tso cai rau koj xa rov qab cov npe ntawm cov neeg siv uas lub luag haujlwm raug tsim.

Teeb meem thiab kev daws teeb meem

Txawm li cas los xij, kev siv tus neeg teb xov tooj sai sai tau qhia ntau qhov tsis txaus ntseeg:

  1. tsis muaj nodeSelector txhawb;
  2. tsis muaj peev xwm lov tes taw backups;
  3. thaum siv lub database creation muaj nuj nqi, default cai tsis tshwm sim;
  4. Nyob rau tib lub sijhawm, cov ntaub ntawv ploj lawm lossis tsis dhau hnub.

Hmoov zoo, ntau ntawm lawv tuaj yeem daws tau. Cia peb pib los ntawm qhov kawg - teeb meem nrog cov ntaub ntawv.

Feem ntau, koj yuav ntsib qhov tseeb tias nws tsis yog ib txwm paub meej tias yuav sau npe li cas rau thaub qab thiab yuav ua li cas txuas lub thoob thaub qab mus rau Operator UI. Cov ntaub ntawv hais txog qhov no hauv kev dhau mus, tab sis cov lus piav qhia tiag tiag nyob hauv PR:

  1. yuav tsum ua kom tsis pub leej twg paub;
  2. hla nws mus rau tus neeg teb xov tooj raws li qhov parameter pod_environment_secret_name hauv CRD nrog tus neeg teb xov tooj chaw lossis hauv ConfigMap (nyob ntawm seb koj txiav txim siab rau nruab tus neeg teb xov tooj).

Txawm li cas los xij, raws li nws hloov tawm, qhov no yog tam sim no ua tsis tau. Yog vim li cas peb thiaj sau koj version ntawm tus neeg teb xov tooj nrog qee qhov kev txhim kho thib peb ntxiv. Yog xav paub ntxiv txog nws, saib hauv qab no.

Yog tias koj dhau qhov kev txwv rau thaub qab rau tus neeg teb xov tooj, uas yog - wal_s3_bucket thiab nkag mus rau cov yuam sij hauv AWS S3, tom qab ntawd nws yuav backup txhua yam: tsis yog tsuas yog hauv paus hauv kev tsim khoom, tab sis kuj ua haujlwm. Qhov no tsis haum peb.

Hauv kev piav qhia ntawm qhov tsis muaj rau Spilo, uas yog qhov yooj yim Docker wrapper rau PgSQL thaum siv tus neeg teb xov tooj, nws tau muab tawm: koj tuaj yeem dhau qhov ntsuas. WAL_S3_BUCKET npliag, li no disabling backups. Ntxiv mus, kom muaj kev xyiv fab loj, kuv pom npaj PR, uas peb tau txais tam sim ntawd rau hauv peb rab rawg. Tam sim no koj tsuas yog xav tau ntxiv enableWALArchiving: false rau PostgreSQL pab pawg.

Yog, muaj lub sijhawm los ua qhov sib txawv los ntawm kev khiav 2 tus neeg ua haujlwm: ib qho rau kev ua haujlwm (tsis muaj thaub qab), thiab qhov thib ob rau kev tsim khoom. Tab sis peb muaj peev xwm ua tau nrog ib tug.

Ok, peb tau kawm yuav ua li cas hloov kev nkag mus rau hauv cov ntaub ntawv rau S3 thiab cov thaub qab pib nkag mus rau hauv cia. Yuav ua li cas ua kom cov nplooj ntawv thaub qab ua haujlwm hauv Operator UI?

Lub ntsiab lus luv luv ntawm PostgreSQL Cov Lus Qhia rau Kubernetes, Peb Cov Kev Xaiv thiab Kev Paub

Koj yuav tsum tau ntxiv 3 qhov sib txawv rau tus neeg teb xov tooj UI:

  • SPILO_S3_BACKUP_BUCKET
  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

Tom qab no, kev tswj cov thaub qab yuav dhau los ua muaj, uas nyob rau hauv peb rooj plaub yuav yooj yim rau kev ua hauj lwm nrog staging, tso cai rau peb xa cov hlais los ntawm kev tsim khoom muaj yam tsis muaj ntawv sau ntxiv.

Lwm qhov zoo dua yog kev ua haujlwm nrog Teams API thiab muaj sijhawm txaus los tsim cov ntaub ntawv thiab lub luag haujlwm siv cov cuab yeej ua haujlwm. Txawm li cas los xij, tus tsim lub luag hauj lwm tsis muaj cai los ntawm lub neej ntawd. Yog li, tus neeg siv uas muaj cai nyeem tsis tuaj yeem nyeem cov lus tshiab.

Yog vim li cas? Txawm tias muaj tseeb hais tias nyob rau hauv cov cai yog tsim nyog GRANT, lawv tsis tas siv. Muaj 2 txoj kev: syncPreparedDatabases ΠΈ syncDatabases. Cov syncPreparedDatabases - Txawm tias muaj tseeb hais tias nyob rau hauv seem preparedDatabases yog muaj mob defaultRoles ΠΈ defaultUsers los tsim lub luag haujlwm, cov cai qub tsis raug siv. Peb tab tom npaj ib thaj chaw kom cov cai no tau txais kev thov.

Thiab lub ntsiab lus kawg hauv kev txhim kho uas cuam tshuam rau peb - thaj, uas ntxiv Node Affinity rau tus tsim StatefulSet. Peb cov neeg siv khoom feem ntau nyiam txo cov nqi los ntawm kev siv qhov chaw, thiab lawv tsis tsim nyog hosting cov kev pabcuam database. Qhov teeb meem no tuaj yeem daws tau los ntawm kev zam, tab sis qhov muaj ntawm Node Affinity muab kev ntseeg siab ntau dua.

Dab tsi tshwm sim?

Raws li cov txiaj ntsig ntawm kev daws cov teeb meem saum toj no, peb forked Postgres Operator los ntawm Zalando rau hauv koj repository, qhov twg nws yog sau nrog xws li pab tau thaj ua rau thaj. Thiab kom yooj yim dua, peb kuj tau sau Docker duab.

Cov npe ntawm PRs tau txais rau hauv rab rawg:

Nws yuav zoo heev yog tias cov zej zog txhawb nqa cov PRs no kom lawv tau nce siab nrog tus neeg teb xov tooj tom ntej (1.6).

Ntxiv lawm! Production migration success story

Yog tias koj siv Patroni, nyob ntau lawm tuaj yeem hloov mus rau tus neeg teb xov tooj nrog tsawg kawg downtime.

Spilo tso cai rau koj los tsim cov pawg standby ntawm S3 cia nrog Wal-E, thaum PgSQL binary cav yog thawj zaug khaws cia hauv S3 thiab tom qab ntawd tso tawm los ntawm qhov hloov pauv. Tab sis yuav ua li cas yog tias koj muaj tsis siv los ntawm Wal-E ntawm cov txheej txheem qub? Txoj kev daws teeb meem no twb yog lawm nws tau tawm tswv yim pe hub.

PostgreSQL logical replication los cawm. Txawm li cas los xij, peb yuav tsis mus rau hauv kev nthuav dav txog yuav ua li cas los tsim cov ntawv tshaj tawm thiab kev tso npe, vim ... peb txoj kev npaj yog fiasco.

Qhov tseeb yog tias cov ntaub ntawv muaj ntau lub rooj thauj khoom nrog ntau lab kab, uas, ntxiv mus, tau tas li rov ntxiv thiab tshem tawm. Yooj yim subscription с copy_data, thaum tus tshiab replica luam tag nrho cov ntsiab lus los ntawm tus tswv, nws tsuas tsis tuaj yeem nrog tus tswv. Luam cov ntsiab lus ua haujlwm rau ib lub lim tiam, tab sis tsis tau ntes tus tswv. Thaum kawg, nws pab kuv daws qhov teeb meem ib tsab xov xwm Cov npoj yaig los ntawm Avito: koj tuaj yeem hloov cov ntaub ntawv siv pg_dump. Kuv yuav piav txog peb (hloov me ntsis) version ntawm no algorithm.

Lub tswv yim yog tias koj tuaj yeem ua tus neeg xiam oob khab subscription khi rau ib qho replication qhov tshwj xeeb, thiab tom qab ntawd kho tus lej pauv. Muaj replicas muaj rau kev ua hauj lwm ntau lawm. Qhov no yog ib qho tseem ceeb vim hais tias lub replica yuav pab tsim ib tug zoo ib yam pov tseg thiab mus txuas ntxiv tau txais kev hloov ntawm tus tswv.

Cov lus txib nram qab no piav qhia txog txoj kev tsiv teb tsaws chaw yuav siv cov npe hauv qab no:

  1. tswv - qhov chaw server;
  2. replica 1 - streaming replica ntawm cov khoom qub;
  3. replica 2 - tshiab logical replica.

Txoj kev npaj tsiv teb tsaws chaw

1. Tsim ib tug subscription rau tus tswv rau tag nrho cov ntxhuav nyob rau hauv lub schema public bases dbname:

psql -h master -d dbname -c "CREATE PUBLICATION dbname FOR ALL TABLES;"

2. Tsim ib qhov replication qhov ntawm tus tswv:

psql -h master -c "select pg_create_logical_replication_slot('repl', 'pgoutput');"

3. Tso tseg replication ntawm lub qub replica:

psql -h replica1 -c "select pg_wal_replay_pause();"

4. Tau txais tus lej pauv ntawm tus tswv:

psql -h master -c "select replay_lsn from pg_stat_replication where client_addr = 'replica1';"

5. Tshem cov pob tseg ntawm cov qub qub. Peb yuav ua qhov no nyob rau hauv ob peb threads, uas yuav pab kom ceev cov txheej txheem:

pg_dump -h replica1 --no-publications --no-subscriptions -O -C -F d -j 8 -f dump/ dbname

6. Upload lub pob tseg rau lub server tshiab:

pg_restore -h replica2 -F d -j 8 -d dbname dump/

7. Tom qab rub tawm cov pob tseg, koj tuaj yeem pib rov ua dua ntawm cov streaming replica:

psql -h replica1 -c "select pg_wal_replay_resume();"

7. Cia peb tsim ib tug subscription ntawm ib tug tshiab logical replica:

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. Wb tau oid kev tso npe:

psql -h replica2 -d dbname -c "select oid, * from pg_subscription;"

9. Wb hais tias tau txais oid=1000. Cia peb siv tus lej pauv rau qhov kev tso npe:

psql -h replica2 -d dbname -c "select pg_replication_origin_advance('pg_1000', 'AA/AAAAAAAA');"

10. Cia peb pib replication:

psql -h replica2 -d dbname -c "alter subscription oldprod enable;"

11. Tshawb xyuas cov xwm txheej subscription, replication yuav tsum ua haujlwm:

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. Tom qab replication pib thiab cov databases synchronized, koj tuaj yeem hloov dua.

13. Tom qab disabling replication, koj yuav tsum tau kho cov sequences. Qhov no tau piav qhia zoo nyob rau hauv tsab xov xwm ntawm wiki.postgresql.org.

Ua tsaug rau txoj kev npaj no, qhov kev hloov pauv tau tshwm sim nrog qhov qeeb qeeb.

xaus

Cov neeg ua haujlwm Kubernetes tso cai rau koj los ua kom yooj yim ntau yam kev ua los ntawm kev txo lawv mus rau kev tsim cov peev txheej K8s. Txawm li cas los xij, tau ua tiav qhov zoo tshaj plaws automation nrog lawv cov kev pab, nws tsim nyog nco ntsoov tias nws tseem tuaj yeem nqa ntau yam kev npaj txhij txog nuances, yog li xaiv koj cov neeg ua haujlwm ntse.

Tau txiav txim siab peb tus neeg ua haujlwm Kubernetes nrov tshaj plaws rau PostgreSQL, peb xaiv qhov project los ntawm Zalando. Thiab peb yuav tsum tau kov yeej qee qhov teeb meem nrog nws, tab sis qhov tshwm sim yog qhov txaus siab tiag tiag, yog li peb npaj yuav nthuav dav qhov kev paub no rau qee qhov kev teeb tsa PgSQL. Yog tias koj muaj kev paub siv cov kev daws teeb meem zoo sib xws, peb yuav zoo siab pom cov ntsiab lus hauv cov lus!

PS

Nyeem kuj ntawm peb blog:

Tau qhov twg los: www.hab.com

Ntxiv ib saib