ã¯ã©ã€ã¢ã³ããã次ã®ãããªãªã¯ãšã¹ããå¢ããŠããŸãããAmazon RDS ã®ãããªãã®ã欲ãããããã£ãšå®ãããããã ãç§ãã¡ã¯ RDS ãšåæ§ã«ãããããå Žæãããããã€ã³ãã©ã¹ãã©ã¯ãã£ã§ãããå®çŸããããšèããŠããŸããã ãã®ãããªãããŒãžã ãœãªã¥ãŒã·ã§ã³ã Kubernetes ã«å®è£
ããããã«ãPostgreSQL ã§æã人æ°ã®ããæŒç®å (StolonãCrunchy Data ããã³ Zalando ã®æŒç®å) ã®çŸç¶ã調ã¹ãéžæãè¡ããŸããã
ãã®èšäºã¯ãçè«çãªèŠ³ç¹ (ãœãªã¥ãŒã·ã§ã³ã®ã¬ãã¥ãŒ) ãšå®è·µçãªåŽé¢ (äœãéžæããããã®çµæäœãçããã®ã) ã®äž¡æ¹ããåŸãçµéšããŸãšãããã®ã§ãã ããããã®åã«ãRDS ã®ä»£æ¿ãšãªãå¯èœæ§ã®ããäžè¬çãªèŠä»¶ãäœã§ããããå€æããŸããã...
RDSãšã¯
ç§ãã¡ã®çµéšã§ã¯ã人ã ã RDS ã«ã€ããŠèªããšããããã¯æ¬¡ã®ãããªãããŒãžã DBMS ãµãŒãã¹ãæå³ããŸãã
- èšå®ãç°¡åã
- ã¹ãããã·ã§ãããæäœããã¹ãããã·ã§ãããã埩å
ããæ©èœããããŸã (ã§ããã°ãµããŒããå¿
èŠã§ã)
PITR ); - ãã¹ã¿ãŒ/ã¹ã¬ãŒã ããããžãäœæã§ããŸãã
- æ¡åŒµåã®è±å¯ãªãªã¹ãããããŸãã
- ç£æ»ãšãŠãŒã¶ãŒ/ã¢ã¯ã»ã¹ç®¡çãæäŸããŸãã
äžè¬ã«ãåœé¢ã®ã¿ã¹ã¯ãå®è£
ããããã®ã¢ãããŒãã¯éåžžã«ç°ãªãå ŽåããããŸãããæ¡ä»¶ä»ã Ansible ã䜿çšããéã¯ç§ãã¡ã«è¿ããã®ã§ã¯ãããŸããã (2GIS ã®ååãçµæãšããŠåæ§ã®çµè«ã«éããŸãã)
ãªãã¬ãŒã¿ãŒã¯ãKubernetes ãšã³ã·ã¹ãã ã§åæ§ã®åé¡ã解決ããããã®äžè¬çãªã¢ãããŒãã§ãã ãFlantaãã®ãã¯ãã«ã« ãã£ã¬ã¯ã¿ãŒã¯ãKubernetes å
ã§èµ·åãããããŒã¿ããŒã¹ã«é¢é£ããŠããããã«ã€ããŠãã§ã«è©³ããèªã£ãŠããŸãã
NB: åçŽãªæŒç®åããã°ããäœæããã«ã¯ããªãŒãã³ãœãŒã¹ ãŠãŒãã£ãªãã£ã«æ³šæãæãããšããå§ãããŸãã
PostgreSQL ã«ã¯äººæ°ã®ãã K8s æŒç®åãããã€ããããŸãã
- ã¹ããã³ã
- Crunchy Data PostgreSQL ãªãã¬ãŒã¿ãŒã
- Zalando Postgres ãªãã¬ãŒã¿ãŒã
ããããããã«è©³ããèŠãŠã¿ãŸãããã
æŒç®åã®éžæ
ãã§ã«è¿°ã¹ãéèŠãªæ©èœã«å ããŠãKubernetes ã€ã³ãã©ã¹ãã©ã¯ãã£éçšãšã³ãžãã¢ãšããŠããªãã¬ãŒã¿ãŒã«ã¯æ¬¡ã®ããšãæåŸ ããŠããŸããã
- Git ããã®ãããã€ã¡ã³ããšããã䜿çšãããããã€ã¡ã³ã
ã«ã¹ã¿ã ãªãœãŒã¹ ; - ãããã®ã¢ã³ãã¢ãã£ããã£ã®ãµããŒãã
- ããŒã ã¢ãã£ããã£ãŸãã¯ããŒã ã»ã¬ã¯ã¿ãŒãã€ã³ã¹ããŒã«ããŸãã
- å ¬å·®ã®èšçœ®ã
- ãã¥ãŒãã³ã°æ©èœã®å¯çšæ§ã
- ç解å¯èœãªãã¯ãããžãŒãã³ãã³ããããã
ããããã®ç¹ã«ã€ããŠã¯è©³ãã説æããŸããã (èšäºå šäœãèªãã åŸã§ã質åãããå Žåã¯ãã³ã¡ã³ãã§è³ªåããŠãã ãã)ãäžè¬çã«ããããã®ãã©ã¡ãŒã¿ãŒã¯ãã¯ã©ã¹ã¿ãŒ ããŒãã®ç¹æ®åãããæ£ç¢ºã«èª¬æããããã«å¿ èŠã§ããããšã«æ³šæããŠãã ãããç¹å®ã®çšéã«åãããŠæ³šæããŠãã ããã ããã«ãããããã©ãŒãã³ã¹ãšã³ã¹ãã®æé©ãªãã©ã³ã¹ãå®çŸã§ããŸãã
次ã«ãPostgreSQL æŒç®åãã®ãã®ã«ç§»ããŸãããã
1.ã¹ããã³
å®éãStolon ã¯ææ ®æ·±ãã¢ãŒããã¯ãã£ã®åªããäŸã§ãã
ãã®ãªãã¬ãŒã¿ãŒã®ããã€ã¹ã«ã€ããŠã¯ãã¬ããŒããŸãã¯
ããããã¹ããã³ stolonctl
ããããã€ã¯ Helm ãã£ãŒããéããŠè¡ãããã«ã¹ã¿ã ã®ãã®ã¯ ConfigMap ã§å®çŸ©ããã³æå®ãããŸãã
äžæ¹ã§ããªãã¬ãŒã¿ãŒã¯å®éã«ã¯ãªãã¬ãŒã¿ãŒã§ã¯ãªãããšãããããŸã (çµå±ã®ãšãããCRD ã¯äœ¿çšããŸãã)ã ããããã®äžæ¹ã§ãK8 ã®ãªãœãŒã¹ãå¿ èŠã«å¿ããŠæ§æã§ããæè»ãªã·ã¹ãã ã§ããããŸãã
èŠçŽãããšãç§ãã¡å人ãšããŠã¯ãããŒã¿ããŒã¹ããšã«åå¥ã®ã°ã©ããäœæããã®ãæé©ãšã¯æããŸããã§ããã ããã§ã代æ¿æ段ãæ¢ãå§ããŸããã
2. ã¯ã©ã³ãããŒã¿ PostgreSQL ãªãã¬ãŒã¿ãŒ
Crunchy Data PostgreSQL Operator ã®ã¢ãŒããã¯ãã£ã¯ã次ã®èŠä»¶ãæºãããŠããŸãã
管çã¯ãŠãŒãã£ãªãã£ãéããŠè¡ãããŸã pgo
ãã ããKubernetes ã®ã«ã¹ã¿ã ãªãœãŒã¹ãçæãããŸãã ãããã£ãŠããªãã¬ãŒã¿ãŒã¯æœåšçãªãŠãŒã¶ãŒã§ããç§ãã¡ãåã°ããŸããã
- CRDãä»ããå¶åŸ¡ããããŸãã
- 䟿å©ãªãŠãŒã¶ãŒç®¡ç (CRD çµç±ã)ã
- ä»ã®ã³ã³ããŒãã³ããšã®çµ±å
Crunchy ããŒã¿ã³ã³ããã¹ã€ãŒã â PostgreSQL çšã®ã³ã³ãã ã€ã¡ãŒãžã®ç¹æ®ãªã³ã¬ã¯ã·ã§ã³ãšããããæäœããããã®ãŠãŒãã£ãªã㣠(pgBackRestãpgAuditãcontrib ã®æ¡åŒµæ©èœãªã©ãå«ã)ã
ãã ããCrunchy Data ã®ãªãã¬ãŒã¿ãŒã®äœ¿çšãéå§ããããšãããšãããã€ãã®åé¡ãæããã«ãªããŸããã
- 蚱容ãããå¯èœæ§ã¯ãããŸãããnodeSelector ã®ã¿ãæäŸãããŸãã
- ã¹ããŒããã« ã¢ããªã±ãŒã·ã§ã³ããããã€ããã«ãããããããäœæããããããã¯ãããã€ã¡ã³ãã®äžéšã§ããã StatefulSet ãšã¯ç°ãªããDeployment ã¯ãã£ã¹ã¯ãäœæã§ããŸããã
æåŸã®æ¬ ç¹ã¯é¢çœãç¬éã«ã€ãªãããŸãããã¹ãç°å¢ã§ã¯ã3 ã€ã®ãã£ã¹ã¯ã§ XNUMX ã€ã®ã¬ããªã«ãå®è¡ããããšãã§ããŸããã ããŒã«ã«ã¹ãã¬ãŒãžãã®ããããªãã¬ãŒã¿ãŒã¯ 3 ã€ã®ã¬ããªã«ã (å®éã«ã¯åäœããŠããªãã£ãã«ãããããã) åäœããŠãããšå ±åããŸããã
ãã®ãªãã¬ãŒã¿ãŒã®ãã XNUMX ã€ã®ç¹åŸŽã¯ãããŸããŸãªè£å©ã·ã¹ãã ãšã®æ¢è£œã®çµ±åã§ãã ããšãã°ãpgAdmin ãš pgBounce ã¯ç°¡åã«ã€ã³ã¹ããŒã«ã§ããŸãã
ããããKubernetes ã§çæããããªãœãŒã¹ã®å¥åŠãªéžæã«ãããå¥ã®ãœãªã¥ãŒã·ã§ã³ãèŠã€ããå¿ èŠãçããŸããã
3. Zalando Postgres ãªãã¬ãŒã¿ãŒ
ç§ãã¡ã¯ Zalando 補åãé·ãéç¥ã£ãŠããŸããZalenium ã®äœ¿çšçµéšãããããã¡ããè©ŠããŠã¿ãŸããã
ããã¯ãã®èšäºã§èª¬æãããŠããæãæ°ãããœãªã¥ãŒã·ã§ã³ã§ãããæåã®ãªãªãŒã¹ã¯ 2018 幎 1300 æã«è¡ãããŸããã ãã ããæ£åŒãªãªãŒã¹ã®æ°ãå°ãªãã«ããããããããã®ãããžã§ã¯ãã¯å€§ããªé²æ©ãéããŠãããGitHub 㧠70 å以äžã®ã¹ã¿ãŒãç²åŸããæ倧貢ç®è æ° (XNUMX 人以äž) ãç²åŸãã人æ°ã§ã¯ãã§ã« Crunchy Data ã®ãœãªã¥ãŒã·ã§ã³ãäžåã£ãŠããŸãã
ãã®ãªãã¬ãŒã¿ã¯ãå éšã§ã¯ããå®çžŸã®ãããœãªã¥ãŒã·ã§ã³ã䜿çšããŠããŸãã
- ããããŒããš
ã²ãŒã é転ã«é¢ããŠã¯ã -
ãŠã©ãŒãªãŒ - ããã¯ã¢ããçšã -
PgããŠã³ãµãŒ - æ¥ç¶ããŒã«ãšããŠã
Zalando ã®ãªãã¬ãŒã¿ãŒ ã¢ãŒããã¯ãã£ã¯æ¬¡ã®ããã«ç€ºãããŠããŸãã
ãªãã¬ãŒã¿ãŒã¯ã«ã¹ã¿ã ãªãœãŒã¹ãéããŠå®å
šã«ç®¡çãããã³ã³ãããŒãã StatefulSet ãèªåçã«äœæããŸãããã®åŸãããŸããŸãªãµã€ãã«ãŒããããã«è¿œå ããããšã§ã«ã¹ã¿ãã€ãºã§ããŸãã ãããã¯ãã¹ãŠãCrunchy Data ã®ãªãã¬ãŒã¿ãŒãšæ¯èŒããŠå€§ããªå©ç¹ã§ãã
æ€èšäžã® 3 ã€ã®ãªãã·ã§ã³ã®äžãã Zalando ã®ãœãªã¥ãŒã·ã§ã³ãéžæãããããã¢ããªã±ãŒã·ã§ã³ã®å®è·µãšãšãã«ããã®æ©èœã®è©³çŽ°ã以äžã«ç€ºããŸãã
Zalando ã® Postgres Operator ã䜿ã£ãŠç·Žç¿ãã
Operator ã®ãããã€ã¯éåžžã«ç°¡åã§ããGitHub ããçŸåšã®ãªãªãŒã¹ãããŠã³ããŒããããã£ã¬ã¯ããªãã YAML ãã¡ã€ã«ãé©çšããã ãã§ãã
ã€ã³ã¹ããŒã«åŸã¯ãã»ããã¢ããã«ã€ããŠå¿é
ããå¿
èŠããããŸã postgres-operator
ãªãã¬ãŒã¿ãŒãã€ã³ã¹ããŒã«ããåå空éå
ã ãªããžããªãæ§æãããããæåã® PostgreSQL ã¯ã©ã¹ã¿ãŒããããã€ã§ããŸãã
ããšãã°ãæšæºçãªãããã€ã¡ã³ãã¯æ¬¡ã®ããã«ãªããŸãã
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
ãã®ãããã§ã¹ãã¯ã次ã®åœ¢åŒã®ãµã€ãã«ãŒãå«ã 3 ã€ã®ã€ã³ã¹ã¿ã³ã¹ã®ã¯ã©ã¹ã¿ãŒããããã€ããŸãã
泚ç®ã«å€ãã ãŠã§ã管çããã« -
PostgreSQL ã¯ã©ã¹ã¿ãŒã®ãªã¹ã
ããã¯ã¢ãã管ç
ããäžã€ã®èå³æ·±ãæ©èœã¯ãµããŒãã§ãã
åé¡ãšè§£æ±ºç
ãã ããæŒââç®åã䜿çšãããšãããã«ããã€ãã®é倧ãªæ¬ ç¹ãæããã«ãªããŸããã
- nodeSelector ã®ãµããŒãã®æ¬ åŠã
- ããã¯ã¢ãããç¡å¹ã«ã§ããªãã
- ããŒã¿ããŒã¹äœææ©èœã䜿çšããå Žåãããã©ã«ãã®æš©éã¯è¡šç€ºãããŸããã
- å®æçã«ãããã¥ã¡ã³ããäžè¶³ããŠãããââãå€ããªã£ããããããšããããŸãã
幞ããªããšã«ããããã®å€ãã¯è§£æ±ºã§ããŸãã æåŸããå§ããŸããã - åé¡ ããã¥ã¡ã³ããŒã·ã§ã³.
ãããããããã¯ã¢ããã®ç»é²æ¹æ³ãšããã¯ã¢ãã ãã±ããããªãã¬ãŒã¿ UI ã«æ¥ç¶ããæ¹æ³ãå¿
ãããæ確ã§ã¯ãªããšããäºå®ã«ééããã§ãããã ããã¥ã¡ã³ãã§ã¯ããã«ã€ããŠã€ãã§ã«èª¬æããŠããŸãããå®éã®èª¬æã¯æ¬¡ã®ãšããã§ãã
- ç§å¯ãäœãå¿ èŠãããã
- ããããã©ã¡ãŒã¿ãšããŠãªãã¬ãŒã¿ã«æž¡ããŸã
pod_environment_secret_name
ãªãã¬ãŒã¿ãŒèšå®ãå«ã CRD å ããŸã㯠ConfigMap å (ãªãã¬ãŒã¿ãŒã®ã€ã³ã¹ããŒã«ã®æ±ºå®æ¹æ³ã«å¿ããŠ)ã
ããããçµå±ã®ãšãããããã¯çŸæç¹ã§ã¯äžå¯èœã§ãã ã ããããç§ãã¡ã¯éããã®ã§ã
ããã¯ã¢ããçšã®ãã©ã¡ãŒã¿ããªãã¬ãŒã¿ã«æž¡ããšã次ã®ããã«ãªããŸãã wal_s3_bucket
AWS S3 ã®ããŒã«ã¢ã¯ã»ã¹ãããšã ãã¹ãŠãããã¯ã¢ããããŸã: ãããã¯ã·ã§ã³ã®æ ç¹ã ãã§ãªããã¹ããŒãžã³ã°ãè¡ããŸãã ããã¯ç§ãã¡ã«ã¯åããªãã£ãã®ã§ãã
æŒç®åã䜿çšããå Žåã® PgSQL ã®åºæ¬ç㪠Docker ã©ãããŒã§ãã Spilo ã®ãã©ã¡ãŒã¿ãŒã®èª¬æã§ã次ã®ããšãå€æããŸããã WAL_S3_BUCKET
空ã§ãããããããã¯ã¢ãããç¡å¹ã«ãªããŸãã ããã«ããšãŠãå¬ããããšã«ã enableWALArchiving: false
PostgreSQL ã¯ã©ã¹ã¿ãŒ ãªãœãŒã¹ã«æ¥ç¶ããŸãã
ã¯ãã2 ã€ã®ãªãã¬ãŒã¿ãŒãå®è¡ããããšã§ãå¥ã®æ¹æ³ã§å®è¡ããæ©äŒããããŸãããXNUMX ã€ã¯ã¹ããŒãžã³ã°çš (ããã¯ã¢ãããªã)ããã XNUMX ã€ã¯éçšçšã§ãã ããããç§ãã¡ã¯XNUMXã€ã§éã«åãããããšãã§ããŸããã
ããŠãS3 ã®ããŒã¿ããŒã¹ãžã®ã¢ã¯ã»ã¹ã転éããæ¹æ³ãåŠã³ãããã¯ã¢ãããã¹ãã¬ãŒãžã«åã蟌ãŸãå§ããŸããã ãªãã¬ãŒã¿ UI ã§ããã¯ã¢ãã ããŒãžãæ©èœãããã«ã¯ã©ãããã°ããã§ãã?
ãªãã¬ãŒã¿ãŒ UI ã« 3 ã€ã®å€æ°ãè¿œå ããå¿
èŠããããŸãã
-
SPILO_S3_BACKUP_BUCKET
-
AWS_ACCESS_KEY_ID
-
AWS_SECRET_ACCESS_KEY
ãã®åŸãããã¯ã¢ããã®ç®¡çãå©çšå¯èœã«ãªããŸããããã«ãããç§ãã¡ã®å Žåãã¹ããŒãžã³ã°ã«ããäœæ¥ãç°¡çŽ åãããè¿œå ã®ã¹ã¯ãªãããªãã§æ¬çªç°å¢ããã¹ã©ã€ã¹ãé ä¿¡ã§ããããã«ãªããŸãã
ãã XNUMX ã€ã®å©ç¹ã¯ãTeams API ãšé£æºãããªãã¬ãŒã¿ãŒ ããŒã«ã䜿çšããŠããŒã¿ããŒã¹ãšããŒã«ãäœæããæ©äŒãè±å¯ãªããšã§ãã ãã ããäœæããã ããŒã«ã«ã¯ããã©ã«ãã§æš©éããããŸããã§ããã ãããã£ãŠãèªã¿åãæš©éãæã€ãŠãŒã¶ãŒã¯æ°ããããŒãã«ãèªã¿åãããšãã§ããŸããã§ããã
äœæ
ã§ããïŒ ã³ãŒãå
ã«ããã«ããããããã GRANT
ãåžžã«äœ¿çšãããããã§ã¯ãããŸããã æ¹æ³ã¯ 2 ã€ãããŸãã syncPreparedDatabases
О syncDatabases
ã 㧠syncPreparedDatabases
- ã»ã¯ã·ã§ã³ã«ãããšããäºå®ã«ãããããã preparedDatabases
defaultRoles
О defaultUsers
ããŒã«ãäœæããå Žåãããã©ã«ãã®æš©éã¯é©çšãããŸããã ãããã®æš©å©ãèªåçã«é©çšãããããã«ããããæºåäžã§ãã
ãããŠãç§ãã¡ã«é¢ä¿ã®ããæ¹åç¹ã®æåŸã®ç¹ã¯ã
ã©ãããã®ïŒ
äžèšã®åé¡ã解決ããçµæã«åºã¥ããŠãZalando ã® Postgres Operator ããã©ãŒã¯ããŸããã
ãã©ãŒã¯ã«åãå ¥ãããã PR ã®ãªã¹ã:
Docker ã§ãªãã¬ãŒã¿ãŒçšã®å®å šãªè»œéã€ã¡ãŒãžãæ§ç¯ãã ;ããã¯ã¢ããã®ç¡å¹å ;k8s ã®çŸåšã®ããŒãžã§ã³ã®ãªãœãŒã¹ ããŒãžã§ã³ãæŽæ°ãã ;ããŒãã¢ãã£ããã£ã®å®è£ .
ã³ãã¥ããã£ããããã® PR ããµããŒããããªãã¬ãŒã¿ãŒã®æ¬¡ã®ããŒãžã§ã³ (1.6) ã§ã¢ããã¹ããªãŒã ãããããã«ãªãã°çŽ æŽããããšæããŸãã
ããŒãã¹ïŒ æ¬çªç§»è¡ã®æåäºäŸ
Patroni ã䜿çšãããšãæå°éã®ããŠã³ã¿ã€ã ã§ã©ã€ããããã¯ã·ã§ã³ããªãã¬ãŒã¿ãŒã«ç§»è¡ã§ããŸãã
Spilo ã䜿çšãããšãS3 ã¹ãã¬ãŒãžçµç±ã§ã¹ã¿ã³ã〠ã¯ã©ã¹ã¿ãŒãäœæã§ããŸãã
PostgreSQL è«çã¬ããªã±ãŒã·ã§ã³ã圹ã«ç«ã¡ãŸãã ãã ãããããªã±ãŒã·ã§ã³ãšãµãã¹ã¯ãªãã·ã§ã³ã®äœææ¹æ³ã«ã€ããŠã¯è©³ãã説æããŸããããªããªããç§ãã¡ã®èšç»ã¯å€§å€±æã ã£ãããã§ãã
å®éãããŒã¿ããŒã¹ã«ã¯æ°çŸäžè¡ãå«ãããŒããããããŒãã«ãããã€ããããããã«ããããã®ããŒãã«ã¯åžžã«è£å
ãããåé€ãããŠããŸããã copy_data
æ°ããã¬ããªã«ããã¹ã¿ãŒãããã¹ãŠã®ã³ã³ãã³ããã³ããŒãããšããã¹ã¿ãŒã«è¿œãã€ãããšãã§ããªããªããŸãã ã³ã³ãã³ãã®ã³ããŒã¯ XNUMX é±éç¶ããããŸãããããã¹ã¿ãŒã«ã¯è¿œãã€ããŸããã§ããã æçµçã«ã¯åé¡ã®è§£æ±ºã«åœ¹ç«ã¡ãŸãã pg_dump
ã ãã®ã¢ã«ãŽãªãºã ã® (ãããã«å€æŽããã) ããŒãžã§ã³ã«ã€ããŠèª¬æããŸãã
ã¢ã€ãã¢ãšããŠã¯ãç¹å®ã®ã¬ããªã±ãŒã·ã§ã³ ã¹ãããã«é¢é£ä»ããããç¡å¹ãªãµãã¹ã¯ãªãã·ã§ã³ãäœæãããã©ã³ã¶ã¯ã·ã§ã³çªå·ãä¿®æ£ã§ãããšããããšã§ãã çç£äœæ¥ã«äœ¿çšã§ããã¬ããªã«ããããŸããã ããã¯ãã¬ããªã«ãäžè²«ãããã³ããäœæãããã¹ã¿ãŒããå€æŽãåãåãç¶ããã®ã«åœ¹ç«ã€ãããéèŠã§ãã
移è¡ããã»ã¹ã説æããåŸç¶ã®ã³ãã³ãã§ã¯ã次ã®ãã¹ãè¡šèšã䜿çšãããŸãã
- ãã¹ã¿ãŒ â ãœãŒã¹ãµãŒããŒ;
- ã¬ããªã«1 â å€ããããã¯ã·ã§ã³äžã®ã¹ããªãŒãã³ã° ã¬ããªã«ã
- ã¬ããªã«2 - æ°ããè«çã¬ããªã«ã
移è¡èšç»
1. ãã¹ã¿ãŒäžã§ã¹ããŒãå
ã®ãã¹ãŠã®ããŒãã«ã®ãµãã¹ã¯ãªãã·ã§ã³ãäœæããŸã public
ããŒã¹ dbname
:
psql -h master -d dbname -c "CREATE PUBLICATION dbname FOR ALL TABLES;"
2. ãã¹ã¿ãŒäžã«ã¬ããªã±ãŒã·ã§ã³ ã¹ããããäœæããŸãã
psql -h master -c "select pg_create_logical_replication_slot('repl', 'pgoutput');"
3. å€ãã¬ããªã«ã§ã¬ããªã±ãŒã·ã§ã³ãåæ¢ããŸãã
psql -h replica1 -c "select pg_wal_replay_pause();"
4. ãã¹ã¿ãŒãããã©ã³ã¶ã¯ã·ã§ã³çªå·ãååŸããŸãã
psql -h master -c "select replay_lsn from pg_stat_replication where client_addr = 'replica1';"
5. å€ãã¬ããªã«ãããã³ããåé€ããŸãã ãããè€æ°ã®ã¹ã¬ããã§å®è¡ããŸããããã«ãããããã»ã¹ãé«éåãããŸãã
pg_dump -h replica1 --no-publications --no-subscriptions -O -C -F d -j 8 -f dump/ dbname
6. ãã³ããæ°ãããµãŒããŒã«ã¢ããããŒãããŸãã
pg_restore -h replica2 -F d -j 8 -d dbname dump/
7. ãã³ããããŠã³ããŒãããåŸãã¹ããªãŒãã³ã° ã¬ããªã«ã§ã¬ããªã±ãŒã·ã§ã³ãéå§ã§ããŸãã
psql -h replica1 -c "select pg_wal_replay_resume();"
7. æ°ããè«çã¬ããªã«ã«ãµãã¹ã¯ãªãã·ã§ã³ãäœæããŸãããã
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. ããããŸããã oid
ãµãã¹ã¯ãªãã·ã§ã³:
psql -h replica2 -d dbname -c "select oid, * from pg_subscription;"
9. åä¿¡ãããšããŸããã oid=1000
ã ãã©ã³ã¶ã¯ã·ã§ã³çªå·ããµãã¹ã¯ãªãã·ã§ã³ã«é©çšããŸãããã
psql -h replica2 -d dbname -c "select pg_replication_origin_advance('pg_1000', 'AA/AAAAAAAA');"
10. ã¬ããªã±ãŒã·ã§ã³ãéå§ããŸãããã
psql -h replica2 -d dbname -c "alter subscription oldprod enable;"
11. ãµãã¹ã¯ãªãã·ã§ã³ã®ã¹ããŒã¿ã¹ã確èªããŸããã¬ããªã±ãŒã·ã§ã³ãæ©èœããã¯ãã§ãã
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. ã¬ããªã±ãŒã·ã§ã³ãéå§ãããããŒã¿ããŒã¹ãåæãããããã¹ã€ãããªãŒããŒã§ããŸãã
13. ã¬ããªã±ãŒã·ã§ã³ãç¡å¹ã«ããåŸãã·ãŒã±ã³ã¹ãä¿®æ£ããå¿
èŠããããŸãã ããã¯ãã説æãããŠããŸã
ãã®èšç»ã®ãããã§ãåãæ¿ãã¯æå°éã®é 延ã§è¡ãããŸããã
ãŸãšã
Kubernetes ãªãã¬ãŒã¿ãŒã䜿çšãããšãããŸããŸãªã¢ã¯ã·ã§ã³ã K8s ãªãœãŒã¹ã®äœæã«æžããããšã§ç°¡çŽ åã§ããŸãã ãã ãã圌ãã®å©ããåããŠç®èŠãŸããèªååãéæãããšããŠãããããå€ãã®äºæãã¬ãã¥ã¢ã³ã¹ãããããå¯èœæ§ãããããšãèŠããŠãã䟡å€ãããããããªãã¬ãŒã¿ãŒãè³¢ãéžæããŠãã ããã
PostgreSQL ã§æã人æ°ã®ãã XNUMX ã€ã® Kubernetes ãªãã¬ãŒã¿ãŒãæ€èšããçµæãZalando ã®ãããžã§ã¯ããéžæããŸããã ããã€ãã®å°é£ãå æããå¿ èŠããããŸããããçµæã¯éåžžã«æºè¶³ã§ãããã®ã§ããããã®ããããã®çµéšãä»ã® PgSQL ã€ã³ã¹ããŒã«ã«ãæ¡åŒµããäºå®ã§ãã åæ§ã®ãœãªã¥ãŒã·ã§ã³ã䜿çšããçµéšãããå Žåã¯ãã³ã¡ã³ãã§è©³çŽ°ã確èªã§ããããšãå¬ããæããŸãã
PS
ç§ãã¡ã®ããã°ããèªã¿ãã ãã:
- «
ããŒã¿ããŒã¹ãš Kubernetes (ã¬ãã¥ãŒãšãã㪠ã¬ããŒã) "; - «
Postgres Tuesday #5: PostgreSQL ãš Kubernetesã CI/CDã ãã¹ãã®èªåå "; - «
K8s ã® Redis ãªãã¬ãŒã¿ãŒã«é¢ãã XNUMX ã€ã®ã¹ããŒãªãŒãšããã®ããŒã¿ããŒã¹ã®ããŒã¿ãåæããããã®ãŠãŒãã£ãªãã£ã®ããã¬ãã¥ãŒ 'ã
åºæïŒ habr.com