ืคืึทื™ืœืึธื•ื•ืขืจ ืงื ื•ื™ืœ PostgreSQL + Patroni. ื™ืžืคึผืœืขืžืขื ื˜ืึทื˜ื™ืึธืŸ ื“ืขืจืคืึทืจื•ื ื’

ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืื™ืš ื•ื•ืขื˜ ื–ืึธื’ืŸ ืื™ืจ ื•ื•ื™ ืžื™ืจ ืึทืคึผืจืึธื•ื˜ืฉื˜ ื“ื™ ืึทืจื•ื™ืกื’ืขื‘ืŸ ืคื•ืŸ PostgreSQL ืฉื•ืœื“ ื˜ืึธืœืขืจืึทื ืฅ, ื•ื•ืึธืก ืขืก ืื™ื– ื’ืขื•ื•ืืจืŸ ื•ื•ื™ื›ื˜ื™ืง ืคึฟืึทืจ ืื•ื ื“ื– ืื•ืŸ ื•ื•ืึธืก ื’ืขื˜ืจืืคืŸ ืื™ืŸ ื“ื™ ืกื•ืฃ.

ืžื™ืจ ื”ืึธื‘ืŸ ืึท ื”ืขื›ืกื˜ ืœืึธื•ื“ื™ื“ ื“ื™ื ืกื˜: 2,5 ืžื™ืœื™ืึธืŸ ื™ื•ื–ืขืจื– ื•ื•ืขืจืœื“ื•ื•ื™ื™ื“, 50K+ ืึทืงื˜ื™ื•ื• ื™ื•ื–ืขืจื– ื™ืขื“ืขืจ ื˜ืึธื’. ื“ื™ ืกืขืจื•ื•ืขืจืก ื–ืขื ืขืŸ ืœื™ื’ืŸ ืื™ืŸ Amazone ืื™ืŸ ืื™ื™ืŸ ื’ืขื’ื ื˜ ืคื•ืŸ ื™ืจืขืœืึทื ื“: 100+ ืคืึทืจืฉื™ื“ืขื ืข ืกืขืจื•ื•ืขืจืก ื–ืขื ืขืŸ ืงืขืกื™ื™ื“ืขืจ ืื™ืŸ ืึธืคึผืขืจืึทืฆื™ืข, ื›ึผืžืขื˜ 50 ืคื•ืŸ ื–ื™ื™ ืžื™ื˜ ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื–.

ื“ื™ ื’ืื ืฆืข ื‘ืึทืงืขื ื“ ืื™ื– ืึท ื’ืจื•ื™ืก ืžืึทื ืึทืœื™ื˜ื™ืง ืกื˜ื™ื™ื˜ืคื•ืœ Java ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื•ื•ืึธืก ื”ืืœื˜ ืึท ืคึผืขืจืกื™ืกื˜ืขื ื˜ ื•ื•ืขื‘ืกืึธืงืงืขื˜ ืคึฟืึทืจื‘ื™ื ื“ื•ื ื’ ืžื™ื˜ ื“ืขื ืงืœื™ืขื ื˜. ื•ื•ืขืŸ ืขื˜ืœืขื›ืข ื™ื•ื–ืขืจื– ืึทืจื‘ืขื˜ ืกื™ื™ืžืึทืœื˜ื™ื™ื ื™ืึทืกืœื™ ืื•ื™ืฃ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ื‘ืจืขื˜, ื–ื™ื™ ืึทืœืข ื–ืขืŸ ืขื ื“ืขืจื•ื ื’ืขืŸ ืื™ืŸ ืคืึทืงื˜ื™ืฉ ืฆื™ื™ื˜, ื•ื•ื™ื™ึทืœ ืžื™ืจ ืจืขืงืึธืจื“ื™ืจืŸ ื™ืขื“ืขืจ ืขื ื“ืขืจื•ื ื’ ืื™ืŸ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก. ืžื™ืจ ื”ืึธื‘ืŸ ื‘ืขืขืจืขืš 10 ืง ืจื™ืงื•ื•ืขืก ืคึผืขืจ ืกืขืงื•ื ื“ืข ืฆื• ืื•ื ื“ื–ืขืจ ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื–. ืื™ืŸ ืฉืคึผื™ืฅ ืžืึทืกืข ืื™ืŸ Redis ืžื™ืจ ืฉืจื™ื™ึทื‘ืŸ 80-100K ืจื™ืงื•ื•ืขืก ืคึผืขืจ ืกืขืงื•ื ื“ืข.
ืคืึทื™ืœืึธื•ื•ืขืจ ืงื ื•ื™ืœ PostgreSQL + Patroni. ื™ืžืคึผืœืขืžืขื ื˜ืึทื˜ื™ืึธืŸ ื“ืขืจืคืึทืจื•ื ื’

ืคืืจื•ื•ืืก ืžื™ืจ ืกื•ื•ื™ื˜ืฉื˜ ืคื•ืŸ Redis ืฆื• PostgreSQL

ื˜ื›ื™ืœืขืก, ืื•ื ื“ื–ืขืจ ื“ื™ื ืกื˜ ื’ืขืืจื‘ืขื˜ ืžื™ื˜ Redis, ืึท ืฉืœื™ืกืœ-ื•ื•ืขืจื˜ ืกื˜ืึธืจื™ื“ื–ืฉ ื•ื•ืึธืก ืกื˜ืึธืจื– ืึทืœืข ื“ืึทื˜ืŸ ืื™ืŸ ื“ื™ ื‘ืึทืจืึทืŸ ืคื•ืŸ ื“ื™ ืกืขืจื•ื•ืขืจ.

ืคึผืจืึธืก ืคื•ืŸ Redis:

  1. ื”ื•ื™ืš ืขื ื˜ืคืขืจ ื’ื™ื›ืงื™ื™ึทื˜, ื•ื•ื™ื™ึทืœ ืึทืœืฅ ืื™ื– ืกื˜ืึธืจื“ ืื™ืŸ ื–ื›ึผืจื•ืŸ;
  2. ื‘ืึทืงื•ื•ืขื ื‘ืึทืงืึทืคึผ ืื•ืŸ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ.

ืงืึธื ืก ืคื•ืŸ Redis ืคึฟืึทืจ ืื•ื ื“ื–:

  1. ืขืก ื–ืขื ืขืŸ ืงื™ื™ืŸ ืคืึทืงื˜ื™ืฉ ื˜ืจืึทื ื–ืึทืงืฉืึทื ื–. ืžื™ืจ ื’ืขืคืจื•ื•ื•ื˜ ืฆื• ื ืึธื›ืžืึทื›ืŸ ื–ื™ื™ ืื•ื™ืฃ ืื•ื ื“ื–ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืžื“ืจื’ื”. ืฆื•ื ื‘ืึทื“ื•ื™ืขืจืŸ, ื“ืึธืก ื”ืื˜ ื ื™ื˜ ืฉื˜ืขื ื“ื™ืง ืึทืจื‘ืขื˜ ื’ืขื–ื•ื ื˜ ืื•ืŸ ืคืืจืœืื ื’ื˜ ืฉืจื™ื™ื‘ืŸ ื–ื™ื™ืขืจ ืงืึธืžืคึผืœื™ืฆื™ืจื˜ ืงืึธื“.
  2. ื“ื™ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹ื“ืึทื˜ืŸ ืื™ื– ืœื™ืžื™ื˜ืขื“ ื“ื•ืจืš ื“ื™ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹ื–ื›ึผืจื•ืŸ. ื•ื•ืขืŸ ื“ื™ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ืึทื˜ืŸ ื™ื ืงืจื™ืกื™ื–, ื“ืขืจ ื–ื›ึผืจื•ืŸ ื•ื•ืขื˜ ื•ื•ืึทืงืกืŸ, ืื•ืŸ, ืื™ืŸ ื“ื™ ืกื•ืฃ, ืžื™ืจ ื•ื•ืขืœืŸ ืœื•ื™ืคืŸ ืื™ืŸ ื“ื™ ืงืขืจืึทืงื˜ืขืจื™ืกื˜ื™ืงืก ืคื•ืŸ ื“ื™ ืื•ื™ืกื’ืขืงืœื™ื‘ืŸ ื‘ื™ื™ึทืฉืคึผื™ืœ, ื•ื•ืึธืก ืื™ืŸ AWS ืจื™ืงื•ื•ื™ื™ืขืจื– ืกื˜ืึธืคึผืคึผื™ื ื’ ืื•ื ื“ื–ืขืจ ื“ื™ื ืกื˜ ืฆื• ื˜ื•ื™ืฉืŸ ื“ืขื ื˜ื™ืคึผ ื˜ื™ืคึผ.
  3. ืขืก ืื™ื– ื ื™ื™ื˜ื™ืง ืฆื• ืงืขืกื™ื™ื“ืขืจ ื”ืึทืœื˜ืŸ ืึท ื ื™ื“ืขืจื™ืง ืœื™ื™ื˜ืึทื ืกื™ ืžื“ืจื’ื”, ื•ื•ื™ื™ึทืœ ืžื™ืจ ื”ืึธื‘ืŸ ืึท ื–ื™ื™ืขืจ ื’ืจื•ื™ืก ื ื•ืžืขืจ ืคื•ืŸ ืจื™ืงื•ื•ืขืก. ื“ื™ ืึธืคึผื˜ื™ืžืึทืœ ืœื™ื™ื˜ืึทื ืกื™ ืžื“ืจื’ื” ืคึฟืึทืจ ืื•ื ื“ื– ืื™ื– 17-20 ืžื™ื–. ืื™ืŸ ืึท ืžื“ืจื’ื” ืคื•ืŸ 30-40 ืžื™ื–, ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ืœืึทื ื’ ืจืขืกืคึผืึธื ืกืขืก ืฆื• ืื•ื ื“ื–ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืจื™ืงื•ื•ืขืก ืื•ืŸ ื“ื™ื ืกื˜ ื“ืขืจื ื™ื“ืขืจื™ืงื•ื ื’. ืฆื•ื ื‘ืึทื“ื•ื™ืขืจืŸ, ื“ืึธืก ื’ืขื˜ืจืืคืŸ ืฆื• ืื•ื ื“ื– ืื™ืŸ ืกืขืคื˜ืขืžื‘ืขืจ 2018, ื•ื•ืขืŸ ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืงืึทืกืขืก ืžื™ื˜ Redis ืคึฟืึทืจ ืขื˜ืœืขื›ืข ืกื™ื‘ื” ื‘ืืงื•ืžืขืŸ ืึท ืœื™ื™ื˜ืึทื ืกื™ ื•ื•ืึธืก ืื™ื– ื’ืขื•ื•ืขืŸ 2 ืžืืœ ื”ืขื›ืขืจ ื•ื•ื™ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš. ืฆื• ืกืึธืœื•ื•ืข ื“ืขื ืคึผืจืึธื‘ืœืขื, ืžื™ืจ ืกื˜ืึทืคึผื˜ ื“ื™ ื“ื™ื ืกื˜ ืื™ืŸ ื“ื™ ืžื™ื˜ืŸ ืคื•ืŸ ื“ื™ ืึทืจื‘ืขื˜ ื˜ืึธื’ ืคึฟืึทืจ ืึทื ืกืงืขื“ื–ืฉื•ืœื“ ื•ื™ืฉืึทืœื˜ ืื•ืŸ ืจื™ืคึผืœื™ื™ืกื˜ ื“ื™ ืคึผืจืึธื‘ืœืขืžืึทื˜ื™ืง ืจืขื“ื™ืก ื‘ื™ื™ึทืฉืคึผื™ืœ.
  4. ืขืก ืื™ื– ื’ืจื™ื ื’ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืกืชื™ืจื” ื“ืึทื˜ืŸ ืืคื™ืœื• ืžื™ื˜ ืžื™ื ืขืจื•ื•ืขืจื˜ื™ืง ืขืจืจืึธืจืก ืื™ืŸ ื“ื™ ืงืึธื“ ืื•ืŸ ื“ืขืžืึธืœื˜ ืคืึทืจื‘ืจืขื ื’ืขืŸ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ืฆื™ื™ื˜ ืฆื• ืฉืจื™ื™ื‘ืŸ ืงืึธื“ ืฆื• ืคืึทืจืจื™ื›ื˜ืŸ ื“ื™ ื“ืึทื˜ืŸ.

ืžื™ืจ ื”ืึธื‘ืŸ ื’ืขื ื•ืžืขืŸ ืื™ืŸ ื—ืฉื‘ื•ืŸ ื“ื™ ื“ื™ืกืึทื“ื•ื•ืึทื ื˜ื™ื“ื–ืฉื™ื– ืื•ืŸ ืื™ื™ื ื’ืขื–ืขืŸ ืึทื– ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืžืึทืš ืฆื• ืขืคึผืขืก ืžืขืจ ื‘ืึทืงื•ื•ืขื, ืžื™ื˜ ื ืึธืจืžืึทืœ ื˜ืจืึทื ื–ืึทืงืฉืึทื ื– ืื•ืŸ ื•ื•ื™ื™ื ื™ืงืขืจ ืึธืคืขื ื’ื™ืงื™ื™ึทื˜ ืื•ื™ืฃ ืœื™ื™ื˜ืึทื ืกื™. ืžื™ืจ ื”ืึธื‘ืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืื•ื ื“ื–ืขืจ ืคืึธืจืฉื•ื ื’, ืึทื ืึทืœื™ื™ื–ื“ ืคื™ืœืข ืึธืคึผืฆื™ืขืก ืื•ืŸ ืื•ื™ืกื“ืขืจื•ื•ื™ื™ืœื˜ PostgreSQL.

ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ืืจื™ื‘ืขืจื’ืขืคืืจืŸ ืฆื• ืึท ื ื™ื™ึทืข ื“ืึทื˜ืึทื‘ื™ื™ืก ืคึฟืึทืจ 1,5 ื™ืึธืจ ืื™ืฆื˜ ืื•ืŸ ื”ืึธื‘ืŸ ื‘ืœื•ื™ื– ื˜ืจืึทื ืกืคืขืจื“ ืึท ืงืœื™ื™ืŸ ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ื“ืึทื˜ืŸ, ืึทื–ื•ื™ ืื™ืฆื˜ ืžื™ืจ ืึทืจื‘ืขื˜ืŸ ืกื™ื™ืžืึทืœื˜ื™ื™ื ื™ืึทืกืœื™ ืžื™ื˜ Redis ืื•ืŸ PostgreSQL. ืžืขืจ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื“ื™ ืกื˜ืึทื’ืขืก ืคื•ืŸ ืžืึธื•ื•ื™ื ื’ ืื•ืŸ ืกื•ื•ื™ื˜ืฉื™ื ื’ ื“ืึทื˜ืŸ ืฆื•ื•ื™ืฉืŸ ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื– ืื™ื– ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ ืึทืจื˜ื™ืงืœ ืคื•ืŸ ืžื™ื™ืŸ ืงืึธืœืขื’ืข.

ื•ื•ืขืŸ ืžื™ืจ ืขืจืฉื˜ืขืจ ืกื˜ืึทืจื˜ืขื“ ืžืึธื•ื•ื™ื ื’, ืื•ื ื“ื–ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื’ืขืืจื‘ืขื˜ ื’ืœื™ื™ืš ืžื™ื˜ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ืื•ืŸ ืึทืงืกืขืกื˜ ื“ื™ Redis ืื•ืŸ PostgreSQL ื‘ืขืœ. ื“ื™ PostgreSQL ืงื ื•ื™ืœ ืงืึธื ืกื™ืกื˜ืขื“ ืคื•ืŸ ืึท ื‘ืขืœ ืื•ืŸ ืึท ืจืขืคึผืœื™ืงืข ืžื™ื˜ ื™ื™ืกื™ื ื’ืงืจืึทื ืึทืก ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ. ื“ืึธืก ืื™ื– ื•ื•ื™ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ื•ื•ืึธืจืงืคืœืึธื•ื• ื’ืขืงื•ืงื˜ ื•ื•ื™:
ืคืึทื™ืœืึธื•ื•ืขืจ ืงื ื•ื™ืœ PostgreSQL + Patroni. ื™ืžืคึผืœืขืžืขื ื˜ืึทื˜ื™ืึธืŸ ื“ืขืจืคืึทืจื•ื ื’

ื™ืžืคึผืœืึทืžืขื ื˜ื™ื ื’ PgBouncer

ื‘ืฉืขืช ืžื™ืจ ื–ืขื ืขืŸ ืืจื™ื‘ืขืจื’ืขืคืืจืŸ, ื“ื™ ืคึผืจืึธื“ื•ืงื˜ ืื™ื– ืื•ื™ืš ื“ืขื•ื•ืขืœืึธืคึผื™ื ื’: ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ื ื™ืฆืขืจืก ืื•ืŸ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืกืขืจื•ื•ืขืจืก ื•ื•ืึธืก ื’ืขืืจื‘ืขื˜ ืžื™ื˜ PostgreSQL ื’ืขื•ื•ืืงืกืŸ, ืื•ืŸ ืžื™ืจ ืื ื’ืขื”ื•ื™ื‘ืŸ ืฆื• ืœื•ื™ืคืŸ ืื•ื™ืก ืคื•ืŸ ืงืึทื ืขืงืฉืึทื ื–. PostgreSQL ืงืจื™ื™ื™ืฅ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ืคึผืจืึธืฆืขืก ืคึฟืึทืจ ื™ืขื“ืขืจ ืงืฉืจ ืื•ืŸ ืงืึทื ืกื•ืžื– ืจืขืกื•ืจืกืŸ. ืื™ืจ ืงืขื ืขืŸ ืคืึทืจื’ืจืขืกืขืจืŸ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืงืึทื ืขืงืฉืึทื ื– ืฆื• ืึท ื–ื™ื›ืขืจ ืคื•ื ื˜, ืึทื ื“ืขืจืฉ ืขืก ืื™ื– ืึท ื’ืขืœืขื’ื ื”ื™ื™ึทื˜ ืึทื– ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ื•ื•ืขื˜ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ ืึธืคึผื˜ื™ืžืึทืœืœื™. ื“ื™ ื™ื“ืขืึทืœ ืึธืคึผืฆื™ืข ืื™ืŸ ืึทื–ืึท ืึท ืกื™ื˜ื•ืึทืฆื™ืข ืื™ื– ืฆื• ืกืขืœืขืงื˜ื™ืจืŸ ืึท ืงืฉืจ ืคืึทืจื•ื•ืึทืœื˜ืขืจ ื•ื•ืึธืก ื•ื•ืขื˜ ืฉื˜ื™ื™ืŸ ืื™ืŸ ืคืจืึธื ื˜ ืคื•ืŸ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก.

ืžื™ืจ ื”ืึธื‘ืŸ ืฆื•ื•ื™ื™ ืึธืคึผืฆื™ืขืก ืคึฟืึทืจ ื“ื™ ืงืฉืจ ืคืึทืจื•ื•ืึทืœื˜ืขืจ: Pgpool ืื•ืŸ PgBouncer. ืึธื‘ืขืจ ื“ืขืจ ืขืจืฉื˜ืขืจ ืงืขืŸ ื ื™ืฉื˜ ืฉื˜ื™ืฆืŸ ื“ื™ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธื ืึทืœ ืžืึธื“ืข ืคื•ืŸ โ€‹โ€‹ืืจื‘ืขื˜ืŸ ืžื™ื˜ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก, ืึทื–ื•ื™ ืžื™ืจ ืื•ื™ืกื“ืขืจื•ื•ื™ื™ืœื˜ PgBouncer.

ืžื™ืจ ื”ืึธื‘ืŸ ืงืึทื ืคื™ื’ื™ืขืจื“ ื“ื™ ืคืืœื’ืขื ื“ืข ืึทืจื‘ืขื˜ ืกื›ืขืžืข: ืื•ื ื“ื–ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืึทืงืกืขืก ืื™ื™ืŸ PgBouncer, ื”ื™ื ื˜ืขืจ ื•ื•ืึธืก ืขืก ื–ืขื ืขืŸ PostgreSQL ื”ืืจืŸ, ืื•ืŸ ื”ื™ื ื˜ืขืจ ื™ืขื“ืขืจ ื‘ืขืœ ืขืก ืื™ื– ืื™ื™ืŸ ืจืขืคึผืœื™ืงืข ืžื™ื˜ ื™ื™ืกื™ื ื’ืงืจืึทื ืึทืก ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ.
ืคืึทื™ืœืึธื•ื•ืขืจ ืงื ื•ื™ืœ PostgreSQL + Patroni. ื™ืžืคึผืœืขืžืขื ื˜ืึทื˜ื™ืึธืŸ ื“ืขืจืคืึทืจื•ื ื’

ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ื˜, ืžื™ืจ ืงืขืŸ ื ื™ืฉื˜ ืงืจืึธื ื“ื™ ื’ืื ืฆืข ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ืึทื˜ืŸ ืื™ืŸ PostgreSQL ืื•ืŸ ื“ื™ ื’ื™ื›ืงื™ื™ึทื˜ ืคื•ืŸ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ืื™ื– ื’ืขื•ื•ืขืŸ ื•ื•ื™ื›ื˜ื™ืง ืคึฟืึทืจ ืื•ื ื“ื–, ืึทื–ื•ื™ ืžื™ืจ ืกื˜ืึทืจื˜ืขื“ ืฉืึทืจื“ื™ื ื’ PostgreSQL ืื•ื™ืฃ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืžื“ืจื’ื”. ื“ืขืจ ืกื›ืขืžืข ื“ื™ืกืงืจื™ื™ื‘ื“ ืื•ื™ื‘ืŸ ืื™ื– ืœืขืคื™ืขืจืขืš ื‘ืึทืงื•ื•ืขื ืคึฟืึทืจ ื“ืขื: ื•ื•ืขืŸ ืึทื“ื™ื ื’ ืึท ื ื™ื™ึทืข PostgreSQL ืฉืึทืจื“, ืขืก ืื™ื– ื’ืขื ื•ื’ ืฆื• ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื“ื™ PgBouncer ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื•ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืงืขื ืขืŸ ื’ืœื™ื™ืš ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ ื“ื™ ื ื™ื™ึทืข ืฉืึทืจื“.

PgBouncer ืฉื•ืœื“ ื˜ืึธืœืขืจืึทื ืฅ

ื“ืขืจ ืกื›ืขืžืข ื’ืขืืจื‘ืขื˜ ื‘ื™ื– ื“ืขืจ ื‘ืœื•ื™ื– PgBouncer ื‘ื™ื™ึทืฉืคึผื™ืœ ืื™ื– ื’ืขืฉื˜ืืจื‘ืŸ. ืžื™ืจ ื–ืขื ืขืŸ ืื™ืŸ AWS, ื•ื•ื• ืึทืœืข ื™ื ืกื˜ืึทื ืกื™ื– ื–ืขื ืขืŸ ืœืึธื ื˜ืฉื˜ ืื•ื™ืฃ ื™ื™ึทื–ื ื•ื•ืึทืจื’ ื•ื•ืึธืก ืคึผื™ืจื™ืึทื“ื™ืงืœื™ ืฉื˜ืึทืจื‘ืŸ. ืื™ืŸ ืึทื–ืึท ืงืึทืกืขืก, ื“ืขืจ ื‘ื™ื™ึทืฉืคึผื™ืœ ืคืฉื•ื˜ ืžืึทืš ืฆื• ื ื™ื™ึท ื™ื™ึทื–ื ื•ื•ืึทืจื’ ืื•ืŸ ืึทืจื‘ืขื˜ ื•ื•ื™ื“ืขืจ. ื“ืึธืก ืื™ื– ื’ืขืฉืขืŸ ืžื™ื˜ PgBouncer, ืึธื‘ืขืจ ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืึทื ืึทื•ื•ื™ื™ืœืึทื‘ืึทืœ. ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ื“ืขื ืงืจืึทืš ืื™ื– ื’ืขื•ื•ืขืŸ ืึทื– ืื•ื ื“ื–ืขืจ ื“ื™ื ืกื˜ ืื™ื– ื’ืขื•ื•ืขืŸ ืึทื ืึทื•ื•ื™ื™ืœืึทื‘ืึทืœ ืคึฟืึทืจ 25 ืžื™ื ื•ื˜. ืคึฟืึทืจ ืึทื–ืึท ืกื™ื˜ื•ืึทื˜ื™ืึธื ืก, AWS ืจืขืงืึทืžืขื ื“ื– ื ื™ืฆืŸ ื™ื‘ืขืจื™ืงื™ื™ึทื˜ ืื•ื™ืฃ ื“ื™ ื‘ืึทื ื™ืฆืขืจ ื–ื™ื™ึทื˜, ื•ื•ืึธืก ืžื™ืจ ื”ืึธื‘ืŸ ื ื™ืฉื˜ ื™ื ืกื˜ืจื•ืžืขื ื˜ ืื™ืŸ ื“ืขืจ ืฆื™ื™ื˜.

ื ืึธืš ื“ืขื, ืžื™ืจ ืขืžืขืก ื’ืขื“ืึทื ืง ื•ื•ืขื’ืŸ ื“ื™ ืฉื•ืœื“ ื˜ืึธืœืขืจืึทื ืฅ ืคื•ืŸ PgBouncer ืื•ืŸ PostgreSQL ืงืœืึทืกื˜ืขืจื–, ื•ื•ื™ื™ึทืœ ืึท ืขื ืœืขืš ืกื™ื˜ื•ืึทืฆื™ืข ืงืขืŸ ืคึผืึทืกื™ืจืŸ ื•ื•ื™ื“ืขืจ ืžื™ื˜ ืงื™ื™ืŸ ื‘ื™ื™ึทืฉืคึผื™ืœ ืื™ืŸ ืื•ื ื“ื–ืขืจ AWS ื—ืฉื‘ื•ืŸ.

ืžื™ืจ ื”ืึธื‘ืŸ ื’ืขื‘ื•ื™ื˜ ื“ื™ PgBouncer ืฉื•ืœื“ ื˜ืึธืœืขืจืึทื ืฅ ืกื›ืขืžืข ื•ื•ื™ ื’ื™ื™ื˜: ืึทืœืข ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืกืขืจื•ื•ืขืจืก ืึทืงืกืขืก ื“ื™ ื ืขื˜ื•ื•ืึธืจืง ืœืึธื•ื“ ื‘ืึทืœืึทื ืกืขืจ, ื”ื™ื ื˜ืขืจ ื•ื•ืึธืก ืขืก ื–ืขื ืขืŸ ืฆื•ื•ื™ื™ PgBouncers. ื™ืขื“ืขืจ ืคื•ืŸ ื“ื™ PgBouncers ืงื•ืงื˜ ืื•ื™ืฃ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ื‘ืขืœ PostgreSQL ืคื•ืŸ ื™ืขื“ืขืจ ืฉืึทืจื“. ืื•ื™ื‘ ื“ื™ ืกื™ื˜ื•ืึทืฆื™ืข ืžื™ื˜ ืึท AWS ื‘ื™ื™ึทืฉืคึผื™ืœ ืงืจืึทืš ืจื™ืคึผื™ืฅ, ืึทืœืข ืคืึทืจืงืขืจ ืื™ื– ืจื™ื“ืขืจืขืงื˜ื™ื“ ื“ื•ืจืš ืืŸ ืื ื“ืขืจ PgBouncer. ื ืขืฅ ืœืึธื“ืŸ ื‘ืึทืœืึทื ืกืขืจ ืฉื•ืœื“ ื˜ืึธืœืขืจืึทื ืฅ ืื™ื– ืฆื•ื’ืขืฉื˜ืขืœื˜ ื“ื•ืจืš AWS.

ื“ืขืจ ืกื›ืขืžืข ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืœื™ื™ื›ื˜ ืœื™ื™ื’ืŸ ื ื™ื™ึทืข PgBouncer ืกืขืจื•ื•ืขืจืก.
ืคืึทื™ืœืึธื•ื•ืขืจ ืงื ื•ื™ืœ PostgreSQL + Patroni. ื™ืžืคึผืœืขืžืขื ื˜ืึทื˜ื™ืึธืŸ ื“ืขืจืคืึทืจื•ื ื’

ืฉืึทืคึฟืŸ ืึท PostgreSQL ืคืึทื™ืœืึธื•ื•ืขืจ ืงืœืึทืกื˜ืขืจ

ื•ื•ืขืŸ ืกืึทืœื•ื•ื™ื ื’ ื“ืขื ืคึผืจืึธื‘ืœืขื, ืžื™ืจ ื‘ืึทื˜ืจืึทื›ื˜ืŸ ืคืึทืจืฉื™ื“ืขื ืข ืึธืคึผืฆื™ืขืก: ื–ื™ืš-ื’ืขืฉืจื™ื‘ืŸ ืคืึทื™ืœืึธื•ื•ืขืจ, ืจืขืคึผืžื’ืจ, AWS RDS, Patroni.

ืึทืœื™ื™ื -ื’ืขืฉืจื™ื‘ืŸ ืกืงืจื™ืคึผืก

ื–ื™ื™ ืงืขื ืขืŸ ืžืึธื ื™ื˜ืึธืจ ื“ื™ ืึทืจื‘ืขื˜ ืคื•ืŸ ื“ื™ ื‘ืขืœ ืื•ืŸ, ืื•ื™ื‘ ืขืก ืคื™ื™ืœื–, ื”ืขื›ืขืจืŸ ื“ื™ ืจืขืคึผืœื™ืงืข ืฆื• ื“ื™ ื‘ืขืœ ืื•ืŸ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื“ื™ PgBouncer ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ.

ื“ื™ ืึทื“ื•ื•ืึทื ื˜ื™ื“ื–ืฉื™ื– ืคื•ืŸ ื“ืขื ืฆื•ื’ืึทื ื’ ื–ืขื ืขืŸ ืžืึทืงืกื™ืžื•ื ืคึผืึทืฉื˜ืขืก, ื•ื•ื™ื™ึทืœ ืื™ืจ ืฉืจื™ื™ึทื‘ืŸ ื“ื™ ืกืงืจื™ืคึผืก ื–ื™ืš ืื•ืŸ ืคึฟืึทืจืฉื˜ื™ื™ืŸ ืคึผื•ื ืงื˜ ื•ื•ื™ ื–ื™ื™ ืึทืจื‘ืขื˜.

ืงืึธื ืก:

  • ื“ืขืจ ื‘ืขืœ ืงืขืŸ ื ื™ืฉื˜ ื”ืึธื‘ืŸ ื’ืขืฉื˜ืืจื‘ืŸ; ืึทื ืฉื˜ืึธื˜, ืขืก ืงืขืŸ ื”ืึธื‘ืŸ ื’ืขื•ื•ืขืŸ ืึท ื ืขืฅ ื“ื•ืจื›ืคืึทืœ. ืคื™ื™ืœืึธื•ื•ืขืจ, ื ื™ื˜ ื•ื•ื™ืกื ื“ื™ืง ืคื•ืŸ ื“ืขื, ื•ื•ืขื˜ ื”ืขื›ืขืจืŸ ื“ื™ ืจืขืคึผืœื™ืงืข ืฆื• ื“ื™ ื‘ืขืœ, ืื•ืŸ ื“ืขืจ ืึทืœื˜ ื‘ืขืœ ื•ื•ืขื˜ ืคืึธืจื–ืขืฆืŸ ืฆื• ืึทืจื‘ืขื˜ืŸ. ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ืžื™ืจ ื•ื•ืขืœืŸ ื‘ืึทืงื•ืžืขืŸ ืฆื•ื•ื™ื™ ืกืขืจื•ื•ืขืจืก ืื™ืŸ ื“ื™ ื‘ืขืœ ืจืึธืœืข ืื•ืŸ ืžื™ืจ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ื•ื•ื™ืกืŸ ื•ื•ืึธืก ืคื•ืŸ ื–ื™ื™ ื”ืื˜ ื“ื™ ืœืขืฆื˜ืข ืงืจืึทื ื˜ ื“ืึทื˜ืŸ. ื“ื™ ืกื™ื˜ื•ืึทืฆื™ืข ืื™ื– ืื•ื™ืš ื’ืขืจื•ืคืŸ ืฉืคึผืึทืœื˜ืŸ-ืžืึทืจืš;
  • ืžื™ ืจ ื–ืขื ืข ืŸ ื’ืขื‘ืœื™ื‘ ืŸ ื ืŸ ืขื ื˜ืคืขืจ . ืื™ืŸ ืื•ื ื“ื–ืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืขืก ืื™ื– ืึท ื‘ืขืœ ืื•ืŸ ืื™ื™ืŸ ืจืขืคึผืœื™ืงืข, ื ืึธืš ืกื•ื•ื™ื˜ืฉื™ื ื’ ื“ื™ ืจืขืคึผืœื™ืงืข ืื™ื– ืคึผืจืึธืžืึธื˜ืขื“ ืฆื• ื“ื™ ื‘ืขืœ ืื•ืŸ ืžื™ืจ ื”ืึธื‘ืŸ ื ื™ื˜ ืžืขืจ ืจืขืคึผืœืึทืงืึทื–, ืึทื–ื•ื™ ืžื™ืจ ื”ืึธื‘ืŸ ืฆื• ืžืึทื ื™ื•ืึทืœื™ ืœื™ื™ื’ืŸ ืึท ื ื™ื™ึทืข ืจืขืคึผืœื™ืงืข;
  • ืžื™ืจ ื“ืึทืจืคึฟืŸ ื ืึธืš ืžืึธื ื™ื˜ืึธืจื™ื ื’ ืคื•ืŸ ืคื™ื™ืœืึธื•ื•ืขืจ ืึธืคึผืขืจืึทืฆื™ืข, ืื•ืŸ ืžื™ืจ ื”ืึธื‘ืŸ 12 PostgreSQL ืฉืึทืจื“ื–, ื•ื•ืึธืก ืžื™ื˜ืœ ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืžืึธื ื™ื˜ืึธืจ 12 ืงืœืึทืกื˜ืขืจื–. ื•ื•ืขืŸ ื™ื ืงืจื™ืกื™ื ื’ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืฉืึทืจื“ื–, ืื™ืจ ืžื•ื–ืŸ ืื•ื™ืš ื’ืขื“ืขื ืงืขืŸ ืฆื• ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื“ื™ ืคื™ื™ืœืึธื•ื•ืขืจ.

ื ื–ื™ืš-ื’ืขืฉืจื™ื‘ืŸ ืคืึทื™ืœืึธื•ื•ืขืจ ืงื•ืงื˜ ื–ื™ื™ืขืจ ืงืึธืžืคึผืœื™ืฆื™ืจื˜ ืื•ืŸ ืจื™ืงื•ื•ื™ื™ืขืจื– ื ื™ื˜-ื ื™ื˜-ื ื™ื˜ื•ื•ื™ืึทืœ ืฉื˜ื™ืฆืŸ. ืžื™ื˜ ืื™ื™ืŸ PostgreSQL ืงื ื•ื™ืœ, ื“ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ื™ ืกื™ืžืคึผืœืึทืกื˜ ืึธืคึผืฆื™ืข, ืึธื‘ืขืจ ืขืก ืื™ื– ื ื™ืฉื˜ ื•ื•ืึธื’, ืึทื–ื•ื™ ืขืก ืื™ื– ื ื™ืฉื˜ ืคึผืึทืกื™ืง ืคึฟืึทืจ ืื•ื ื“ื–.

ืจืขืžื’ืจ

ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ืžืึทื ืึทื’ืขืจ ืคึฟืึทืจ PostgreSQL ืงืœืึทืกื˜ืขืจื–, ื•ื•ืึธืก ืงืขื ืขืŸ ืคื™ืจืŸ ื“ื™ ืึธืคึผืขืจืึทืฆื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ืึท PostgreSQL ืงื ื•ื™ืœ. ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ื˜, ืขืก ื˜ื•ื˜ ื ื™ืฉื˜ ื”ืึธื‘ืŸ ืึธื˜ืึทืžืึทื˜ื™ืง ืคื™ื™ืœืึธื•ื•ืขืจ ืื•ื™ืก ืคื•ืŸ ื“ื™ ืงืขืกื˜ืœ, ืึทื–ื•ื™ ืฆื• ืึทืจื‘ืขื˜ืŸ ืื™ืจ ื•ื•ืขื˜ ื“ืึทืจืคึฟืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ื“ื™ื™ืŸ ืื™ื™ื’ืŸ "ืจืึทืคึผืขืจ" ืื•ื™ืฃ ืฉืคึผื™ืฅ ืคื•ืŸ ื“ื™ ืคืึทืจื˜ื™ืง ืœื™ื™ื–ื•ื ื’. ืึทื–ื•ื™ ืึทืœืฅ ืงืขืŸ ื–ื™ื™ืŸ ืืคื™ืœื• ืžืขืจ ืงืึธืžืคึผืœื™ืฆื™ืจื˜ ื•ื•ื™ ืžื™ื˜ ื–ื™ืš-ื’ืขืฉืจื™ื‘ืŸ ืกืงืจื™ืคึผืก, ื•ื•ืึธืก ืื™ื– ื•ื•ืึธืก ืžื™ืจ ื”ืึธื‘ืŸ ื ื™ืฉื˜ ืืคื™ืœื• ืคึผืจื•ื‘ื™ืจืŸ ืจืขืคึผืžื’ืจ.

AWS RDS

ืขืก ืฉื˜ื™ืฆื˜ ืึทืœืฅ ืžื™ืจ ื“ืึทืจืคึฟืŸ, ืงืขื ืขืŸ ืžืึทื›ืŸ ื‘ืึทืงืึทืคึผืก ืื•ืŸ ืฉื˜ื™ืฆื˜ ืึท ื‘ืขืงืŸ ืคื•ืŸ ืงืึทื ืขืงืฉืึทื ื–. ืขืก ื”ืื˜ ืึธื˜ืึทืžืึทื˜ื™ืง ืกื•ื•ื™ื˜ืฉื™ื ื’: ื•ื•ืขืŸ ื“ืขืจ ื‘ืขืœ ื“ื™ืขืก, ื“ื™ ืจืขืคึผืœื™ืงืข ื•ื•ืขืจื˜ ื“ืขืจ ื ื™ื™ึท ื‘ืขืœ, ืื•ืŸ AWS ืขื ื“ืขืจื•ื ื’ืขืŸ ื“ื™ ื“ื ืก ืจืขืงืึธืจื“ ืฆื• ื“ื™ ื ื™ื™ึทืข ื‘ืขืœ, ื‘ืฉืขืช ื“ื™ ืจืขืคึผืœืึทืงืึทื– ืงืขื ืขืŸ ื–ื™ื™ืŸ ืœื™ื’ืŸ ืื™ืŸ ืคืึทืจืฉื™ื“ืขื ืข ืึทื–.

ื“ื™ ื“ื™ืกืึทื“ื•ื•ืึทื ื˜ื™ื“ื–ืฉื™ื– ืึทืจื™ื™ึทื ื ืขืžืขืŸ ื“ื™ ืคืขืœืŸ ืคื•ืŸ ืคื™ื™ึทืŸ ืกืขื˜ื˜ื™ื ื’ืก. ื•ื•ื™ ืึท ื‘ื™ื™ืฉืคึผื™ืœ ืคื•ืŸ ืคื™ื™ืŸ-ื˜ื•ื ื™ื ื’: ืื•ื ื“ื–ืขืจ ื™ื ืกื˜ืึทื ืกื™ื– ื”ืึธื‘ืŸ ืจื™ืกื˜ืจื™ืงืฉืึทื ื– ืคึฟืึทืจ 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 ืžื™ื˜ ื’ื•ื˜ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ, ืึธื˜ืึทืžืึทื˜ื™ืง ืคื™ื™ืœืึธื•ื•ืขืจ ืื•ืŸ ืžืงื•ืจ ืงืึธื“ ืื•ื™ืฃ ื’ื™ื˜ื”ื•ื‘.

ืคึผืจืึธืก ืคื•ืŸ Patroni:

  • ื™ืขื“ืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคึผืึทืจืึทืžืขื˜ืขืจ ืื™ื– ื“ื™ืกืงืจื™ื™ื‘ื“, ืขืก ืื™ื– ืงืœืึธืจ ื•ื•ื™ ืขืก ืึทืจื‘ืขื˜;
  • ืึธื˜ืึทืžืึทื˜ื™ืง ืคื™ื™ืœืึธื•ื•ืขืจ ืึทืจื‘ืขื˜ ืื•ื™ืก ืคื•ืŸ ื“ื™ ืงืขืกื˜ืœ;
  • ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ ืคึผื™ื˜ื”ืึธืŸ, ืื•ืŸ ื–ื™ื ื˜ ืžื™ืจ ืึทืœื™ื™ืŸ ืฉืจื™ื™ึทื‘ืŸ ืึท ืคึผืœืึทืฅ ืื™ืŸ ืคึผื™ื˜ื”ืึธืŸ, ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืจื™ื ื’ืขืจ ืคึฟืึทืจ ืื•ื ื“ื– ืฆื• ื”ืึทื ื“ืœืขืŸ ืžื™ื˜ ืคืจืื‘ืœืขืžืขืŸ ืื•ืŸ, ื˜ืึธืžืขืจ, ืึทืคึฟื™ืœื• ื”ืขืœืคืŸ ื“ื™ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜;
  • ื’ืึธืจ ืงืึธื ื˜ืจืึธืœืก PostgreSQL, ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื˜ื•ื™ืฉืŸ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื•ื™ืฃ ืึทืœืข ื ืึธื•ื“ื– ืคื•ืŸ ื“ืขื ืงื ื•ื™ืœ ืื™ืŸ ืึทืžืึธืœ, ืื•ืŸ ืื•ื™ื‘ ืึทืคึผืœื™ื™ื™ื ื’ ื“ื™ ื ื™ื™ึทืข ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืจื™ืงื•ื•ื™ื™ืขืจื– ืึท ืจื™ืกื˜ืึทืจื˜ ืคื•ืŸ ื“ืขื ืงื ื•ื™ืœ, ื“ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื˜ืืŸ ื•ื•ื™ื“ืขืจ ืžื™ื˜ Patroni.

ืงืึธื ืก:

  • ืขืก ืื™ื– ื ื™ืฉื˜ ืงืœืึธืจ ืคื•ืŸ ื“ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ื•ื•ื™ ืฆื• ืึทืจื‘ืขื˜ืŸ ืจื™ื›ื˜ื™ืง ืžื™ื˜ PgBouncer. ื›ืึธื˜ืฉ ืขืก ืื™ื– ืฉื•ื•ืขืจ ืฆื• ืจื•ืคืŸ ื“ืขื ืึท ืžื™ื ื•ืก, ื•ื•ื™ื™ึทืœ Patroni ืก ืึทืจื‘ืขื˜ ืื™ื– ืฆื• ืคื™ืจืŸ PostgreSQL, ืื•ืŸ ื•ื•ื™ ืงืึทื ืขืงืฉืึทื ื– ืฆื• Patroni ื•ื•ืขื˜ ืึทืจื‘ืขื˜ืŸ ืื™ื– ืฉื•ื™ืŸ ืื•ื ื“ื–ืขืจ ืคึผืจืึธื‘ืœืขื;
  • ืขืก ื–ืขื ืขืŸ ื•ื•ื™ื™ื ื™ืง ื‘ื™ื™ืฉืคื™ืœืŸ ืคื•ืŸ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ Patroni ืื•ื™ืฃ ื’ืจื•ื™ืก ื•ื•ืึธื’, ื‘ืฉืขืช ืขืก ื–ืขื ืขืŸ ืคื™ืœืข ื‘ื™ื™ืฉืคื™ืœืŸ ืคื•ืŸ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคึฟื•ืŸ ืงืจืึทืฆืŸ.

ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ืžื™ืจ ืื•ื™ืกื“ืขืจื•ื•ื™ื™ืœื˜ Patroni ืฆื• ืฉืึทืคึฟืŸ ืึท ืคืึทื™ืœืึธื•ื•ืขืจ ืงื ื•ื™ืœ.

ืคึผืึทื˜ืจืึธื ื™ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคึผืจืึธืฆืขืก

ืื™ื™ื“ืขืจ Patroni, ืžื™ืจ ื”ืึธื‘ืŸ 12 PostgreSQL ืฉืึทืจื“ื– ืื™ืŸ ืึท ืื™ื™ืŸ ื‘ืขืœ ืื•ืŸ ืื™ื™ืŸ ืจืขืคึผืœื™ืงืข ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืžื™ื˜ ื™ื™ืกื™ื ื’ืงืจืึทื ืึทืก ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ. ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืกืขืจื•ื•ืขืจืก ื”ืึธื‘ืŸ ืึทืงืกืขืกื˜ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื– ื“ื•ืจืš ืึท ื ืขื˜ื•ื•ืึธืจืง ืœืึธื•ื“ ื‘ืึทืœืึทื ืกืขืจ, ื”ื™ื ื˜ืขืจ ื•ื•ืึธืก ืขืก ื–ืขื ืขืŸ ื’ืขื•ื•ืขืŸ ืฆื•ื•ื™ื™ ื™ื ืกื˜ืึทื ืกื™ื– ืžื™ื˜ PgBouncer, ืื•ืŸ ื”ื™ื ื˜ืขืจ ื–ื™ื™ ื–ืขื ืขืŸ ื’ืขื•ื•ืขืŸ ืึทืœืข ื“ื™ PostgreSQL ืกืขืจื•ื•ืขืจืก.
ืคืึทื™ืœืึธื•ื•ืขืจ ืงื ื•ื™ืœ PostgreSQL + Patroni. ื™ืžืคึผืœืขืžืขื ื˜ืึทื˜ื™ืึธืŸ ื“ืขืจืคืึทืจื•ื ื’

ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ Patroni, ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืื•ื™ืกืงืœื™ื™ึทื‘ืŸ ืึท ืคืึทืจืฉืคึผืจื™ื™ื˜ื•ื ื’ ืงื ื•ื™ืœ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืกื˜ืึธืจื™ื“ื–ืฉ. Patroni ืึทืจื‘ืขื˜ ืžื™ื˜ ื“ื™ืกื˜ืจื™ื‘ื™ื•ื˜ื™ื“ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืกื˜ืึธืจื™ื“ื–ืฉ ืกื™ืกื˜ืขืžืขืŸ ืึทื–ืึท ื•ื•ื™ ืขื˜ืง, ื–ืึธืึธืงืขืขืคึผืขืจ, ืงืึธื ืกื•ืœ. ืžื™ืจ ื”ืึธื‘ืŸ ืึท ืคื•ืœ-ืคืœืขื“ื–ืฉื“ ืงืึธื ืกื•ืœ ืงื ื•ื™ืœ ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข, ื•ื•ืึธืก ืึทืจื‘ืขื˜ ืื™ืŸ ืงืึทื ื“ื–ืฉืึทื ื’ืงืฉืึทืŸ ืžื™ื˜ ื•ื•ืึธืœื˜ ืื•ืŸ ืžื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื ื•ืฆืŸ ืขืก ืขื ื™ืžืึธืจ. ื ื’ืจื•ื™ืก ืกื™ื‘ื” ืฆื• ืึธื ื”ื™ื™ื‘ืŸ ื ื™ืฆืŸ ืงืึธื ืกื•ืœ ืคึฟืึทืจ ื–ื™ื™ืŸ ื‘ื“ืขื” ืฆื™ืœ.

ื•ื•ื™ Patroni ืึทืจื‘ืขื˜ ืžื™ื˜ ืงืึธื ืกื•ืœ

ืžื™ืจ ื”ืึธื‘ืŸ ืึท ืงืึธื ืกื•ืœ ืงื ื•ื™ืœ, ื•ื•ืึธืก ื‘ืืฉื˜ื™ื™ื˜ ืคื•ืŸ ื“ืจื™ื™ึท ื ืึธื•ื“ื–, ืื•ืŸ ืึท ืคึผืึทื˜ืจืึธื ื™ ืงื ื•ื™ืœ, ื•ื•ืึธืก ื‘ืืฉื˜ื™ื™ื˜ ืคื•ืŸ ืึท ืคื™ืจืขืจ ืื•ืŸ ืึท ืจืขืคึผืœื™ืงืข (ืื™ืŸ ืคึผืึทื˜ืจืึธื ื™, ื“ืขืจ ื‘ืขืœ ืื™ื– ื’ืขืจื•ืคืŸ ื“ื™ ืงืœืึทืกื˜ืขืจ ืคื™ืจืขืจ, ืื•ืŸ ื“ื™ ืกืœืึทื•ื•ืขืก ื–ืขื ืขืŸ ืจืขืคึผืœื™ืงืขืก). ื™ืขื“ืขืจ Patroni ืงื ื•ื™ืœ ื‘ื™ื™ึทืฉืคึผื™ืœ ืฉื™ืงื˜ ืงืขืกื™ื™ื“ืขืจ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื“ื™ ืฉื˜ืึทื˜ ืคื•ืŸ ื“ื™ ืงื ื•ื™ืœ ืฆื• ืงืึธื ืกื•ืœ. ื“ืขืจื™ื‘ืขืจ, ืคึฟื•ืŸ ืงืึธื ืกื•ืœ ืื™ืจ ืงืขื ืขืŸ ืฉื˜ืขื ื“ื™ืง ื’ืขืคึฟื™ื ืขืŸ ื“ื™ ืงืจืึทื ื˜ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ Patroni ืงื ื•ื™ืœ ืื•ืŸ ื•ื•ืขืจ ืื™ื– ื“ืขืจ ืคื™ืจืขืจ ืื™ืŸ ื“ืขื ืžืึธืžืขื ื˜.

ืคืึทื™ืœืึธื•ื•ืขืจ ืงื ื•ื™ืœ PostgreSQL + Patroni. ื™ืžืคึผืœืขืžืขื ื˜ืึทื˜ื™ืึธืŸ ื“ืขืจืคืึทืจื•ื ื’

ืฆื• ืคืึทืจื‘ื™ื ื“ืŸ Patroni ืฆื• ืงืึธื ืกื•ืœ, ื ืึธืจ ืœืขืจื ืขืŸ ื“ื™ ื‘ืึทืึทืžื˜ืขืจ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ, ื•ื•ืึธืก ื–ืื’ื˜ ืึทื– ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ืขื ื‘ืึทืœืขื‘ืึธืก ืื™ืŸ 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 }}

ืื‘ืขืจ ืขืก ื˜ื•ื˜ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ ืึทื–ื•ื™. ื‘ื™ื™ ืกื˜ืึทืจื˜ืึทืคึผ, Patroni ืงืขืŸ ื ื™ืฉื˜ ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ืงืึธื ืกื•ืœ ื•ื•ื™ื™ึทืœ ืขืก ื ืึธืš ืคืจื•ื•ื•ื˜ ืฆื• ื’ื™ื™ืŸ ื“ื•ืจืš http.

ื“ื™ Patroni ืžืงื•ืจ ืงืึธื“ ื’ืขื”ืึธืœืคึฟืŸ ืกืึธืœื•ื•ืข ื“ืขื ืคึผืจืึธื‘ืœืขื. ืขืก ืื™ื– ื’ื•ื˜ ืึทื– ืขืก ืื™ื– ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ ืคึผื™ื˜ื”ืึธืŸ. ืขืก ื˜ื•ืจื ืก ืื•ื™ืก ืึทื– ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ืคึผืึทืจืึทืžืขื˜ืขืจ ืื™ื– ื ื™ืฉื˜ ืคึผืึทืจืกืขื“ ืื™ืŸ ืงื™ื™ืŸ ื•ื•ืขื’, ืื•ืŸ ื“ืขืจ ืคึผืจืึธื˜ืึธืงืึธืœ ืžื•ื–ืŸ ื–ื™ื™ืŸ ืกืคึผืขืกื™ืคื™ืขื“ ืื™ืŸ ื“ื™ ืกื›ืขืžืข. ื“ืึธืก ืื™ื– ื•ื•ื™ ืึท ืืจื‘ืขื˜ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื‘ืœืึธืง ืคึฟืึทืจ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ืงืึธื ืกื•ืœ ืงื•ืงื˜ ื•ื•ื™ ืคึฟืึทืจ ืื•ื ื“ื–:

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

ืงืึธื ืกื•ืœ- ืžื•ืกื˜ืขืจ

ืึทื–ื•ื™, ืžื™ืจ ื”ืึธื‘ืŸ ืื•ื™ืกื“ืขืจื•ื•ื™ื™ืœื˜ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืกื˜ืึธืจื™ื“ื–ืฉ. ืื™ืฆื˜ ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื•ื•ื™ PgBouncer ื•ื•ืขื˜ ื‘ืึทืฉื˜ื™ืžืขืŸ ื–ื™ื™ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื•ื•ืขืŸ ื“ืขืจ ืคื™ืจืขืจ ืขื ื“ืขืจื•ื ื’ืขืŸ ืื™ืŸ ื“ื™ Patroni ืงื ื•ื™ืœ. ืขืก ืื™ื– ืงื™ื™ืŸ ืขื ื˜ืคืขืจ ืฆื• ื“ืขื ืงืฉื™ื ืื™ืŸ ื“ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ, ื•ื•ื™ื™ึทืœ ... ืื™ืŸ ืคึผืจื™ื ืฆื™ืคึผ, ืืจื‘ืขื˜ืŸ ืžื™ื˜ PgBouncer ืื™ื– ื ื™ืฉื˜ ื“ื™ืกืงืจื™ื™ื‘ื“ ื“ืึธืจื˜.

ืื™ืŸ ื–ื•ื›ืŸ ืคื•ืŸ ืึท ืœื™ื™ื–ื•ื ื’, ืžื™ืจ ื’ืขืคึฟื•ื ืขืŸ ืึทืŸ ืึทืจื˜ื™ืงืœ (ืฆื•ื ื‘ืึทื“ื•ื™ืขืจืŸ, ืื™ืš ื˜ืึธืŸ ื ื™ื˜ ื’ืขื“ืขื ืงืขืŸ ื“ืขื ื ืึธืžืขืŸ), ื•ื•ื• ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืขืฉืจื™ื‘ืŸ ืึทื– ืงืึธื ืกื•ืœ ืžื•ืกื˜ืขืจ ืื™ื– ื’ืขื•ื•ืขืŸ ื–ื™ื™ืขืจ ื ื•ืฆื™ืง ืื™ืŸ ืงืึทืžื‘ื™ื™ื ื™ื ื’ PgBouncer ืื•ืŸ Patroni. ื“ืขื ืคึผืจืึทืžืคึผื˜ื™ื“ ืื•ื ื“ื– ืฆื• ืœืขืจื ืขืŸ ื“ื™ ืึทืจื‘ืขื˜ ืคื•ืŸ ืงืึธื ืกื•ืœ-ื˜ืขืžืคึผืœืึทื˜ืข.

ืขืก ืคืืจืงืขืจื˜ ืื•ื™ืก ืึทื– ืงืึธื ืกื•ืœ ืžื•ืกื˜ืขืจ ืงืขืกื™ื™ื“ืขืจ ืžืึธื ื™ื˜ืึธืจืก ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ PostgreSQL ืงื ื•ื™ืœ ืื™ืŸ ืงืึธื ืกื•ืœ. ื•ื•ืขืŸ ื“ืขืจ ืคื™ืจืขืจ ืขื ื“ืขืจื•ื ื’ืขืŸ, ืขืก ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื˜ ื“ื™ PgBouncer ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื•ืŸ ืกืขื ื“ื– ืึท ื‘ืึทืคึฟืขืœ ืฆื• ืจื™ืœืึธื•ื“ ืขืก.

ืคืึทื™ืœืึธื•ื•ืขืจ ืงื ื•ื™ืœ PostgreSQL + Patroni. ื™ืžืคึผืœืขืžืขื ื˜ืึทื˜ื™ืึธืŸ ื“ืขืจืคืึทืจื•ื ื’

ื“ืขืจ ื’ืจื•ื™ืก ืžื™ื™ึทืœืข ืคื•ืŸ โ€‹โ€‹ื˜ืขืžืคึผืœืึทื˜ืข ืื™ื– ืึทื– ืขืก ืื™ื– ืกื˜ืึธืจื“ ื•ื•ื™ ืงืึธื“, ืึทื–ื•ื™ ื•ื•ืขืŸ ืึทื“ื™ื ื’ ืึท ื ื™ื™ึท ืฉืึทืจื“, ืขืก ืื™ื– ื’ืขื ื•ื’ ืฆื• ืžืึทื›ืŸ ืึท ื ื™ื™ึท ื™ื‘ืขืจื’ืขื‘ืŸ ืื•ืŸ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื“ื™ ืžื•ืกื˜ืขืจ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ, ืฉื˜ื™ืฆืŸ ื“ื™ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ื•ื•ื™ ืงืึธื“ ืคึผืจื™ื ืฆื™ืคึผ.

ื ื™ื• ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจ ืžื™ื˜ Patroni

ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ืžื™ืจ ื‘ืืงื•ืžืขืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืกื›ืขืžืข ืคื•ืŸ โ€‹โ€‹ืึทืจื‘ืขื˜:
ืคืึทื™ืœืึธื•ื•ืขืจ ืงื ื•ื™ืœ PostgreSQL + Patroni. ื™ืžืคึผืœืขืžืขื ื˜ืึทื˜ื™ืึธืŸ ื“ืขืจืคืึทืจื•ื ื’

ืึทืœืข ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืกืขืจื•ื•ืขืจืก ืึทืงืกืขืก ื“ื™ ื‘ืึทืœืึทื ืกืขืจ โ†’ ื”ื™ื ื˜ืขืจ ืขืก, ืขืก ื–ืขื ืขืŸ ืฆื•ื•ื™ื™ ืงืึทืกืขืก ืคื•ืŸ PgBouncer โ†’ ืื™ืŸ ื™ืขื“ืขืจ ื‘ื™ื™ึทืฉืคึผื™ืœ ืื™ื– ืคืœื™ืกื ื“ื™ืง ืึท ืงืึธื ืกื•ืœ ืžื•ืกื˜ืขืจ, ื•ื•ืึธืก ืžืึธื ื™ื˜ืึธืจืก ื“ื™ ืฉื˜ืึทื˜ ืคื•ืŸ ื™ืขื“ืขืจ Patroni ืงื ื•ื™ืœ ืื•ืŸ ืžืึธื ื™ื˜ืึธืจืก ื“ื™ ืฉื™ื™ื›ื•ืช ืคื•ืŸ ื“ื™ PgBouncer ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ, ื•ื•ืึธืก ื“ื™ืจืขืงื˜ืขื“ ืจื™ืงื•ื•ืขืก ืฆื• ื“ื™ ืงืจืึทื ื˜ ืคื™ืจืขืจ. ืคื•ืŸ ื™ืขื“ืขืจ ืงื ื•ื™ืœ.

ืžืึทื ื•ืึทืœ ื˜ืขืกื˜ื™ื ื’

ืื™ื™ื“ืขืจ ืœืึธื ื˜ืฉื™ื ื’ ืขืก ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข, ืžื™ืจ ืœืึธื ื˜ืฉื˜ ื“ืขื ืกื›ืขืžืข ืื•ื™ืฃ ืึท ืงืœื™ื™ืŸ ืคึผืจื•ื‘ื™ืจืŸ ืกื•ื•ื™ื•ื•ืข ืื•ืŸ ืึธืคึผื’ืขืฉื˜ืขืœื˜ ื“ื™ ืึธืคึผืขืจืึทืฆื™ืข ืคื•ืŸ โ€‹โ€‹ืึธื˜ืึทืžืึทื˜ื™ืง ืกื•ื•ื™ื˜ืฉื™ื ื’. ืžืข ืŸ ื”ื ื˜ ื’ืขืขืคื  ื˜ ื“ืข ื ื‘ืจืขื˜ , ื‘ืืฐืขื’ ื˜ ื“ืข ื ืกื˜ื™ืงืขืจ , ืื• ืŸ ืื™ ืŸ ื™ืขื ืข ื ืžืืžืขื  ื˜ ืดื’ืขื”ืจื’ืขื˜ ืด ื“ืข ื ืื ืคื™ืจืข ืจ ืคื• ืŸ ื“ืข ืจ ืืฉื›ื•ืœ . ืื™ืŸ AWS, ืึทืœืข ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื˜ืึธืŸ ืื™ื– ืงืขืจ ืึทื•ื•ืขืง ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ ื“ื•ืจืš ื“ื™ ืงืึทื ืกืึธื•ืœ.

ืคืึทื™ืœืึธื•ื•ืขืจ ืงื ื•ื™ืœ PostgreSQL + Patroni. ื™ืžืคึผืœืขืžืขื ื˜ืึทื˜ื™ืึธืŸ ื“ืขืจืคืึทืจื•ื ื’

ื“ืขืจ ืกื˜ื™ืงืขืจ ืื™ื– ืื•ืžื’ืขืงืขืจื˜ ื™ืŸ 10-20 ืกืขืงื•ื ื“ืขืก, ืื•ืŸ ื“ืขืžืึธืœื˜ ืื ื’ืขื”ื•ื™ื‘ืŸ ืฆื• ืจื™ืจืŸ ื ืึธืจืžืึทืœื™ ื•ื•ื™ื“ืขืจ. ื“ืึธืก ืžื™ื™ื ื˜ ืึทื– ื“ื™ Patroni ืงื ื•ื™ืœ ื’ืขืืจื‘ืขื˜ ืจื™ื›ื˜ื™ืง: ืขืก ื˜ืฉื™ื™ื ื“ื–ืฉื“ ื“ื™ ืคื™ืจืขืจ, ื’ืขืฉื™ืงื˜ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืฆื• ืงืึธื ืกื•ืœ, ืื•ืŸ ืงืึธื ืกื•ืœ-ื˜ืขืžืคึผืœ ื’ืœื™ื™ืš ื’ืขื ื•ืžืขืŸ ื“ื™ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข, ืจื™ืคึผืœื™ื™ืกื˜ ื“ื™ PgBouncer ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื•ืŸ ื’ืขืฉื™ืงื˜ ืึท ื‘ืึทืคึฟืขืœ ืฆื• ืจื™ืœืึธื•ื“.

ื•ื•ื™ ืฆื• ื‘ืœื™ื™ึทื‘ื  ืœืขื‘ืŸ ืื•ื ื˜ืขืจ ื”ื•ื™ืš ืžืึทืกืข ืื•ืŸ ื”ืึทืœื˜ืŸ ืžื™ื ื™ืžืึทืœ ื“ืึทื•ื ื˜ื™ื™ื?

ืึทืœืฅ ืึทืจื‘ืขื˜ ื‘ื™ืฉืœื™ื™ืžืขืก! ืึธื‘ืขืจ ื ื™ื™ึทืข ืคืจืื’ืขืก ืงื•ืžืขืŸ: ื•ื•ื™ ื•ื•ืขื˜ ืขืก ืึทืจื‘ืขื˜ ืื•ื ื˜ืขืจ ื”ื•ื™ืš ืžืึทืกืข? ื•ื•ื™ ืฆื• ื’ืขืฉื•ื•ื™ื ื“ ืื•ืŸ ื‘ืขืฉืึธืœืขื ืจืึธื•ืœื“ ืื•ื™ืก ืึทืœืฅ ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข?

ื“ื™ ืคึผืจืึธื‘ืข ืกื•ื•ื™ื•ื•ืข ืื•ื™ืฃ ื•ื•ืึธืก ืžื™ืจ ื“ื•ืจื›ืคื™ืจืŸ ืžืึทืกืข ื˜ืขืกื˜ื™ื ื’ ื”ืขืœืคึผืก ืื•ื ื“ื– ืขื ื˜ืคึฟืขืจืŸ ื“ื™ ืขืจืฉื˜ืขืจ ืงืฉื™ื. ืขืก ืื™ื– ื’ืึธืจ ื™ื™ื“ืขื ื™ืงืึทืœ ืฆื• ืคึผืจืึธื“ื•ืงืฆื™ืข ืื™ืŸ ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจ ืื•ืŸ ื”ืื˜ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ืคึผืจื•ื‘ื™ืจืŸ ื“ืึทื˜ืŸ, ื•ื•ืึธืก ืื™ื– ื‘ืขืขืจืขืš ื’ืœื™ื™ึทืš ืื™ืŸ ื‘ืึทื ื“ ืฆื• ืคึผืจืึธื“ื•ืงืฆื™ืข. ืžื™ืจ ื‘ืึทืฉืœื™ืกืŸ ืฆื• ื ืึธืจ "ื˜ื™ื™ื˜ืŸ" ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ PostgreSQL ื”ืืจืŸ ื‘ืขืฉืึทืก ื“ื™ ืคึผืจืึธื‘ืข ืื•ืŸ ื–ืขืŸ ื•ื•ืึธืก ื›ืึทืคึผืึทื ื–. ืึธื‘ืขืจ ืื™ื™ื“ืขืจ ื“ืึธืก, ืขืก ืื™ื– ื•ื•ื™ื›ื˜ื™ืง ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ืึธื˜ืึทืžืึทื˜ื™ืง ืจืึธื•ืœืึทื•ื˜, ื•ื•ื™ื™ึทืœ ืื™ืŸ ื“ืขื ืกื•ื•ื™ื•ื•ืข ืžื™ืจ ื”ืึธื‘ืŸ ืขื˜ืœืขื›ืข PostgreSQL ืฉืึทืจื“ื–, ืึทื–ื•ื™ ืžื™ืจ ื•ื•ืขืœืŸ ื‘ืึทืงื•ืžืขืŸ ื•ื™ืกื’ืขืฆื™ื™ื›ื ื˜ ื˜ืขืกื˜ื™ื ื’ ืคื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืกืงืจื™ืคึผืก ืื™ื™ื“ืขืจ ืคึผืจืึธื“ื•ืงืฆื™ืข.

ื‘ื™ื™ื“ืข ื˜ืึทืกืงืก ืงื•ืงืŸ ืึทืžื‘ื™ืฆื™ืขืก, ืึธื‘ืขืจ ืžื™ืจ ื”ืึธื‘ืŸ PostgreSQL 9.6. ืืคึฟืฉืจ ืžื™ืจ ืงืขื ืขืŸ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ืฆื• 11.2 ื’ืœื™ื™ืš?

ืžื™ืจ ื‘ืึทืฉืœื™ืกืŸ ืฆื• ื˜ืึธืŸ ื“ืึธืก ืื™ืŸ 2 ืกื˜ืึทื’ืขืก: ืขืจืฉื˜ืขืจ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื“ื™ ื•ื•ืขืจืกื™ืข ืฆื• 11.2, ืื•ืŸ ืงืึทื˜ืขืจ Patroni.

PostgreSQL ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ

ืฆื• ื’ืขืฉื•ื•ื™ื ื“ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื“ื™ PostgreSQL ื•ื•ืขืจืกื™ืข, ืื™ืจ ืžื•ื–ืŸ ื ื•ืฆืŸ ื“ื™ ืึธืคึผืฆื™ืข -k, ืื™ืŸ ื•ื•ืึธืก ืึท ืฉื•ื•ืขืจ ืœื™ื ืง ืื™ื– ื‘ืืฉืืคืŸ ืื•ื™ืฃ ื“ื™ ื“ื™ืกืง ืื•ืŸ ืขืก ืื™ื– ื ื™ื˜ ื“ืึทืจืคึฟืŸ ืฆื• ื ืึธื›ืžืึทื›ืŸ ื“ื™ื™ืŸ ื“ืึทื˜ืŸ. ืื•ื™ืฃ ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื– ืคื•ืŸ 300-400 ื’ื™ื’ืื‘ื™ื™ื˜, ื“ื™ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื ืขืžื˜ 1 ืกืขืงื•ื ื“ืข.

ืžื™ืจ ื”ืึธื‘ืŸ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ืฉืึทืจื“ื–, ืึทื–ื•ื™ ื“ื™ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื“ืึทืจืฃ ื–ื™ื™ืŸ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ื“ื•ืจื›ื’ืขืงืึธื›ื˜. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืžื™ืจ ื’ืขืฉืจื™ื‘ืŸ ืึทืŸ 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

ืฆื• ืกืึธืœื•ื•ืข ื“ื™ ืจื’ืข ืคึผืจืึธื‘ืœืขื, ื ืึธืจ ืงื•ืง ืื™ืŸ ื“ื™ Patroni ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ. ื“ืขืจ ื‘ืึทืึทืžื˜ืขืจ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ื”ืื˜ ืึท ื‘ื™ื™ืฉืคึผื™ืœ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืžื™ื˜ initdb, ื•ื•ืึธืก ืื™ื– ืคืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขืš ืคึฟืึทืจ ื™ื ื™ื˜ื™ืึทืœื™ื–ื™ื ื’ ืึท ื ื™ื™ึทืข ื“ืึทื˜ืึทื‘ื™ื™ืก ื•ื•ืขืŸ Patroni ืื™ื– ืขืจืฉื˜ืขืจ ืœืึธื ื˜ืฉื˜. ืึธื‘ืขืจ ื–ื™ื ื˜ ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ืึท ืคืึทืจื˜ื™ืง ื“ืึทื˜ืึทื‘ื™ื™ืก, ืžื™ืจ ืคืฉื•ื˜ ืึทื•ื•ืขืงื’ืขื ื•ืžืขืŸ ื“ืขื ืึธืคึผื˜ื™ื™ืœื•ื ื’ ืคื•ืŸ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ.

ื•ื•ืขืŸ ืžื™ืจ ืกื˜ืึทืจื˜ืขื“ ื™ื ืกื˜ืึธืœื™ื ื’ Patroni ืื•ื™ืฃ ืึท ืคืึทืจื˜ื™ืง PostgreSQL ืงื ื•ื™ืœ ืื•ืŸ ืงืึทื˜ืขืจ ืขืก, ืžื™ืจ ื’ืขืคึผืœืึธื ื˜ืขืจื˜ ืึท ื ื™ื™ึทืข ืคึผืจืึธื‘ืœืขื: ื‘ื™ื™ื“ืข ืกืขืจื•ื•ืขืจืก ื–ืขื ืขืŸ ืœืึธื ื˜ืฉื˜ ื•ื•ื™ ืคื™ืจืขืจ. Patroni ื•ื•ื™ื™ืกื˜ ื’ืึธืจื ื™ืฉื˜ ื•ื•ืขื’ืŸ ื“ืขืจ ืคืจื™ ืฉื˜ืึทื˜ ืคื•ืŸ ื“ื™ ืงื ื•ื™ืœ ืื•ืŸ ืคืจื•ื•ื•ื˜ ืฆื• ืœื•ื™ืคืŸ ื‘ื™ื™ื“ืข ืกืขืจื•ื•ืขืจืก ื•ื•ื™ ืฆื•ื•ื™ื™ ื‘ืึทื–ื•ื ื“ืขืจ ืงืœืึทืกื˜ืขืจื– ืžื™ื˜ ื“ื™ ื–ืขืœื‘ืข ื ืึธืžืขืŸ. ืฆื• ืกืึธืœื•ื•ืข ื“ืขื ืคึผืจืึธื‘ืœืขื, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื•ื™ืกืžืขืงืŸ ื“ื™ ื“ืึทื˜ืŸ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืื•ื™ืฃ ื“ื™ ืฉืงืœืึทืฃ:

rm -rf /var/lib/postgresql/

ื“ืึธืก ื“ืึทืจืฃ ืžืขืŸ ื˜ืึธืŸ ื ืึธืจ ืื•ื™ืฃ ื“ืขืจ ืฉืงืœืึทืฃ!

ื•ื•ืขืŸ ืงืึทื ืขืงื˜ื™ื ื’ ืึท ืจื™ื™ืŸ ืจืขืคึผืœื™ืงืข, Patroni ืžืื›ื˜ ืึท ื‘ืึทืกืขื‘ืึทืงืงื•ืคึผ ืคื™ืจืขืจ ืื•ืŸ ืจื™ืกื˜ืึธืจื– ืขืก ืฆื• ื“ื™ ืจืขืคึผืœื™ืงืข, ืื•ืŸ ื“ืขืžืึธืœื˜ ืงืึทื˜ืฉืึทื– ื“ื™ ืงืจืึทื ื˜ ืฉื˜ืึทื˜ ืžื™ื˜ ื“ื™ ื•ื•ืึทืœ ืœืึธื’ืก.

ืืŸ ืื ื“ืขืจ ืฉื•ื•ืขืจื™ืงื™ื™ื˜ ื•ื•ืึธืก ืžื™ืจ ื”ืึธื‘ืŸ ื’ืขืคึผืœืึธื ื˜ืขืจื˜ ืื™ื– ืึทื– ืึทืœืข PostgreSQL ืงืœืึทืกื˜ืขืจื– ื–ืขื ืขืŸ ื’ืขืจื•ืคึฟืŸ ื”ื•ื™ืคึผื˜ ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜. ื•ื•ืขืŸ ื™ืขื“ืขืจ ืงื ื•ื™ืœ ื•ื•ื™ื™ืกื˜ ื’ืึธืจื ื™ืฉื˜ ื•ื•ืขื’ืŸ ื“ื™ ืื ื“ืขืจืข, ื“ืึธืก ืื™ื– ื ืึธืจืžืึทืœ. ืึธื‘ืขืจ ื•ื•ืขืŸ ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื ื•ืฆืŸ Patroni, ืึทืœืข ืงืœืึทืกื˜ืขืจื– ืžื•ื–ืŸ ื”ืึธื‘ืŸ ืึท ื™ื™ื ืฆื™ืง ื ืึธืžืขืŸ. ื“ื™ ืœื™ื™ื–ื•ื ื’ ืื™ื– ืฆื• ื˜ื•ื™ืฉืŸ ื“ืขื ืงื ื•ื™ืœ ื ืึธืžืขืŸ ืื™ืŸ ื“ื™ PostgreSQL ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ.

ืžืึทืกืข ืคึผืจื•ื‘ื™ืจืŸ

ืžื™ืจ ืœืึธื ื˜ืฉื˜ ืึท ืคึผืจืึธื‘ืข ื•ื•ืึธืก ืกื™ืžื™ืึทืœื™ื™ืฅ ื•ื•ื™ ื™ื•ื–ืขืจื– ืึทืจื‘ืขื˜ ืื•ื™ืฃ ื‘ืึธืจื“ื–. ื•ื•ืขืŸ ื“ื™ ืžืึทืกืข ืจื™ื˜ืฉื˜ ืื•ื ื“ื–ืขืจ ื˜ืขื’ืœืขืš ื“ื•ืจื›ืฉื ื™ื˜ืœืขืš, ืžื™ืจ ืจื™ืคึผื™ื˜ื™ื“ ื“ื™ ืคึผื™ื ื˜ืœืขืš ื–ืขืœื‘ื™ืงืขืจ ืคึผืจืึธื‘ืข, ืžื™ืจ ืื•ื™ืกื’ืขื“ืจื™ื™ื˜ ืื™ื™ืŸ ื‘ื™ื™ึทืฉืคึผื™ืœ ืžื™ื˜ ืคื™ืจืขืจ PostgreSQL. ื“ืขืจ ืึธื˜ืึทืžืึทื˜ื™ืง ืคื™ื™ืœืึธื•ื•ืขืจ ื’ืขืืจื‘ืขื˜ ื•ื•ื™ ืžื™ืจ ื“ืขืจื•ื•ืึทืจื˜: Patroni ื˜ืฉื™ื™ื ื“ื–ืฉื“ ื“ื™ ืคื™ืจืขืจ, ืงืึธื ืกื•ืœ ืžื•ืกื˜ืขืจ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื˜ ื“ื™ PgBouncer ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื•ืŸ ื’ืขืฉื™ืงื˜ ืึท ื‘ืึทืคึฟืขืœ ืฆื• ืจื™ืœืึธื•ื“. ืœื•ื™ื˜ ืื•ื ื“ื–ืขืจ ื’ืจืึทืคืก ืื™ืŸ ื’ืจืึทืคืึทื ืึท, ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืงืœืึธืจ ืึทื– ืขืก ื–ืขื ืขืŸ ื“ื™ืœื™ื™ื– ืคื•ืŸ 20-30 ืกืขืงื•ื ื“ืขืก ืื•ืŸ ืึท ืงืœื™ื™ืŸ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ืขืจืจืึธืจืก ืคื•ืŸ ื“ื™ ืกืขืจื•ื•ืขืจืก ืฉื™ื™ึทื›ื•ืช ืฆื• ื“ื™ ืงืฉืจ ืฆื• ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก. ื“ืึธืก ืื™ื– ืึท ื ืึธืจืžืึทืœ ืกื™ื˜ื•ืึทืฆื™ืข, ืึทื–ืึท ื•ื•ืึทืœื•ืขืก ื–ืขื ืขืŸ ืคึผืึทืกื™ืง ืคึฟืึทืจ ืื•ื ื“ื–ืขืจ ืคื™ื™ืœืึธื•ื•ืขืจ ืื•ืŸ ื–ืขื ืขืŸ ื‘ืืฉื˜ื™ืžื˜ ื‘ืขืกืขืจ ื•ื•ื™ ื“ื™ ื“ืึทื•ื ื˜ื™ื™ื ืคื•ืŸ ืกืขืจื•ื•ื™ืก.

ืงืึทื˜ืขืจ ืคื•ืŸ Patroni ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข

ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ืžื™ืจ ื”ืึธื‘ืŸ ื’ืขืคึฟื•ื ืขืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืคึผืœืึทืŸ:

  • ืฆืขื•ื•ื™ืงืœืขืŸ ืงืึธื ืกื•ืœ ืžื•ืกื˜ืขืจ ืฆื• ื“ื™ PgBouncer ืกืขืจื•ื•ืขืจ ืื•ืŸ ืงืึทื˜ืขืจ;
  • PostgreSQL ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื•ื ื’ืขืŸ ืฆื• ื•ื•ืขืจืกื™ืข 11.2;
  • ื˜ืฉืึทื ื’ื™ื ื’ ื“ื™ ืงื ื•ื™ืœ ื ืึธืžืขืŸ;
  • ืงืึทื˜ืขืจ ืคื•ืŸ ื“ื™ Patroni ืงื ื•ื™ืœ.

ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ื˜, ืื•ื ื“ื–ืขืจ ืกื›ืขืžืข ืึทืœืึทื•ื– ืื•ื ื“ื– ืฆื• ื˜ืึธืŸ ื“ื™ ืขืจืฉื˜ืขืจ ืคื•ื ื˜ ื›ึผืžืขื˜ ืื™ืŸ ืงื™ื™ืŸ ืฆื™ื™ื˜; ืžื™ืจ ืงืขื ืขืŸ ื‘ืึทื–ื™ื™ึทื˜ื™ืงืŸ ื™ืขื“ืขืจ PgBouncer ืคื•ืŸ ืึทืจื‘ืขื˜ ืื™ื™ื ืขืจ ื“ื•ืจืš ืื™ื™ื ืขืจ ืื•ืŸ ื“ื•ืจื›ืคื™ืจืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื•ืŸ ืงืึทื˜ืขืจ ืคื•ืŸ ืงืึธื ืกื•ืœ ืžื•ืกื˜ืขืจ ืื•ื™ืฃ ืขืก. ืึทื– ืก ื•ื•ืึธืก ืžื™ืจ ื”ืื‘ืŸ.

ืคึฟืึทืจ ืฉื ืขืœ ื˜ืขืกื˜ื™ื ื’, ืžื™ืจ ื’ืขื•ื•ื™ื™ื ื˜ Ansible, ื•ื•ื™ื™ึทืœ ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ื˜ืขืกื˜ืขื“ ื“ื™ ื’ืื ืฆืข ืคึผืœื™ื™ึทื‘ืึธืึธืง ืื™ืŸ ืึท ืคึผืจืึธื‘ืข ืกื•ื•ื™ื•ื•ืข, ืื•ืŸ ื“ื™ ื“ื•ืจื›ืคื™ืจื•ื ื’ ืฆื™ื™ื˜ ืคึฟืึทืจ ื“ื™ ืคื•ืœ ืฉืจื™ืคื˜ ืื™ื– ื’ืขื•ื•ืขืŸ 1,5-2 ืžื™ื ื•ื˜ ืคึฟืึทืจ ื™ืขื“ืขืจ ืฉืึทืจื“. ืžื™ืจ ืงืขื ืขืŸ ืจืึธื•ืœื“ ืื•ื™ืก ืึทืœืฅ ืื™ื™ื ืขืจ ื“ื•ืจืš ืื™ื™ื ืขืจ ืฆื• ื™ืขื“ืขืจ ืฉืึทืจื“ ืึธืŸ ืกื˜ืึธืคึผืคึผื™ื ื’ ืื•ื ื“ื–ืขืจ ื“ื™ื ืกื˜, ืึธื‘ืขืจ ืžื™ืจ ื•ื•ืึธืœื˜ ื”ืึธื‘ืŸ ืฆื• ืงืขืจ ืึทื•ื•ืขืง ื™ืขื“ืขืจ PostgreSQL ืคึฟืึทืจ ืขื˜ืœืขื›ืข ืžื™ื ื•ื˜. ืื™ืŸ ื“ืขื ืคืึทืœ, ื™ื•ื–ืขืจื– ื•ื•ืขืžืขื ืก ื“ืึทื˜ืŸ ื–ืขื ืขืŸ ืื•ื™ืฃ ื“ืขื ืฉืขืจื“ ื•ื•ืึธืœื˜ ื ื™ืฉื˜ ืงืขื ืขืŸ ืฆื• ืึทืจื‘ืขื˜ืŸ ื’ืึธืจ ืื™ืŸ ื“ืขืจ ืฆื™ื™ื˜, ืื•ืŸ ื“ืึธืก ืื™ื– ืึทื ืึทืงืกืขืคึผื˜ืึทื‘ืึทืœ ืคึฟืึทืจ ืื•ื ื“ื–.

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

ืžื™ืจ ืจื™ืกื˜ืึทืจื˜ื™ื“ ืื•ื ื“ื–ืขืจ ื“ื™ื ืกื˜, ืึทืœืฅ ื’ืขืืจื‘ืขื˜ ื•ื•ื™ ืขืก ื–ืึธืœ, ื™ื•ื–ืขืจื– ืคืึธืจื–ืขืฆืŸ ืฆื• ืึทืจื‘ืขื˜ืŸ, ืึธื‘ืขืจ ืื•ื™ืฃ ื“ื™ ื’ืจืึทืคืก ืžื™ืจ ื‘ืืžืขืจืงื˜ ืึท ืึทื‘ื ืึธืจืžืึทืœื™ ื”ื•ื™ืš ืžืึทืกืข ืื•ื™ืฃ ื“ื™ ืงืึธื ืกื•ืœ ืกืขืจื•ื•ืขืจืก.
ืคืึทื™ืœืึธื•ื•ืขืจ ืงื ื•ื™ืœ PostgreSQL + Patroni. ื™ืžืคึผืœืขืžืขื ื˜ืึทื˜ื™ืึธืŸ ื“ืขืจืคืึทืจื•ื ื’

ืคืืจื•ื•ืืก ื”ืื‘ืŸ ืžื™ืจ ื ื™ืฉื˜ ื’ืขื–ืขืŸ ื“ืขื ืื™ืŸ ื“ื™ ืคึผืจืึธื‘ืข ืกื•ื•ื™ื•ื•ืข? ื“ืขืจ ืคึผืจืึธื‘ืœืขื ื™ืœืึทืกื˜ืจื™ื™ืฅ ื–ื™ื™ืขืจ ื’ื•ื˜ ืึทื– ืขืก ืื™ื– ื ื™ื™ื˜ื™ืง ืฆื• ื ืึธื›ืคืึธืœื’ืŸ ื“ื™ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ื•ื•ื™ ืงืึธื“ ืคึผืจื™ื ืฆื™ืคึผ ืื•ืŸ ืคึฟืึทืจื‘ืขืกืขืจืŸ ื“ื™ ื’ืื ืฆืข ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ, ืคึฟื•ืŸ ืคึผืจื•ื‘ื™ืจืŸ ื™ื ื•ื•ื™ื™ืจืึทื ืžืึทื ืฅ ืฆื• ืคึผืจืึธื“ื•ืงืฆื™ืข. ืึทื ื“ืขืจืฉ, ืขืก ืื™ื– ื–ื™ื™ืขืจ ื’ืจื™ื ื’ ืฆื• ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืคึผืจืึธื‘ืœืขื ื•ื•ืึธืก ืžื™ืจ ื”ืึธื‘ืŸ. ื•ื•ืืก ืื™ื– ื’ืขืฉืขืŸ? ืงืึธื ืกื•ืœ ืขืจืฉื˜ืขืจ ืืจื•ื™ืก ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข, ืื•ืŸ ื“ืขืจื ืึธืš ืื™ืŸ ืคึผืจืึธื‘ืข ื™ื ื•ื•ื™ื™ืจืึทื ืžืึทื ืฅ; ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ืื™ืŸ ืคึผืจืึธื‘ืข ื™ื ื•ื•ื™ื™ืจืึทื ืžืึทื ืฅ, ื“ื™ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ืงืึธื ืกื•ืœ ืื™ื– ื’ืขื•ื•ืขืŸ ื”ืขื›ืขืจ ื•ื•ื™ ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข. ื ืึธืจ ืื™ืŸ ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืจื™ืœื™ืกื™ื–, ืึท ืงืคึผื• ืจื™ื ืขืŸ ื•ื•ืขืŸ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ืงืึธื ืกื•ืœ ืžื•ืกื˜ืขืจ ืื™ื– ืกืึทืœื•ื•ื“. ืึทื–ื•ื™ ืžื™ืจ ืคืฉื•ื˜ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื˜ ืงืึธื ืกื•ืœ, ืึทื–ื•ื™ ืกืึทืœื•ื•ื™ื ื’ ื“ื™ ืคึผืจืึธื‘ืœืขื.

ืจื™ืกื˜ืึทืจื˜ ื“ื™ Patroni ืงื ื•ื™ืœ

ืึธื‘ืขืจ, ืžื™ืจ ื”ืึธื‘ืŸ ืึท ื ื™ื™ึทืข ืคึผืจืึธื‘ืœืขื ื•ื•ืึธืก ืžื™ืจ ื”ืึธื‘ืŸ ื ื™ืฉื˜ ืืคื™ืœื• ื›ืึธืฉืขื“ ื•ื•ืขื’ืŸ. ื•ื•ืขืŸ ืื™ืจ ืึทืคึผื“ื™ื™ื˜ื™ื ื’ ืงืึธื ืกื•ืœ, ืžื™ืจ ืคืฉื•ื˜ ื‘ืึทื–ื™ื™ึทื˜ื™ืงืŸ ื“ื™ ืงืึธื ืกื•ืœ ื ืึธื“ืข ืคื•ืŸ โ€‹โ€‹ื“ืขื ืงื ื•ื™ืœ ืžื™ื˜ ื“ื™ ืงืึธื ืกื•ืœ ืœืึธื–ืŸ ื‘ืึทืคึฟืขืœ โ†’ Patroni ืงืึทื ืขืงืฅ ืฆื• ืืŸ ืื ื“ืขืจ ืงืึธื ืกื•ืœ ืกืขืจื•ื•ืขืจ โ†’ ืึทืœืฅ ืึทืจื‘ืขื˜. ืื‘ืขืจ ื•ื•ืขืŸ ืžื™ืจ ื–ืขื ืขืŸ ื’ืขืงื•ืžืขืŸ ืฆื• ื“ื™ ืœืขืฆื˜ืข ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ ื“ื™ ืงืึธื ืกื•ืœ ืงื ื•ื™ืœ ืื•ืŸ ื’ืขืฉื™ืงื˜ ืขืก ื“ื™ ืงืึธื ืกื•ืœ ืœืึธื–ืŸ ื‘ืึทืคึฟืขืœ, ืึทืœืข 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 ืงื ื•ื™ืœ ืื™ื– ื ื™ืฉื˜ ื‘ื™ื›ื•ืœืช ืฆื• ื‘ืึทืงื•ืžืขืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื–ื™ื™ืŸ ืงื ื•ื™ืœ ืื•ืŸ ืจื™ืกื˜ืึทืจื˜ื™ื“.

ืฆื• ื’ืขืคึฟื™ื ืขืŸ ืึท ืœื™ื™ื–ื•ื ื’, ืžื™ืจ ืงืึธื ื˜ืึทืงื˜ืขื“ ื“ื™ ืžื—ื‘ืจื™ื ืคื•ืŸ Patroni ื“ื•ืจืš ืึทืŸ ืึทืจื•ื™ืกื’ืขื‘ืŸ ืื•ื™ืฃ ื’ื™ื˜ื”ื•ื‘. ื–ื™ื™ ืกืึทื’ื“ื–ืฉืขืกื˜ื™ื“ ื™ืžืคึผืจื•ื•ื•ืžืึทื ืฅ ืฆื• ืื•ื ื“ื–ืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืขืก:

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

ืžื™ืจ ื–ืขื ืขืŸ ื‘ื™ื›ื•ืœืช ืฆื• ืจืขืคึผืœืึทืงื™ื™ื˜ ื“ื™ ืึทืจื•ื™ืกื’ืขื‘ืŸ ืื™ืŸ ืึท ืคึผืจืึธื‘ืข ืกื•ื•ื™ื•ื•ืข ืื•ืŸ ื˜ืขืกื˜ืขื“ ื“ื™ ืกืขื˜ื˜ื™ื ื’ืก ื“ืึธืจื˜, ืึธื‘ืขืจ ืœื™ื™ื“ืขืจ ื–ื™ื™ ื”ืึธื‘ืŸ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ.

ื“ืขืจ ืคึผืจืึธื‘ืœืขื ื ืึธืš ื‘ืœื™ื™ื‘ื˜ ืึทื ืจื™ื–ืึทืœื•ื•ื“. ืžื™ืจ ืคึผืœืึทืŸ ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืกืึทืœื•ืฉืึทื ื–:

  • ื ื™ืฆืŸ ืงืึธื ืกื•ืœ-ืึทื’ืขื ื˜ ืื•ื™ืฃ ื™ืขื“ืขืจ ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ ื“ื™ Patroni ืงื ื•ื™ืœ;
  • ืคืึทืจืจื™ื›ื˜ืŸ ื“ืขื ืคึผืจืึธื‘ืœืขื ืื™ืŸ ื“ื™ ืงืึธื“.

ืžื™ืจ ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื•ื•ื• ื“ืขืจ ื˜ืขื•ืช ืคืืจื’ืขืงื•ืžืขืŸ: ืžื™ืกื˜ืึธืžืข ื“ื™ ืคึผืจืึธื‘ืœืขื ืื™ื– ืื™ืŸ ื ื™ืฆืŸ ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ื˜ื™ื™ืžืึทื•ื˜, ื•ื•ืึธืก ืื™ื– ื ื™ืฉื˜ ืึธื•ื•ื•ืขืจืจื™ื™ื“ ื“ื•ืจืš ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืข. ื•ื•ืขืŸ ื“ื™ ืœืขืฆื˜ืข ืงืึธื ืกื•ืœ ืกืขืจื•ื•ืขืจ ืื™ื– ืึทื•ื•ืขืงื’ืขื ื•ืžืขืŸ ืคื•ืŸ ื“ืขื ืงื ื•ื™ืœ, ื“ื™ ื’ืื ืฆืข ืงืึธื ืกื•ืœ ืงื ื•ื™ืœ ืคืจื™ื–ื™ื–, ื•ื•ืึธืก ืœืึทืกืฅ ืžืขืจ ื•ื•ื™ ืึท ืจื’ืข; ื•ื•ื™ื™ึทืœ ืคื•ืŸ ื“ืขื, Patroni ืงืขืŸ ื ื™ืฉื˜ ื‘ืึทืงื•ืžืขืŸ ื“ื™ ืฉื˜ืึทื˜ ืคื•ืŸ ื“ื™ ืงื ื•ื™ืœ ืื•ืŸ ื’ืึธืจ ืจื™ืกื˜ืึทืจื˜ ื“ื™ ื’ืื ืฆืข ืงื ื•ื™ืœ.

ืฆื•ืž ื’ืœื™ืง, ืžื™ืจ ื”ืึธื‘ืŸ ื ื™ืฉื˜ ื˜ืจืขืคืŸ ืงื™ื™ืŸ ืžืขืจ ืขืจืจืึธืจืก.

ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืคื•ืŸ ื ื™ืฆืŸ Patroni

ื ืึธืš ื“ื™ ื’ืขืจืึธื˜ืŸ ืงืึทื˜ืขืจ ืคื•ืŸ Patroni, ืžื™ืจ ืฆื•ื’ืขื’ืขื‘ืŸ ืึทืŸ ื ืึธืš ืจืขืคึผืœื™ืงืข ืื™ืŸ ื™ืขื“ืขืจ ืงื ื•ื™ืœ. ืื™ืฆื˜ ื™ืขื“ืขืจ ืงื ื•ื™ืœ ื”ืื˜ ืึท ืกื™ืžื‘ืึทืœืึทื ืก ืคื•ืŸ ืึท ืงื•ื•ืึธืจื•ื: ืื™ื™ืŸ ืคื™ืจืขืจ ืื•ืŸ ืฆื•ื•ื™ื™ ืจืขืคึผืœืึทืงืึทื–, ืฆื• ื‘ืึทืฉื™ืฆืŸ ืงืขื’ืŸ ืฉืคึผืึทืœื˜ืŸ ืžืึทืจืš ื•ื•ืขืŸ ืกื•ื•ื™ื˜ืฉื™ื ื’.
ืคืึทื™ืœืึธื•ื•ืขืจ ืงื ื•ื™ืœ PostgreSQL + Patroni. ื™ืžืคึผืœืขืžืขื ื˜ืึทื˜ื™ืึธืŸ ื“ืขืจืคืึทืจื•ื ื’

Patroni ืื™ื– ืืจื‘ืขื˜ืŸ ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข ืคึฟืึทืจ ืžืขืจ ื•ื•ื™ ื“ืจื™ื™ ื—ื“ืฉื™ื. ืื™ ืŸ ื“ืข ืจ ืฆืฒ ื˜ ื”ื ื˜ ืข ืจ ืฉื•ื™ ืŸ ื’ืขืœื•ื ื’ืข ืŸ ืื•ื ื“ ื– ืืจื•ื™ืกืฆื•ื”ืขืœืคืŸ . ืœืขืฆื˜ื ืก, ื“ืขืจ ืคื™ืจืขืจ ืคื•ืŸ ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืงืœืึทืกื˜ืขืจื– ืื™ื– ื’ืขืฉื˜ืืจื‘ืŸ ืื™ืŸ AWS, ื“ื™ ืึธื˜ืึทืžืึทื˜ื™ืง ืคื™ื™ืœืึธื•ื•ืขืจ ื’ืขืืจื‘ืขื˜ ืื•ืŸ ื“ื™ ื™ื•ื–ืขืจื– ืคืึธืจื–ืขืฆืŸ ืฆื• ืึทืจื‘ืขื˜ืŸ. ืคึผืึทื˜ืจืึธื ื™ ื”ืื˜ ืžืงื™ื™ื ื–ื™ื™ึทืŸ ื”ื•ื™ืคึผื˜ ืึทืจื‘ืขื˜.

ื ืงื•ืจืฅ ืงื™ืฆืขืจ ืคื•ืŸ ื ื™ืฆืŸ Patroni:

  • ื™ื– ืคื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืขื ื“ืขืจื•ื ื’ืขืŸ. ืขืก ืื™ื– ื’ืขื ื•ื’ ืฆื• ื˜ื•ื™ืฉืŸ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื™ืŸ ืื™ื™ืŸ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื•ืŸ ืขืก ื•ื•ืขื˜ ืฆื•ืœื™ื™ื’ืŸ ืฆื• ื“ื™ ื’ืื ืฆืข ืงื ื•ื™ืœ. ืื•ื™ื‘ ืึท ืจืขื‘ืึธืึธื˜ ืื™ื– ืคืืจืœืื ื’ื˜ ืฆื• ืฆื•ืœื™ื™ื’ืŸ ื“ื™ ื ื™ื™ึทืข ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ, Patroni ื•ื•ืขื˜ ื’ืขื‘ื  ืฆื• ื•ื•ื™ืกืŸ ืื™ืจ ื•ื•ืขื’ืŸ ื“ืขื. Patroni ืงืขื ืขืŸ ืจื™ืกื˜ืึทืจื˜ ื“ื™ ื’ืื ืฆืข ืงื ื•ื™ืœ ืžื™ื˜ ืื™ื™ืŸ ื‘ืึทืคึฟืขืœ, ื•ื•ืึธืก ืื™ื– ืื•ื™ืš ื–ื™ื™ืขืจ ื‘ืึทืงื•ื•ืขื.
  • ื“ืขืจ ืึธื˜ืึทืžืึทื˜ื™ืง ืคื™ื™ืœืึธื•ื•ืขืจ ืื™ื– ืืจื‘ืขื˜ืŸ ืื•ืŸ ื”ืื˜ ืฉื•ื™ืŸ ื’ืขื”ืึธืœืคึฟืŸ ืื•ื ื“ื– ืื•ื™ืก.
  • ืึทืคึผื“ื™ื™ื˜ื™ื ื’ PostgreSQL ืึธืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื“ืึทื•ื ื˜ื™ื™ื. ืื™ืจ ืžื•ื–ืŸ ืขืจืฉื˜ืขืจ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื“ื™ ืจืขืคึผืœืึทืงืึทื– ืฆื• ื“ื™ ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืข, ื“ืขืจื ืึธืš ื˜ื•ื™ืฉืŸ ื“ื™ ืคื™ืจืขืจ ืื™ืŸ ื“ื™ Patroni ืงื ื•ื™ืœ ืื•ืŸ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื“ื™ ืึทืœื˜ ืคื™ืจืขืจ. ืื™ืŸ ื“ืขื ืคืึทืœ, ื“ื™ ื ื™ื™ื˜ื™ืง ื˜ืขืกื˜ื™ื ื’ ืคื•ืŸ ืึธื˜ืึทืžืึทื˜ื™ืง ืคื™ื™ืœืึธื•ื•ืขืจ ืึทืงืขืจื–.

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

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’