ืืฉื›ื•ืœ ื›ืฉืœ PostgreSQL + ืคื˜ืจื•ื ื™. ื ื™ืกื™ื•ืŸ ื‘ื™ื™ืฉื•ื

ื‘ืžืืžืจ ืืกืคืจ ืœื›ื ืื™ืš ื ื™ื’ืฉื ื• ืœืกื•ื’ื™ื™ืช ืกื•ื‘ืœื ื•ืช ื”ืชืงืœื•ืช PostgreSQL, ืœืžื” ื–ื” ื”ืคืš ืœื”ื™ื•ืช ื—ืฉื•ื‘ ืœื ื• ื•ืžื” ืงืจื” ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ.

ื™ืฉ ืœื ื• ืฉื™ืจื•ืช ื˜ืขื•ืŸ ืžืื•ื“: 2,5 ืžื™ืœื™ื•ืŸ ืžืฉืชืžืฉื™ื ื‘ืจื—ื‘ื™ ื”ืขื•ืœื, 50K+ ืžืฉืชืžืฉื™ื ืคืขื™ืœื™ื ืžื“ื™ ื™ื•ื. ื”ืฉืจืชื™ื ืžืžื•ืงืžื™ื ื‘ืืžื–ื•ืŸ ื‘ืื–ื•ืจ ืื—ื“ ื‘ืื™ืจืœื ื“: 100+ ืฉืจืชื™ื ืฉื•ื ื™ื ืขื•ื‘ื“ื™ื ื›ืœ ื”ื–ืžืŸ, ืžืชื•ื›ื ื›ืžืขื˜ 50 ืขื ืžืกื“ื™ ื ืชื•ื ื™ื.

ื”ืงืฆื” ื”ืื—ื•ืจื™ ื›ื•ืœื• ื”ื•ื ื™ื™ืฉื•ื Java stateful ืžื•ื ื•ืœื™ื˜ื™ ื’ื“ื•ืœ ืฉืฉื•ืžืจ ืขืœ ื—ื™ื‘ื•ืจ ืื™ื ื˜ืจื ื˜ ืงื‘ื•ืข ืขื ื”ืœืงื•ื—. ื›ืืฉืจ ืžืกืคืจ ืžืฉืชืžืฉื™ื ืขื•ื‘ื“ื™ื ืขืœ ืื•ืชื• ืœื•ื— ื‘ื• ื–ืžื ื™ืช, ื›ื•ืœื ืจื•ืื™ื ืืช ื”ืฉื™ื ื•ื™ื™ื ื‘ื–ืžืŸ ืืžืช, ื›ื™ ืื ื—ื ื• ื›ื•ืชื‘ื™ื ื›ืœ ืฉื™ื ื•ื™ ืœืžืกื“ ื”ื ืชื•ื ื™ื. ื™ืฉ ืœื ื• ื›-10K ื‘ืงืฉื•ืช ื‘ืฉื ื™ื™ื” ืœืžืื’ืจื™ ื”ืžื™ื“ืข ืฉืœื ื•. ื‘ืขื•ืžืก ืฉื™ื ื‘ืจื“ื™ืก, ืื ื• ื›ื•ืชื‘ื™ื 80-100K ื‘ืงืฉื•ืช ืœืฉื ื™ื™ื”.
ืืฉื›ื•ืœ ื›ืฉืœ PostgreSQL + ืคื˜ืจื•ื ื™. ื ื™ืกื™ื•ืŸ ื‘ื™ื™ืฉื•ื

ืžื“ื•ืข ืขื‘ืจื ื• ืž-Redis ืœ-PostgreSQL

ื‘ืชื—ื™ืœื”, ื”ืฉื™ืจื•ืช ืฉืœื ื• ืขื‘ื“ ืขื Redis, ื—ื ื•ืช ืžืคืชื—-ืขืจืš ื”ืžืื—ืกื ืช ืืช ื›ืœ ื”ื ืชื•ื ื™ื ื‘-RAM ืฉืœ ื”ืฉืจืช.

ื”ื™ืชืจื•ื ื•ืช ืฉืœ Redis:

  1. ืžื”ื™ืจื•ืช ืชื’ื•ื‘ื” ื’ื‘ื•ื”ื”, ื›ื™ ื”ื›ืœ ืžืื•ื—ืกืŸ ื‘ื–ื™ื›ืจื•ืŸ;
  2. ืงืœื•ืช ื’ื™ื‘ื•ื™ ื•ืฉื›ืคื•ืœ.

ื—ืกืจื•ื ื•ืช ืฉืœ Redis ืขื‘ื•ืจื ื•:

  1. ืื™ืŸ ืขืกืงืื•ืช ืืžื™ืชื™ื•ืช. ื ื™ืกื™ื ื• ืœื“ืžื•ืช ืื•ืชื ื‘ืจืžืช ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื•. ืœืžืจื‘ื” ื”ืฆืขืจ, ื–ื” ืœื ืชืžื™ื“ ืขื‘ื“ ื˜ื•ื‘ ื•ื”ืฆืจื™ืš ื›ืชื™ื‘ืช ืงื•ื“ ืžื•ืจื›ื‘ ืžืื•ื“.
  2. ื›ืžื•ืช ื”ื ืชื•ื ื™ื ืžื•ื’ื‘ืœืช ืขืœ ื™ื“ื™ ื›ืžื•ืช ื”ื–ื™ื›ืจื•ืŸ. ื›ื›ืœ ืฉื›ืžื•ืช ื”ื ืชื•ื ื™ื ืชื’ื“ืœ, ื”ื–ื™ื›ืจื•ืŸ ื™ื’ื“ืœ, ื•ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ื ื™ืชืงืœ ื‘ืžืืคื™ื™ื ื™ื ืฉืœ ื”ืžื•ืคืข ื”ื ื‘ื—ืจ, ืืฉืจ ื‘-AWS ืžืฆืจื™ืš ื”ืคืกืงืช ื”ืฉื™ืจื•ืช ืฉืœื ื• ื›ื“ื™ ืœืฉื ื•ืช ืืช ืกื•ื’ ื”ืžื•ืคืข.
  3. ื™ืฉ ืฆื•ืจืš ืœืฉืžื•ืจ ื›ืœ ื”ื–ืžืŸ ืขืœ ืจืžืช ื—ื‘ื™ื•ืŸ ื ืžื•ื›ื”, ื›ื™. ื™ืฉ ืœื ื• ืžืกืคืจ ื’ื“ื•ืœ ืžืื•ื“ ืฉืœ ื‘ืงืฉื•ืช. ืจืžืช ื”ื”ืฉื”ื™ื” ื”ืื•ืคื˜ื™ืžืœื™ืช ืขื‘ื•ืจื ื• ื”ื™ื 17-20 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื”. ื‘ืจืžื” ืฉืœ 30-40 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื” ืื ื• ืžืงื‘ืœื™ื ืชืฉื•ื‘ื•ืช ืืจื•ื›ื•ืช ืœื‘ืงืฉื•ืช ืžื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ื•ื™ืจื™ื“ื” ื‘ืฉื™ืจื•ืช. ืœืจื•ืข ื”ืžื–ืœ, ื–ื” ืงืจื” ืœื ื• ื‘ืกืคื˜ืžื‘ืจ 2018, ื›ืืฉืจ ืื—ื“ ื”ืžืงืจื™ื ืขื Redis ืงื™ื‘ืœ ืžืฉื•ื ืžื” ื—ื‘ื™ื•ืŸ ืคื™ 2 ืžื”ืจื’ื™ืœ. ื›ื“ื™ ืœืคืชื•ืจ ืืช ื”ื‘ืขื™ื”, ื”ืคืกืงื ื• ืืช ื”ืฉื™ืจื•ืช ื‘ืืžืฆืข ื”ื™ื•ื ืœืฆื•ืจืš ืชื—ื–ื•ืงื” ืœื ืžืชื•ื›ื ื ืช ื•ื”ื—ืœืคื ื• ืืช ืžื•ืคืข Redis ื”ื‘ืขื™ื™ืชื™.
  4. ืงืœ ืœื”ืฉื™ื’ ื—ื•ืกืจ ืขืงื‘ื™ื•ืช ื‘ื ืชื•ื ื™ื ืืคื™ืœื• ืขื ืฉื’ื™ืื•ืช ืงืœื•ืช ื‘ืงื•ื“ ื•ืื– ืœื”ืฉืงื™ืข ื–ืžืŸ ืจื‘ ื‘ื›ืชื™ื‘ืช ืงื•ื“ ื›ื“ื™ ืœืชืงืŸ ืืช ื”ื ืชื•ื ื™ื ื”ืœืœื•.

ืœืงื—ื ื• ื‘ื—ืฉื‘ื•ืŸ ืืช ื”ื—ืกืจื•ื ื•ืช ื•ื”ื‘ื ื• ืฉืฆืจื™ืš ืœืขื‘ื•ืจ ืœืžืฉื”ื• ื ื•ื— ื™ื•ืชืจ, ืขื ืขืกืงืื•ืช ืจื’ื™ืœื•ืช ื•ืคื—ื•ืช ืชืœื•ืช ื‘-latency. ืขืจืš ืžื—ืงืจ, ื ื™ืชื— ืืคืฉืจื•ื™ื•ืช ืจื‘ื•ืช ื•ื‘ื—ืจ ื‘-PostgreSQL.

ืื ื—ื ื• ืขื•ื‘ืจื™ื ืœืžืกื“ ื ืชื•ื ื™ื ื—ื“ืฉ ื›ื‘ืจ 1,5 ืฉื ื™ื ื•ื”ืขื‘ืจื ื• ืจืง ื—ืœืง ืงื˜ืŸ ืžื”ื ืชื•ื ื™ื, ืื– ืขื›ืฉื™ื• ืื ื—ื ื• ืขื•ื‘ื“ื™ื ื‘ืžืงื‘ื™ืœ ืขื Redis ื•- PostgreSQL. ืžื™ื“ืข ื ื•ืกืฃ ืขืœ ืฉืœื‘ื™ ื”ืขื‘ืจื” ื•ื”ื—ืœืคืช ื ืชื•ื ื™ื ื‘ื™ืŸ ืžืกื“ื™ ื ืชื•ื ื™ื ื›ืชื•ื‘ ื”ืžืืžืจ ืฉืœ ืขืžื™ืชื™.

ื›ืฉื”ืชื—ืœื ื• ืœืขื‘ื•ืจ ื“ื™ืจื”, ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ืขื‘ื“ื” ื™ืฉื™ืจื•ืช ืขื ืžืกื“ ื”ื ืชื•ื ื™ื ื•ื ื™ื’ืฉื” ืœืžืืกื˜ืจ Redis ื•-PostgreSQL. ืืฉื›ื•ืœ PostgreSQL ื›ืœืœ ืžืืกื˜ืจ ื•ื”ืขืชืง ืขื ืฉื›ืคื•ืœ ืืกื™ื ื›ืจื•ื ื™. ื›ืš ื ืจืืชื” ืกื›ื™ืžืช ืžืกื“ ื”ื ืชื•ื ื™ื:
ืืฉื›ื•ืœ ื›ืฉืœ PostgreSQL + ืคื˜ืจื•ื ื™. ื ื™ืกื™ื•ืŸ ื‘ื™ื™ืฉื•ื

ื™ื™ืฉื•ื PgBouncer

ืชื•ืš ื›ื“ื™ ืžืขื‘ืจ ื“ื™ืจื” ื’ื ื”ืžื•ืฆืจ ื”ืชืคืชื—: ืžืกืคืจ ื”ืžืฉืชืžืฉื™ื ื•ืžืกืคืจ ื”ืฉืจืชื™ื ืฉืขื‘ื“ื• ืขื PostgreSQL ื’ื“ืœื• ื•ื”ืชื—ืœื ื• ืœื—ืกืจ ืœื ื• ื—ื™ื‘ื•ืจื™ื. PostgreSQL ื™ื•ืฆืจ ืชื”ืœื™ืš ื ืคืจื“ ืœื›ืœ ื—ื™ื‘ื•ืจ ื•ืฆื•ืจืš ืžืฉืื‘ื™ื. ืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืœ ืืช ืžืกืคืจ ื”ื—ื™ื‘ื•ืจื™ื ืขื“ ืœื ืงื•ื“ื” ืžืกื•ื™ืžืช, ืื—ืจืช ื™ืฉ ืกื™ื›ื•ื™ ืœืงื‘ืœ ื‘ื™ืฆื•ืขื™ ืžืกื“ ื ืชื•ื ื™ื ืœื ืื•ืคื˜ื™ืžืœื™ื™ื. ื”ืืคืฉืจื•ืช ื”ืื™ื“ื™ืืœื™ืช ื‘ืžืฆื‘ ื›ื–ื” ืชื”ื™ื” ืœื‘ื—ื•ืจ ื‘ืžื ื”ืœ ื—ื™ื‘ื•ืจ ืฉื™ืขืžื•ื“ ืžื•ืœ ื”ื‘ืกื™ืก.

ื”ื™ื• ืœื ื• ืฉืชื™ ืืคืฉืจื•ื™ื•ืช ืœืžื ื”ืœ ื”ื—ื™ื‘ื•ืจื™ื: Pgpool ื•-PgBouncer. ืื‘ืœ ื”ืจืืฉื•ืŸ ืื™ื ื• ืชื•ืžืš ื‘ืžืฆื‘ ื”ืขืกืงืื•ืช ืฉืœ ืขื‘ื•ื“ื” ืขื ืžืกื“ ื”ื ืชื•ื ื™ื, ืื– ื‘ื—ืจื ื• ื‘-PgBouncer.

ื”ื’ื“ืจื ื• ืืช ืกื›ื™ืžืช ื”ืขื‘ื•ื“ื” ื”ื‘ืื”: ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ื ื™ื’ืฉืช ืœ-PgBouncer ืื—ื“, ืฉืžืื—ื•ืจื™ื• ืžืืกื˜ืจื™ื ืฉืœ PostgreSQL, ื•ืžืื—ื•ืจื™ ื›ืœ ืžืืกื˜ืจ ื™ืฉ ื”ืขืชืง ืื—ื“ ืขื ืฉื›ืคื•ืœ ืืกื™ื ื›ืจื•ื ื™.
ืืฉื›ื•ืœ ื›ืฉืœ PostgreSQL + ืคื˜ืจื•ื ื™. ื ื™ืกื™ื•ืŸ ื‘ื™ื™ืฉื•ื

ื™ื—ื“ ืขื ื–ืืช, ืœื ื™ื›ื•ืœื ื• ืœืื—ืกืŸ ืืช ื›ืœ ื›ืžื•ืช ื”ื ืชื•ื ื™ื ื‘-PostgreSQL ื•ืžื”ื™ืจื•ืช ื”ืขื‘ื•ื“ื” ืขื ืžืกื“ ื”ื ืชื•ื ื™ื ื”ื™ื™ืชื” ื—ืฉื•ื‘ื” ืœื ื•, ืื– ื”ืชื—ืœื ื• ืœืจืกื™ืก ืืช PostgreSQL ื‘ืจืžืช ื”ืืคืœื™ืงืฆื™ื”. ื”ืกื›ื™ืžื” ืฉืชื•ืืจื” ืœืขื™ืœ ื ื•ื—ื” ื™ื—ืกื™ืช ืœื›ืš: ื‘ืขืช ื”ื•ืกืคืช ืฉื‘ืจ PostgreSQL ื—ื“ืฉ, ืžืกืคื™ืง ืœืขื“ื›ืŸ ืืช ืชืฆื•ืจืช ื”-PgBouncer ื•ื”ื™ื™ืฉื•ื ื™ื›ื•ืœ ืœืขื‘ื•ื“ ืžื™ื“ ืขื ื”-Shard ื”ื—ื“ืฉ.

ื›ืฉืœ ื‘-PgBouncer

ืชื›ื ื™ืช ื–ื• ืขื‘ื“ื” ืขื“ ืœืจื’ืข ืฉื‘ื• ื”ืžื•ืคืข ื”ื™ื—ื™ื“ ืฉืœ PgBouncer ืžืช. ืื ื—ื ื• ื‘-AWS, ืฉื ื›ืœ ื”ืžื•ืคืขื™ื ืคื•ืขืœื™ื ืขืœ ื—ื•ืžืจื” ืฉืžืชื” ืžืขืช ืœืขืช. ื‘ืžืงืจื™ื ื›ืืœื”, ื”ืžื•ืคืข ืคืฉื•ื˜ ืขื•ื‘ืจ ืœื—ื•ืžืจื” ื—ื“ืฉื” ื•ืขื•ื‘ื“ ืฉื•ื‘. ื–ื” ืงืจื” ืขื PgBouncer, ืื‘ืœ ื–ื” ื”ืคืš ืœื‘ืœืชื™ ื–ืžื™ืŸ. ื”ืชื•ืฆืื” ืฉืœ ื”ืกืชื™ื• ื”ื–ื” ื”ื™ื™ืชื” ื—ื•ืกืจ ื–ืžื™ื ื•ืช ื”ืฉื™ืจื•ืช ืฉืœื ื• ืœืžืฉืš 25 ื“ืงื•ืช. AWS ืžืžืœื™ืฆื” ืœื”ืฉืชืžืฉ ื‘ื™ืชื™ืจื•ืช ื‘ืฆื“ ื”ืžืฉืชืžืฉ ื‘ืžืฆื‘ื™ื ื›ืืœื”, ืฉืœื ื™ื•ืฉืžื” ื‘ืืจืฆื ื• ื‘ืื•ืชื” ืชืงื•ืคื”.

ืœืื—ืจ ืžื›ืŸ, ื—ืฉื‘ื ื• ื‘ืจืฆื™ื ื•ืช ืขืœ ืกื‘ื™ืœื•ืช ื”ืชืงืœื•ืช ืฉืœ ืืฉื›ื•ืœื•ืช PgBouncer ื•-PostgreSQL, ืžื›ื™ื•ื•ืŸ ืฉืžืฆื‘ ื“ื•ืžื” ื™ื›ื•ืœ ืœืงืจื•ืช ืขื ื›ืœ ืžื•ืคืข ื‘ื—ืฉื‘ื•ืŸ AWS ืฉืœื ื•.

ื‘ื ื™ื ื• ืืช ืขืจื›ืช ืกื‘ื™ืœื•ืช ื”ืชืงืœื•ืช ืฉืœ PgBouncer ื‘ืื•ืคืŸ ื”ื‘ื: ื›ืœ ืฉืจืชื™ ื”ื™ื™ืฉื•ืžื™ื ื ื™ื’ืฉื™ื ืœืžืื–ืŸ ืขื•ืžืก ื”ืจืฉืช, ืฉืžืื—ื•ืจื™ื• ื™ืฉ ืฉื ื™ PgBouncers. ื›ืœ PgBouncer ืžืกืชื›ืœ ืขืœ ืื•ืชื• ืžืืกื˜ืจ PostgreSQL ืฉืœ โ€‹โ€‹ื›ืœ ืจืกื™ืก. ืื ืžืชืจื—ืฉืช ืฉื•ื‘ ืงืจื™ืกื” ืฉืœ ืžื•ืคืข AWS, ื›ืœ ื”ืชืขื‘ื•ืจื” ืžื•ืขื‘ืจืช ื“ืจืš PgBouncer ืื—ืจ. ื›ืฉืœ ื‘-Network Load Balancer ืžืกื•ืคืง ืขืœ ื™ื“ื™ AWS.

ืกื›ื™ืžื” ื–ื• ืžืงืœื” ืขืœ ื”ื•ืกืคืช ืฉืจืชื™ PgBouncer ื—ื“ืฉื™ื.
ืืฉื›ื•ืœ ื›ืฉืœ PostgreSQL + ืคื˜ืจื•ื ื™. ื ื™ืกื™ื•ืŸ ื‘ื™ื™ืฉื•ื

ืฆื•ืจ ืืฉื›ื•ืœ PostgreSQL Failover

ื‘ืขืช ืคืชืจื•ืŸ ื‘ืขื™ื” ื–ื•, ืฉืงืœื ื• ืืคืฉืจื•ื™ื•ืช ืฉื•ื ื•ืช: ื›ืฉืœ ื‘ื›ืชื‘ ืขืฆืžื™, repmgr, AWS RDS, Patroni.

ืชืกืจื™ื˜ื™ื ื‘ื›ืชื‘ ืขืฆืžื™

ื”ื ื™ื›ื•ืœื™ื ืœืคืงื— ืขืœ ืขื‘ื•ื“ืช ื”ืžืืกื˜ืจ, ื•ืื ื”ื™ื ื ื›ืฉืœืช, ืœืงื“ื ืืช ื”ืขืชืง ืœืžืืกื˜ืจ ื•ืœืขื“ื›ืŸ ืืช ืชืฆื•ืจืช PgBouncer.

ื”ื™ืชืจื•ื ื•ืช ืฉืœ ื’ื™ืฉื” ื–ื• ื”ื ืคืฉื˜ื•ืช ืžื™ืจื‘ื™ืช, ื›ื™ ืืชื” ื›ื•ืชื‘ ืชืกืจื™ื˜ื™ื ื‘ืขืฆืžืš ื•ืžื‘ื™ื ื™ื ื‘ื“ื™ื•ืง ืื™ืš ื”ื ืขื•ื‘ื“ื™ื.

ื—ืกืจื•ื ื•ืช:

  • ื™ื™ืชื›ืŸ ืฉื”ืžืืกื˜ืจ ืœื ืžืช, ื‘ืžืงื•ื ื–ืืช ื™ื™ืชื›ืŸ ืฉื”ืชืจื—ืฉื” ื›ืฉืœ ื‘ืจืฉืช. ื›ืฉืœ, ืฉืœื ืžื•ื“ืข ืœื›ืš, ื™ืงื“ื ืืช ื”ืขืชืง ืœืžืืกื˜ืจ, ื‘ืขื•ื“ ืฉื”ืžืืกื˜ืจ ื”ื™ืฉืŸ ื™ืžืฉื™ืš ืœืขื‘ื•ื“. ื›ืชื•ืฆืื” ืžื›ืš ื ืงื‘ืœ ืฉื ื™ ืฉืจืชื™ื ื‘ืชืคืงื™ื“ ื”ืžืืกื˜ืจ ื•ืœื ื ื“ืข ืœืžื™ ืžื”ื ื™ืฉ ืืช ื”ื ืชื•ื ื™ื ื”ืขื“ื›ื ื™ื™ื ื‘ื™ื•ืชืจ. ืžืฆื‘ ื–ื” ื ืงืจื ื’ื ืžื•ื— ืžืคื•ืฆืœ;
  • ื ืฉืืจื ื• ืœืœื ืชื’ื•ื‘ื”. ื‘ืชืฆื•ืจื” ืฉืœื ื•, ื”ืžืืกื˜ืจ ื•ื”ืขืชืง ืื—ื“, ืœืื—ืจ ื”ื”ื—ืœืคื”, ื”ืขืชืง ื”ืขืชืง ืขื•ืœื” ืœืžืืกื˜ืจ ื•ืื™ืŸ ืœื ื• ืขื•ื“ ื”ืขืชืงื™ื, ืื– ืขืœื™ื ื• ืœื”ื•ืกื™ืฃ ื™ื“ื ื™ืช ืขื•ืชืง ื—ื“ืฉ;
  • ืื ื—ื ื• ืฆืจื™ื›ื™ื ื ื™ื˜ื•ืจ ื ื•ืกืฃ ืฉืœ ืคืขื•ืœืช ื”ื›ืฉืœ, ื‘ืขื•ื“ ืฉื™ืฉ ืœื ื• 12 ืจืกื™ืกื™ PostgreSQL, ืžื” ืฉืื•ืžืจ ืฉืขืœื™ื ื• ืœื ื˜ืจ 12 ืืฉื›ื•ืœื•ืช. ืขื ืขืœื™ื™ื” ื‘ืžืกืคืจ ื”ืจืกื™ืกื™ื, ืขืœื™ืš ืœื–ื›ื•ืจ ื’ื ืœืขื“ื›ืŸ ืืช ื”-failover.

ื›ืฉืœ ื‘ื›ืชื‘ ืขืฆืžื™ ื ืจืื” ืžืกื•ื‘ืš ืžืื•ื“ ื•ื“ื•ืจืฉ ืชืžื™ื›ื” ืœื ื˜ืจื™ื•ื•ื™ืืœื™ืช. ืขื ืืฉื›ื•ืœ PostgreSQL ื™ื—ื™ื“, ื–ื• ืชื”ื™ื” ื”ืืคืฉืจื•ืช ื”ืงืœื” ื‘ื™ื•ืชืจ, ืื‘ืœ ื”ื™ื ืœื ืžืฉืชื ื”, ื•ืœื›ืŸ ื”ื™ื ืœื ืžืชืื™ืžื” ืœื ื•.

Remmgr

ืžื ื”ืœ ืจืคืœื™ืงืฆื™ื” ืขื‘ื•ืจ ืืฉื›ื•ืœื•ืช PostgreSQL, ืฉื™ื›ื•ืœ ืœื ื”ืœ ืืช ื”ืคืขื•ืœื” ืฉืœ ืืฉื›ื•ืœ PostgreSQL. ื™ื—ื“ ืขื ื–ืืช, ืื™ืŸ ืœื• ื›ืฉืœ ืื•ื˜ื•ืžื˜ื™ ืžื—ื•ืฅ ืœืงื•ืคืกื”, ื›ืš ืฉืœืขื‘ื•ื“ื” ืชืฆื˜ืจืš ืœื›ืชื•ื‘ "ืขื˜ื™ืคื”" ืžืฉืœืš ืขืœ ื’ื‘ื™ ื”ืคืชืจื•ืŸ ื”ืžื•ื’ืžืจ. ืื– ื”ื›ืœ ื™ื›ื•ืœ ืœื”ืชื‘ืจืจ ืืคื™ืœื• ื™ื•ืชืจ ืžืกื•ื‘ืš ืžืืฉืจ ืขื ืกืงืจื™ืคื˜ื™ื ื‘ื›ืชื‘ ืขืฆืžื™, ืื– ืืคื™ืœื• ืœื ื ื™ืกื™ื ื• ืืช Repmgr.

AWS RDS

ืชื•ืžืš ื‘ื›ืœ ืžื” ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื, ื™ื•ื“ืข ืœืขืฉื•ืช ื’ื™ื‘ื•ื™ื™ื ื•ืฉื•ืžืจ ืขืœ ืžืื’ืจ ื—ื™ื‘ื•ืจื™ื. ื™ืฉ ืœื• ื”ื—ืœืคื” ืื•ื˜ื•ืžื˜ื™ืช: ื›ืืฉืจ ื”ืžืืกื˜ืจ ืžืช, ื”ืขืชืง ื”ื•ืคืš ืœืžืืกื˜ืจ ื”ื—ื“ืฉ, ื•-AWS ืžืฉื ื” ืืช ืจืฉื•ืžืช ื”-dns ืœืžืืกื˜ืจ ื”ื—ื“ืฉ, ื‘ืขื•ื“ ืฉื”ืขื•ืชืงื™ื ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืžืžื•ืงืžื™ื ื‘-AZs ืฉื•ื ื™ื.

ื”ื—ืกืจื•ื ื•ืช ื›ื•ืœืœื™ื ืืช ื”ื™ืขื“ืจ ื”ืชืืžื•ืช ืขื“ื™ื ื•ืช. ื›ื“ื•ื’ืžื” ืœื›ื•ื•ื ื•ืŸ ืขื“ื™ืŸ: ืœืžื•ืคืขื™ื ืฉืœื ื• ื™ืฉ ื”ื’ื‘ืœื•ืช ืขืœ ื—ื™ื‘ื•ืจื™ tcp, ืฉืœืžืจื‘ื” ื”ืฆืขืจ, ืœื ื ื™ืชืŸ ืœืขืฉื•ืช ื–ืืช ื‘-RDS:

net.ipv4.tcp_keepalive_time=10
net.ipv4.tcp_keepalive_intvl=1
net.ipv4.tcp_keepalive_probes=5
net.ipv4.tcp_retries2=3

ื‘ื ื•ืกืฃ, AWS RDS ื™ืงืจ ื›ืžืขื˜ ืคื™ ืฉื ื™ื™ื ืžืžื—ื™ืจ ื”ืžื•ืคืข ื”ืจื’ื™ืœ, ื•ื–ื” ื”ื™ื” ื”ืกื™ื‘ื” ื”ืขื™ืงืจื™ืช ืœื ื˜ื™ืฉืช ื”ืคืชืจื•ืŸ ื”ื–ื”.

ืคื˜ืจื•ื ื™

ื–ื•ื”ื™ ืชื‘ื ื™ืช ืคื™ืชื•ืŸ ืœื ื™ื”ื•ืœ PostgreSQL ืขื ืชื™ืขื•ื“ ื˜ื•ื‘, ื›ืฉืœ ืื•ื˜ื•ืžื˜ื™ ื•ืงื•ื“ ืžืงื•ืจ ื‘-github.

ื”ื™ืชืจื•ื ื•ืช ืฉืœ ืคื˜ืจื•ื ื™:

  • ื›ืœ ืคืจืžื˜ืจ ืชืฆื•ืจื” ืžืชื•ืืจ, ื‘ืจื•ืจ ืื™ืš ื–ื” ืขื•ื‘ื“;
  • ื›ืฉืœ ืื•ื˜ื•ืžื˜ื™ ืคื•ืขืœ ืžื—ื•ืฅ ืœืงื•ืคืกื”;
  • ื›ืชื•ื‘ ื‘ืคื™ืชื•ืŸ, ื•ืžื›ื™ื•ื•ืŸ ืฉืื ื—ื ื• ื‘ืขืฆืžื ื• ื›ื•ืชื‘ื™ื ื”ืจื‘ื” ื‘ืคื™ืชื•ืŸ, ื™ื”ื™ื” ืœื ื• ืงืœ ื™ื•ืชืจ ืœื”ืชืžื•ื“ื“ ืขื ื‘ืขื™ื•ืช ื•ืื•ืœื™ ืืฃ ืœืกื™ื™ืข ื‘ืคื™ืชื•ื— ื”ืคืจื•ื™ืงื˜;
  • ืžื ื”ืœ ื‘ืื•ืคืŸ ืžืœื ืืช PostgreSQL, ืžืืคืฉืจ ืœืš ืœืฉื ื•ืช ืืช ื”ืชืฆื•ืจื” ื‘ื›ืœ ื”ืฆืžืชื™ื ืฉืœ ื”ืืฉื›ื•ืœ ื‘ื‘ืช ืื—ืช, ื•ืื ืฆืจื™ืš ืœื”ืคืขื™ืœ ืžื—ื“ืฉ ืืช ื”ืืฉื›ื•ืœ ื›ื“ื™ ืœื”ื—ื™ืœ ืืช ื”ืชืฆื•ืจื” ื”ื—ื“ืฉื”, ืื– ื ื™ืชืŸ ืœืขืฉื•ืช ื–ืืช ืฉื•ื‘ ื‘ืืžืฆืขื•ืช Patroni.

ื—ืกืจื•ื ื•ืช:

  • ืœื ื‘ืจื•ืจ ืžื”ืชื™ืขื•ื“ ืื™ืš ืœืขื‘ื•ื“ ื ื›ื•ืŸ ืขื PgBouncer. ืœืžืจื•ืช ืฉืงืฉื” ืœืงืจื•ื ืœื–ื” ืžื™ื ื•ืก, ื›ื™ ื”ืžืฉื™ืžื” ืฉืœ ืคื˜ืจื•ื ื™ ื”ื™ื ืœื ื”ืœ ืืช PostgreSQL, ื•ืื™ืš ื™ืชื ื”ืœื• ื”ื—ื™ื‘ื•ืจื™ื ืœืคื˜ืจื•ื ื™ ื–ื• ื›ื‘ืจ ื‘ืขื™ื” ืฉืœื ื•;
  • ื™ืฉื ืŸ ื“ื•ื’ืžืื•ืช ืžืขื˜ื•ืช ืœื™ื™ืฉื•ื ืฉืœ Patroni ื‘ื”ื™ืงืคื™ื ื’ื“ื•ืœื™ื, ื‘ืขื•ื“ ืฉื™ืฉื ืŸ ื“ื•ื’ืžืื•ืช ืจื‘ื•ืช ืœื™ื™ืฉื•ื ืžืืคืก.

ื›ืชื•ืฆืื” ืžื›ืš, ื‘ื—ืจื ื• ื‘ืคื˜ืจื•ื ื™ ืœื™ืฆื•ืจ ืืฉื›ื•ืœ ื›ืฉืœ.

ืชื”ืœื™ืš ื™ื™ืฉื•ื ืคื˜ืจื•ื ื™

ืœืคื ื™ Patroni, ื”ื™ื• ืœื ื• 12 ืจืกื™ืกื™ PostgreSQL ื‘ืชืฆื•ืจื” ืฉืœ ืžืืกื˜ืจ ืื—ื“ ื•ื”ืขืชืง ืื—ื“ ืขื ืฉื›ืคื•ืœ ืืกื™ื ื›ืจื•ื ื™. ืฉืจืชื™ ื”ื™ื™ืฉื•ืžื™ื ื ื™ื’ืฉื• ืœื‘ืกื™ืกื™ ื”ื ืชื•ื ื™ื ื“ืจืš ื”-Network Load Balancer, ืฉืžืื—ื•ืจื™ื• ืฉื ื™ ืžื•ืคืขื™ื ืขื PgBouncer, ื•ืžืื—ื•ืจื™ื”ื ื”ื™ื• ื›ืœ ืฉืจืชื™ PostgreSQL.
ืืฉื›ื•ืœ ื›ืฉืœ PostgreSQL + ืคื˜ืจื•ื ื™. ื ื™ืกื™ื•ืŸ ื‘ื™ื™ืฉื•ื

ื›ื“ื™ ืœื™ื™ืฉื ืืช Patroni, ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ืœื‘ื—ื•ืจ ืชืฆื•ืจืช ืืฉื›ื•ืœ ืื—ืกื•ืŸ ืžื‘ื•ื–ืจ. ืคื˜ืจื•ื ื™ ืขื•ื‘ื“ ืขื ืžืขืจื›ื•ืช ืื—ืกื•ืŸ ื‘ืชืฆื•ืจื” ืžื‘ื•ื–ืจืช ื›ื’ื•ืŸ etcd, Zookeeper, Consul. ื™ืฉ ืœื ื• ื‘ืฉื•ืง ืžืงื‘ืฅ ืงื•ื ืกื•ืœ ืžืŸ ื”ืžื ื™ื™ืŸ, ืฉืขื•ื‘ื“ ื‘ืฉื™ืœื•ื‘ ืขื Vault ื•ืื ื—ื ื• ืœื ืžืฉืชืžืฉื™ื ื‘ื• ื™ื•ืชืจ. ืกื™ื‘ื” ืžืฆื•ื™ื ืช ืœื”ืชื—ื™ืœ ืœื”ืฉืชืžืฉ ื‘ืงื•ื ืกื•ืœ ืœืžื˜ืจื” ื”ืžื™ื•ืขื“ืช ืœื”.

ืื™ืš ืคื˜ืจื•ื ื™ ืขื•ื‘ื“ ืขื ืงื•ื ืกื•ืœ

ื™ืฉ ืœื ื• ืืฉื›ื•ืœ ืงื•ื ืกื•ืœ, ื”ืžื•ืจื›ื‘ ืžืฉืœื•ืฉื” ืฆืžืชื™ื, ื•ืžืงื‘ืฅ ืคื˜ืจื•ื ื™, ื”ืžื•ืจื›ื‘ ืžืžื ื”ื™ื’ ื•ื”ืขืชืง (ื‘ืคื˜ืจื•ื ื™, ื”ืื“ื•ืŸ ื ืงืจื ืžื ื”ื™ื’ ื”ืืฉื›ื•ืœ, ื•ื”ืขื‘ื“ื™ื ื ืงืจืื™ื ื”ืขืชืงื™ื). ื›ืœ ืžื•ืคืข ืฉืœ ืืฉื›ื•ืœ ืคื˜ืจื•ื ื™ ืฉื•ืœื— ื›ืœ ื”ื–ืžืŸ ืžื™ื“ืข ืขืœ ืžืฆื‘ ื”ืืฉื›ื•ืœ ืœืงื•ื ืกื•ืœ. ืœื›ืŸ, ืžืงื•ื ืกื•ืœ ืชื•ื›ืœื• ืชืžื™ื“ ืœื‘ืจืจ ืืช ื”ืชืฆื•ืจื” ื”ื ื•ื›ื—ื™ืช ืฉืœ ืืฉื›ื•ืœ ื”ืคื˜ืจื•ื ื™ ื•ืžื™ ื”ืžื ื”ื™ื’ ื›ืจื’ืข.

ืืฉื›ื•ืœ ื›ืฉืœ PostgreSQL + ืคื˜ืจื•ื ื™. ื ื™ืกื™ื•ืŸ ื‘ื™ื™ืฉื•ื

ื›ื“ื™ ืœื—ื‘ืจ ืืช ืคื˜ืจื•ื ื™ ืœืงื•ื ืกื•ืœ, ืžืกืคื™ืง ืœืœืžื•ื“ ืืช ื”ืชื™ืขื•ื“ ื”ืจืฉืžื™, ืฉืื•ืžืจ ืฉืืชื” ืฆืจื™ืš ืœืฆื™ื™ืŸ ืžืืจื— ื‘ืคื•ืจืžื˜ http ืื• https, ืชืœื•ื™ ืื™ืš ืื ื—ื ื• ืขื•ื‘ื“ื™ื ืขื ืงื•ื ืกื•ืœ, ื•ืกื›ื™ืžืช ื”ื—ื™ื‘ื•ืจ, ืื•ืคืฆื™ื•ื ืœื™ืช:

host: the host:port for the Consul endpoint, in format: http(s)://host:port
scheme: (optional) http or https, defaults to http

ื–ื” ื ืจืื” ืคืฉื•ื˜, ืื‘ืœ ื›ืืŸ ืžืชื—ื™ืœื•ืช ื”ืžืœื›ื•ื“ื•ืช. ืขื ืงื•ื ืกื•ืœ, ืื ื• ืขื•ื‘ื“ื™ื ืขืœ ื—ื™ื‘ื•ืจ ืžืื•ื‘ื˜ื— ื“ืจืš https ื•ืชืฆื•ืจืช ื”ื—ื™ื‘ื•ืจ ืฉืœื ื• ืชื™ืจืื” ื›ืš:

consul:
  host: https://server.production.consul:8080 
  verify: true
  cacert: {{ consul_cacert }}
  cert: {{ consul_cert }}
  key: {{ consul_key }}

ืื‘ืœ ื–ื” ืœื ืขื•ื‘ื“. ื‘ืขืช ื”ื”ืคืขืœื”, ืคื˜ืจื•ื ื™ ืœื ื™ื›ื•ืœ ืœื”ืชื—ื‘ืจ ืœืงื•ื ืกื•ืœ, ื›ื™ ื”ื•ื ืžื ืกื” ื‘ื›ืœ ื–ืืช ืœืขื‘ื•ืจ ื“ืจืš http.

ืงื•ื“ ื”ืžืงื•ืจ ืฉืœ ืคื˜ืจื•ื ื™ ืขื–ืจ ืœื”ืชืžื•ื“ื“ ืขื ื”ื‘ืขื™ื”. ื˜ื•ื‘ ืฉื–ื” ื›ืชื•ื‘ ื‘ืคื™ืชื•ืŸ. ืžืกืชื‘ืจ ืฉืคืจืžื˜ืจ ื”ืžืืจื— ืื™ื ื• ืžื ื•ืชื— ื‘ืฉื•ื ืื•ืคืŸ, ื•ื™ืฉ ืœืฆื™ื™ืŸ ืืช ื”ืคืจื•ื˜ื•ืงื•ืœ ื‘ืกื›ื™ืžื”. ื›ืš ื ืจืื” ืขื‘ื•ืจื ื• ื‘ืœื•ืง ืชืฆื•ืจืช ื”ืขื‘ื•ื“ื” ืœืขื‘ื•ื“ื” ืขื ืงื•ื ืกื•ืœ:

consul:
  host: server.production.consul:8080
  scheme: https
  verify: true
  cacert: {{ consul_cacert }}
  cert: {{ consul_cert }}
  key: {{ consul_key }}

ืงื•ื ืกื•ืœ-ืชื‘ื ื™ืช

ืื–, ื‘ื—ืจื ื• ืืช ื”ืื—ืกื•ืŸ ืขื‘ื•ืจ ื”ืชืฆื•ืจื”. ื›ืขืช ืขืœื™ื ื• ืœื”ื‘ื™ืŸ ื›ื™ืฆื“ PgBouncer ื™ื—ืœื™ืฃ ืืช ื”ืชืฆื•ืจื” ืฉืœื• ื‘ืขืช ืฉื™ื ื•ื™ ื”ืžื ื”ื™ื’ ื‘ืืฉื›ื•ืœ Patroni. ืื™ืŸ ืชืฉื•ื‘ื” ืœืฉืืœื” ื–ื• ื‘ืชื™ืขื•ื“, ื›ื™. ืฉื, ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ืขื‘ื•ื“ื” ืขื PgBouncer ืœื ืžืชื•ืืจืช.

ื‘ื—ื™ืคื•ืฉ ืื—ืจ ืคืชืจื•ืŸ, ืžืฆืื ื• ืžืืžืจ (ืœืฆืขืจื™ ืœื ื–ื•ื›ืจ ืืช ื”ื›ื•ืชืจืช) ืฉื‘ื• ื ื›ืชื‘ ืฉ-ะกonsul-template ืขื–ืจ ืžืื•ื“ ื‘ื—ื™ื‘ื•ืจ PgBouncer ื•-Patroni. ื–ื” ื’ืจื ืœื ื• ืœื—ืงื•ืจ ื›ื™ืฆื“ ืคื•ืขืœืช ื”-Consul-template.

ื”ืชื‘ืจืจ ืฉ-Consul-template ืขื•ืงื‘ ื›ืœ ื”ื–ืžืŸ ืื—ืจ ื”ืชืฆื•ืจื” ืฉืœ ืืฉื›ื•ืœ PostgreSQL ื‘ืงื•ื ืกื•ืœ. ื›ืืฉืจ ื”ืžื ื”ื™ื’ ืžืฉืชื ื”, ื”ื•ื ืžืขื“ื›ืŸ ืืช ืชืฆื•ืจืช PgBouncer ื•ืฉื•ืœื— ืคืงื•ื“ื” ืœื˜ืขื•ืŸ ืื•ืชื” ืžื—ื“ืฉ.

ืืฉื›ื•ืœ ื›ืฉืœ PostgreSQL + ืคื˜ืจื•ื ื™. ื ื™ืกื™ื•ืŸ ื‘ื™ื™ืฉื•ื

ื™ืชืจื•ืŸ ื’ื“ื•ืœ ืฉืœ ืชื‘ื ื™ืช ื”ื•ื ืฉื”ื™ื ืžืื•ื—ืกื ืช ื›ืงื•ื“, ื›ืš ืฉื›ืืฉืจ ืžื•ืกื™ืคื™ื ืฉื‘ืจ ื—ื“ืฉ, ืžืกืคื™ืง ืœื‘ืฆืข commit ื—ื“ืฉ ื•ืœืขื“ื›ืŸ ืืช ื”ืชื‘ื ื™ืช ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™, ืชื•ืš ืชืžื™ื›ื” ื‘ืขืงืจื•ืŸ Infrastructure as code.

ืืจื›ื™ื˜ืงื˜ื•ืจื” ื—ื“ืฉื” ืขื ืคื˜ืจื•ื ื™

ื›ืชื•ืฆืื” ืžื›ืš, ืงื™ื‘ืœื ื• ืืช ืชื›ื ื™ืช ื”ืขื‘ื•ื“ื” ื”ื‘ืื”:
ืืฉื›ื•ืœ ื›ืฉืœ PostgreSQL + ืคื˜ืจื•ื ื™. ื ื™ืกื™ื•ืŸ ื‘ื™ื™ืฉื•ื

ื›ืœ ืฉืจืชื™ ื”ื™ื™ืฉื•ืžื™ื ื ื™ื’ืฉื™ื ืœืžืื–ืŸ โ†’ ื™ืฉ ืฉื ื™ ืžื•ืคืขื™ื ืฉืœ PgBouncer ืžืื—ื•ืจื™ื• โ†’ ื‘ื›ืœ ืžื•ืคืข ืžื•ืคืขืœืช Consul-template, ื”ืžื ื˜ืจืช ืืช ื”ืžืฆื‘ ืฉืœ ื›ืœ ืืฉื›ื•ืœ Patroni ื•ืžื ื˜ืจืช ืืช ื”ืจืœื•ื•ื ื˜ื™ื•ืช ืฉืœ ืชืฆื•ืจืช PgBouncer, ืืฉืจ ืฉื•ืœื—ืช ื‘ืงืฉื•ืช ืœืžื ื”ื™ื’ ื”ื ื•ื›ื—ื™. ืฉืœ ื›ืœ ืืฉื›ื•ืœ.

ื‘ื“ื™ืงื” ื™ื“ื ื™ืช

ื”ืจืฆื ื• ืืช ื”ืชื›ื ื™ืช ื”ื–ื• ืœืคื ื™ ืฉื”ืฉืงื ื• ืื•ืชื” ื‘ืกื‘ื™ื‘ืช ื‘ื“ื™ืงื” ืงื˜ื ื” ื•ื‘ื“ืงื ื• ืืช ืคืขื•ืœืช ื”ืžืขื‘ืจ ื”ืื•ื˜ื•ืžื˜ื™. ื”ื ืคืชื—ื• ืืช ื”ืœื•ื—, ื”ื–ื™ื–ื• ืืช ื”ืžื“ื‘ืงื”, ื•ื‘ืื•ืชื• ืจื’ืข "ื”ืจื’ื•" โ€‹โ€‹ืืช ืžื ื”ื™ื’ ื”ืืฉื›ื•ืœ. ื‘-AWS, ื–ื” ืคืฉื•ื˜ ื›ืžื• ื›ื™ื‘ื•ื™ ื”ืžื•ืคืข ื“ืจืš ื”ืงื•ื ืกื•ืœื”.

ืืฉื›ื•ืœ ื›ืฉืœ PostgreSQL + ืคื˜ืจื•ื ื™. ื ื™ืกื™ื•ืŸ ื‘ื™ื™ืฉื•ื

ื”ืžื“ื‘ืงื” ื—ื–ืจื” ืชื•ืš 10-20 ืฉื ื™ื•ืช, ื•ืื– ืฉื•ื‘ ื”ื—ืœื” ืœื ื•ืข ื›ืจื’ื™ืœ. ื”ืžืฉืžืขื•ืช ื”ื™ื ืฉืืฉื›ื•ืœ ื”ืคื˜ืจื•ื ื™ ืขื‘ื“ ื›ื”ืœื›ื”: ื”ื•ื ืฉื™ื ื” ืืช ื”ืžื ื”ื™ื’, ืฉืœื— ืืช ื”ืžื™ื“ืข ืœ-Sonsul, ื•-ะกonsul-template ืงืœื˜ ืžื™ื“ ืืช ื”ืžื™ื“ืข ื”ื–ื”, ื”ื—ืœื™ืฃ ืืช ืชืฆื•ืจืช PgBouncer ื•ืฉืœื— ืืช ื”ืคืงื•ื“ื” ืœื˜ืขื™ื ื” ืžื—ื“ืฉ.

ืื™ืš ืœืฉืจื•ื“ ืชื—ืช ืขื•ืžืก ื’ื‘ื•ื” ื•ืœืฉืžื•ืจ ืขืœ ื–ืžืŸ ื”ื”ืฉื‘ืชื” ืžื™ื ื™ืžืœื™?

ื”ื›ืœ ืขื•ื‘ื“ ื‘ืฆื•ืจื” ืžื•ืฉืœืžืช! ืื‘ืœ ื™ืฉ ืฉืืœื•ืช ื—ื“ืฉื•ืช: ืื™ืš ื–ื” ื™ืขื‘ื•ื“ ืชื—ืช ืขื•ืžืก ื’ื‘ื•ื”? ืื™ืš ืœื’ืœื’ืœ ื‘ืžื”ื™ืจื•ืช ื•ื‘ื‘ื˜ื—ื” ื”ื›ืœ ื‘ื™ื™ืฆื•ืจ?

ืกื‘ื™ื‘ืช ื”ื‘ื“ื™ืงื” ืขืœื™ื” ืื ื• ืขื•ืจื›ื™ื ื‘ื“ื™ืงื•ืช ืขื•ืžืก ืขื•ื–ืจืช ืœื ื• ืœืขื ื•ืช ืขืœ ื”ืฉืืœื” ื”ืจืืฉื•ื ื”. ื”ื•ื ื–ื”ื” ืœื—ืœื•ื˜ื™ืŸ ืœื™ื™ืฆื•ืจ ืžื‘ื—ื™ื ืช ืืจื›ื™ื˜ืงื˜ื•ืจื” ื•ื™ืฆืจ ื ืชื•ื ื™ ื‘ื“ื™ืงื” ืฉืฉื•ื•ื™ื ื‘ืขืจืš ื‘ื ืคื— ืœื™ื™ืฆื•ืจ. ืื ื—ื ื• ืžื—ืœื™ื˜ื™ื ืคืฉื•ื˜ "ืœื”ืจื•ื’" ืืช ืื—ื“ ื”ืžืืกื˜ืจื™ื ืฉืœ PostgreSQL ื‘ืžื”ืœืš ื”ืžื‘ื—ืŸ ื•ืœืจืื•ืช ืžื” ืงื•ืจื”. ืื‘ืœ ืœืคื ื™ ื›ืŸ, ื—ืฉื•ื‘ ืœื‘ื“ื•ืง ืืช ื”ื’ืœื’ื•ืœ ื”ืื•ื˜ื•ืžื˜ื™, ื›ื™ ื‘ืกื‘ื™ื‘ื” ื–ื• ื™ืฉ ืœื ื• ืžืกืคืจ ืจืกื™ืกื™ PostgreSQL, ื›ืš ืฉื ืงื‘ืœ ื‘ื“ื™ืงื” ืžืฆื•ื™ื ืช ืฉืœ ืกืงืจื™ืคื˜ื™ื ืฉืœ ืชืฆื•ืจื” ืœืคื ื™ ื”ื™ื™ืฆื•ืจ.

ืฉืชื™ ื”ืžืฉื™ืžื•ืช ื ืจืื•ืช ืฉืืคืชื ื™ื•ืช, ืื‘ืœ ื™ืฉ ืœื ื• PostgreSQL 9.6. ื”ืื ื ื•ื›ืœ ืœืฉื“ืจื’ ืžื™ื“ ืœ-11.2?

ืื ื—ื ื• ืžื—ืœื™ื˜ื™ื ืœืขืฉื•ืช ืืช ื–ื” ื‘-2 ืฉืœื‘ื™ื: ืชื—ื™ืœื” ืœืฉื“ืจื’ ืœ-11.2, ื•ืื– ืœื”ืคืขื™ืœ ืืช Patroni.

ืขื“ื›ื•ืŸ PostgreSQL

ื›ื“ื™ ืœืขื“ื›ืŸ ื‘ืžื”ื™ืจื•ืช ืืช ื’ืจืกืช PostgreSQL, ื”ืฉืชืžืฉ ื‘ืืคืฉืจื•ืช -k, ืฉื‘ื• ื ื•ืฆืจื™ื ืงื™ืฉื•ืจื™ื ืงืฉื™ื—ื™ื ื‘ื“ื™ืกืง ื•ืื™ืŸ ืฆื•ืจืš ืœื”ืขืชื™ืง ืืช ื”ื ืชื•ื ื™ื ืฉืœืš. ืขืœ ื‘ืกื™ืก ืฉืœ 300-400 GB, ื”ืขื“ื›ื•ืŸ ืœื•ืงื— ืฉื ื™ื™ื” ืื—ืช.

ื™ืฉ ืœื ื• ื”ืจื‘ื” ืจืกื™ืกื™ื, ืื– ื”ืขื“ื›ื•ืŸ ืฆืจื™ืš ืœื”ืชื‘ืฆืข ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™. ืœืฉื ื›ืš, ื›ืชื‘ื ื• ืกืคืจ ืžืฉื—ืง ืฉืœ Ansible ืฉืžื˜ืคืœ ืขื‘ื•ืจื ื• ื‘ื›ืœ ืชื”ืœื™ืš ื”ืขื“ื›ื•ืŸ:

/usr/lib/postgresql/11/bin/pg_upgrade 
<b>--link </b>
--old-datadir='' --new-datadir='' 
 --old-bindir=''  --new-bindir='' 
 --old-options=' -c config_file=' 
 --new-options=' -c config_file='

ื—ืฉื•ื‘ ืœืฆื™ื™ืŸ ื›ืืŸ ืฉืœืคื ื™ ืฉืžืชื—ื™ืœื™ื ื‘ืฉื“ืจื•ื’ ื™ืฉ ืœื‘ืฆืข ืื•ืชื• ืขื ื”ืคืจืžื˜ืจ --ื—ืฉื‘ื•ืŸื›ื“ื™ ืœื•ื•ื“ื ืฉืืชื” ื™ื›ื•ืœ ืœืฉื“ืจื’. ื”ืกืงืจื™ืคื˜ ืฉืœื ื• ืžื‘ืฆืข ื’ื ื”ื—ืœืคื” ืฉืœ ื”ื’ื“ืจื•ืช ืœืžืฉืš ื”ืฉื“ืจื•ื’. ื”ืชืกืจื™ื˜ ืฉืœื ื• ื”ื•ืฉืœื ืชื•ืš 30 ืฉื ื™ื•ืช, ื•ื–ื• ืชื•ืฆืื” ืžืฆื•ื™ื ืช.

ื”ืคืขืœ ืืช ืคื˜ืจื•ื ื™

ื›ื“ื™ ืœืคืชื•ืจ ืืช ื”ื‘ืขื™ื” ื”ืฉื ื™ื™ื”, ืคืฉื•ื˜ ืชืกืชื›ืœ ืขืœ ืชืฆื•ืจืช Patroni. ืœืžืื’ืจ ื”ืจืฉืžื™ ื™ืฉ ืชืฆื•ืจื” ืœื“ื•ื’ืžื” ืขื initdb, ืฉืื—ืจืื™ืช ืœืืชื—ื•ืœ ืžืกื“ ื ืชื•ื ื™ื ื—ื“ืฉ ื›ืืฉืจ ืืชื” ืžืคืขื™ืœ ืืช Patroni ืœืจืืฉื•ื ื”. ืื‘ืœ ืžื›ื™ื•ื•ืŸ ืฉื›ื‘ืจ ื™ืฉ ืœื ื• ืžืกื“ ื ืชื•ื ื™ื ืžื•ื›ืŸ, ืคืฉื•ื˜ ื”ืกืจื ื• ืืช ื”ืงื˜ืข ื”ื–ื” ืžื”ืชืฆื•ืจื”.

ื›ืฉื”ืชื—ืœื ื• ืœื”ืชืงื™ืŸ ืืช Patroni ืขืœ ืืฉื›ื•ืœ PostgreSQL ืฉื›ื‘ืจ ืงื™ื™ื ื•ืœื”ืจื™ืฅ ืื•ืชื•, ื ืชืงืœื ื• ื‘ื‘ืขื™ื” ื—ื“ืฉื”: ืฉื ื™ ื”ืฉืจืชื™ื ื”ืชื—ื™ืœื• ื›ืžื•ื‘ื™ืœื™ื. ืคื˜ืจื•ื ื™ ืœื ื™ื•ื“ืข ื“ื‘ืจ ืขืœ ื”ืžืฆื‘ ื”ืžื•ืงื“ื ืฉืœ ื”ืืฉื›ื•ืœ ื•ืžื ืกื” ืœื”ืคืขื™ืœ ืืช ืฉื ื™ ื”ืฉืจืชื™ื ื›ืฉื ื™ ืืฉื›ื•ืœื•ืช ื ืคืจื“ื™ื ืขื ืื•ืชื• ืฉื. ื›ื“ื™ ืœืคืชื•ืจ ื‘ืขื™ื” ื–ื•, ืขืœื™ืš ืœืžื—ื•ืง ืืช ื”ืกืคืจื™ื™ื” ืขื ื”ื ืชื•ื ื™ื ืขืœ ื”ืขื‘ื“:

rm -rf /var/lib/postgresql/

ื–ื” ืฆืจื™ืš ืœื”ื™ืขืฉื•ืช ืจืง ืขืœ ื”ืขื‘ื“!

ื›ืืฉืจ ืขื•ืชืง ื ืงื™ ืžื—ื•ื‘ืจ, ืคื˜ืจื•ื ื™ ื™ื•ืฆืจ ืžื•ื‘ื™ืœ basebackup ื•ืžืฉื—ื–ืจ ืื•ืชื• ืœืขืชืง, ื•ืœืื—ืจ ืžื›ืŸ ืžื“ื‘ื™ืง ืืช ื”ืžืฆื‘ ื”ื ื•ื›ื—ื™ ืขืœ ืคื™ ื™ื•ืžื ื™ ื”ื•ื•ืœ.

ืงื•ืฉื™ ื ื•ืกืฃ ืฉื ืชืงืœื ื• ื‘ื• ื”ื•ื ืฉื›ืœ ืืฉื›ื•ืœื•ืช PostgreSQL ื ืงืจืื™ื main ื›ื‘ืจื™ืจืช ืžื—ื“ืœ. ื›ืืฉืจ ื›ืœ ืืฉื›ื•ืœ ืœื ื™ื•ื“ืข ื“ื‘ืจ ืขืœ ื”ืฉื ื™, ื–ื” ื ื•ืจืžืœื™. ืื‘ืœ ื›ืืฉืจ ืืชื” ืจื•ืฆื” ืœื”ืฉืชืžืฉ ื‘ืคื˜ืจื•ื ื™, ืื– ืœื›ืœ ื”ืืฉื›ื•ืœื•ืช ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืฉื ื™ื™ื—ื•ื“ื™. ื”ืคืชืจื•ืŸ ื”ื•ื ืœืฉื ื•ืช ืืช ืฉื ื”ืืฉื›ื•ืœ ื‘ืชืฆื•ืจืช PostgreSQL.

ื‘ื“ื™ืงืช ืขื•ืžืก

ื”ืฉืงื ื• ืžื‘ื—ืŸ ื”ืžื“ืžื” ื—ื•ื•ื™ืช ืžืฉืชืžืฉ ืขืœ ืœื•ื—ื•ืช. ื›ืฉื”ืขื•ืžืก ื”ื’ื™ืข ืœืขืจืš ื”ื™ื•ืžื™ ื”ืžืžื•ืฆืข ืฉืœื ื•, ื—ื–ืจื ื• ืขืœ ืื•ืชื” ื‘ื“ื™ืงื” ื‘ื“ื™ื•ืง, ื›ื™ื‘ื™ืชื ื• ืžื•ืคืข ืื—ื“ ืขื ืžื•ื‘ื™ืœ PostgreSQL. ื”ื›ืฉืœ ื”ืื•ื˜ื•ืžื˜ื™ ืขื‘ื“ ื›ืคื™ ืฉืฆื™ืคื™ื ื•: ืคื˜ืจื•ื ื™ ืฉื™ื ื” ืืช ื”ืžื ื”ื™ื’, Consul-template ืขื“ื›ืŸ ืืช ืชืฆื•ืจืช PgBouncer ื•ืฉืœื— ืคืงื•ื“ื” ืœื˜ืขื™ื ื” ืžื—ื“ืฉ. ืœืคื™ ื”ื’ืจืคื™ื ืฉืœื ื• ื‘ื’ืจืคืื ื”, ื”ื™ื” ื‘ืจื•ืจ ืฉื™ืฉ ืขื™ื›ื•ื‘ื™ื ืฉืœ 20-30 ืฉื ื™ื•ืช ื•ื›ืžื•ืช ืงื˜ื ื” ืฉืœ ืฉื’ื™ืื•ืช ืžื”ืฉืจืชื™ื ื”ืงืฉื•ืจื™ื ืœื—ื™ื‘ื•ืจ ืœื‘ืกื™ืก ื”ื ืชื•ื ื™ื. ื–ื”ื• ืžืฆื‘ ื ื•ืจืžืœื™, ืขืจื›ื™ื ื›ืืœื” ืžืงื•ื‘ืœื™ื ืขื‘ื•ืจ ื”ื›ืฉืœ ืฉืœื ื• ื•ื‘ื”ื—ืœื˜ ื˜ื•ื‘ื™ื ื™ื•ืชืจ ืžื–ืžืŸ ื”ื”ืฉื‘ืชื” ืฉืœ ื”ืฉื™ืจื•ืช.

ื”ื‘ืืช ืคื˜ืจื•ื ื™ ืœื”ืคืงื”

ื›ืชื•ืฆืื” ืžื›ืš, ื”ื’ืขื ื• ืœืชื•ื›ื ื™ืช ื”ื‘ืื”:

  • ืคืจื•ืก ืชื‘ื ื™ืช ืงื•ื ืกื•ืœ ืœืฉืจืชื™ PgBouncer ื•ื”ืคืขืœ;
  • ืขื“ื›ื•ื ื™ PostgreSQL ืœื’ืจืกื” 11.2;
  • ืฉื ื” ืืช ืฉื ื”ืืฉื›ื•ืœ;
  • ืžืชื—ื™ืœื™ื ืืช ืืฉื›ื•ืœ ืคื˜ืจื•ื ื™.

ื™ื—ื“ ืขื ื–ืืช, ื”ืชื•ื›ื ื™ืช ืฉืœื ื• ืžืืคืฉืจืช ืœื ื• ืœื”ืขืœื•ืช ืืช ื”ื ืงื•ื“ื” ื”ืจืืฉื•ื ื” ื›ืžืขื˜ ื‘ื›ืœ ื–ืžืŸ, ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ืกื™ืจ ื›ืœ PgBouncer ืžื”ืขื‘ื•ื“ื” ื‘ืชื•ืจื• ื•ืœืคืจื•ืก ื•ืœื”ืคืขื™ืœ ืขืœื™ื• consul-template. ืื– ืขืฉื™ื ื•.

ืœืคืจื™ืกื” ืžื”ื™ืจื”, ื”ืฉืชืžืฉื ื• ื‘-Ansible, ืžื›ื™ื•ื•ืŸ ืฉื›ื‘ืจ ื‘ื“ืงื ื• ืืช ื›ืœ ืกืคืจื™ ื”ื”ืคืขืœื” ื‘ืกื‘ื™ื‘ืช ื‘ื“ื™ืงื”, ื•ื–ืžืŸ ื”ื‘ื™ืฆื•ืข ืฉืœ ื”ืกืงืจื™ืคื˜ ื”ืžืœื ื”ื™ื” ื‘ื™ืŸ 1,5 ืœ-2 ื“ืงื•ืช ืขื‘ื•ืจ ื›ืœ ืจืกื™ืก. ื ื•ื›ืœ ืœื’ืœื’ืœ ื”ื›ืœ ื‘ืชื•ืจื• ืœื›ืœ ืจืกื™ืก ืžื‘ืœื™ ืœื”ืคืกื™ืง ืืช ื”ืฉื™ืจื•ืช ืฉืœื ื•, ืื‘ืœ ื ืฆื˜ืจืš ืœื›ื‘ื•ืช ื›ืœ PostgreSQL ืœืžืฉืš ืžืกืคืจ ื“ืงื•ืช. ื‘ืžืงืจื” ื–ื”, ืžืฉืชืžืฉื™ื ืฉื”ื ืชื•ื ื™ื ืฉืœื”ื ื ืžืฆืื™ื ื‘ืจืกื™ืก ื–ื” ืœื ื™ื›ืœื• ืœืขื‘ื•ื“ ื‘ืžืœื•ืื• ื‘ืฉืœื‘ ื–ื”, ื•ื–ื” ืœื ืžืงื•ื‘ืœ ืขืœื™ื ื•.

ื”ื“ืจืš ืœืฆืืช ืžืžืฆื‘ ื–ื” ื”ื™ื™ืชื” ื”ืชื—ื–ื•ืงื” ื”ืžืชื•ื›ื ื ืช, ื”ืžืชืงื™ื™ืžืช ื›ืœ 3 ื—ื•ื“ืฉื™ื. ื–ื”ื• ื—ืœื•ืŸ ืœืขื‘ื•ื“ื” ืžืชื•ื–ืžื ืช, ื›ืืฉืจ ืื ื• ืžื›ื‘ื™ื ืœื—ืœื•ื˜ื™ืŸ ืืช ื”ืฉื™ืจื•ืช ืฉืœื ื• ื•ืžืฉื“ืจื’ื™ื ืืช ืžื•ืคืขื™ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœื ื•. ื ื•ืชืจ ืฉื‘ื•ืข ืขื“ ืœื—ืœื•ืŸ ื”ื‘ื, ื•ื”ื—ืœื˜ื ื• ืคืฉื•ื˜ ืœื—ื›ื•ืช ื•ืœื”ืชื›ื•ื ืŸ ื”ืœืื”. ื‘ืžื”ืœืš ื–ืžืŸ ื”ื”ืžืชื ื”, ืื‘ื˜ื—ื ื• ืืช ืขืฆืžื ื• ื‘ื ื•ืกืฃ: ืขื‘ื•ืจ ื›ืœ ืจืกื™ืก PostgreSQL, ื”ืขืœื™ื ื• ืขื•ืชืง ืจื–ืจื‘ื™ ืœืžืงืจื” ืฉืœ ืื™ ืฉืžื™ืจืช ื”ื ืชื•ื ื™ื ื”ืขื“ื›ื ื™ื™ื ื‘ื™ื•ืชืจ, ื•ื”ื•ืกืคื ื• ืžื•ืคืข ื—ื“ืฉ ืขื‘ื•ืจ ื›ืœ ืจืกื™ืก, ืฉืืžื•ืจ ืœื”ืคื•ืš ืœืขืชืง ื—ื“ืฉ ื‘ืืฉื›ื•ืœ Patroni, ื›ื“ื™ ืœื ืœื‘ืฆืข ืคืงื•ื“ื” ืœืžื—ื™ืงืช ื ืชื•ื ื™ื. ื›ืœ ื–ื” ืขื–ืจ ืœืžื–ืขืจ ืืช ื”ืกื™ื›ื•ืŸ ืœื˜ืขื•ืช.
ืืฉื›ื•ืœ ื›ืฉืœ PostgreSQL + ืคื˜ืจื•ื ื™. ื ื™ืกื™ื•ืŸ ื‘ื™ื™ืฉื•ื

ื”ืคืขืœื ื• ืžื—ื“ืฉ ืืช ื”ืฉื™ืจื•ืช ืฉืœื ื•, ื”ื›ืœ ืขื‘ื“ ื›ืžื• ืฉืฆืจื™ืš, ื”ืžืฉืชืžืฉื™ื ื”ืžืฉื™ื›ื• ืœืขื‘ื•ื“, ืื‘ืœ ื‘ื’ืจืคื™ื ื”ื‘ื—ื ื• ื‘ืขื•ืžืก ื’ื‘ื•ื” ื‘ืื•ืคืŸ ื—ืจื™ื’ ืขืœ ืฉืจืชื™ ื”ืงื•ื ืกื•ืœ.
ืืฉื›ื•ืœ ื›ืฉืœ PostgreSQL + ืคื˜ืจื•ื ื™. ื ื™ืกื™ื•ืŸ ื‘ื™ื™ืฉื•ื

ืœืžื” ืœื ืจืื™ื ื• ืืช ื–ื” ื‘ืกื‘ื™ื‘ืช ื”ืžื‘ื—ืŸ? ื‘ืขื™ื” ื–ื• ืžืžื—ื™ืฉื” ื”ื™ื˜ื‘ ื›ื™ ื™ืฉ ืฆื•ืจืš ืœืขืงื•ื‘ ืื—ืจ ืขืงืจื•ืŸ ื”ืชืฉืชื™ืช ื›ืงื•ื“ ื•ืœื—ื“ื“ ืืช ื›ืœ ื”ืชืฉืชื™ืช, ืžืกื‘ื™ื‘ื•ืช ื‘ื“ื™ืงื” ื•ืขื“ ืœื™ื™ืฆื•ืจ. ืื—ืจืช, ืงืœ ืžืื•ื“ ืœืงื‘ืœ ืืช ื”ื‘ืขื™ื” ืฉืงื™ื‘ืœื ื•. ืžื” ืงืจื”? ืงื•ื ืกื•ืœ ื”ื•ืคื™ืข ืชื—ื™ืœื” ื‘ื™ื™ืฆื•ืจ, ื•ืœืื—ืจ ืžื›ืŸ ื‘ืกื‘ื™ื‘ื•ืช ื‘ื“ื™ืงื”, ื›ืชื•ืฆืื” ืžื›ืš, ื‘ืกื‘ื™ื‘ื•ืช ื‘ื“ื™ืงื”, ื”ื’ืจืกื” ืฉืœ ืงื•ื ืกื•ืœ ื”ื™ื™ืชื” ื’ื‘ื•ื”ื” ื™ื•ืชืจ ืžืืฉืจ ื‘ื™ื™ืฆื•ืจ. ืจืง ื‘ืื—ืช ื”ืžื”ื“ื•ืจื•ืช, ื“ืœื™ืคืช ืžืขื‘ื“ ื ืคืชืจื” ื‘ืขื‘ื•ื“ื” ืขื consul-template. ืœื›ืŸ, ืคืฉื•ื˜ ืขื“ื›ื ื• ืืช ืงื•ื ืกื•ืœ, ื•ื‘ื›ืš ืคืชืจื ื• ืืช ื”ื‘ืขื™ื”.

ื”ืคืขืœ ืžื—ื“ืฉ ืืช ืืฉื›ื•ืœ Patroni

ืขื ื–ืืช, ื ืชืงืœื ื• ื‘ื‘ืขื™ื” ื—ื“ืฉื”, ืฉืืคื™ืœื• ืœื ื—ืฉื“ื ื• ื‘ื”. ื‘ืขืช ืขื“ื›ื•ืŸ ืงื•ื ืกื•ืœ, ืื ื• ืคืฉื•ื˜ ืžืกื™ืจื™ื ืืช ืฆื•ืžืช ื”ืงื•ื ืกื•ืœ ืžื”ืืฉื›ื•ืœ ื‘ืืžืฆืขื•ืช ืคืงื•ื“ืช ื”-consul leave โ†’ Patroni ืžืชื—ื‘ืจ ืœืฉืจืช ืงื•ื ืกื•ืœ ืื—ืจ โ†’ ื”ื›ืœ ืขื•ื‘ื“. ืื‘ืœ ื›ืฉื”ื’ืขื ื• ืœืžื•ืคืข ื”ืื—ืจื•ืŸ ืฉืœ ืืฉื›ื•ืœ ื”ืงื•ื ืกื•ืœ ื•ืฉืœื—ื ื• ืืœื™ื• ืืช ืคืงื•ื“ืช ื”ืงื•ื ืกื•ืœ ืœืขื–ื•ื‘, ื›ืœ ืืฉื›ื•ืœื•ืช ื”ืคื˜ืจื•ื ื™ ืคืฉื•ื˜ ืžื•ืคืขืœื™ื ืžื—ื“ืฉ, ื•ื‘ืœื•ื’ื™ื ืจืื™ื ื• ืืช ื”ืฉื’ื™ืื” ื”ื‘ืื”:

ERROR: get_cluster
Traceback (most recent call last):
...
RetryFailedError: 'Exceeded retry deadline'
ERROR: Error communicating with DCS
<b>LOG: database system is shut down</b>

ืืฉื›ื•ืœ ืคื˜ืจื•ื ื™ ืœื ื”ืฆืœื™ื— ืœืื—ื–ืจ ืžื™ื“ืข ืขืœ ื”ืืฉื›ื•ืœ ืฉืœื• ื•ื”ื•ืคืขืœ ืžื—ื“ืฉ.

ื›ื“ื™ ืœืžืฆื•ื ืคืชืจื•ืŸ, ื™ืฆืจื ื• ืงืฉืจ ืขื ืžื—ื‘ืจื™ Patroni ื‘ืืžืฆืขื•ืช ื‘ืขื™ื” ื‘-github. ื”ื ื”ืฆื™ืขื• ืฉื™ืคื•ืจื™ื ืœืงื‘ืฆื™ ื”ืชืฆื•ืจื” ืฉืœื ื•:

consul:
 consul.checks: []
bootstrap:
 dcs:
   retry_timeout: 8

ื”ืฆืœื—ื ื• ืœืฉื›ืคืœ ืืช ื”ื‘ืขื™ื” ื‘ืกื‘ื™ื‘ืช ื‘ื“ื™ืงื” ื•ื‘ื“ืงื ื• ืืช ื”ืืคืฉืจื•ื™ื•ืช ื”ืœืœื• ืฉื, ืืš ืœืžืจื‘ื” ื”ืฆืขืจ ื”ืŸ ืœื ืขื‘ื“ื•.

ื”ื‘ืขื™ื” ืขื“ื™ื™ืŸ ืœื ื ืคืชืจื”. ืื ื• ืžืชื›ื ื ื™ื ืœื ืกื•ืช ืืช ื”ืคืชืจื•ื ื•ืช ื”ื‘ืื™ื:

  • ื”ืฉืชืžืฉ ื‘-Consul-agent ื‘ื›ืœ ืžื•ืคืข ืืฉื›ื•ืœ Patroni;
  • ืชืงืŸ ืืช ื”ื‘ืขื™ื” ื‘ืงื•ื“.

ืื ื• ืžื‘ื™ื ื™ื ื”ื™ื›ืŸ ื”ืชืจื—ืฉื” ื”ืฉื’ื™ืื”: ื”ื‘ืขื™ื” ื”ื™ื ื›ื›ืœ ื”ื ืจืื” ื”ืฉื™ืžื•ืฉ ื‘ืคืกืง ื–ืžืŸ ื”ืžื•ื’ื“ืจ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืืฉืจ ืื™ื ื• ืžื•ื—ืœืฃ ื“ืจืš ืงื•ื‘ืฅ ื”ืชืฆื•ืจื”. ื›ืืฉืจ ืฉืจืช ื”ืงื•ื ืกื•ืœ ื”ืื—ืจื•ืŸ ืžื•ืกืจ ืžื”ืืฉื›ื•ืœ, ื›ืœ ืืฉื›ื•ืœ ื”ืงื•ื ืกื•ืœ ื ืชืงืข ืœื™ื•ืชืจ ืžืฉื ื™ื™ื”, ื‘ื’ืœืœ ื–ื”, ืคื˜ืจื•ื ื™ ืœื ื™ื›ื•ืœ ืœืงื‘ืœ ืืช ื”ืกื˜ื˜ื•ืก ืฉืœ ื”ืืฉื›ื•ืœ ื•ืžืคืขื™ืœ ืžื—ื“ืฉ ืืช ื›ืœ ื”ืืฉื›ื•ืœ.

ืœืžืจื‘ื” ื”ืžื–ืœ, ืœื ื ืชืงืœื ื• ื‘ืฉื’ื™ืื•ืช ื ื•ืกืคื•ืช.

ืชื•ืฆืื•ืช ื”ืฉื™ืžื•ืฉ ื‘ืคื˜ืจื•ื ื™

ืœืื—ืจ ื”ื”ืฉืงื” ื”ืžื•ืฆืœื—ืช ืฉืœ Patroni, ื”ื•ืกืคื ื• ื”ืขืชืง ื ื•ืกืฃ ื‘ื›ืœ ืืฉื›ื•ืœ. ื›ืขืช ื‘ื›ืœ ืืฉื›ื•ืœ ื™ืฉ ืžืจืื™ืช ืขื™ืŸ ืฉืœ ืžื ื™ื™ืŸ: ืžื ื”ื™ื’ ืื—ื“ ื•ืฉื ื™ ื”ืขืชืงื™ื, ืœืจืฉืช ื‘ื™ื˜ื—ื•ืŸ ื‘ืžืงืจื” ืฉืœ ืžื•ื— ืžืคื•ืฆืœ ื‘ืขืช ื”ื—ืœืคื”.
ืืฉื›ื•ืœ ื›ืฉืœ PostgreSQL + ืคื˜ืจื•ื ื™. ื ื™ืกื™ื•ืŸ ื‘ื™ื™ืฉื•ื

ืคื˜ืจื•ื ื™ ืขื•ื‘ื“ ืขืœ ื”ืคืงื” ื›ื‘ืจ ื™ื•ืชืจ ืžืฉืœื•ืฉื” ื—ื•ื“ืฉื™ื. ื‘ืžื”ืœืš ื”ื–ืžืŸ ื”ื–ื”, ื”ื•ื ื›ื‘ืจ ื”ืฆืœื™ื— ืœืขื–ื•ืจ ืœื ื•. ืœืื—ืจื•ื ื”, ื”ืžื ื”ื™ื’ ืฉืœ ืื—ื“ ื”ืืฉื›ื•ืœื•ืช ืžืช ื‘-AWS, ื›ืฉืœ ืื•ื˜ื•ืžื˜ื™ ืขื‘ื“ ื•ื”ืžืฉืชืžืฉื™ื ื”ืžืฉื™ื›ื• ืœืขื‘ื•ื“. ืคื˜ืจื•ื ื™ ืžื™ืœื ืืช ืชืคืงื™ื“ื• ื”ืขื™ืงืจื™.

ืกื™ื›ื•ื ืงื˜ืŸ ืฉืœ ื”ืฉื™ืžื•ืฉ ื‘ืคื˜ืจื•ื ื™:

  • ืงืœื•ืช ืฉืœ ืฉื™ื ื•ื™ื™ ืชืฆื•ืจื”. ืžืกืคื™ืง ืœืฉื ื•ืช ืืช ื”ืชืฆื•ืจื” ื‘ืžื•ืคืข ืื—ื“ ื•ื”ื™ื ืชื™ืžืฉืš ืœื›ืœ ื”ืืฉื›ื•ืœ. ืื ื ื“ืจืฉ ืืชื—ื•ืœ ืžื—ื“ืฉ ื›ื“ื™ ืœื”ื—ื™ืœ ืืช ื”ืชืฆื•ืจื” ื”ื—ื“ืฉื”, ืื– Patroni ื™ื•ื“ื™ืข ืœืš. ืคื˜ืจื•ื ื™ ื™ื›ื•ืœ ืœื”ืคืขื™ืœ ืžื—ื“ืฉ ืืช ื›ืœ ื”ืืฉื›ื•ืœ ื‘ืคืงื•ื“ื” ืื—ืช, ื•ื–ื” ื’ื ืžืื•ื“ ื ื•ื—.
  • ื›ืฉืœ ืื•ื˜ื•ืžื˜ื™ ืขื•ื‘ื“ ื•ื›ื‘ืจ ื”ืฆืœื™ื— ืœืขื–ื•ืจ ืœื ื•.
  • ืขื“ื›ื•ืŸ PostgreSQL ืœืœื ื”ืฉื‘ืชืช ื™ื™ืฉื•ืžื™ื. ืชื—ื™ืœื” ืขืœื™ืš ืœืขื“ื›ืŸ ืืช ื”ื”ืขืชืงื™ื ืœื’ืจืกื” ื”ื—ื“ืฉื”, ื•ืœืื—ืจ ืžื›ืŸ ืœืฉื ื•ืช ืืช ื”ืžื ื”ื™ื’ ื‘ืืฉื›ื•ืœ ื”ืคื˜ืจื•ื ื™ ื•ืœืขื“ื›ืŸ ืืช ื”ืžื ื”ื™ื’ ื”ื™ืฉืŸ. ื‘ืžืงืจื” ื–ื”, ื”ื‘ื“ื™ืงื” ื”ื ื—ื•ืฆื” ืฉืœ ื›ืฉืœ ืื•ื˜ื•ืžื˜ื™ ืžืชืจื—ืฉืช.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”