Failover Cluster PostgreSQL + Patroni αŸ” αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž

αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž™αžΎαž„αž‘αžΆαž€αŸ‹αž‘αž„αž”αž‰αŸ’αž αžΆαž“αŸƒαž€αžΆαžšαž’αžαŸ‹αž±αž“αž€αŸ†αž αž»αžŸ PostgreSQL αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαžœαžΆαž€αŸ’αž›αžΆαž™αž‡αžΆαžšαžΏαž„αžŸαŸ†αžαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„ αž“αž·αž„αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž”αžΆαž“αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹αŸ”

αž™αžΎαž„αž˜αžΆαž“αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž•αŸ’αž‘αž»αž€αžαŸ’αž–αžŸαŸ‹αŸ– αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ 2,5 αž›αžΆαž“αž“αžΆαž€αŸ‹αž“αŸ…αž‘αžΌαž‘αžΆαŸ†αž„αž–αž·αž—αž–αž›αŸ„αž€ αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŸαž€αž˜αŸ’αž˜ 50K+ αž‡αžΆαžšαŸ€αž„αžšαžΆαž›αŸ‹αžαŸ’αž„αŸƒαŸ” αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸ… Amazone αž€αŸ’αž“αž»αž„αžαŸ†αž”αž“αŸ‹αž˜αž½αž™αž“αŸƒαž”αŸ’αžšαž‘αŸαžŸαž’αŸ€αžšαž‘αž„αŸ‹αŸ– 100+ servers αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž₯αžαžˆαž”αŸ‹αžˆαžš αžŠαŸ‚αž›αž€αŸ’αž“αž»αž„αž“αŸ„αŸ‡αžŸαŸ’αž‘αžΎαžšαžαŸ‚ 50 αžŸαŸ’αžαž·αžαž“αŸ…αž‡αžΆαž˜αž½αž™αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ”

αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž™αž‘αžΆαŸ†αž„αž˜αžΌαž›αž‚αžΊαž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Java αžšαžŠαŸ’αž‹ monolithic αžŠαŸαž’αŸ†αžŠαŸ‚αž›αžšαž€αŸ’αžŸαžΆαž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹ websocket αžαŸαžšαž‡αžΆαž˜αž½αž™αž’αžαž·αžαž·αž‡αž“αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‡αžΆαž…αŸ’αžšαžΎαž“αž’αŸ’αžœαžΎαž€αžΆαžšαž“αŸ…αž›αžΎαž€αŸ’αžαžΆαžšαžαŸ‚αž˜αž½αž™αž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™ αž–αž½αž€αž‚αŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžƒαžΎαž‰αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž–αŸαž›αžœαŸαž›αžΆαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž™αžΎαž„αžŸαžšαžŸαŸαžšαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αžΈαž˜αž½αž™αŸ—αž‘αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž™αžΎαž„αž˜αžΆαž“αžŸαŸ†αžŽαžΎαž”αŸ’αžšαž αŸ‚αž› 10K αž€αŸ’αž“αž»αž„αž˜αž½αž™αžœαž·αž“αžΆαž‘αžΈαž‘αŸ…αž€αžΆαž“αŸ‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž“αŸ…αž–αŸαž›αž•αŸ’αž‘αž»αž€αžαŸ’αž–αžŸαŸ‹αž”αŸ†αž•αž»αžαž“αŸ…αž€αŸ’αž“αž»αž„ Redis αž™αžΎαž„αžŸαžšαžŸαŸαžšαžŸαŸ†αžŽαžΎ 80-100K αž€αŸ’αž“αž»αž„αž˜αž½αž™αžœαž·αž“αžΆαž‘αžΈαŸ”
Failover Cluster PostgreSQL + Patroni αŸ” αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž

αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž™αžΎαž„αž”αŸ’αžαžΌαžšαž–αžΈ Redis αž‘αŸ… PostgreSQL

αžŠαŸ†αž”αžΌαž„ αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžšαž”αžŸαŸ‹αž™αžΎαž„αž”αžΆαž“αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ Redis αžŠαŸ‚αž›αž‡αžΆαžƒαŸ’αž›αžΆαŸ†αž„αžαž˜αŸ’αž›αŸƒαžŸαŸ†αžαžΆαž“αŸ‹αžŠαŸ‚αž›αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ RAM αžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ”

αž‚αž»αžŽαžŸαž˜αŸ’αž”αžαŸ’αžαž·αžšαž”αžŸαŸ‹ RedisαŸ–

  1. αž›αŸ’αž”αžΏαž“αž†αŸ’αž›αžΎαž™αžαž”αžαŸ’αž–αžŸαŸ‹, αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αž„αž…αžΆαŸ†;
  2. αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸƒαž€αžΆαžšαž”αž˜αŸ’αžšαž»αž„αž‘αž»αž€ αž“αž·αž„αž€αžΆαžšαž…αž˜αŸ’αž›αž„αŸ”

αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·αž“αŸƒ Redis αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„:

  1. αž˜αž·αž“αž˜αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαž‘αŸαŸ” αž™αžΎαž„αž”αžΆαž“αž–αŸ’αž™αžΆαž™αžΆαž˜αž€αŸ’αž›αŸ‚αž„αž’αŸ’αžœαžΎαž“αŸ…αž€αž˜αŸ’αžšαž·αžαž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž‡αžΆαž’αž€αž»αžŸαž› αžœαžΆαž˜αž·αž“αžαŸ‚αž„αžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αŸ’αž’αž‘αŸ αž αžΎαž™αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αžŸαžšαžŸαŸαžšαž€αžΌαžŠαžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αžαŸ’αž›αžΆαŸ†αž„αŸ”
  2. αž…αŸ†αž“αž½αž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αž…αŸ†αž“αž½αž“αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž…αŸ†αž“αž½αž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αžΎαž“αž‘αžΎαž„ αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαž“αž‘αžΎαž„ αž αžΎαž™αž“αŸ…αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹ αž™αžΎαž„αž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸ…αž›αž€αŸ’αžαžŽαŸˆαž“αŸƒαžœαžαŸ’αžαž»αžŠαŸ‚αž›αž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ αžŠαŸ‚αž›αž“αŸ…αž€αŸ’αž“αž»αž„ AWS αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž”αž‰αŸ’αžˆαž”αŸ‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžšαž”αžŸαŸ‹αž™αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αŸ’αžšαž—αŸαž‘αž“αŸƒαžœαžαŸ’αžαž»αŸ”
  3. αžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž€αŸ’αžŸαžΆαž€αž˜αŸ’αžšαž·αž latency αž‘αžΆαž”αž‡αžΆαž“αž·αž…αŸ’αž… αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αŸ” αž™αžΎαž„β€‹αž˜αžΆαž“β€‹αžŸαŸ†αžŽαžΎβ€‹αž…αŸ’αžšαžΎαž“β€‹αžŽαžΆαžŸαŸ‹αŸ” αž€αž˜αŸ’αžšαž·αžαž–αž“αŸ’αž™αžΆαž–αŸαž›αž›αŸ’αž’αž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αž‚αžΊ 17-20 ms αŸ” αž“αŸ…αž€αž˜αŸ’αžšαž·αž 30-40 ms αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž™αŸ‰αžΆαž„αž™αžΌαžšαž…αŸ†αž–αŸ„αŸ‡αžŸαŸ†αžŽαžΎαž–αžΈαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„ αž“αž·αž„αž€αžΆαžšαž’αŸ’αžœαžΎαž±αŸ’αž™αžαžΌαž…αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž‡αžΆαž’αž€αž»αžŸαž› αžœαžΆαž”αžΆαž“αž€αžΎαžαž‘αžΎαž„αž…αŸ†αž–αŸ„αŸ‡αž™αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ‚αž€αž‰αŸ’αž‰αžΆ αž†αŸ’αž“αžΆαŸ† 2018 αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžšαžŽαžΈαž˜αž½αž™αž‡αžΆαž˜αž½αž™ Redis αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž αŸαžαž»αž•αž›αž˜αž½αž™αž…αŸ†αž“αž½αž“αž”αžΆαž“αž‘αž‘αž½αž›αž€αžΆαžšαž–αž“αŸ’αž™αžΆαžšαž–αŸαž› 2 αžŠαž„αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž’αž˜αŸ’αž˜αžαžΆαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆ αž™αžΎαž„αž”αžΆαž“αž”αž‰αŸ’αžˆαž”αŸ‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž–αžΆαž€αŸ‹αž€αžŽαŸ’αžαžΆαž›αžαŸ’αž„αŸƒαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžαŸ‚αž‘αžΆαŸ†αžŠαŸ‚αž›αž˜αž·αž“αž”αžΆαž“αž‚αŸ’αžšαŸ„αž„αž‘αž»αž€ αž αžΎαž™αž”αžΆαž“αž‡αŸ†αž“αž½αžŸαž§αž‘αžΆαž αžšαžŽαŸ Redis αžŠαŸ‚αž›αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαŸ”
  4. αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‘αž‘αž½αž›αž”αžΆαž“αž—αžΆαž–αž˜αž·αž“αžŸαŸŠαžΈαžŸαž„αŸ’αžœαžΆαž€αŸ‹αž‚αŸ’αž“αžΆαž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™ αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž˜αžΆαž“αž€αŸ†αž αž»αžŸαžαžΌαž…αžαžΆαž…αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž…αŸ†αžŽαžΆαž™αž–αŸαž›αž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αžΌαžŠαžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ‚αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸαŸ‡αŸ”

αž™αžΎαž„αž”αžΆαž“αž‚αž·αžαž‚αžΌαžšαž–αžΈαž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž· αž αžΎαž™αž”αžΆαž“αžŠαžΉαž„αžαžΆ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ…αžšαž€αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž› αžŠαŸ„αž™αž˜αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž’αž˜αŸ’αž˜αžαžΆ αž“αž·αž„αžαž·αž…αž‡αžΆαž„αž€αžΆαžšαž–αžΉαž„αž•αŸ’αž’αŸ‚αž€αž‘αŸ…αž›αžΎαž—αžΆαž–αž™αžΊαžαž™αŸ‰αžΆαžœαŸ” αž”αžΆαž“αž’αŸ’αžœαžΎαž€αžΆαžšαžŸαŸ’αžšαžΆαžœαž‡αŸ’αžšαžΆαžœ αžœαž·αž—αžΆαž‚αž‡αž˜αŸ’αžšαžΎαžŸαž‡αžΆαž…αŸ’αžšαžΎαž“ αž“αž·αž„αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ PostgreSQL αŸ”

αž™αžΎαž„αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ…αž€αžΆαž“αŸ‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αž˜αžΈαž’αžŸαŸ‹αžšαž™αŸˆαž–αŸαž› 1,5 αž†αŸ’αž“αžΆαŸ†αž˜αž€αž αžΎαž™ αž αžΎαž™αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαžαŸ‚αž•αŸ’αž“αŸ‚αž€αžαžΌαž…αž˜αž½αž™αž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αž€αŸ†αž–αž»αž„αž’αŸ’αžœαžΎαž€αžΆαžšαž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™ Redis αž“αž·αž„ PostgreSQL αŸ” αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸƒαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž“αž·αž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαžœαžΆαž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž“αŸ…αž€αŸ’αž“αž»αž„ αž’αžαŸ’αžαž”αž‘αžšαž”αžŸαŸ‹αž˜αž·αžαŸ’αžαžšαž½αž˜αž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†.

αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŠαŸ†αž”αžΌαž„ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αž”αžΆαž“αž’αŸ’αžœαžΎαž€αžΆαžšαžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž‡αžΆαž˜αž½αž™αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž αžΎαž™αž…αžΌαž›αž”αŸ’αžšαžΎαž˜αŸ Redis αž“αž·αž„ PostgreSQL αŸ” αž…αž„αŸ’αž€αŸ„αž˜ PostgreSQL αž˜αžΆαž“αž˜αŸ αž“αž·αž„αž…αž˜αŸ’αž›αž„αž‡αžΆαž˜αž½αž™αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž’αžŸαž˜αž€αžΆαž›αŸ” αž“αŸαŸ‡αž‡αžΆαžšαž”αŸ€αž”αžŠαŸ‚αž›αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž“αŸαŸ‡αŸ–
Failover Cluster PostgreSQL + Patroni αŸ” αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž

αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž PgBouncer

αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž€αŸ†αž–αž»αž„αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈ αž•αž›αž·αžαž•αž›αž€αŸαž€αŸ†αž–αž»αž„αž’αž—αž·αžœαžŒαŸ’αžαž•αž„αžŠαŸ‚αžšαŸ– αž…αŸ†αž“αž½αž“αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž“αž·αž„αž…αŸ†αž“αž½αž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŠαŸ‚αž›αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ PostgreSQL αž”αžΆαž“αž€αžΎαž“αž‘αžΎαž„ αž αžΎαž™αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžαŸ’αžœαŸ‡αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αŸ” PostgreSQL αž”αž„αŸ’αž€αžΎαžαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž“αžΈαž˜αž½αž™αŸ— αž“αž·αž„αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αž“αž’αžΆαž“αŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαž“αž…αŸ†αž“αž½αž“αž“αŸƒαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžšαž αžΌαžαžŠαž›αŸ‹αž…αŸ†αžŽαž»αž…αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™ αž”αžΎαž˜αž·αž“αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž‘αŸ αž˜αžΆαž“αž±αž€αžΆαžŸαžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž›αŸ’αž’αž”αŸ†αž•αž»αžαŸ” αž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸαž›αŸ’αž’αž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž”αŸ‚αž”αž“αŸαŸ‡αž‚αžΊαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžŠαŸ‚αž›αž“αžΉαž„αžˆαžšαž“αŸ…αž–αžΈαž˜αž»αžαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αŸ”

αž™αžΎαž„αž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαž–αžΈαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αŸ– Pgpool αž“αž·αž„ PgBouncer αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‘αžΈαž˜αž½αž™αž˜αž·αž“αž‚αžΆαŸ†αž‘αŸ’αžšαžšαž”αŸ€αž”αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸƒαž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ PgBouncer αŸ”

αž™αžΎαž„αž”αžΆαž“αžšαŸ€αž”αž…αŸ†αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž€αžΆαžšαž„αžΆαžšαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ– αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αž…αžΌαž›αž”αŸ’αžšαžΎ PgBouncer αž˜αž½αž™ αžŠαŸ‚αž›αž“αŸ…αž–αžΈαž€αŸ’αžšαŸ„αž™αž“αŸ„αŸ‡αž‚αžΊαž‡αžΆαž˜αŸ PostgreSQL αž αžΎαž™αž“αŸ…αž–αžΈαž€αŸ’αžšαŸ„αž™αž˜αŸαž“αžΈαž˜αž½αž™αŸ—αž‚αžΊαž˜αž½αž™αž…αž˜αŸ’αž›αž„αž‡αžΆαž˜αž½αž™αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž’αžŸαž˜αž€αžΆαž›αŸ”
Failover Cluster PostgreSQL + Patroni αŸ” αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž

αž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸαŸ‡ αž™αžΎαž„αž˜αž·αž“αž’αžΆαž…αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž…αŸ†αž“αž½αž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αžΆαŸ†αž„αž˜αžΌαž›αž“αŸ…αž€αŸ’αž“αž»αž„ PostgreSQL αž αžΎαž™αž›αŸ’αž”αžΏαž“αž“αŸƒαž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αŸ†αž”αŸ‚αž€ PostgreSQL αž“αŸ…αž€αž˜αŸ’αžšαž·αžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαžαžΆαž„αž›αžΎαž‚αžΊαž˜αžΆαž“αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαžΏαž„αž“αŸαŸ‡αŸ– αž“αŸ…αž–αŸαž›αž”αž“αŸ’αžαŸ‚αž˜ PostgreSQL shard αžαŸ’αž˜αžΈ αžœαžΆαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ PgBouncer αž αžΎαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž—αŸ’αž›αžΆαž˜αŸ—αž‡αžΆαž˜αž½αž™ shard αžαŸ’αž˜αžΈαŸ”

αž€αžΆαžšαž”αžšαžΆαž‡αŸαž™ PgBouncer

αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž“αŸαŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžšαž αžΌαžαžŠαž›αŸ‹αž–αŸαž›αžŠαŸ‚αž›αž§αž‘αžΆαž αžšαžŽαŸ PgBouncer αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αž”αžΆαž“αžŸαŸ’αž›αžΆαž”αŸ‹αŸ” αž™αžΎαž„αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„ AWS αžŠαŸ‚αž›αž‚αŸ’αžšαž”αŸ‹αž€αžšαžŽαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαž•αŸ’αž“αŸ‚αž€αžšαžΉαž„αžŠαŸ‚αž›αž„αžΆαž”αŸ‹αžαžΆαž˜αž€αžΆαž›αž€αŸ†αžŽαžαŸ‹αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž”αŸ‚αž”αž“αŸαŸ‡ αžœαžαŸ’αžαž»αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαž‘αŸ…αž•αŸ’αž“αŸ‚αž€αžšαžΉαž„αžαŸ’αž˜αžΈ αž αžΎαž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αŸ’αžαž„αž‘αŸ€αžαŸ” αžœαžΆαž”αžΆαž“αž€αžΎαžαž‘αžΎαž„αž‡αžΆαž˜αž½αž™ PgBouncer αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž˜αž·αž“αž’αžΆαž…αž”αŸ’αžšαžΎαž”αžΆαž“αž‘αŸαŸ” αž›αž‘αŸ’αž’αž•αž›β€‹αž“αŸƒβ€‹αž€αžΆαžšβ€‹αž’αŸ’αž›αžΆαž€αŸ‹β€‹αž…αž»αŸ‡β€‹αž“αŸαŸ‡β€‹αž‚αžΊβ€‹αž—αžΆαž–β€‹αž˜αž·αž“β€‹αž’αžΆαž…β€‹αž”αŸ’αžšαžΎβ€‹αž”αžΆαž“β€‹αž“αŸƒβ€‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜β€‹αžšαž”αžŸαŸ‹β€‹αž™αžΎαž„β€‹αžšαž™αŸˆαž–αŸαž› 25 αž“αžΆαž‘αžΈβ€‹αŸ” AWS αžŽαŸ‚αž“αžΆαŸ†αž’αŸ„αž™αž”αŸ’αžšαžΎαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαžŠαŸ‚αž›αŸ—αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž”αŸ‚αž”αž“αŸαŸ‡ αžŠαŸ‚αž›αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž‘αŸαžŸαžšαž”αžŸαŸ‹αž™αžΎαž„αž“αŸ…αž–αŸαž›αž“αŸ„αŸ‡αŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡ αž™αžΎαž„αž”αžΆαž“αž‚αž·αžαž™αŸ‰αžΆαž„αž˜αŸ‰αžαŸ‹αž…αžαŸ‹αž’αŸ†αž–αžΈαž€αžΆαžšαž’αžαŸ‹αž±αž“αž…αŸ†αž–αŸ„αŸ‡αž€αŸ†αž αž»αžŸαžšαž”αžŸαŸ‹ PgBouncer αž“αž·αž„αž€αŸ’αžšαž»αž˜ PostgreSQL αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž’αžΆαž…αž€αžΎαžαž‘αžΎαž„αž‡αžΆαž˜αž½αž™αž€αžšαžŽαžΈαžŽαžΆαž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αžŽαž“αžΈ AWS αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

αž™αžΎαž„αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž€αžΆαžšαž’αžαŸ‹αž’αŸ’αž˜αžαŸ‹αž€αŸ†αž αž»αžŸ PgBouncer αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜: αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž…αžΌαž›αž”αŸ’αžšαžΎ Network Load Balancer αžŠαŸ‚αž›αž“αŸ…αž–αžΈαž€αŸ’αžšαŸ„αž™αž˜αžΆαž“ PgBouncers αž–αžΈαžšαŸ” PgBouncer αž“αžΈαž˜αž½αž™αŸ—αž˜αžΎαž›αž˜αŸ PostgreSQL αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸƒ shard αž“αžΈαž˜αž½αž™αŸ—αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαž‚αžΆαŸ†αž„ AWS αž€αžΎαžαž‘αžΎαž„αž˜αŸ’αžαž„αž‘αŸ€αž αž…αžšαžΆαž…αžšαžŽαŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“αž”αž“αŸ’αžαžαžΆαž˜αžšαž™αŸˆ PgBouncer αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” Network Load Balancer failover αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αžŠαŸ„αž™ AWS αŸ”

αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž“αŸαŸ‡αž’αŸ’αžœαžΎαž±αŸ’αž™αž˜αžΆαž“αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ PgBouncer αžαŸ’αž˜αžΈαŸ”
Failover Cluster PostgreSQL + Patroni αŸ” αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž

αž”αž„αŸ’αž€αžΎαž PostgreSQL Failover Cluster

αž“αŸ…αž–αŸαž›αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αž™αžΎαž„αž”αžΆαž“αž–αž·αž…αžΆαžšαžŽαžΆαž›αžΎαž‡αž˜αŸ’αžšαžΎαžŸαž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαŸ– αž€αžΆαžšαž”αžšαžΆαž‡αŸαž™αžŠαŸ‚αž›αžŸαžšαžŸαŸαžšαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„, repmgr, AWS RDS, Patroni αŸ”

αžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŠαŸ‚αž›αžŸαžšαžŸαŸαžšαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αŸ”

αž–αž½αž€αž‚αŸαž’αžΆαž…αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž˜αŸ αž αžΎαž™αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžΆαžšαž”αžšαžΆαž‡αŸαž™ αž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž‘αŸ…αž˜αŸ αž“αž·αž„αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ PgBouncer αŸ”

αž‚αž»αžŽαžŸαž˜αŸ’αž”αžαŸ’αžαž·αž“αŸƒαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡αž‚αžΊαž—αžΆαž–αžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αž αž–αŸ’αžšαŸ„αŸ‡αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„ αž αžΎαž™αž™αž›αŸ‹αž…αŸ’αž”αžΆαžŸαŸ‹αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”

αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·:

  • αž˜αŸαž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αžŸαŸ’αž›αžΆαž”αŸ‹αž‘αŸ αž•αŸ’αž‘αž»αž™αž‘αŸ…αžœαž·αž‰αž€αžΆαžšαž”αžšαžΆαž‡αŸαž™αž”αžŽαŸ’αžαžΆαž‰αž’αžΆαž…αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αŸ” αž”αžšαžΆαž‡αŸαž™β€‹αžŠαŸ„αž™β€‹αž˜αž·αž“β€‹αžŠαžΉαž„β€‹αž–αžΈβ€‹αžšαžΏαž„β€‹αž“αŸαŸ‡β€‹αž“αžΉαž„β€‹αž›αžΎαž€β€‹αž€αž˜αŸ’αž–αžŸαŸ‹β€‹αž€αžΆαžšβ€‹αž…αž˜αŸ’αž›αž„β€‹αž‘αŸ…β€‹αž˜αŸ’αž…αžΆαžŸαŸ‹ αžαžŽαŸˆβ€‹αž˜αŸ’αž…αžΆαžŸαŸ‹β€‹αž…αžΆαžŸαŸ‹β€‹αž“αžΉαž„β€‹αž”αž“αŸ’αžβ€‹αž’αŸ’αžœαžΎαŸ” αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž™αžΎαž„αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž…αŸ†αž“αž½αž“αž–αžΈαžšαž€αŸ’αž“αž»αž„αžαž½αž“αžΆαž‘αžΈαž‡αžΆαž˜αŸ αž αžΎαž™αž™αžΎαž„αž“αžΉαž„αž˜αž·αž“αžŠαžΉαž„αžαžΆαž˜αž½αž™αžŽαžΆαž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž–αž½αž€αžœαžΆαž˜αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αžαž“αŸ„αŸ‡αž‘αŸαŸ” αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αž•αž„αžŠαŸ‚αžšαžαžΆαž”αŸ†αž”αŸ‚αž€αžαž½αžšαž€αŸ’αž”αžΆαž›;
  • αž™αžΎαž„β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž‘αž»αž€β€‹αž…αŸ„αž›β€‹αžŠαŸ„αž™β€‹αž‚αŸ’αž˜αžΆαž“β€‹αž€αžΆαžšβ€‹αž†αŸ’αž›αžΎαž™β€‹αžαž”αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αž™αžΎαž„ មេ αž“αž·αž„αž…αž˜αŸ’αž›αž„αž˜αž½αž™ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž”αŸ’αžαžΌαžš αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž“αžΉαž„αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαž‘αžΎαž„αž›αžΎαž˜αŸ αž αžΎαž™αž™αžΎαž„αž›αŸ‚αž„αž˜αžΆαž“αž…αŸ’αž”αžΆαž”αŸ‹αž…αž˜αŸ’αž›αž„αž‘αŸ€αžαž αžΎαž™ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž…αž˜αŸ’αž›αž„αžαŸ’αž˜αžΈαžŠαŸ„αž™αžŠαŸƒαŸ”
  • αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž”αž“αŸ’αžαŸ‚αž˜αž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž”αžšαžΆαž‡αŸαž™ αžαžŽαŸˆαžŠαŸ‚αž›αž™αžΎαž„αž˜αžΆαž“ 12 PostgreSQL shards αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸαž™αžαžΆαž™αžΎαž„αžαŸ’αžšαžΌαžœαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™ 12 clusters αŸ” αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž€αžΎαž“αž‘αžΎαž„αž“αŸƒαž…αŸ†αž“αž½αž“ shards αž’αŸ’αž“αž€αž€αŸαžαŸ’αžšαžΌαžœαž…αž„αž…αžΆαŸ†αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž€αžΆαžšαž”αžšαžΆαž‡αŸαž™αž•αž„αžŠαŸ‚αžšαŸ”

αž€αžΆαžšαž”αžšαžΆαž‡αŸαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαžšαžŸαŸαžšαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αž˜αžΎαž›αž‘αŸ…αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αžŽαžΆαžŸαŸ‹ αž αžΎαž™αž‘αžΆαž˜αž‘αžΆαžšαž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŠαŸ‚αž›αž˜αž·αž“αžŸαŸ†αžαžΆαž“αŸ‹αŸ” αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž…αž„αŸ’αž€αŸ„αž˜ PostgreSQL αžαŸ‚αž˜αž½αž™ αž“αŸαŸ‡αž“αžΉαž„αž€αŸ’αž›αžΆαž™αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ†αž•αž»αž αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž˜αž·αž“αž˜αžΆαž“αž‘αŸ†αž αŸ†αž‘αŸ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžœαžΆαž˜αž·αž“αžŸαŸαž€αŸ’αžαž·αžŸαž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αž‘αŸαŸ”

Repmgr

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαž…αž˜αŸ’αž›αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αŸ’αžšαž»αž˜ 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 αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ’αž›αŸƒαž‡αž·αžαž–αžΈαžšαžŠαž„αž’αŸ€αž”αž“αžΉαž„αžαž˜αŸ’αž›αŸƒαž§αž‘αžΆαž αžšαžŽαŸαž’αž˜αŸ’αž˜αžαžΆ αžŠαŸ‚αž›αž‡αžΆαž αŸαžαž»αž•αž›αž…αž˜αŸ’αž”αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ„αŸ‡αž”αž„αŸ‹αž…αŸ„αž›αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž“αŸαŸ‡αŸ”

αž”αŸ‰αžΆαžαžΌαž“αžΈ

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž‚αŸ†αžšαžΌ python αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ PostgreSQL αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž―αž€αžŸαžΆαžšαž›αŸ’αž’ αž€αžΆαžšαž”αžšαžΆαž‡αŸαž™αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· αž“αž·αž„αž€αžΌαžŠαž”αŸ’αžšαž—αž–αž“αŸ…αž›αžΎ github αŸ”

αž‚αž»αžŽαžŸαž˜αŸ’αž”αžαŸ’αžαž·αžšαž”αžŸαŸ‹ PatroniαŸ–

  • αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αžΈαž˜αž½αž™αŸ—αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆ αžœαžΆαž…αŸ’αž”αžΆαžŸαŸ‹αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”
  • αž€αžΆαžšαž”αžšαžΆαž‡αŸαž™αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž…αŸαž‰αž–αžΈαž”αŸ’αžšαž’αž”αŸ‹;
  • αžŸαžšαžŸαŸαžšαž‡αžΆ python αž αžΎαž™αžŠαŸ„αž™αžŸαžΆαžšαž™αžΎαž„αžαŸ’αž›αž½αž“αž―αž„αžŸαžšαžŸαŸαžšαž…αŸ’αžšαžΎαž“αž“αŸ…αž€αŸ’αž“αž»αž„ python αžœαžΆαž“αžΉαž„αž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αž½αž€αž™αžΎαž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆ αž αžΎαž™αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž‡αž½αž™αžŠαž›αŸ‹αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‚αž˜αŸ’αžšαŸ„αž„αž•αž„αžŠαŸ‚αžšαŸ”
  • αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„ PostgreSQL αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸ…αž›αžΎαžαŸ’αž“αžΆαŸ†αž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒαž…αž„αŸ’αž€αŸ„αž˜αž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™ αž αžΎαž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž…αž„αŸ’αž€αŸ„αž˜αžαŸ’αžšαžΌαžœαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‘αžΎαž„αžœαž·αž‰αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαŸ’αž˜αžΈ αž“αŸ„αŸ‡αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž˜αŸ’αžαž„αž‘αŸ€αžαžŠαŸ„αž™αž”αŸ’αžšαžΎ Patroni αŸ”

αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·:

  • αžœαžΆαž˜αž·αž“αž…αŸ’αž”αžΆαžŸαŸ‹αž–αžΈαž―αž€αžŸαžΆαžšαž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ PgBouncer αž±αŸ’αž™αž”αžΆαž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž‘αŸαŸ” αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαžœαžΆαž–αž·αž”αžΆαž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαž αŸ…αžœαžΆαžαžΆαžŠαž€αž€αŸαžŠαŸ„αž™ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž—αžΆαžšαž€αž·αž…αŸ’αž…αžšαž”αžŸαŸ‹ Patroni αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ PostgreSQL αž αžΎαž™αžšαž”αŸ€αž”αžŠαŸ‚αž›αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ… Patroni αž“αžΉαž„αž‘αŸ…αž‡αžΆαž”αž‰αŸ’αž αžΆαžšαž”αžŸαŸ‹αž™αžΎαž„αžšαž½αž…αž‘αŸ…αž αžΎαž™αŸ”
  • αž˜αžΆαž“αž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž Patroni αž›αžΎαž”αžšαž·αž˜αžΆαžŽαž’αŸ†αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž˜αžΆαž“αž§αž‘αžΆαž αžšαžŽαŸαž‡αžΆαž…αŸ’αžšαžΎαž“αž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž–αžΈαžŠαŸ†αž”αžΌαž„αŸ”

αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž™αžΎαž„αž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ Patroni αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž…αž„αŸ’αž€αŸ„αž˜αž”αžšαžΆαž‡αŸαž™αŸ”

αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž Patroni

αž˜αž»αž“αž–αŸαž› Patroni αž™αžΎαž„αž˜αžΆαž“ 12 PostgreSQL shards αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸƒαž˜αŸαž˜αž½αž™ αž“αž·αž„αž…αž˜αŸ’αž›αž„αž˜αž½αž™αž‡αžΆαž˜αž½αž™αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž’αžŸαž˜αž€αžΆαž›αŸ” αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αžΆαž“αž…αžΌαž›αž”αŸ’αžšαžΎαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαžΆαž˜αžšαž™αŸˆ Network Load Balancer αžŠαŸ‚αž›αž“αŸ…αž–αžΈαž€αŸ’αžšαŸ„αž™αž“αŸ„αŸ‡αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž–αžΈαžšαž‡αžΆαž˜αž½αž™ PgBouncer αž αžΎαž™αž“αŸ…αž–αžΈαž€αŸ’αžšαŸ„αž™αž–αž½αž€αžœαžΆαž‚αžΊαž‡αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ PostgreSQL αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”
Failover Cluster PostgreSQL + Patroni αŸ” αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž

αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αž Patroni αž™αžΎαž„αžαŸ’αžšαžΌαžœαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž…αž„αŸ’αž€αŸ„αž˜αž€αžΆαžšαž•αŸ’αž‘αž»αž€αžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αž…αžΆαž™αŸ” Patroni αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αž‘αž»αž€αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž…αŸ‚αž€αž…αžΆαž™αžŠαžΌαž…αž‡αžΆ etcd, Zookeeper, Consul αŸ” αž™αžΎαž„αž‘αžΎαž”αžαŸ‚αž˜αžΆαž“αž…αž„αŸ’αž€αŸ„αž˜αž€αž»αž„αžŸαŸŠαž»αž›αž–αŸαž‰αž›αŸαž‰αž“αŸ…αž›αžΎαž‘αžΈαž•αŸ’αžŸαžΆαžš αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž€αžΆαžšαžšαž½αž˜αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™ Vault αž αžΎαž™αž™αžΎαž„αž˜αž·αž“αž”αŸ’αžšαžΎαžœαžΆαž‘αŸ€αžαž‘αŸαŸ” αž αŸαžαž»αž•αž›αžŠαŸαž›αŸ’αž’αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αž»αž„αžŸαŸŠαž»αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ„αž›αž”αŸ†αžŽαž„αžŠαŸ‚αž›αž”αžΆαž“αž‚αŸ’αžšαŸ„αž„αž‘αž»αž€αŸ”

αžšαž”αŸ€αž”αžŠαŸ‚αž› Patroni αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž€αž»αž„αžŸαŸŠαž»αž›

αž™αžΎαž„αž˜αžΆαž“αž…αž„αŸ’αž€αŸ„αž˜αž€αž»αž„αžŸαŸŠαž»αž›αžŠαŸ‚αž›αž˜αžΆαž“αž”αžΈαžαŸ’αž“αžΆαŸ†αž„ αž“αž·αž„αž…αž„αŸ’αž€αŸ„αž˜ Patroni αžŠαŸ‚αž›αž˜αžΆαž“αž’αŸ’αž“αž€αžŠαžΉαž€αž“αžΆαŸ†αž“αž·αž„αž’αŸ’αž“αž€αž…αž˜αŸ’αž›αž„ (αž“αŸ…αž€αŸ’αž“αž»αž„ Patroni αž˜αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆαž’αŸ’αž“αž€αžŠαžΉαž€αž“αžΆαŸ†αž…αž„αŸ’αž€αŸ„αž˜ αž αžΎαž™αž‘αžΆαžŸαž€αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆαž…αž˜αŸ’αž›αž„)αŸ” αž§αž‘αžΆαž αžšαžŽαŸαž“αžΈαž˜αž½αž™αŸ—αž“αŸƒαž…αž„αŸ’αž€αŸ„αž˜ Patroni αžαŸ‚αž„αžαŸ‚αž”αž‰αŸ’αž‡αžΌαž“αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαž…αž„αŸ’αž€αŸ„αž˜αž‘αŸ…αž€αž»αž„αžŸαŸŠαž»αž›αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž–αžΈαž€αž»αž„αžŸαŸŠαž»αž› αž’αŸ’αž“αž€αžαŸ‚αž„αžαŸ‚αž’αžΆαž…αžŸαŸ’αžœαŸ‚αž„αžšαž€αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž“αŸƒαž…αž„αŸ’αž€αŸ„αž˜ Patroni αž αžΎαž™αž’αŸ’αž“αž€αžŽαžΆαž‡αžΆαž’αŸ’αž“αž€αžŠαžΉαž€αž“αžΆαŸ†αž“αŸ…αž–αŸαž›αž“αŸαŸ‡αŸ”

Failover Cluster 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 αž”αžΆαž“αž‡αž½αž™αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαŸ” αžšαžΏαž„αž›αŸ’αž’αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž‡αžΆ python αŸ” αžœαžΆαž”αŸ’αžšαŸ‚αžαžΆαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‰αŸ‚αž€αžαžΆαž˜αžœαž·αž’αžΈαžŽαžΆαž˜αž½αž™αž‘αŸαž αžΎαž™αž–αž·αž’αžΈαž€αžΆαžšαžαŸ’αžšαžΌαžœαžαŸ‚αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαŸ” αž“αŸαŸ‡αž‡αžΆαžšαž”αŸ€αž”αžŠαŸ‚αž›αž”αŸ’αž›αž»αž€αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αžΆαžšαž„αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž€αž»αž„αžŸαŸŠαž»αž›αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž™αžΎαž„αŸ–

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 αž αžΎαž™αž•αŸ’αž‰αžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž‘αž»αž€αžœαžΆαž‘αžΎαž„αžœαž·αž‰αŸ”

Failover Cluster PostgreSQL + Patroni αŸ” αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž

αž€αžΆαžšαž”αžΌαž€αž’αŸ†αž“αŸƒαž‚αŸ†αžšαžΌαž‚αžΊαžαžΆαžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‡αžΆαž€αžΌαžŠ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž“αŸ…αž–αŸαž›αž”αž“αŸ’αžαŸ‚αž˜ shard αžαŸ’αž˜αžΈ αžœαžΆαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαž…αž·αžαŸ’αžαžαŸ’αž˜αžΈ αž“αž·αž„αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž‚αŸ†αžšαžΌαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· αžŠαŸ„αž™αž‚αžΆαŸ†αž‘αŸ’αžšαž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‡αžΆαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž€αžΌαžŠαŸ”

αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αžαŸ’αž˜αžΈαž‡αžΆαž˜αž½αž™ Patroni

αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž€αžΆαžšαž„αžΆαžšαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸˆ
Failover Cluster PostgreSQL + Patroni αŸ” αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž

αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž…αžΌαž›αž”αŸ’αžšαžΎαžŸαž˜αžαž»αž›αŸ’αž™ β†’ αž˜αžΆαž“αž§αž‘αžΆαž αžšαžŽαŸαž–αžΈαžšαž“αŸƒ PgBouncer αž“αŸ…αž–αžΈαž€αŸ’αžšαŸ„αž™αžœαžΆ β†’ αž“αŸ…αž›αžΎαž§αž‘αžΆαž αžšαžŽαŸαž“αžΈαž˜αž½αž™αŸ— Consul-template αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αžŠαŸ‚αž›αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαž€αŸ’αžšαž»αž˜ Patroni αž“αžΈαž˜αž½αž™αŸ— αž“αž·αž„αžαžΆαž˜αžŠαžΆαž“αž—αžΆαž–αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž“αŸƒαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ PgBouncer αžŠαŸ‚αž›αž•αŸ’αž‰αžΎαžŸαŸ†αžŽαžΎαž‘αŸ…αž€αžΆαž“αŸ‹αž’αŸ’αž“αž€αžŠαžΉαž€αž“αžΆαŸ†αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αŸ” αž“αŸƒαž€αŸ’αžšαž»αž˜αž“αžΈαž˜αž½αž™αŸ—αŸ”

αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžŠαŸ„αž™αžŠαŸƒ

αž™αžΎαž„αž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž“αŸαŸ‡ αž˜αž»αž“αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžœαžΆαž“αŸ…αž›αžΎαž”αžšαž·αž™αžΆαž€αžΆαžŸαžŸαžΆαž€αž›αŸ’αž”αž„αžαžΌαž…αž˜αž½αž™ αž“αž·αž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸƒαž€αžΆαžšαž”αŸ’αžαžΌαžšαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ” αž–αž½αž€αž‚αŸαž”αžΆαž“αž”αžΎαž€αž€αŸ’αžαžΆαžš αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαžŸαŸ’αž‘αžΈαž‚αŸαžš αž αžΎαž™αž“αŸ…αž–αŸαž›αž“αŸ„αŸ‡ αž–αž½αž€αž‚αŸαž”αžΆαž“ "αžŸαž˜αŸ’αž›αžΆαž”αŸ‹" αž˜αŸαžŠαžΉαž€αž“αžΆαŸ†αž“αŸƒαž…αž„αŸ’αž€αŸ„αž˜αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„ AWS αž“αŸαŸ‡αž‚αžΊαžŸαžΆαž˜αž‰αŸ’αž‰αžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž”αž·αž‘ instance αžαžΆαž˜αžšαž™αŸˆαž€αž»αž„αžŸαžΌαž›αŸ”

Failover Cluster PostgreSQL + Patroni αŸ” αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž

αžŸαŸ’αž‘αžΈαž‚αŸαžšαžαŸ’αžšαž›αž”αŸ‹αž˜αž€αžœαž·αž‰αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž› 10-20 αžœαž·αž“αžΆαž‘αžΈ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž˜αŸ’αžαž„αž‘αŸ€αžαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαŸ” αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆ αž…αž„αŸ’αž€αŸ„αž˜ Patroni αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ– αžœαžΆαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž’αŸ’αž“αž€αžŠαžΉαž€αž“αžΆαŸ† αž”αž‰αŸ’αž‡αžΌαž“αž–αŸαžαŸŒαž˜αžΆαž“αž‘αŸ… Π‘onsul αž αžΎαž™ Π‘onsul-template αž”αžΆαž“αž™αž€αž–αŸαžαŸŒαž˜αžΆαž“αž“αŸαŸ‡αž—αŸ’αž›αžΆαž˜αŸ— αž‡αŸ†αž“αž½αžŸαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ PgBouncer αž αžΎαž™αž•αŸ’αž‰αžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž‘αž»αž€αž‘αžΎαž„αžœαž·αž‰αŸ”

αžαžΎαž’αŸ’αžœαžΎαžŠαžΌαž…αž˜αŸ’αžαŸαž…αžŠαžΎαž˜αŸ’αž”αžΈαžšαžŸαŸ‹αž“αŸ…αž€αŸ’αžšαŸ„αž˜αž”αž“αŸ’αž‘αž»αž€αžαŸ’αž–αžŸαŸ‹ αž“αž·αž„αžšαž€αŸ’αžŸαžΆαž–αŸαž›αžœαŸαž›αžΆαžšαž„αž…αžΆαŸ†αžαž·αž…αž”αŸ†αž•αž»αž?

αž’αŸ’αžœαžΈαŸ—αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž™αŸ‰αžΆαž„αž›αŸ’αž’αž₯αžαžαŸ’αž…αŸ„αŸ‡! αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžΆαž“αžŸαŸ†αžŽαž½αžšαžαŸ’αž˜αžΈ: αžαžΎαžœαžΆαž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž™αŸ‰αžΆαž„αžŠαžΌαž…αž˜αŸ’αžαŸαž…αž“αŸ…αž€αŸ’αžšαŸ„αž˜αž”αž“αŸ’αž‘αž»αž€αžαŸ’αž–αžŸαŸ‹? αžαžΎαž’αŸ’αžœαžΎαžŠαžΌαž…αž˜αŸ’αžαŸαž…αžŠαžΎαž˜αŸ’αž”αžΈαžŠαžΆαž€αŸ‹αž…αŸαž‰αž“αžΌαžœαž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž•αž›αž·αžαž€αž˜αŸ’αž˜αž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸ αž“αž·αž„αžŠαŸ„αž™αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–?

αž”αžšαž·αž™αžΆαž€αžΆαžŸαžŸαžΆαž€αž›αŸ’αž”αž„αžŠαŸ‚αž›αž™αžΎαž„αž’αŸ’αžœαžΎαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž•αŸ’αž‘αž»αž€αž‡αž½αž™αž™αžΎαž„αž†αŸ’αž›αžΎαž™αžŸαŸ†αžŽαž½αžšαž‘αžΈαž˜αž½αž™αŸ” αžœαžΆαž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžŠαžΌαž…αž‚αŸ’αž“αžΆαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž‘αŸ…αž“αžΉαž„αž€αžΆαžšαž•αž›αž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸƒαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜ αž αžΎαž™αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαžΆαž€αž›αŸ’αž”αž„αžŠαŸ‚αž›αž˜αžΆαž“αž”αžšαž·αž˜αžΆαžŽαž”αŸ’αžšαž αžΆαž€αŸ‹αž”αŸ’αžšαž αŸ‚αž›αž“αžΉαž„αž€αžΆαžšαž•αž›αž·αžαŸ” αž™αžΎαž„αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚ "αžŸαž˜αŸ’αž›αžΆαž”αŸ‹" មេ PostgreSQL αž˜αŸ’αž“αžΆαž€αŸ‹αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž αž αžΎαž™αž˜αžΎαž›αžαžΆαž˜αžΆαž“αž’αŸ’αžœαžΈαž€αžΎαžαž‘αžΎαž„αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž»αž“αž“αŸ„αŸ‡ αžœαžΆαž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αžŽαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αžΆαžšαžšαŸ†αž€αž·αž›αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž“αŸ…αž›αžΎαž”αžšαž·αžŸαŸ’αžαžΆαž“αž“αŸαŸ‡ αž™αžΎαž„αž˜αžΆαž“ PostgreSQL shards αž‡αžΆαž…αŸ’αžšαžΎαž“ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαžŸαžΆαž€αž›αŸ’αž”αž„αžŠαŸαž›αŸ’αž’αž“αŸƒαžŸαŸ’αž‚αŸ’αžšαžΈαž”αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αž»αž“αž–αŸαž›αž•αž›αž·αžαŸ”

αž€αžΆαžšαž„αžΆαžšαž‘αžΆαŸ†αž„αž–αžΈαžšαž˜αžΎαž›αž‘αŸ…αž˜αžΆαž“αž˜αž αž·αž…αŸ’αž†αžαžΆ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž˜αžΆαž“ PostgreSQL 9.6 αŸ” αžαžΎαž™αžΎαž„αž’αžΆαž…αž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αž—αŸ’αž›αžΆαž˜αŸ—αž‘αŸ… 11.2 αž”αžΆαž“αž‘αŸ?

αž™αžΎαž„αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž’αŸ’αžœαžΎαžœαžΆαž‡αžΆ 2 αž‡αŸ†αž αžΆαž“αŸ– αžŠαŸ†αž”αžΌαž„αž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αž‘αŸ… 11.2 αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Patroni αŸ”

αž€αžΆαžšαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž– PostgreSQL

αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž€αŸ†αžŽαŸ‚ PostgreSQL αž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸ αžŸαžΌαž˜αž”αŸ’αžšαžΎαž‡αž˜αŸ’αžšαžΎαžŸ -kαžŠαŸ‚αž›αž€αŸ’αž“αž»αž„αž“αŸ„αŸ‡αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αžšαžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž“αŸ…αž›αžΎαžαžΆαžŸ αž αžΎαž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž…αž˜αŸ’αž›αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‘αŸαŸ” αž“αŸ…αž›αžΎαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž“αŸƒ 300-400 GB αž€αžΆαžšαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αžαŸ’αžšαžΌαžœαž…αŸ†αžŽαžΆαž™αž–αŸαž› 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 αž˜αž·αž“αžŠαžΉαž„αž’αŸ’αžœαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž’αŸ†αž–αžΈαžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŠαŸ†αž”αžΌαž„αž“αŸƒαž…αž„αŸ’αž€αŸ„αž˜ αž αžΎαž™αž–αŸ’αž™αžΆαž™αžΆαž˜αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‘αžΆαŸ†αž„αž–αžΈαžšαž‡αžΆαž…αž„αŸ’αž€αŸ„αž˜αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž–αžΈαžšαžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž›αž»αž”αžαžαžŠαŸ‚αž›αž˜αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž›αžΎ slaveαŸ–

rm -rf /var/lib/postgresql/

αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαžαŸ‚αž›αžΎαž‘αžΆαžŸαž€αžš!

αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαž…αž˜αŸ’αž›αž„αžŸαŸ’αž’αžΆαžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹ Patroni αž”αž„αŸ’αž€αžΎαžαž˜αŸαž€αžΆαžšαž”αž˜αŸ’αžšαž»αž„αž‘αž»αž€αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ αž“αž·αž„αžŸαŸ’αžŠαžΆαžšαžœαžΆαž‘αŸ…αž€αžΆαžšαž…αž˜αŸ’αž›αž„ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžαžΆαž˜αž‘αžΆαž“αŸ‹αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž™αŸ„αž„αž‘αŸ…αžαžΆαž˜ wal logs αŸ”

αž€αžΆαžšαž›αŸ†αž”αžΆαž€αž˜αž½αž™αž‘αŸ€αžαžŠαŸ‚αž›αž™αžΎαž„αž‡αž½αž”αž”αŸ’αžšαž‘αŸ‡αž‚αžΊαžαžΆαž…αž„αŸ’αž€αŸ„αž˜ PostgreSQL αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αžŸαŸ†αžαžΆαž“αŸ‹αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž…αž„αŸ’αž€αŸ„αž˜αž“αžΈαž˜αž½αž™αŸ—αž˜αž·αž“αžŠαžΉαž„αž’αŸ’αžœαžΈαž’αŸ†αž–αžΈαž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€ αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžšαžΏαž„αž’αž˜αŸ’αž˜αžαžΆαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αž„αŸ‹αž”αŸ’αžšαžΎ Patroni αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž…αž„αŸ’αž€αŸ„αž˜αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αŸ” αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžˆαŸ’αž˜αŸ„αŸ‡αž…αž„αŸ’αž€αŸ„αž˜αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ PostgreSQL αŸ”

αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž•αŸ’αž‘αž»αž€

αž™αžΎαž„αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αžΆαžšαžŸαžΆαž€αž›αŸ’αž”αž„αžŠαŸ‚αž›αž€αŸ’αž›αŸ‚αž„αž’αŸ’αžœαžΎαž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸ…αž›αžΎαž€αŸ’αžαžΆαžšαŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž”αž“αŸ’αž‘αž»αž€αžˆαžΆαž“αžŠαž›αŸ‹αžαž˜αŸ’αž›αŸƒαž˜αž’αŸ’αž™αž˜αž”αŸ’αžšαž…αžΆαŸ†αžαŸ’αž„αŸƒαžšαž”αžŸαŸ‹αž™αžΎαž„ αž™αžΎαž„αž”αžΆαž“αž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžŠαžΌαž…αž‚αŸ’αž“αžΆαž˜αŸ’αžαž„αž‘αŸ€αž αž™αžΎαž„αž”αžΆαž“αž”αž·αž‘αž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž’αŸ’αž“αž€αžŠαžΉαž€αž“αžΆαŸ† PostgreSQL αŸ” αž€αžΆαžšαž”αžšαžΆαž‡αŸαž™αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΌαž…αžŠαŸ‚αž›αž™αžΎαž„αžšαŸ†αž–αžΉαž„αž‘αž»αž€αŸ– Patroni αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž’αŸ’αž“αž€αžŠαžΉαž€αž“αžΆαŸ† αž€αž»αž„αžŸαŸŠαž»αž›-αž‚αŸ†αžšαžΌαž”αžΆαž“αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ PgBouncer αž αžΎαž™αž”αžΆαž“αž•αŸ’αž‰αžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž‘αž»αž€αž‘αžΎαž„αžœαž·αž‰αŸ” αž™αŸ„αž„αžαžΆαž˜αž€αŸ’αžšαžΆαž αŸ’αžœαžšαž”αžŸαŸ‹αž™αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„ Grafana αžœαžΆαž…αŸ’αž”αžΆαžŸαŸ‹αžŽαžΆαžŸαŸ‹αžαžΆαž˜αžΆαž“αž€αžΆαžšαž–αž“αŸ’αž™αžΆαžšαž–αŸαž›αž–αžΈ 20-30 αžœαž·αž“αžΆαž‘αžΈ αž“αž·αž„αž…αŸ†αž“αž½αž“αžαžΌαž…αž˜αž½αž™αž“αŸƒαž€αŸ†αž αž»αžŸαž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž’αž˜αŸ’αž˜αžαžΆ αžαž˜αŸ’αž›αŸƒαž”αŸ‚αž”αž“αŸαŸ‡αž’αžΆαž…αž‘αž‘αž½αž›αž™αž€αž”αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αžšαžΆαž‡αŸαž™αžšαž”αžŸαŸ‹αž™αžΎαž„ αž αžΎαž™αž–αž·αžαž‡αžΆαž›αŸ’αž’αž”αŸ’αžšαžŸαžΎαžšαž‡αžΆαž„αž–αŸαž›αžŸαž˜αŸ’αžšαžΆαž€αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αŸ”

αž“αžΆαŸ† Patroni αž‘αŸ…αž•αž›αž·αžαž€αž˜αŸ’αž˜

αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž™αžΎαž„αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž•αŸ‚αž“αž€αžΆαžšαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸˆ

  • αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™ Consul-template αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ PgBouncer αž αžΎαž™αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”
  • PostgreSQL αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž‘αŸ…αž€αŸ†αžŽαŸ‚ 11.2;
  • αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžˆαŸ’αž˜αŸ„αŸ‡αž€αŸ’αžšαž»αž˜;
  • αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αžšαž»αž˜ Patroni αŸ”

αž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸαŸ‡ αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαž…αŸ†αžŽαž»αž…αžŠαŸ†αž”αžΌαž„αžŸαŸ’αž‘αžΎαžšαžαŸ‚αž‚αŸ’αžšαž”αŸ‹αž–αŸαž› αž™αžΎαž„αž’αžΆαž…αžŠαž€ PgBouncer αž“αžΈαž˜αž½αž™αŸ—αž…αŸαž‰αž–αžΈαž€αžΆαžšαž„αžΆαžš αž αžΎαž™αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™ αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‚αŸ†αžšαžΌαž€αž»αž„αžŸαŸŠαž»αž›αž“αŸ…αž›αžΎαžœαžΆαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž”αžΆαž“αž’αŸ’αžœαžΎαŸ”

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αžšαž αŸαžŸ αž™αžΎαž„αž”αžΆαž“αž”αŸ’αžšαžΎ Ansible αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž™αžΎαž„αž”αžΆαž“αžŸαžΆαž€αž›αŸ’αž”αž„αžŸαŸ€αžœαž—αŸ…αž›αŸαž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžšαž½αž…αž αžΎαž™αž“αŸ…αž›αžΎαž”αžšαž·αž™αžΆαž€αžΆαžŸαžŸαžΆαž€αž›αŸ’αž”αž„ αž αžΎαž™αž–αŸαž›αžœαŸαž›αžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž“αŸƒαžŸαŸ’αž‚αŸ’αžšαžΈαž”αž–αŸαž‰αž›αŸαž‰αž‚αžΊαž–αžΈ 1,5 αž‘αŸ… 2 αž“αžΆαž‘αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ shard αž“αžΈαž˜αž½αž™αŸ—αŸ” αž™αžΎαž„β€‹αž’αžΆαž…β€‹αžŠαžΆαž€αŸ‹β€‹αž…αŸαž‰β€‹αž“αžΌαžœβ€‹αž’αŸ’αžœαžΈβ€‹αž‚αŸ’αžšαž”αŸ‹β€‹αž™αŸ‰αžΆαž„β€‹αž‡αžΆβ€‹αž˜αž½αž™β€‹ shard αž“αžΈαž˜αž½αž™αŸ—β€‹αžŠαŸ„αž™β€‹αž˜αž·αž“β€‹αž”αž‰αŸ’αžˆαž”αŸ‹β€‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜β€‹αžšαž”αžŸαŸ‹β€‹αž™αžΎαž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž™αžΎαž„β€‹αž“αžΉαž„β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αž·αž‘ PostgreSQL αž“αžΈαž˜αž½αž™αŸ—β€‹αžšαž™αŸˆαž–αŸαž›β€‹αž‡αžΆαž…αŸ’αžšαžΎαž“β€‹αž“αžΆαž‘αžΈαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž›αžΎ shard αž“αŸαŸ‡αž˜αž·αž“αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αŸαž‰αž›αŸαž‰αž”αžΆαž“αž‘αŸαž“αŸ…αž–αŸαž›αž“αŸαŸ‡ αž αžΎαž™αž“αŸαŸ‡αž˜αž·αž“αž’αžΆαž…αž‘αž‘αž½αž›αž™αž€αž”αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αž½αž€αž™αžΎαž„αŸ”

αž•αŸ’αž›αžΌαžœαž…αŸαž‰αž–αžΈαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸαŸ‡αž‚αžΊαž€αžΆαžšαžαŸ‚αž‘αžΆαŸ†αžŠαŸ‚αž›αž”αžΆαž“αž‚αŸ’αžšαŸ„αž„αž‘αž»αž€ αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž‘αžΎαž„αžšαŸ€αž„αžšαžΆαž›αŸ‹ 3 αžαŸ‚αž˜αŸ’αžαž„αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž”αž„αŸ’αž’αž½αž…αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž„αžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž‚αŸ’αžšαŸ„αž„αž‘αž»αž€ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž”αž·αž‘αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„ αž“αž·αž„αž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αž“αžΌαžœαž§αž‘αžΆαž αžšαžŽαŸαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž“αŸ…β€‹αžŸαž›αŸ‹β€‹αž˜αž½αž™β€‹αžŸαž”αŸ’αžαžΆαž αŸβ€‹αž‘αŸ€αžβ€‹αžšαž αžΌαžβ€‹αžŠαž›αŸ‹β€‹αž”αž„αŸ’αž’αž½αž…β€‹αž”αž“αŸ’αž‘αžΆαž”αŸ‹ αž αžΎαž™β€‹αž™αžΎαž„β€‹αž”αžΆαž“β€‹αžŸαž˜αŸ’αžšαŸαž…β€‹αž…αž·αžαŸ’αžβ€‹αžšαž„αŸ‹αž…αžΆαŸ†β€‹αž αžΎαž™β€‹αžšαŸ€αž”αž…αŸ†β€‹αž”αž“αŸ’αžαŸ‚αž˜β€‹αž‘αŸ€αžαŸ” αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αžšαž„αŸ‹αž…αžΆαŸ† αž™αžΎαž„αž€αŸαž’αžΆαž“αžΆαžαŸ’αž›αž½αž“αž™αžΎαž„αž•αž„αžŠαŸ‚αžšαŸ– αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ PostgreSQL shard αž“αžΈαž˜αž½αž™αŸ— αž™αžΎαž„αž”αžΆαž“αž›αžΎαž€αž‘αžΎαž„αž“αžΌαžœαž€αžΆαžšαž…αž˜αŸ’αž›αž„αž‘αž»αž€αž˜αž½αž™αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŠαŸ‚αž›αž”αžšαžΆαž‡αŸαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž€αŸ’αžŸαžΆαž‘αž·αž“αŸ’αž“αž“αŸαž™αž…αž»αž„αž€αŸ’αžšαŸ„αž™ αž αžΎαž™αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž§αž‘αžΆαž αžšαžŽαŸαžαŸ’αž˜αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ shard αž“αžΈαž˜αž½αž™αŸ— αžŠαŸ‚αž›αž‚αž½αžšαžαŸ‚αž€αŸ’αž›αžΆαž™αž‡αžΆαž€αžΆαžšαž…αž˜αŸ’αž›αž„αžαŸ’αž˜αžΈαž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜ Patroni αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž€αž»αŸ†αž±αŸ’αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž›αž»αž”αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αž”αžΆαž“αž‡αž½αž™αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž αžΆαž“αž·αž—αŸαž™αž“αŸƒαž€αŸ†αž αž»αžŸαŸ”
Failover Cluster PostgreSQL + Patroni αŸ” αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž

αž™αžΎαž„αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αžΎαž„αžœαž·αž‰ αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΌαž…αžŠαŸ‚αž›αžœαžΆαž‚αž½αžšαžαŸ‚ αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸ…αžαŸ‚αž”αž“αŸ’αžαž’αŸ’αžœαžΎαž€αžΆαžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž›αžΎαž€αŸ’αžšαžΆαž αŸ’αžœ αž™αžΎαž„αž”αžΆαž“αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžƒαžΎαž‰αžαžΆαž˜αžΆαž“αž€αžΆαžšαž•αŸ’αž‘αž»αž€αžαŸ’αž–αžŸαŸ‹αž˜αž·αž“αž’αž˜αŸ’αž˜αžαžΆαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž»αž„αžŸαŸŠαž»αž›αŸ”
Failover Cluster PostgreSQL + Patroni αŸ” αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž

αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž™αžΎαž„αž˜αž·αž“αžƒαžΎαž‰αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž™αžΆαž€αžΆαžŸαžŸαžΆαž€αž›αŸ’αž”αž„? αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αž”αž„αŸ’αž αžΆαž‰αž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹αžαžΆ αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž’αž“αž»αžœαžαŸ’αžαžαžΆαž˜αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‡αžΆαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž€αžΌαžŠ αž“αž·αž„αž€αŸ‚αž›αž˜αŸ’αž’αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αžΆαŸ†αž„αž˜αžΌαž› αž…αžΆαž”αŸ‹αž–αžΈαž”αžšαž·αž™αžΆαž€αžΆαžŸαžŸαžΆαž€αž›αŸ’αž”αž„αžšαž αžΌαžαžŠαž›αŸ‹αž€αžΆαžšαž•αž›αž·αžαŸ” αž”αžΎαž˜αž·αž“αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž‘αŸαžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŽαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž‘αž‘αž½αž›αŸ” αžαžΎαž˜αžΆαž“αž’αŸ’αžœαžΈαž€αžΎαžαž‘αžΎαž„? αž€αž»αž„αžŸαŸŠαž»αž›β€‹αž”αžΆαž“β€‹αž”αž„αŸ’αž αžΆαž‰β€‹αžαŸ’αž›αž½αž“β€‹αžŠαŸ†αž”αžΌαž„β€‹αž›αžΎβ€‹αž€αžΆαžšβ€‹αž•αž›αž·αž αž αžΎαž™β€‹αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž˜αž€β€‹αž“αŸ…β€‹αž›αžΎβ€‹αž”αžšαž·αž™αžΆαž€αžΆαžŸβ€‹αž“αŸƒβ€‹αž€αžΆαžšβ€‹αž’αŸ’αžœαžΎβ€‹αžαŸαžŸαŸ’αž αž‡αžΆβ€‹αž›αž‘αŸ’αž’αž•αž› αž“αŸ…β€‹αž€αŸ’αž“αž»αž„β€‹αž”αžšαž·αž™αžΆαž€αžΆαžŸβ€‹αžŸαžΆαž€αž›αŸ’αž”αž„ αž€αŸ†αžŽαŸ‚β€‹αž€αž»αž„αžŸαŸŠαž»αž›β€‹αž‚αžΊβ€‹αžαŸ’αž–αžŸαŸ‹β€‹αž‡αžΆαž„β€‹αž€αžΆαžšβ€‹αž•αž›αž·αžαŸ” αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž˜αž½αž™ αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™ CPU αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž€αž»αž„αžŸαŸŠαž»αž›-αž‚αŸ†αžšαžΌαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž™αžΎαž„αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž€αž»αž„αžŸαŸŠαž»αž› αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαŸ”

αž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αž€αŸ’αžšαž»αž˜ 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 αžαžΆαž˜αžšαž™αŸˆαž”αž‰αŸ’αž αžΆαž“αŸ…αž›αžΎ github αŸ” αž–αž½αž€αž‚αŸαž”αžΆαž“αžŸαŸ’αž“αžΎαž±αŸ’αž™αž€αŸ‚αž›αž˜αŸ’αž’αž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ–

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

αž™αžΎαž„αž’αžΆαž…αž…αž˜αŸ’αž›αž„αž”αž‰αŸ’αž αžΆαž“αŸ…αž›αžΎαž”αžšαž·αž™αžΆαž€αžΆαžŸαžŸαžΆαž€αž›αŸ’αž”αž„ αž“αž·αž„αžŸαžΆαž€αž›αŸ’αž”αž„αž‡αž˜αŸ’αžšαžΎαžŸαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž’αž€αž»αžŸαž›αžœαžΆαž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸαŸ”

αž”αž‰αŸ’αž αžΆαž“αŸ…αžαŸ‚αž˜αž·αž“αž‘αžΆαž“αŸ‹αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αŸ” αž™αžΎαž„αž‚αŸ’αžšαŸ„αž„αž“αžΉαž„αžŸαžΆαž€αž›αŸ’αž”αž„αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸˆ

  • αž”αŸ’αžšαžΎαž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžšαž€αž»αž„αžŸαŸŠαž»αž›αž›αžΎαž§αž‘αžΆαž αžšαžŽαŸαž€αŸ’αžšαž»αž˜ Patroni αž“αžΈαž˜αž½αž™αŸ—αŸ”
  • αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠαŸ”

αž™αžΎαž„αž™αž›αŸ‹αž–αžΈαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž€αŸ†αž αž»αžŸαž”αžΆαž“αž€αžΎαžαž‘αžΎαž„αŸ– αž”αž‰αŸ’αž αžΆαž‚αžΊαž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αžΆαžšαž’αžŸαŸ‹αž–αŸαž›αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αžŠαŸ‚αž›αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžŠαž·αžŸαŸαž’αžαžΆαž˜αžšαž™αŸˆαž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸ„αŸ‡αž‘αŸαŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž»αž„αžŸαŸŠαž»αž›αž…αž»αž„αž€αŸ’αžšαŸ„αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαž€αž…αŸαž‰αž–αžΈαž…αž„αŸ’αž€αŸ„αž˜ αž…αž„αŸ’αž€αŸ„αž˜αž€αž»αž„αžŸαŸŠαž»αž›αž‘αžΆαŸ†αž„αž˜αžΌαž›αž–αŸ’αž™αž½αžšαž›αžΎαžŸαž–αžΈαž˜αž½αž™αžœαž·αž“αžΆαž‘αžΈ αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž“αŸαŸ‡ Patroni αž˜αž·αž“αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαž…αž„αŸ’αž€αŸ„αž˜ αž“αž·αž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‘αžΎαž„αžœαž·αž‰αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž“αžΌαžœαž…αž„αŸ’αž€αŸ„αž˜αž‘αžΆαŸ†αž„αž˜αžΌαž›αŸ”

αž‡αžΆαžŸαŸ†αžŽαžΆαž„αž›αŸ’αž’ αž™αžΎαž„αž˜αž·αž“αž”αžΆαž“αž‡αž½αž”αž”αŸ’αžšαž‘αŸ‡αž“αžΉαž„αž€αŸ†αž αž»αžŸαž‘αŸ€αžαž‘αŸαŸ”

αž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Patroni

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž‡αŸ„αž‚αž‡αŸαž™αž“αŸƒ Patroni αž™αžΎαž„αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž”αž“αŸ’αžαŸ‚αž˜αž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜αž“αžΈαž˜αž½αž™αŸ—αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜αž“αžΈαž˜αž½αž™αŸ—αž˜αžΆαž“αž—αžΆαž–αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž“αŸƒαž€αžΌαžšαŸ‰αž»αž˜αž˜αž½αž™αŸ– αž’αŸ’αž“αž€αžŠαžΉαž€αž“αžΆαŸ†αž˜αž½αž™ αž“αž·αž„αžšαžΌαž”αž…αž˜αŸ’αž›αž„αž–αžΈαžš αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ†αžŽαžΆαž‰αŸ‹αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž– αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŠαŸ‚αž›αžαž½αžšαž€αŸ’αž”αžΆαž›αž”αŸ†αž”αŸ‚αž€αž“αŸ…αž–αŸαž›αž”αŸ’αžαžΌαžšαŸ”
Failover Cluster PostgreSQL + Patroni αŸ” αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž

Patroni αž”αžΆαž“αž’αŸ’αžœαžΎαž€αžΆαžšαž›αžΎαž€αžΆαžšαž•αž›αž·αžαž’αžŸαŸ‹αžšαž™αŸˆαž–αŸαž›αž‡αžΆαž„ XNUMX αžαŸ‚αŸ” αž€αŸ’αž“αž»αž„β€‹αž’αŸ†αž‘αž»αž„β€‹αž–αŸαž›β€‹αž“αŸαŸ‡ αž‚αžΆαžαŸ‹β€‹αž”αžΆαž“β€‹αž‡αž½αž™β€‹αž™αžΎαž„β€‹αžšαž½αž…β€‹αž αžΎαž™αŸ” αžαŸ’αž˜αžΈαŸ—αž“αŸαŸ‡ αž˜αŸαžŠαžΉαž€αž“αžΆαŸ†αž“αŸƒαž…αž„αŸ’αž€αŸ„αž˜αž˜αž½αž™αž”αžΆαž“αžŸαŸ’αž›αžΆαž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ AWS αž€αžΆαžšαž”αžšαžΆαž‡αŸαž™αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž αžΎαž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αž“αŸ’αžαž’αŸ’αžœαžΎαž€αžΆαžšαŸ” Patroni αž”αžΆαž“αž”αŸ†αž–αŸαž‰αž—αžΆαžšαž€αž·αž…αŸ’αž…αž…αž˜αŸ’αž”αž„αžšαž”αžŸαŸ‹αžαŸ’αž›αž½αž“αŸ”

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž„αŸ’αžαŸαž”αžαžΌαž…αž˜αž½αž™αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ PatroniαŸ–

  • αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸƒαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αŸ” αžœαžΆαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž“αŸ…αž›αžΎαž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™ αž αžΎαž™αžœαžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž‰αžšαž αžΌαžαžŠαž›αŸ‹αž…αž„αŸ’αž€αŸ„αž˜αž‘αžΆαŸ†αž„αž˜αžΌαž›αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αž‘αžΎαž„αžœαž·αž‰αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž˜αž‘αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαŸ’αž˜αžΈαž“αŸ„αŸ‡ Patroni αž“αžΉαž„αž”αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž±αŸ’αž™αžŠαžΉαž„αŸ” Patroni αž’αžΆαž…αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž…αž„αŸ’αž€αŸ„αž˜αž‘αžΆαŸ†αž„αž˜αžΌαž›αž‘αžΎαž„αžœαž·αž‰αžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαŸ‚αž˜αž½αž™ αžŠαŸ‚αž›αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž•αž„αžŠαŸ‚αžšαŸ”
  • αž€αžΆαžšαž”αžšαžΆαž‡αŸαž™αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž αžΎαž™αž”αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžšαž½αž…αž αžΎαž™αžŠαžΎαž˜αŸ’αž”αžΈαž‡αž½αž™αž™αžΎαž„αŸ”
  • αž’αžΆαž”αŸ‹αžŠαŸαž PostgreSQL αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž–αŸαž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αžŠαŸ†αž”αžΌαž„αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž‘αŸ…αž€αŸ†αžŽαŸ‚αžαŸ’αž˜αžΈ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž’αŸ’αž“αž€αžŠαžΉαž€αž“αžΆαŸ†αž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜ Patroni αž“αž·αž„αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž’αŸ’αž“αž€αžŠαžΉαž€αž“αžΆαŸ†αž…αžΆαžŸαŸ‹αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž…αžΆαŸ†αž”αžΆαž…αŸ‹αž“αŸƒαž€αžΆαžšαž”αžšαžΆαž‡αŸαž™αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αžΎαžαž‘αžΎαž„αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹