ืืืืืจ ืืกืคืจ ืืื ืืื ื ืืืฉื ื ืืกืืืืืช ืกืืืื ืืช ืืชืงืืืช PostgreSQL, ืืื ืื ืืคื ืืืืืช ืืฉืื ืื ื ืืื ืงืจื ืืกืืคื ืฉื ืืืจ.
ืืฉ ืื ื ืฉืืจืืช ืืขืื ืืืื: 2,5 ืืืืืื ืืฉืชืืฉืื ืืจืืื ืืขืืื, 50K+ ืืฉืชืืฉืื ืคืขืืืื ืืื ืืื. ืืฉืจืชืื ืืืืงืืื ืืืืืื ืืืืืจ ืืื ืืืืจืื ื: 100+ ืฉืจืชืื ืฉืื ืื ืขืืืืื ืื ืืืื, ืืชืืื ืืืขื 50 ืขื ืืกืื ื ืชืื ืื.
ืืงืฆื ืืืืืจื ืืืื ืืื ืืืฉืื Java stateful ืืื ืืืืื ืืืื ืฉืฉืืืจ ืขื ืืืืืจ ืืื ืืจื ื ืงืืืข ืขื ืืืงืื. ืืืฉืจ ืืกืคืจ ืืฉืชืืฉืื ืขืืืืื ืขื ืืืชื ืืื ืื ืืื ืืช, ืืืื ืจืืืื ืืช ืืฉืื ืืืื ืืืื ืืืช, ืื ืื ืื ื ืืืชืืื ืื ืฉืื ืื ืืืกื ืื ืชืื ืื. ืืฉ ืื ื ื-10K ืืงืฉืืช ืืฉื ืืื ืืืืืจื ืืืืืข ืฉืื ื. ืืขืืืก ืฉืื ืืจืืืก, ืื ื ืืืชืืื 80-100K ืืงืฉืืช ืืฉื ืืื.
ืืืืข ืขืืจื ื ื-Redis ื-PostgreSQL
ืืชืืืื, ืืฉืืจืืช ืฉืื ื ืขืื ืขื Redis, ืื ืืช ืืคืชื-ืขืจื ืืืืืกื ืช ืืช ืื ืื ืชืื ืื ื-RAM ืฉื ืืฉืจืช.
ืืืชืจืื ืืช ืฉื Redis:
- ืืืืจืืช ืชืืืื ืืืืื, ืื ืืื ืืืืืกื ืืืืืจืื;
- ืงืืืช ืืืืื ืืฉืืคืื.
ืืกืจืื ืืช ืฉื Redis ืขืืืจื ื:
- ืืื ืขืกืงืืืช ืืืืชืืืช. ื ืืกืื ื ืืืืืช ืืืชื ืืจืืช ืืืคืืืงืฆืื ืฉืื ื. ืืืจืื ืืฆืขืจ, ืื ืื ืชืืื ืขืื ืืื ืืืฆืจืื ืืชืืืช ืงืื ืืืจืื ืืืื.
- ืืืืช ืื ืชืื ืื ืืืืืืช ืขื ืืื ืืืืช ืืืืืจืื. ืืื ืฉืืืืช ืื ืชืื ืื ืชืืื, ืืืืืจืื ืืืื, ืืืกืืคื ืฉื ืืืจ ื ืืชืงื ืืืืคืืื ืื ืฉื ืืืืคืข ืื ืืืจ, ืืฉืจ ื-AWS ืืฆืจืื ืืคืกืงืช ืืฉืืจืืช ืฉืื ื ืืื ืืฉื ืืช ืืช ืกืื ืืืืคืข.
- ืืฉ ืฆืืจื ืืฉืืืจ ืื ืืืื ืขื ืจืืช ืืืืื ื ืืืื, ืื. ืืฉ ืื ื ืืกืคืจ ืืืื ืืืื ืฉื ืืงืฉืืช. ืจืืช ืืืฉืืื ืืืืคืืืืืืช ืขืืืจื ื ืืื 17-20 ืืืคืืืช ืืฉื ืืื. ืืจืื ืฉื 30-40 ืืืคืืืช ืืฉื ืืื ืื ื ืืงืืืื ืชืฉืืืืช ืืจืืืืช ืืืงืฉืืช ืืืืคืืืงืฆืื ืฉืื ื ืืืจืืื ืืฉืืจืืช. ืืจืืข ืืืื, ืื ืงืจื ืื ื ืืกืคืืืืจ 2018, ืืืฉืจ ืืื ืืืงืจืื ืขื Redis ืงืืื ืืฉืื ืื ืืืืื ืคื 2 ืืืจืืื. ืืื ืืคืชืืจ ืืช ืืืขืื, ืืคืกืงื ื ืืช ืืฉืืจืืช ืืืืฆืข ืืืื ืืฆืืจื ืชืืืืงื ืื ืืชืืื ื ืช ืืืืืคื ื ืืช ืืืคืข Redis ืืืขืืืชื.
- ืงื ืืืฉืื ืืืกืจ ืขืงืืืืช ืื ืชืื ืื ืืคืืื ืขื ืฉืืืืืช ืงืืืช ืืงืื ืืื ืืืฉืงืืข ืืื ืจื ืืืชืืืช ืงืื ืืื ืืชืงื ืืช ืื ืชืื ืื ืืืื.
ืืงืื ื ืืืฉืืื ืืช ืืืกืจืื ืืช ืืืื ื ืฉืฆืจืื ืืขืืืจ ืืืฉืื ื ืื ืืืชืจ, ืขื ืขืกืงืืืช ืจืืืืืช ืืคืืืช ืชืืืช ื-latency. ืขืจื ืืืงืจ, ื ืืชื ืืคืฉืจืืืืช ืจืืืช ืืืืจ ื-PostgreSQL.
ืื ืื ื ืขืืืจืื ืืืกื ื ืชืื ืื ืืืฉ ืืืจ 1,5 ืฉื ืื ืืืขืืจื ื ืจืง ืืืง ืงืื ืืื ืชืื ืื, ืื ืขืืฉืื ืื ืื ื ืขืืืืื ืืืงืืื ืขื Redis ื- PostgreSQL. ืืืืข ื ืืกืฃ ืขื ืฉืืื ืืขืืจื ืืืืืคืช ื ืชืื ืื ืืื ืืกืื ื ืชืื ืื ืืชืื
ืืฉืืชืืื ื ืืขืืืจ ืืืจื, ืืืคืืืงืฆืื ืฉืื ื ืขืืื ืืฉืืจืืช ืขื ืืกื ืื ืชืื ืื ืื ืืืฉื ืืืืกืืจ Redis ื-PostgreSQL. ืืฉืืื PostgreSQL ืืื ืืืกืืจ ืืืขืชืง ืขื ืฉืืคืื ืืกืื ืืจืื ื. ืื ื ืจืืชื ืกืืืืช ืืกื ืื ืชืื ืื:
ืืืฉืื PgBouncer
ืชืื ืืื ืืขืืจ ืืืจื ืื ืืืืฆืจ ืืชืคืชื: ืืกืคืจ ืืืฉืชืืฉืื ืืืกืคืจ ืืฉืจืชืื ืฉืขืืื ืขื PostgreSQL ืืืื ืืืชืืื ื ืืืกืจ ืื ื ืืืืืจืื. PostgreSQL ืืืฆืจ ืชืืืื ื ืคืจื ืืื ืืืืืจ ืืฆืืจื ืืฉืืืื. ืืชื ืืืื ืืืืืื ืืช ืืกืคืจ ืืืืืืจืื ืขื ืื ืงืืื ืืกืืืืช, ืืืจืช ืืฉ ืกืืืื ืืงืื ืืืฆืืขื ืืกื ื ืชืื ืื ืื ืืืคืืืืืืื. ืืืคืฉืจืืช ืืืืืืืืืช ืืืฆื ืืื ืชืืื ืืืืืจ ืืื ืื ืืืืืจ ืฉืืขืืื ืืื ืืืกืืก.
ืืื ืื ื ืฉืชื ืืคืฉืจืืืืช ืืื ืื ืืืืืืจืื: Pgpool ื-PgBouncer. ืืื ืืจืืฉืื ืืื ื ืชืืื ืืืฆื ืืขืกืงืืืช ืฉื ืขืืืื ืขื ืืกื ืื ืชืื ืื, ืื ืืืจื ื ื-PgBouncer.
ืืืืจื ื ืืช ืกืืืืช ืืขืืืื ืืืื: ืืืคืืืงืฆืื ืฉืื ื ื ืืืฉืช ื-PgBouncer ืืื, ืฉืืืืืจืื ืืืกืืจืื ืฉื 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 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.
ืืื ืืืืฉื ืืช Patroni, ืืืื ื ืฆืจืืืื ืืืืืจ ืชืฆืืจืช ืืฉืืื ืืืกืื ืืืืืจ. ืคืืจืื ื ืขืืื ืขื ืืขืจืืืช ืืืกืื ืืชืฆืืจื ืืืืืจืช ืืืื etcd, Zookeeper, Consul. ืืฉ ืื ื ืืฉืืง ืืงืืฅ ืงืื ืกืื ืื ืืื ืืื, ืฉืขืืื ืืฉืืืื ืขื Vault ืืื ืื ื ืื ืืฉืชืืฉืื ืื ืืืชืจ. ืกืืื ืืฆืืื ืช ืืืชืืื ืืืฉืชืืฉ ืืงืื ืกืื ืืืืจื ืืืืืขืืช ืื.
ืืื ืคืืจืื ื ืขืืื ืขื ืงืื ืกืื
ืืฉ ืื ื ืืฉืืื ืงืื ืกืื, ืืืืจืื ืืฉืืืฉื ืฆืืชืื, ืืืงืืฅ ืคืืจืื ื, ืืืืจืื ืืื ืืื ืืืขืชืง (ืืคืืจืื ื, ืืืืื ื ืงืจื ืื ืืื ืืืฉืืื, ืืืขืืืื ื ืงืจืืื ืืขืชืงืื). ืื ืืืคืข ืฉื ืืฉืืื ืคืืจืื ื ืฉืืื ืื ืืืื ืืืืข ืขื ืืฆื ืืืฉืืื ืืงืื ืกืื. ืืื, ืืงืื ืกืื ืชืืืื ืชืืื ืืืจืจ ืืช ืืชืฆืืจื ืื ืืืืืช ืฉื ืืฉืืื ืืคืืจืื ื ืืื ืืื ืืื ืืจืืข.
ืืื ืืืืจ ืืช ืคืืจืื ื ืืงืื ืกืื, ืืกืคืืง ืืืืื ืืช ืืชืืขืื ืืจืฉืื, ืฉืืืืจ ืฉืืชื ืฆืจืื ืืฆืืื ืืืจื ืืคืืจืื 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 ืืฉืืื ืคืงืืื ืืืขืื ืืืชื ืืืืฉ.
ืืชืจืื ืืืื ืฉื ืชืื ืืช ืืื ืฉืืื ืืืืืกื ืช ืืงืื, ืื ืฉืืืฉืจ ืืืกืืคืื ืฉืืจ ืืืฉ, ืืกืคืืง ืืืฆืข commit ืืืฉ ืืืขืืื ืืช ืืชืื ืืช ืืืืคื ืืืืืืื, ืชืื ืชืืืื ืืขืงืจืื Infrastructure as code.
ืืจืืืืงืืืจื ืืืฉื ืขื ืคืืจืื ื
ืืชืืฆืื ืืื, ืงืืืื ื ืืช ืชืื ืืช ืืขืืืื ืืืื:
ืื ืฉืจืชื ืืืืฉืืืื ื ืืืฉืื ืืืืื โ ืืฉ ืฉื ื ืืืคืขืื ืฉื PgBouncer ืืืืืจืื โ ืืื ืืืคืข ืืืคืขืืช Consul-template, ืืื ืืจืช ืืช ืืืฆื ืฉื ืื ืืฉืืื Patroni ืืื ืืจืช ืืช ืืจืืืื ืืืืช ืฉื ืชืฆืืจืช PgBouncer, ืืฉืจ ืฉืืืืช ืืงืฉืืช ืืื ืืื ืื ืืืื. ืฉื ืื ืืฉืืื.
ืืืืงื ืืื ืืช
ืืจืฆื ื ืืช ืืชืื ืืช ืืื ืืคื ื ืฉืืฉืงื ื ืืืชื ืืกืืืืช ืืืืงื ืงืื ื ืืืืงื ื ืืช ืคืขืืืช ืืืขืืจ ืืืืืืืื. ืื ืคืชืื ืืช ืืืื, ืืืืื ืืช ืืืืืงื, ืืืืืชื ืจืืข "ืืจืื" โโืืช ืื ืืื ืืืฉืืื. ื-AWS, ืื ืคืฉืื ืืื ืืืืื ืืืืคืข ืืจื ืืงืื ืกืืื.
ืืืืืงื ืืืจื ืชืื 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, ืืื ืื ืืืฆืข ืคืงืืื ืืืืืงืช ื ืชืื ืื. ืื ืื ืขืืจ ืืืืขืจ ืืช ืืกืืืื ืืืขืืช.
ืืคืขืื ื ืืืืฉ ืืช ืืฉืืจืืช ืฉืื ื, ืืื ืขืื ืืื ืฉืฆืจืื, ืืืฉืชืืฉืื ืืืฉืืื ืืขืืื, ืืื ืืืจืคืื ืืืื ื ืืขืืืก ืืืื ืืืืคื ืืจืื ืขื ืฉืจืชื ืืงืื ืกืื.
ืืื ืื ืจืืื ื ืืช ืื ืืกืืืืช ืืืืื? ืืขืื ืื ืืืืืฉื ืืืื ืื ืืฉ ืฆืืจื ืืขืงืื ืืืจ ืขืงืจืื ืืชืฉืชืืช ืืงืื ืืืืื ืืช ืื ืืชืฉืชืืช, ืืกืืืืืช ืืืืงื ืืขื ืืืืฆืืจ. ืืืจืช, ืงื ืืืื ืืงืื ืืช ืืืขืื ืฉืงืืืื ื. ืื ืงืจื? ืงืื ืกืื ืืืคืืข ืชืืืื ืืืืฆืืจ, ืืืืืจ ืืื ืืกืืืืืช ืืืืงื, ืืชืืฆืื ืืื, ืืกืืืืืช ืืืืงื, ืืืจืกื ืฉื ืงืื ืกืื ืืืืชื ืืืืื ืืืชืจ ืืืฉืจ ืืืืฆืืจ. ืจืง ืืืืช ืืืืืืจืืช, ืืืืคืช ืืขืื ื ืคืชืจื ืืขืืืื ืขื 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, ืืืกืคื ื ืืขืชืง ื ืืกืฃ ืืื ืืฉืืื. ืืขืช ืืื ืืฉืืื ืืฉ ืืจืืืช ืขืื ืฉื ืื ืืื: ืื ืืื ืืื ืืฉื ื ืืขืชืงืื, ืืจืฉืช ืืืืืื ืืืงืจื ืฉื ืืื ืืคืืฆื ืืขืช ืืืืคื.
ืคืืจืื ื ืขืืื ืขื ืืคืงื ืืืจ ืืืชืจ ืืฉืืืฉื ืืืืฉืื. ืืืืื ืืืื ืืื, ืืื ืืืจ ืืฆืืื ืืขืืืจ ืื ื. ืืืืจืื ื, ืืื ืืื ืฉื ืืื ืืืฉืืืืืช ืืช ื-AWS, ืืฉื ืืืืืืื ืขืื ืืืืฉืชืืฉืื ืืืฉืืื ืืขืืื. ืคืืจืื ื ืืืื ืืช ืชืคืงืืื ืืขืืงืจื.
ืกืืืื ืงืื ืฉื ืืฉืืืืฉ ืืคืืจืื ื:
- ืงืืืช ืฉื ืฉืื ืืื ืชืฆืืจื. ืืกืคืืง ืืฉื ืืช ืืช ืืชืฆืืจื ืืืืคืข ืืื ืืืื ืชืืืฉื ืืื ืืืฉืืื. ืื ื ืืจืฉ ืืชืืื ืืืืฉ ืืื ืืืืื ืืช ืืชืฆืืจื ืืืืฉื, ืื Patroni ืืืืืข ืื. ืคืืจืื ื ืืืื ืืืคืขืื ืืืืฉ ืืช ืื ืืืฉืืื ืืคืงืืื ืืืช, ืืื ืื ืืืื ื ืื.
- ืืฉื ืืืืืืื ืขืืื ืืืืจ ืืฆืืื ืืขืืืจ ืื ื.
- ืขืืืื PostgreSQL ืืื ืืฉืืชืช ืืืฉืืืื. ืชืืืื ืขืืื ืืขืืื ืืช ืืืขืชืงืื ืืืจืกื ืืืืฉื, ืืืืืจ ืืื ืืฉื ืืช ืืช ืืื ืืื ืืืฉืืื ืืคืืจืื ื ืืืขืืื ืืช ืืื ืืื ืืืฉื. ืืืงืจื ืื, ืืืืืงื ืื ืืืฆื ืฉื ืืฉื ืืืืืืื ืืชืจืืฉืช.
ืืงืืจ: www.habr.com