áá±á¬ááºážáá«ážááœáẠPostgreSQL á¡ááŸá¬ážáá¶ááá¯ááºáááºááŸáááŒááºážááŒá¿áá¬ááᯠáá»ááºážáááºáá¯á¶á áá»áœááºá¯ááºááá¯á·á¡ááœáẠá¡áááºááŒá±á¬áá·áº á¡áá±ážááŒá®ážáá¬ááŒá®áž áá±á¬ááºáá¯á¶ážááœáẠááŒá áºáá»ááºáá²á·áááºááᯠáá»áœááºá¯ááºááŒá±á¬ááŒáá«áááºá
áá»áœááºá¯ááºááá¯á·ááœáẠá¡ááœááºáááºáá±á¬ááºáá¬ážáá±á¬ áááºáá±á¬ááºááŸá¯áá áºáá¯ááŸááááº- ááá¹áá¬áá áºááŸááºážááŸá áá¯á¶ážá áœá²áá° 2,5 áááºážá áá±á·á áẠ50K+ á¡áá¯á¶ážááŒá¯áá°áá»á¬ážá áá¬áá¬áá»á¬ážááẠá¡áá¯ááºáá¬áááºá áá±ááá áºáá¯ááŸá Amazone ááœáẠáááºááŸááááº- ááá°áá®áá±á¬ áá¬áᬠ100+ ááẠá¡áááºáááŒáẠá¡áá¯ááºáá¯ááºáá±ááŒá®áž áááºážááá¯á·áá²á០50 áá®ážáá«ážááẠáá±áá¬áá±á·á áºáá»á¬ážááŸáá·áºá¡áá° ááŸááá±áá«áááºá
áá±á¬ááºáá¶áá
áºáá¯áá¯á¶ážááẠclient ááŸáá·áº á¡áááºáááŒáẠwebsocket áá»áááºáááºááŸá¯ááᯠááááºážááááºážáá±ážááá·áº ááŒá®ážáá¬ážáá±á¬ monolithic stateful Java á¡ááá®áá±ážááŸááºážáá
áºáá¯ááŒá
áºáááºá á¡áá¯á¶ážááŒá¯áá°á¡áá»á¬ážá¡ááŒá¬ážááẠáá°áá®áá±á¬áá¯ááºáá±á«áºááœáẠáá
áºáá»áááºáááºážá¡áá¯ááºáá¯ááºáá±á¬á¡áá«á áá»áœááºá¯ááºááá¯á·ááẠáá±áá¬áá±á·á
áºááá¯á· ááŒá±á¬ááºážáá²ááŸá¯áá
áºáá¯á
á®ááᯠáá±ážáá¬ážáá±á¬ááŒá±á¬áá·áº áááºážááá¯á·á¡á¬ážáá¯á¶ážááẠá¡áá»áááºááŸáá·áºáááŒá±ážáá® ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠááŒááºááœá±á·ááááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·ááá±áá¬áá±á·á
áºáá»á¬ážááá¯á· áá
áºá
áá¹ááá·áºáá»áŸáẠáá±á¬ááºážááá¯ááŸá¯ 10K ááá·áºááŸááááºá Redis ááœáẠá¡ááœááºá¡ááááºáá±á¬ááºáá»áááºááœááºá áá»áœááºá¯ááºááá¯á·ááẠáá
áºá
áá¹ááá·áºáá»áŸáẠáá±á¬ááºážááá¯ááŸá¯ 80-100K áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠáá±ážáá¬ážáá«áááºá
Redis á០PostgreSQL ááá¯á· áá»áœááºá¯ááºááá¯á· áá¬ááŒá±á¬áá·áº ááŒá±á¬ááºážáá²á·ááááºážá
áááŠážááœááºá áá»áœááºá¯ááºááá¯á·ááááºáá±á¬ááºááŸá¯ááẠáá¬áá¬á RAM ááœáẠáá±áá¬á¡á¬ážáá¯á¶ážááᯠááááºážáááºážáá¬ážááá·áº áá±á¬á·áááºááá¯ážá ááá¯ážáá áºáá¯ááŒá áºááá·áº Redis ááŸáá·áº áá¯ááºáá±á¬ááºáá²á·áááºá
Redis áá¡á¬ážáá¬áá»ááºáá»á¬áž
- áá¯á¶á·ááŒááºááŸá¯ á¡ááŸáááºááŒáá·áºáá±á¬ááŒá±á¬áá·áº ááŒá áºáááºá á¡áá¬á¡á¬ážáá¯á¶ážááᯠááŸááºáá¬ááºáá²ááœáẠááááºážáááºážáá¬ážáááºá
- á¡áááºáá°ážááŒááºážááŸáá·áº áá¯á¶áá°ááœá¬ážááŒááºáž ááœááºáá°ááŒááºážá
áá»áœááºá¯ááºááá¯á·á¡ááœáẠRedis áá¡á¬ážáááºážáá»ááºáá»á¬áž
- á¡á á áºá¡ááŸáẠá¡áá±á¬ááºážá¡áááºáá»á¬áž áááŸááá«á áá»áœááºá¯ááºááá¯á·á áá»áŸá±á¬ááºááœáŸá¬á¡ááá·áºááœáẠáááºážááá¯á·ááᯠá¡áá¯áá°ááẠááŒáá¯ážá á¬ážáá²á·áááºá áá¶ááá±á¬ááºážá áœá¬ááŒáá·áºá áááºážááẠá¡ááŒá²áááºáž áá±á¬ááºážááœááºá áœá¬ á¡áá¯ááºááá¯ááºááá¯ááºáá² á¡ááœááºááŸá¯ááºááœá±ážáá±á¬ áá¯ááºááᯠáá±ážáá¬ážááẠááá¯á¡ááºáá«áááºá
- áá±áá¬ááá¬áááᯠáááºááá¯áá®ááá¬áááŒáá·áº ááá·áºáááºáá¬ážáááºá áá±áá¬ááá¬ááá»á¬ážáá¬áááºááŸáá·áºá¡áá»áŸá ááŸááºáá¬ááºááŒá®ážááœá¬ážáá¬áááºááŒá áºááŒá®ážá á¡áá¯á¶ážááœááºá áá»áœááºá¯ááºááá¯á·ááẠááœá±ážáá»ááºáá¬ážáá±á¬ instance ááááá±áááá¹ááá¬áá»á¬ážáá®ááá¯á· áááºáááºááœá¬ážáááºááŒá áºááŒá®ážá AWS ááœáẠinstance á¡áá»áá¯ážá¡á á¬ážááá¯ááŒá±á¬ááºážáá²ááẠáá»áœááºá¯ááºááá¯á·ááááºáá±á¬ááºááŸá¯ááᯠáááºááá·áºáááºááá¯á¡ááºáá«áááºá
- á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº low latency level ááᯠá¡ááŒá²ááááºážáá¬ážááẠááá¯á¡ááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááœáẠáá±á¬ááºážááá¯áá»ááºáá»á¬ážá áœá¬ááŸááááºá áá»áœááºá¯ááºááá¯á·á¡ááœáẠá¡áá±á¬ááºážáá¯á¶ážááŸá±á¬áá·áºááŸá±ážááŸá¯á¡ááá·áºááŸá¬ 17-20 ms ááŒá áºáááºá 30-40 ms á¡ááá·áºááœááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á áá»áŸá±á¬ááºááœáŸá¬á០áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááŸáá·áº áááºáá±á¬ááºááŸá¯ááᯠáá»á±á¬á·áá»á±á¬ááºážá á±áá±á¬ ááŸááºáá»á¬ážáá±á¬ áá¯á¶á·ááŒááºááŸá¯áá»á¬ážááᯠáááŸááá«áááºá áá¶ááá±á¬ááºážá áœá¬ááŒáá·áºá Redis ááŸáá·áº áááºáááºááá·áº áá¬áááá áºáá¯ááẠáá¯á¶ááŸááºááẠá á ááá¯ááá¯ááŒá¬áá±áá»áááºááᯠáááŸááá±á¬á¡áá«ááœáẠáááºážáááºážáá«áááºá ááŒá¿áá¬ááá¯ááŒá±ááŸááºážááẠáá»áœááºá¯ááºááá¯á·ááẠá¡áá»áááºááá¬ážááœá²ááá¬ážáá² ááŒá¯ááŒááºááááºážááááºážááŸá¯á¡ááœáẠáááºáá±á¬ááºááŸá¯ááᯠáá±á·áááºááá¯ááºážááœáẠáááºááá¯ááºááŒá®áž ááŒá¿áá¬ááŸááá±á¬ Redis á¥ááá¬ááᯠá¡á á¬ážááá¯ážáá²á·áááºá
- áá¯ááºááœáẠáá±ážáááºáá±á¬ á¡ááŸá¬ážá¡ááœááºážáá»á¬ážááŸáá·áºááẠáá±áá¬ááá®ááœááºááŸá¯ááᯠáááŸáááẠááœááºáá°ááŒá®áž á€áá±áá¬ááᯠááŒá¯ááŒááºááẠáá¯ááºáá±ážááẠá¡áá»áááºáá»á¬ážá áœá¬ áá¯á¶ážá áœá²áá«á
á¡á¬ážáááºážáá»ááºáá»á¬ážááᯠááá·áºááœááºážá ááºážá á¬ážááŒá®áž áá¯á¶ááŸááºááœá±áá±ážááœá±áá°áá»á¬ážááŸáá·áº latency á¡áá±á«áº ááŸá®ááá¯ááŸá¯áááºážáá«ážááŒááºážááŒáá·áº ááá¯ááá¯á¡áááºááŒá±ááá·áºá¡áá¬ááá¯á· ááŒá±á¬ááºážááœáŸá±á·ááẠááá¯á¡ááºááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á· ááá±á¬áá±á«ááºáá«áááºá áá¯áá±ááááŒá¯áá¯ááºááŒá®áž ááœá±ážáá»ááºá áá¬áá»á¬ážá áœá¬ááᯠááœá²ááŒááºážá áááºááŒá¬ááŒá®áž PostgreSQL ááᯠááœá±ážáá»ááºáá²á·áááºá
áá»áœááºá¯ááºááá¯á·ááẠáá±áá¬áá±á·á
áºá¡áá
áºááá¯á· ááŒá±á¬ááºážááœáŸá±á·áá±áááºááŸá¬ 1,5 ááŸá
áºááŸáááŒá®ááŒá
áºááŒá®áž áá±áá¬á á¡áááºážáááºáá»áŸáᬠááŒá±á¬ááºážááœáŸá±á·áá¬ážáá±á¬ááŒá±á¬áá·áº ááᯠáá»áœááºá¯ááºááá¯á·ááẠRedis ááŸáá·áº PostgreSQL ááá¯á·ááŸáá·áº áááŒáá¯ááºááẠáá¯ááºáá±á¬ááºáá±áá«áááºá áá±áá¬áá±á·á
áºáá»á¬ážááŒá¬áž áá±áá¬ááœá±á·áá»á¬ážááŒááºážááŸáá·áº áá°ážááŒá±á¬ááºážááŒááºáž á¡ááá·áºáá»á¬ážá¡ááŒá±á¬ááºáž áá±á¬ááºááẠá¡áá»ááºá¡áááºáá»á¬ážááᯠáá±ážáá¬ážáááºá
áá»áœááºá¯ááºááá¯á· á
áááºááŸá¯ááºááŸá¬ážáá±á¬á¡áá«á áá»áœááºá¯ááºááá¯á·á á¡ááá®áá±ážááŸááºážááẠáá±áá¬áá±á·á
áºááŸáá·áº ááá¯ááºááá¯ááºá¡áá¯ááºáá¯ááºááŒá®áž áá¬á
áᬠRedis ááŸáá·áº PostgreSQL ááᯠáááºáá±á¬ááºááŒáá·áºááŸá¯áá²á·áááºá PostgreSQL á¡á
á¯á¡áá±ážááœáẠáá¬á
áá¬áá
áºáá¯ááŸáá·áº áá¯á¶áá°áá
áºáᯠáá«áááºááẠá á€áááºááŸá¬ áá±áá¬áá±á·á
áºá¡á
á®á¡á
á¥áºááŸáá·áº áááºáá²á·ááá¯á·áá¯á¶ááá¹áááºááŒá
áºáááº-
PgBouncer ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá
áá»áœááºá¯ááºááá¯á· ááœá±á·áá»á¬ážáá±á ááºá áá¯ááºáá¯ááºááẠááœá¶á·ááŒáá¯ážáá²ááŒá áºáááº- PostgreSQL ááŸáá·áº áá¯ááºáá±á¬ááºáá±á¬ á¡áá¯á¶ážááŒá¯áá°á¡áá±á¡ááœááºááŸáá·áº á¡áá¯á¶ážááŒá¯áá°á¡áá±á¡ááœáẠááá¯ážáá¬áᬠáá»áááºáááºááŸá¯áá»á¬áž áááºážáá«ážáá¬áááºá PostgreSQL ááẠáá»áááºáááºááŸá¯áá áºáá¯á á®á¡ááœáẠáá®ážááŒá¬ážáá¯ááºáááºážá ááºáá áºáá¯ááᯠáááºáá®ážááŒá®áž á¡áááºážá¡ááŒá áºáá»á¬ážááᯠá á¬ážáá¯á¶ážáááºá áááºááẠáá»áááºáááºááŸá¯á¡áá±á¡ááœááºááᯠáááºááŸááºáá¬ážááá·áºáá±áá¬á¡áá ááá¯ážááŒáŸáá·áºááá¯ááºáááºá ááá¯á·ááá¯ááºáá«á á¡áá±á¬ááºážáá¯á¶ážáá±á¬áá±áá¬áá±á·á áºá áœááºážáá±á¬ááºáááºááᯠáááŸáááẠá¡ááœáá·áºá¡áá±ážááŸááá«áááºá ááá¯ááá¯á·áá±á¬á¡ááŒá±á¡áá±áá»áá¯ážááœáẠá á¶ááŒááœá±ážáá»ááºááŸá¯ááŸá¬ á¡ááŒá±áá¶ááŸá±á·ááœááºáááºááá·áº áá»áááºáááºáááºáá±áá»á¬ááᯠááœá±ážáá»ááºáááºááŒá áºáááºá
áá»áááºáááºááŸá¯áááºáá±áá»á¬á¡ááœáẠááœá±ážáá»ááºá áá¬ááŸá áºáá¯ááŸááááº- Pgpool ááŸáá·áº PgBouncerá áá«áá±ááá·áº ááááá áºáá¯á áá±áá¬áá±á·á áºáá²á· á¡áá¯ááºáá¯ááºáá²á· á¡áá±á¬ááºážá¡áááºáá¯á¶á á¶ááᯠááá¶á·ááá¯ážáá²á·á¡ááœáẠPgBouncer ááᯠááœá±ážáá»ááºáá²á·áá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠá¡á±á¬ááºáá«á¡áá¯ááºá á¡á
á®á¡á
ááºááᯠáá»ááŸááºáá¬ážáá«áááº- áá»áœááºá¯ááºááá¯á·á á¡ááá®áá±ážááŸááºážááẠPostgreSQL áá¬á
áá¬áá»á¬ážááŒá
áºááá·áº áá±á¬ááºááœááºááœáẠPgBouncer áá
áºáá¯á¡á¬áž áááºáá±á¬ááºááŒáá·áºááŸá¯ááŒá®áž áá¬á
áá¬áá
áºáá¯á
á®á áá±á¬ááºááœááºááœáẠáá
áºáá¯á
á®ááẠá¡ááŒáá¯ááºá¡ááá¯áẠáá°ážáá°áá±á¬áºááŒááá·áº áá¯á¶á
á¶áá°áá
áºáá¯ááŒá
áºáááºá
áá
áºáá»áááºáááºážááŸá¬áááºá áá»áœááºá¯ááºááá¯á·ááẠPostgreSQL ááœáẠáá±áá¬ááá¬ááá
áºáá¯áá¯á¶ážááᯠááááºážáááºážáá¬ážááá¯ááºááŒááºážáááŸáááá·áºá¡ááŒáẠáá±áá¬áá±á·á
áºááŸáá·áºáá¯ááºáá±á¬ááºááá·áºá¡ááŒááºááŸá¯ááºážááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠá¡áá±ážááŒá®ážáá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠá¡ááá®áá±ážááŸááºážá¡ááá·áºááœáẠPostgreSQL ááᯠááœá²ááŒááºážá
áááºááŒá¬ááá¯ááºáá«áááºá á¡áááºááœááºáá±á¬áºááŒáá¬ážáá±á¬á¡á
á®á¡á
ááºáááºá€á¡ááœááºá¡áá±á¬áºáá±ážá¡áááºááŒá±áááº- PostgreSQL shard á¡áá
áºáá
áºáá¯ááá¯ááá·áºáá±á¬á¡áá«á PgBouncer configuration ááá¯ááœááºážáá¶áááºáá¯á¶áá±á¬ááºááŒá®áž application ááẠshard á¡áá
áºááŸáá·áºáá»ááºáá»ááºážá¡áá¯ááºáá¯ááºááá¯ááºáááºá
PgBouncer ááŸá¯á¶ážáááá·áºááŸá¯
áá áºáá¯áááºážáá±á¬ PgBouncer áá¬áááá±áá¯á¶ážááá·áºá¡áá»áááºá¡áá á€á¡á á®á¡á ááºááẠá¡áá¯ááºáá¯ááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠá¡áá«á¡á¬ážáá»á±á¬áºá áœá¬ áá±áá¯á¶ážáá±á¬ áá¬á·ááºáá²áá±á«áºááœáẠáá¬áááá»á¬ážá¡á¬ážáá¯á¶ážááᯠáá¯ááºáá±á¬ááºáá±ááá·áº AWS ááœááºááŸááá«áááºá ááá¯ááá¯á·áá±á¬á¡ááŒá±á¡áá±áá»áá¯ážááœááºá á¥ááá¬ááẠáá¬á·ááºáá²á¡áá áºááá¯á· ááœá±á·áá»á¬ážááŒá®áž ááŒááºá¡áá¯ááºáá¯ááºáááºá áááºážááẠPgBouncer ááŒáá·áº ááŒá áºááœá¬ážáá²á·áá±á¬áºáááºáž ááááá¯ááºáá«á á€áá±á¬ááºážáŠážáá¬áá®áááááºááŸá¬ áá»áœááºá¯ááºááá¯á·ááááºáá±á¬ááºááŸá¯ááᯠ25 áááá áºááŒá¬á¡á±á¬áẠááááŸáááá¯ááºááŒááºážááŒá áºáááºá AWS ááẠááá¯á¡áá»áááºá áá»áœááºá¯ááºááá¯á·ááá¯ááºáá¶á á¡áá±á¬ááºá¡áááºááá±á¬áºáá²á·áá±á¬ ááá¯ááá¯á·áá±á¬á¡ááŒá±á¡áá±áá»á¬ážá¡ááœáẠá¡áá¯á¶ážááŒá¯áá°áááºááá¯á· áááºáá±á¬ááºážááŒááºážááᯠá¡áá¯á¶ážááŒá¯ááẠá¡ááŒá¶ááŒá¯áá¬ážáááºá
ááá¯á·áá±á¬ááºááœááºá áá»áœááºá¯ááºááá¯á·á AWS á¡áá±á¬áá·áºááœáẠá¡áá¬ážáá°á¡ááŒá±á¡áá±áá»áá¯áž áááºáá¶ááŒá áºáá±á«áºáá¬ááá¯ááºáá±á¬ááŒá±á¬áá·áº PgBouncer ááŸáá·áº PostgreSQL á¡á á¯á¡ááœá²á·áá»á¬ážá á¡ááŸá¬ážá¡ááœááºážááᯠáááºážáá¶ááá¯ááºááŸá¯á¡ááŒá±á¬ááºážááᯠáá»áœááºá¯ááºááá¯á· á¡áá±ážá¡áááºá ááºážá á¬ážáá²á·áá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠá¡á±á¬ááºáá«á¡ááá¯ááºáž PgBouncer á¡ááŸá¬ážáá¶ááá¯ááºáááºááŸáááŸá¯á¡á á®á¡á ááºááᯠáááºáá±á¬ááºáá²á·áááº- PgBouncer ááŸá áºáá¯áá«ááŸáááá·áº áá±á¬ááºááœááºááœáẠá¡ááá®áá±ážááŸááºážáá¬áá¬áá»á¬ážá¡á¬ážáá¯á¶ážááẠNetwork Load Balancer ááᯠáááºáá±á¬ááºááŒáá·áºááŸá¯áá«áááºá PgBouncer áá áºáá¯á á®ááẠshard áá áºáá¯á á®ááá°áá®áá±á¬ PostgreSQL áá¬á áá¬ááá¯ááŒáá·áºááŸá¯áááºá AWS áá¬áááá áºáᯠáá»ááºááœááºážááŸá¯ áááºáá¶ááŒá áºááœá¬ážáá«áá á¡ááœá¬ážá¡áá¬á¡á¬ážáá¯á¶ážááᯠá¡ááŒá¬ážáá±á¬ PgBouncer ááŸáááá·áº ááŒááºááœáŸááºážáá«áááºá Network Load Balancer áá»ááŸá¯á¶ážááŸá¯ááᯠAWS á០áá¶á·ááá¯ážáá±ážáá«áááºá
á€á¡á
á®á¡á
á¥áºááẠPgBouncer áá¬áá¬á¡áá
áºáá»á¬ážááᯠááá·áºááœááºážááẠááœááºáá°á
á±áááºá
PostgreSQL Failover Cluster áá áºáá¯áááºáá®ážáá«á
á€ááŒá¿áá¬ááá¯ááŒá±ááŸááºážáá±á¬á¡áá«á áá»áœááºá¯ááºááá¯á·ááẠááá°áá®áá±á¬ááœá±ážáá»ááºááŸá¯áá»á¬ážááᯠááá·áºááœááºážá ááºážá á¬ážáá²á·áááº- ááá¯ááºááá¯ááºáá±ážáá¬ážáá±á¬ áá»ááºááœááºááŸá¯á repmgrá AWS RDSá Patroniá
ááá¯ááºááá¯ááºáá±ážáá¬ážáá±á¬ áá¬ááºááœáŸááºážáá»á¬áž
áááºážááá¯á·ááẠáá¬á áá¬áá¡áá¯ááºááᯠá á±á¬áá·áºááŒáá·áºááá¯ááºááŒá®áž á¡áááºáááŒá±áá«á áá¯á¶á á¶áá°ááᯠáá¬á áá¬áᶠááŒáŸáá·áºáááºááŒá®áž PgBouncer ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááᯠá¡ááºááááºáá¯ááºááá¯ááºáá«áááºá
á€áá»ááºážáááºáááºážá á¡á¬ážáá¬áá»ááºáá»á¬ážááŸá¬ á¡ááŒáá·áºáá¯á¶ážááá¯ážááŸááºážááŸá¯ááŒá áºáááºá á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº áááºááẠScript áá»á¬ážááᯠááá¯ááºááá¯ááºáá±ážáá¬ážááŒá®áž áááºážááá¯á·áá¯ááºáá±á¬ááºáá¯á¶ááᯠá¡ááá¡áá»áá¬ážáááºáá±á¬ááŒá±á¬áá·áºááŒá áºáááºá
cons:
- ááœááºáááºáá»áá¯á·ááœááºážááŸá¯ááŒá áºááá·áºá¡á á¬áž ááááºááá±áá¯á¶ážááá¯ááºáá«á áá«ááᯠáááááá¬ážáááá² Failover ááẠáá¯á¶á á¶áá°ááᯠááááºáᶠááŒáŸáá·áºáááºáááºááŒá áºááŒá®ážá ááááºáá±á¬ááºážááẠáááºáááºáá¯ááºáá±á¬ááºáá±áááºááŒá áºáááºá ááááºá¡áá±ááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠáá¬á áá¬áá¡áááºážááá¹áááœáẠáá¬áá¬ááŸá áºáá¯ááá¯áááŸááááºááŒá áºááŒá®áž áááºážááá¯á·á¡áááºá០áááºááá·áºáá±á¬ááºáá¯á¶ážáá±á«áºáá±áá¬áá»á¬ážáá«ááŸááááºááᯠáá»áœááºá¯ááºááá¯á·áááááá¯ááºáá«á á€á¡ááŒá±á¡áá±ááᯠáŠážááŸá±á¬ááºááœá²ááŒááºážáá¯áááºáž áá±á«áºáááºá
- áá¯á¶á·ááŒááºááŸá¯áááŸááá² áá»áœááºá¯ááºááá¯á· áá»ááºáá áºáá²á·áááºá áá»áœááºá¯ááºááá¯á·áááœá²á·á ááºážáá¯á¶ááœááºá áá¬á áá¬ááŸáá·áºáá¯á¶áá°áá áºáá¯á¶ááᯠááŒá±á¬ááºážááŒá®ážáá±á¬ááºá áá¯á¶á á¶áá°ááẠáá¬á áá¬á¡áá ááœá±á·ááœá¬ážááŒá®áž áá»áœááºá¯ááºááá¯á·ááœáẠáá¯á¶áá°áá»á¬ážáááŸááá±á¬á·áá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠáá¯á¶á á¶áá°á¡áá áºáá áºáá¯ááᯠááá¯ááºááá¯ááºááá·áºááœááºážááááºááŒá áºáá«áááºá
- áá»áœááºá¯ááºááá¯á·ááœáẠPostgreSQL shards 12 áá¯ááŸááá±á¬áºáááºáž áá»ááºááœááºááá·áºáá¯ááºáá±á¬ááºáá»ááºááᯠáááºáá±á¬ááºážá á±á¬áá·áºááŒáá·áºááẠááá¯á¡ááºáááºá ááá¯ááá¯áááºááŸá¬ áá»áœááºá¯ááºááá¯á·ááẠá¡á á¯á¡áá±áž 12 áá¯ááᯠá á±á¬áá·áºááŒáá·áºááááºááŒá áºáá«áááºá shards á¡áá±á¡ááœáẠááá¯ážáá¬áááºááŸáá·áºá¡áá»áŸ failover ááᯠupdate áá¯ááºáááºáááºáž ááá±á·ááá·áºáá«á
ááá¯ááºááá¯ááºáá±ážáá¬ážáá±á¬ áá»ááºááœááºááŸá¯ááẠá¡ááœááºááŸá¯ááºááœá±ážáá¯á¶áááŒá®áž á¡áá±ážá¡ááœá²ááá¯ááºáá±á¬ áá¶á·ááá¯ážáá°áá®ááŸá¯ ááá¯á¡ááºáá«áááºá PostgreSQL á¡á á¯á¡áá±ážáá áºáá¯áááºážááŒáá·áºá áááºážááẠá¡ááœááºáá°áá¯á¶ážááœá±ážáá»ááºááŸá¯ááŒá áºááá¯ááºáá±á¬áºáááºáž áááºážááẠá¡ááá¯ááºážá¡áá¬ááá¯ááºáá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·á¡ááœáẠáááá·áºáá»á±á¬áºáá«á
Repmgr
PostgreSQL á¡á á¯á¡áá±ážáá áºáá¯á áá¯ááºáá±á¬ááºáá»ááºááᯠá á®áá¶ááá·áºááœá²ááá¯ááºááá·áº PostgreSQL á¡á á¯á¡áá±ážáá»á¬ážá¡ááœáẠáá°ážáá°ááŸá¯áááºáá±áá»á¬á áá áºáá»áááºáááºážááŸá¬áááºá áááºážááẠbox ááŸá¡ááá¯á¡áá»á±á¬ááºáá»ááºááœááºááŸá¯áááŸááá«áá¡áá¯ááºá¡ááœááºá¡áá»á±á¬áááºááŒá±ááŸááºážáá»ááºáááááºááœááºáááºáááá¯ááºááá¯áẠ"wrapper" ááá¯áá±ážáááºááá¯á¡ááºáááºá áá«ááŒá±á¬áá·áº á¡á¬ážáá¯á¶ážá ááá¯ááºááá¯ááºáá±ážáá¬ážáá²á· script ááœá±áááºáá±á¬áẠááá¯ááŸá¯ááºááœá±ážáá¬ááá¯ááºáá«áááºá áá«ááŒá±á¬áá·áº Repmgr ááá¯áá±á¬áẠáá ááºážááŒáá·áºáá²á·áá«áá°ážá
AWS RDS
áá»áœááºá¯ááºááá¯á·ááá¯á¡ááºááá»áŸááᯠáá¶á·ááá¯ážáá±ážáááºá áááá¹áá°áá°ážáááºážááᯠááááŒá®áž áá»áááºáááºááŸá¯áá±á«ááºážá á¯ááᯠááááºážááááºážáá¬ážáááºá áááºážááœáẠá¡ááá¯á¡áá»á±á¬ááºááŒá±á¬ááºážááŒááºážáá«ááŸááááº- áá¬á áá¬áá±áá¯á¶ážááœá¬ážáá±á¬á¡áá« áá¯á¶á á¶áá°ááẠáá¬á áá¬á¡áá áºááŒá áºáá¬ááŒá®áž AWS á០dns ááŸááºáááºážááᯠáá¬á áá¬á¡áá áºááá¯á· ááŒá±á¬ááºážáá±ážáᬠáá¯á¶áá°áá»á¬ážááᯠááá°áá®áá±á¬ AZ áá»á¬ážááœáẠáááºááŸááá±ááá¯ááºáá«áááºá
á¡á¬ážáááºážáá»ááºáá»á¬ážááœáẠáá±á¬ááºážááœááºáá±á¬ áá»áááºááŸáááŸá¯ áááŸáááŒááºáž áá«áááºáááºá áá±á¬ááºážá áœá¬áá»áááºááŸáááŒááºážáá¥ááá¬áá áºáá¯á¡áá±ááŒáá·áº- áá»áœááºá¯ááºááá¯á·áá¥ááá¬áá»á¬ážááœáẠ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 ááẠá€ááŒá±ááŸááºážáá»ááºááᯠá áœáá·áºááœáŸááºáááá·áº á¡áááá¡ááŒá±á¬ááºážáááºážááŒá áºááá·áº áá¯á¶ááŸááºá¥ááá¬á á»á±ážááŸá¯ááºážááẠááŸá áºááá®ážáá«ážá á»á±ážááŒá®ážáááºá
Patroni
á€áááºááŸá¬ á á¬ááœááºá á¬áááºážáá±á¬ááºážáá»á¬ážá á¡ááá¯á¡áá»á±á¬ááºáá»ááºááœááºááŒááºážááŸáá·áº github ááŸá á¡áááºážá¡ááŒá áºáá¯ááºáá»á¬ážááŒáá·áº PostgreSQL ááᯠá á®áá¶ááá·áºááœá²áááºá¡ááœáẠpython ááá°áá¬áá¯á¶á á¶áá áºáá¯ááŒá áºáááºá
Patroni áá¡á¬ážáá¬áá»ááºáá»á¬áž
- configuration parameter áá áºáá¯á á®ááᯠáá±á¬áºááŒáá¬ážááŒá®ážá áááºážááẠáááºááá¯á·á¡áá¯ááºáá¯ááºáááºááᯠááŸááºážáááºážáá«áááºá
- á¡ááá¯á¡áá»á±á¬áẠáá»ááºááœááºááŸá¯ ááẠáá±áá¹áá¬áá²á០á¡áá¯ááºáá¯ááºááẠá
- python ááŒáá·áºáá±ážáá¬ážáá¬ážááŒá®ážá áá»áœááºá¯ááºááá¯á·ááá¯ááºááá¯áẠpython ááœááºá¡áá»á¬ážááŒá®ážáá±ážáá±á¬ááŒá±á¬áá·áºá ááŒá¿áá¬áá»á¬ážááá¯ááŒá±ááŸááºážáááºáá»áœááºá¯ááºááá¯á·á¡ááœááºááá¯ááá¯ááœááºáá°áááºááŒá áºááŒá®ážá ááá±á¬áá»ááºáááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážááá¯áááºáá°áá®ááá¯ááºáááá·áºáááºá
- PostgreSQL ááᯠá¡ááŒáá·áºá¡á á á®áá¶ááá·áºááœá²áááºá áááºááẠá¡á á¯á¡áá±ážá áá¯á¶ááŸááºáá»á¬ážá¡á¬ážáá¯á¶ážááœáẠááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááᯠáá áºááŒáá¯ááºááẠááŒá±á¬ááºážáá²ááá¯ááºá á±ááŒá®áž ááœá²á·á ááºážááŸá¯á¡áá áºááᯠá¡áá¯á¶ážááŒá¯áááºá¡ááœáẠá¡á á¯á¡áá±ážááᯠááŒááºáááºá áááºááẠááá¯á¡ááºáá«áá Patroni ááᯠá¡áá¯á¶ážááŒá¯á áááºážááᯠáááºáá¶áá¯ááºáá±á¬ááºááá¯ááºáááºá
cons:
- PgBouncer ááŸáá·áº áááºááá¯á·áááºáá¯á¶ ááŸááºáááºá áœá¬ áá¯ááºáá±á¬ááºááááºááᯠá á¬ááœááºá á¬áááºážáá»á¬ážááœáẠáááŸááºážáááºážáá«á áááºážááᯠá¡áá¯ááºááá¹ááá¬áᯠáá±á«áºááẠáááºáá²áá±á¬áºáááºáž Patroni á áá¬áááºááŸá¬ PostgreSQL ááᯠá á®áá¶ááá·áºááœá²áááºááŒá áºááŒá®áž Patroni ááŸáá·áº áá»áááºáááºááŸá¯áá»á¬áž áááºááá¯á·ááœá¬ážááááºááá¯áááºá áá»áœááºá¯ááºááá¯á·á ááŒá¿áá¬ááŒá áºáá±ááŒá®ááŒá áºáááºá
- Patroni á ááŒá®ážáá¬ážáá±á¬ á¡ááœá²áá»á¬ážáá±á«áºááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá á¥ááᬠá¡áááºážáááºáᬠááŸáááŒá®áž á¡á á០á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºáž ááá°áá¬áá»á¬ážá áœá¬ ááŸááá«áááºá
ááááºá¡áá±ááŒáá·áº áá»áœááºá¯ááºááá¯á·ááẠááŸá¯á¶ážáááá·áºááŸá¯á¡á á¯á¡áá±ážáá áºáá¯áááºáá®ážááẠPatroni ááᯠááœá±ážáá»ááºáá²á·áááºá
Patroni á¡áá±á¬ááºá¡áááºáá±á¬áºáá±ážáá¯ááºáááºážá ááº
Patroni áááá¯ááºáá®ááœááºá áá»áœááºá¯ááºááá¯á·ááœáẠáá¬á
áá¬áá
áºáá¯ááŸáá·áº áá¯á¶á
á¶áá°áá
áºáá¯áááœá²á·á
ááºážáá¯á¶ááœáẠPostgreSQL shard 12 áá¯ááŸááááºá á¡ááá®áá±ážááŸááºážáá¬áá¬áá»á¬ážááẠPgBouncer ááŸáá·áº áá¬ááááŸá
áºáá¯ááŒá
áºááá·áº áá±á¬ááºááœááºááŸá Network Load Balancer ááŸáá
áºááá·áº áá±áá¬áá±á·á
áºáá»á¬ážááᯠáááºáá±á¬ááºááŒáá·áºááŸá¯áá²á·ááŒá®áž áááºážááá¯á·áá±á¬ááºááœááºááœáẠPostgreSQL áá¬áá¬áá»á¬áž á¡á¬ážáá¯á¶ážáá«áááºáá²á·áááºá
Patroni ááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºáááºá ááŒáá·áºáá±áá¬ážáá±á¬ááá¯ááŸá±á¬ááºááŸá¯á¡á
á¯á¡áá±ážááœá²á·á
ááºážááŸá¯áá¯á¶á
á¶ááᯠááœá±ážáá»ááºááẠááá¯á¡ááºáá«áááºá Patroni ááẠetcdá Zookeeperá Consul áá²á·ááá¯á·áá±á¬ ááŒáá·áºáá±áá¬ážáá±á¬ ááœá²á·á
ááºážááŸá¯áá¯á¶á
ᶠááá¯ááŸá±á¬ááºááŸá¯á
áá
áºáá»á¬ážááŒáá·áº á¡áá¯ááºáá¯ááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááœáẠVault ááŸáá·áº ááœá²áááºá¡áá¯ááºáá¯ááºáá±á¬ á
á»á±ážááœááºááœáẠááŒáá·áºá
á¯á¶áá±á¬ Consul á¡á
á¯á¡áá±ážáá
áºáá¯áá»áŸáá¬ááŸáááŒá®áž áááºážááᯠáá»áœááºá¯ááºááá¯á· á¡áá¯á¶ážáááŒá¯áá±á¬á·áá«á áááºážá áááºááœááºáá¬ážááá·áº áááºááœááºáá»ááºá¡ááœáẠáá±á¬ááºá
á
áºáááºááᯠá
áááºá¡áá¯á¶ážááŒá¯ááẠá¡ááŒá±á¬ááºážááŒáá»ááºáá±á¬ááºážáá
áºáá¯á
Patroni áá±á¬ááºá á áºáááºááŸáá·áºáááºááá¯á·á¡áá¯ááºáá¯ááºááááºážá
áá»áœááºá¯ááºááá¯á·ááœáẠáá±á«ááºážáá±á¬ááºáá áºáŠážááŸáá·áº áá¯á¶á á¶áá°áá«áááºáá±á¬ áá±á¬ááºá á áºáááºá¡á á¯á¡áá±ážáá áºáá¯ááŸáá·áº Patroni á¡á á¯á¡áá±ážáá áºáᯠ(Patroni ááœáẠáá¬á áá¬ááᯠá¡á á¯á¡ááœá²á·áá±á«ááºážáá±á¬ááºáá¯áá±á«áºááŒá®áž áá»áœááºáá»á¬ážááᯠáá¯á¶á á¶áá°áá¯áá±á«áºáááº)á Patroni á¡á á¯á¡áá±ážá áá¬áááá áºáá¯á á®ááẠáá±á¬ááºá á áºáááºáᶠá¡á á¯á¡ááœá²á·áá¡ááŒá±á¡áá±ááŸáá·áºáááºáááºáá±á¬ á¡áá»ááºá¡áááºáá»á¬ážááᯠá¡áááºáááŒááºáá±ážááá¯á·áá«áááºá ááá¯á·ááŒá±á¬áá·áºá áá±á¬ááºá á áºáááºá០Patroni á¡á á¯á¡áá±ážá áááºááŸáááœá²á·á ááºážáá¯á¶ááŸáá·áº áááºááŸáá¡áá»áááºááœáẠáááºáá°ááẠáá±á«ááºážáá±á¬ááºááŒá áºáááºááᯠá¡ááŒá²ááŸá¬ááœá±ááá¯ááºáááºá
Patroni ááᯠConsul ááŸáá·áºáá»áááºáááºáááºá áá±á¬ááºá
á
áºáááºááŸáá·áºáá»áœááºá¯ááºááá¯á·áááºááá¯á·á¡áá¯ááºáá¯ááºáá¯á¶ááŸáá·áºáá»áááºáááºááŸá¯á¡á
á®á¡á
ááºááá¯ááœá±ážáá»ááºááá¯ááºáááºá¡áá±á«áº áá°áááºá http ááá¯á·ááá¯áẠhttps áá±á¬áºáááºááœáẠhost áá
áºáá¯ááá¯áááºááŸááºáááºááá¯á¡ááºáááºáá¯ááŒá±á¬áá¬ážááá·áºááá¬ážáááºá
á¬ááœááºá
á¬áááºážáá»á¬ážááá¯áá±á·áá¬áááºáá¯á¶áá±á¬ááºáááº-
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 }}
áá±á¬ááºá á áºáááº-áá¯á¶á á¶
ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠááœá²á·á ááºážááŸá¯áá¯á¶á á¶á¡ááœáẠááá¯ááŸá±á¬ááºááŸá¯ááᯠááœá±ážáá»ááºáá¬ážáááºá Patroni á¡á á¯á¡áá±ážááŸá áá±á«ááºážáá±á¬ááºááᯠááŒá±á¬ááºážáá²ááá·áºá¡áá« PgBouncer ááẠáááºážáááœá²á·á ááºážáá¯á¶áá¯á¶á á¶ááᯠáááºááá¯á·ááŒá±á¬ááºážáááºááᯠááᯠáá»áœááºá¯ááºááá¯á· áá¬ážáááºáááºááá¯á¡ááºáá«áááºá á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº á á¬ááœááºá á¬áááºážááœáẠá€áá±ážááœááºážá¡ááœáẠá¡ááŒá±áááŸááá«á á¡á²áá®ááŸá¬ áá°á¡á PgBouncer áá²á· á¡áá¯ááºáá¯ááºáá¬ááᯠáá±á¬áºááŒááá¬ážáá«áá°ážá
á¡ááŒá±ááá¯ááŸá¬ááœá±áá¬ááœáẠPgBouncer ááŸáá·áº Patroni ááœá²áá»áááºáá¬ááœáẠáá»á¬ážá áœá¬á¡áá±á¬ááºá¡áá°ááŒá áºá á±áááºáᯠСonsul-template áá±ážáá¬ážááá·áº áá±á¬ááºážáá«ážáá áºáá¯áẠ(áá¶ááá±á¬ááºážá áœá¬ááŒáá·áº áá»áœááºá¯ááºáááŸááºáááá±á¬á·áá«)á áááºážá Consul-template á¡áá¯ááºáá¯ááºáá¯á¶ááᯠá á¯á¶á ááºážá á áºáá±ážááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž ááŸá¯á¶á·áá±á¬áºáá²á·áááºá
Consul-template ááẠConsul ááŸá PostgreSQL á¡á á¯á¡áá±ážáááœá²á·á ááºážáá¯á¶ááᯠá¡áááºáááŒááºá á±á¬áá·áºááŒáá·áºáá±áá±á¬ááŒá±á¬áá·áºááŒá áºáááºá áá±á«ááºážáá±á¬ááºááŒá±á¬ááºážáá±á¬á¡áá«á áááºážááẠPgBouncer ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááᯠá¡ááºááááºáá¯ááºáᬠáááºážááᯠááŒááºáááºá áááºááẠá¡áááá·áºáá áºáᯠáá±ážááá¯á·áááºá
áááºážáááááºá ááŒá®ážáá¬ážáá±á¬ á¡áá±á«ááºážááá¹ááá¬ááŸá¬ áááºážááᯠáá¯ááºá¡ááŒá
Ạááááºážáááºážáá¬ážáá±á¬ááŒá±á¬áá·áºá shard á¡áá
áºáá
áºáᯠáááºááá·áºááá·áºá¡áá«á á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááᯠáá¯ááºáááá¬áá¡ááŒá
Ạáá¶á·ááá¯ážáá±ážááá·áº áá¯ááºá¡áá
áºáá
áºáᯠááŒá¯áá¯ááºááŒá®áž áá¯á¶á
á¶ááœááºááᯠá¡ááá¯á¡áá»á±á¬áẠá¡ááºááááºáá¯ááºááẠáá¯á¶áá±á¬ááºáá«áááºá
Patroni ááŸáá·áºá¡áá°áááá¯áá¬á¡áá áº
ááááºá¡áá±ááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠá¡á±á¬ááºáá«áá¯ááºáááºážá¡á
á®á¡á
ááºááᯠáááŸááá²á·áá«áááºá
á¡ááá®áá±ážááŸááºážáá¬áá¬áá»á¬ážá¡á¬ážáá¯á¶ážááẠáá»áááºááœááºáá»áŸá¬ááá¯áááºáá±á¬ááºááŒáá·áºááŸá¯ááŒááºáž â áááºážáá±á¬ááºááœááºááœáẠPgBouncer áááŒá
áºáááºááŸá
áºáá¯ááŸááá«ááẠâ áá
áºáá¯á
á®ááœááºá áá±á¬ááºá
á
áºáááºáá¯á¶á
á¶ááá¯ááœáá·áºáá¬ážáááºá Patroni á¡á
á¯á¡áá±ážáá
áºáá¯á
á®áá¡ááŒá±á¡áá±ááá¯á
á±á¬áá·áºááŒáá·áºááŒá®áž áááºááŸááá±á«ááºážáá±á¬ááºáá¶áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááá¯áá±ážááá¯á·ááá·áº PgBouncer config ááááºá
ááºááŸá¯ááá¯á
á±á¬áá·áºááŒáá·áºáá±ážááẠá¡á
á¯á¡ááœá²á·áá
áºáá¯á
á®á
ááá¯ááºááá¯ááºá ááºážáááºááŒááºážá
á ááºážáááºááŸá¯áááºáááºážáá»ááºááœáẠáá áááºáá® á€á¡á á®á¡á á¥áºááᯠáá¯ááºáá±á¬ááºáá²á·ááŒá®áž á¡ááá¯á¡áá»á±á¬ááºááŒá±á¬ááºážááŒááºážá áá¯ááºáá±á¬ááºáá»ááºááᯠá á áºáá±ážáá²á·áááºá áá°ááá¯á·á áá¯ááºááá¯ááœáá·áºá á áá áºáá¬ááá¯ááœáŸá±á·ááŒá®áž á¡á²áá®á¡ááá¯ááºá¡ááá·áºááŸá¬ á¡á á¯á¡ááœá²á·áá±á«ááºážáá±á¬ááºááᯠâáááºâ ááá¯ááºááŒáááºá AWS ááœááºá áááºážááẠconsole ááŸáááá·áº instance ááá¯ááááºááá¯ááºááá²á·ááá¯á·ááá¯ážááŸááºážáááºá
á
áá
áºáá¬ááẠ10-20 á
áá¹ááá·áºá¡ááœááºáž ááŒááºáá¬ááŒá®ážá ááá¯á·áá±á¬áẠáá¯á¶ááŸááºá¡ááá¯ááºáž ááŒááºááŸá¯ááºááŸá¬ážáá¬áááºá ááá¯ááá¯áááºááŸá¬ Patroni á¡á
á¯á¡áá±ážááẠááŸááºáááºá
áœá¬á¡áá¯ááºáá¯ááºáá²á·áááº- áááºážááẠáá±á«ááºážáá±á¬ááºááá¯ááŒá±á¬ááºážááŒá®áž Сonsul ááá¯á· á¡áá»ááºá¡áááºáá»á¬áž áá±ážááá¯á·áá¬á Сonsul-template ááẠá€á¡áá»ááºá¡áááºáá»á¬ážááᯠáá»ááºáá»ááºážáá±á¬ááºáá°ááŒá®ážá PgBouncer ááœá²á·á
ááºážááŸá¯áá¯á¶á
á¶ááᯠá¡á
á¬ážááá¯ážááŒá®áž ááŒááºáááºá
áááºááẠá¡áááá·áºááᯠáá±ážááá¯á·áá²á·áááºá
ááŒáá·áºáá¬ážáá±á¬áááºá¡á±á¬ááºááœáẠááŸááºáááºáááºááŸáá·áº á ááºáááºáá»áááºááᯠáááºážáá«ážá¡á±á¬áẠáááºááá¯á·ááááºážááááºážááá¯ááºáááºáááºážá
á¡áá¬á¡á¬ážáá¯á¶áž ááŒá®ážááŒáá·áºá á¯á¶á áœá¬ á¡áá¯ááºáá¯ááºáá«áááºá ááá¯á·áá±á¬áº áá±ážááœááºážá¡áá áºáá»á¬áž ááŸááááº- áááºážááẠááŒáá·áºáá¬ážáá±á¬áááºá¡á±á¬ááºááœáẠáááºááá¯á·á¡áá¯ááºáá¯ááºáááºáááºážá áá¯ááºáá¯ááºááŸá¯ááŸá¬ á¡áá¬á¡á¬ážáá¯á¶ážááᯠááŒááºááŒááºáááºáááºáá²á· áá¯á¶ááŒá¯á¶á¡á±á¬áẠáááºááá¯áá¯ááºááá²á
áá»áœááºá¯ááºááá¯á·áá¯ááºáá±á¬ááºááá·áº áááºá ááºážáááºááŸá¯áááºáááºážáá»ááºááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž ááááá±ážááœááºážááá¯ááŒá±ááá¯ááẠáá°áá®áá±ážáá«áááºá áááºážááẠáááá¯áá¬ááá¬á¡á áá¯ááºáá¯ááºááŸá¯ááŸáá·áº áá¯á¶ážááá°áá®ááŒá®áž áá¯ááºáá¯ááºááŸá¯ááŸáá·áº áá¯áááºááŸáá·áº á¡áá®ážá ááºáá¯á¶ážáá°áá®áá±á¬ á ááºážáááºáá±áá¬ááᯠáá¯ááºáá±ážáá¬ážáááºá á ááºážáááºáá±á ááºá¡ááœááºáž PostgreSQL áá¬á áá¬áá»á¬ážáá²á០áá áºáŠážááᯠ"áááº" ááẠáá¯á¶ážááŒááºááŒá®áž áá¬ááŒá áºáááºááᯠááŒáá·áºááŸá¯ááẠáá¯á¶ážááŒááºáá²á·áááºá ááá¯á·áá±á¬áº áááºážáááá¯ááºáá®ááœááºá á¡ááá¯á¡áá»á±á¬ááºááŸááá·áºááŒááºážááᯠá á áºáá±ážááẠá¡áá±ážááŒá®ážáááºá á¡ááŒá±á¬ááºážááŸá¬ á€áááºáááºážáá»ááºááœáẠáá»áœááºá¯ááºááá¯á·ááœáẠPostgreSQL shards áá»á¬ážá áœá¬ááŸááá±á¬ááŒá±á¬áá·áº áá¯ááºáá¯ááºááŒááºážáááŒá¯áá® configuration scripts áá»á¬ážááᯠáá±á¬ááºážááœááºáá±á¬á ááºážáááºááŸá¯ááᯠáááŸááááºááŒá áºáá«áááºá
á¡áá¯ááºááŸá áºáá¯áá¯á¶ážááẠáááºááŸááºážáá»ááºááŒá®ážáá¯á¶áá±á«ááºáá±á¬áºáááºáž áá»áœááºá¯ááºááá¯á·ááœáẠPostgreSQL 9.6 ááŸááááºá áá»áœááºá¯ááºááá¯á·ááẠ11.2 ááá¯á· áá»ááºáá»ááºáž á¡ááá·áºááŒáŸáá·áºáááºááá¯ááºáá«ááá¬ážá
á¡ááá·áº á ááá·áºááŒáá·áº áá¯ááºáá±á¬ááºááẠáá»áœááºá¯ááºááá¯á· áá¯á¶ážááŒááºáá²á·áááº- áááá¡ááá·áº 2 ááá¯á· á¡ááá·áºááŒáŸáá·áºááŒá®ážáá±á¬áẠPatroni ááᯠá áááºáá«á
PostgreSQL á¡ááºááááº
PostgreSQL áá¬ážááŸááºážááᯠáá»ááºááŒááºá áœá¬ á¡ááºááááºáá¯ááºáááºá ááœá±ážáá»ááºááœáá·áºááᯠá¡áá¯á¶ážááŒá¯áá«á -káá¬á·ááºááá·áºááºáá»á¬ážááᯠáá áºááºáá±á«áºááœáẠáááºáá®ážáá¬ážááŒá®áž ááá·áºáá±áá¬ááᯠáá°ážáá°ááẠáááá¯á¡ááºáá«á 300-400 GB ááá¯á¡ááŒá±áá¶á á¡ááºááááºááẠ1 á áá¹ááá·áºááŒá¬áááºá
áá»áœááºá¯ááºááá¯á·ááœáẠshard áá»á¬ážá áœá¬ááŸááááºá ááá¯á·ááŒá±á¬áá·áº update ááá¯á¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºáááºááá¯á¡ááºáááºá áá«ááá¯áá¯ááºááá¯á·á áá»áœááºá¯ááºááá¯á·á¡ááœáẠá¡ááºááááºáá¯ááºáááºážá ááºáá áºáá¯áá¯á¶ážááᯠááá¯ááºááœááºáá±ážááá·áº Ansible playbook ááᯠáá±ážáá²á·áááº-
/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='
á¡ááá·áºááŒáŸáá·áºáááºááŸá¯áá áááºáá®á áááºááẠáááºážááᯠááá·áºáááºáá»ááºááŒáá·áº áá¯ááºáá±á¬ááºááááºááᯠá€áá±áá¬ááœáẠáááááŒá¯ááẠá¡áá±ážááŒá®ážáááºá --á á áºáá±ážáá«áá¡ááá·áºááŒáŸáá·áºááá¯ááºá á±ááẠáá±áá»á¬á á±áááºá áá»áœááºá¯ááºááá¯á·á script ááẠá¡ááá·áºááŒáŸáá·áºáááºááŸá¯áá¬áá¡ááœáẠconfigs áá»á¬ážááᯠá¡á á¬ážááá¯ážáá±ážáá«áááºá áá»áœááºá¯ááºááá¯á·á áá¬ááºááœáŸááºážááẠá áá¹ááá·áº 30 á¡ááœááºáž ááŒá®ážááŒá±á¬ááºáá²á·ááŒá®áž á¡ááœááºáá±á¬ááºážááœááºáá±á¬ ááááºááŒá áºáááºá
Patroni ááá¯ááœáá·áºáá«á
áá¯áááááŒá¿áá¬ááá¯ááŒá±ááŸááºážááẠPatroni configuration ááá¯ááŒáá·áºáá«á ááá¬ážááẠrepository ááœáẠPatroni ááᯠááááá¯á¶ážá áááºáá±á¬á¡áá« áá±áá¬áá±á·á áºá¡áá áºáá áºáá¯ááᯠá¡á ááŒá¯áááºá¡ááœáẠáá¬áááºááŸááá±á¬ initdb ááŒáá·áº ááá°áá¬ááœá²á·á ááºážááŸá¯áá áºáá¯ááŸááááºá ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·ááœáẠá¡áááºááá·áºáá¯ááºáá¬ážáá±á¬ áá±áá¬áá±á·á áºáá áºáá¯ááŸááá±ááŒá®ááŒá áºáá±á¬ááŒá±á¬áá·áºá á€ááá¹áááᯠááœá²á·á ááºážááŸá¯á áá áºá០áááºááŸá¬ážááá¯ááºáá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠááŸáááŒá®ážáá¬áž PostgreSQL á¡á á¯á¡áá±ážááœáẠPatroni ááᯠá áááºááá·áºááœááºážááŒá®áž áááºážááᯠáá¯ááºáá±á¬ááºááá·áºá¡áá« ááŒá¿áá¬á¡áá áºáá áºáá¯ááá¯á· áá±á¬ááºááŸááá¬áááº- áá¬áá¬ááŸá áºáá¯áá¯á¶ážááẠáá±á«ááºážáá±á¬ááºáá áºáŠážá¡ááŒá Ạá áááºáá²á·áááºá Patroni ááẠá¡á á¯á¡áá±ážá á¡á á±á¬ááá¯ááºážá¡ááŒá±á¡áá±á¡ááŒá±á¬ááºáž áá¬ááŸááááá² áá¬áá¬ááŸá áºáá¯áá¯á¶ážááᯠá¡áááºáá° áá®ážááŒá¬ážá¡á á¯á¡áá±ážááŸá áºáá¯á¡ááŒá Ạá áááºááẠááŒáá¯ážá á¬ážáááºá á€ááŒá¿áá¬ááá¯ááŒá±ááŸááºážáááºá áááºááẠslave áá±á«áºááŸá áá±áá¬ááŒáá·áº áááºážááœáŸááºááᯠáá»ááºááẠááá¯á¡ááºáááº-
rm -rf /var/lib/postgresql/
áá»áœááºââáá±á¬á·áºâá¡ááœááºâáá² áá¯ááºâáááŸá¬á
ááá·áºááŸááºážáá±á¬áá¯á¶áá°ááᯠáá»áááºáááºáá±á¬á¡áá«á Patroni ááẠbasebackup áá±á«ááºážáá±á¬ááºááᯠááŒá¯áá¯ááºááŒá®áž áááºážááᯠáá¯á¶á á¶áá°ááá¯á· ááŒááºáááºááá°ááŒá®ážáá±á¬áẠwal ááŸááºáááºážáá»á¬ážá¡ááá¯ááºáž áááºááŸáá¡ááŒá±á¡áá±ááŸáá·áº ááá¯ááºáá»á±á¬áá®ááœá±ááŒá áºá á±áááºá
áá»áœááºá¯ááºááá¯á·ááŒá¯á¶ááœá±á·ááá±á¬ áá±á¬ááºáááºá¡áááºá¡áá²áá áºáá¯ááŸá¬ PostgreSQL á¡á á¯á¡áá±ážá¡á¬ážáá¯á¶ážááᯠáá¯á¶áá±á¡á¬ážááŒáá·áº áááºááᯠá¡áááºáá±ážáá¬ážáá«áááºá á¡á á¯á¡ááœá²á·áá áºáá¯á á®ááẠáá áºáááºááŸáá·áºáá áºááẠáá¬áá»áŸááááá±á¬á¡áá«á á€á¡áá¬ááẠáá¯á¶ááŸááºááŒá áºáááºá ááá¯á·áá±á¬áº Patroni ááᯠáááºá¡áá¯á¶ážááŒá¯ááá¯áá±á¬á¡áá«á á¡á á¯á¡áá±ážáá»á¬ážá¡á¬ážáá¯á¶ážááœáẠáá°ážááŒá¬ážáá±á¬á¡áááºáá áºáᯠááŸáááá«áááºá ááŒá±ááŸááºážáá»ááºááŸá¬ PostgreSQL ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááœáẠá¡á á¯á¡áá±ážá¡áááºááᯠááŒá±á¬ááºážáá²áááºááŒá áºáááºá
load á ááºážáááºááŸá¯
áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºáá»á¬ážáá±á«áºááœáẠá¡áá¯á¶ážááŒá¯áá°á¡ááœá±á·á¡ááŒá¯á¶ááᯠá¡áá¯áá°ááá·áº á ááºážáááºááŸá¯áá áºáá¯ááᯠá áááºááá¯ááºáá«ááŒá®á áááºááẠáá»áœááºá¯ááºááá¯á·á áá»ááºážáá»áŸáá±á·á ááºáááºááá¯ážááá¯á·áá±á¬ááºááŸááá±á¬á¡áá«á áá»áœááºá¯ááºááá¯á·ááẠá¡ááá¡áá»áá°áá®áá±á¬á ááºážáááºááŸá¯ááᯠáááºáá«ááá²áá²áá¯ááºáᬠPostgreSQL áá±á«ááºážáá±á¬ááºááŸáá·áº á¥ááá¬áá áºáá¯ááᯠááááºááá¯ááºáá«áááºá á¡ááá¯á¡áá»á±á¬áẠáá»ááºááœááºááŸá¯ááẠáá»áœááºá¯ááºááá¯á· áá»áŸá±á¬áºááá·áºáá¬ážááá·áºá¡ááá¯ááºáž áá¯ááºáá±á¬ááºáá²á·áááº- Patroni ááẠáá±á«ááºážáá±á¬ááºááᯠááŒá±á¬ááºážáá²áá²á·ááŒá®ážá áá±á¬ááºá á áºáááºáá¯á¶á á¶ááᯠPgBouncer ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááᯠááœááºážáá¶ááŒá®áž ááŒááºáááºá áááºááẠá¡áááá·áºáá áºáᯠáá±ážááá¯á·áá²á·áááºá Grafana ááŸá áá»áœááºá¯ááºááá¯á·áááááºáá áºáá»á¬ážá¡áá á áá¹ááá·áº 20 á០30 á¡áá ááŸá±á¬áá·áºááŸá±ážááŸá¯áá»á¬ážááŸáááŒá®áž áá±áá¬áá±á·á áºááŸáá·áºáá»áááºáááºááŸá¯ááŸáá·áºáááºá ááºáá±á¬ áá¬áá¬áá»á¬ážá០á¡ááŸá¬ážá¡ááœááºážá¡áááºážáááºááŸáááŒá±á¬ááºáž áááºááŸá¬ážáá«áááºá á€áááºááŸá¬ áá¯á¶ááŸááºá¡ááŒá±á¡áá±ááŒá áºáááºá ááá¯áá²á·ááá¯á·áá±á¬áááºááá¯ážáá»á¬ážááẠáá»áœááºá¯ááºááá¯á·ááá»ááºááœááºááŸá¯á¡ááœáẠáááºáá¶ááá¯ááºááœááºááŸáááŒá®áž áááºáá±á¬ááºááŸá¯á ááºáááºáá»áááºááẠáá»áááºážáá±ááá¯áá±á¬ááºážáá«áááºá
Patroni ááᯠáá¯ááºáá¯ááºáá±ážááá¯á· áá°áá±á¬ááºáá¬áááºá
ááááºá¡áá±ááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠá¡á±á¬ááºáá«á¡á á®á¡á ááºááᯠáááŸááá²á·áá«áááºá
- PgBouncer áá¬áá¬áá»á¬ážááœáẠáá±á¬ááºá á áºáááºáá¯á¶á á¶ááᯠá¡áá¯á¶ážááŒá¯ááŒá®áž á áááºááá¯ááºáá«á
- PostgreSQL áá¬ážááŸááºáž 11.2 ááá¯á· ááœááºážáá¶ááŸá¯áá»á¬ážá
- á¡á á¯á¡áá±ážáá¡áááºááᯠááŒá±á¬ááºážáá²áá«á
- Patroni Cluster ááᯠá áááºááŒááºážá
áá áºáá»áááºáááºážááŸá¬áááºá áá»áœááºá¯ááºááá¯á·áá¡á á®á¡á á¥áºááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž áááá¡áá»ááºááᯠá¡áá»áááºáááœá±ážáá®ážáá«ážááŒá¯áá¯ááºááá¯ááºá á±áááºá áá»áœááºá¯ááºááá¯á·ááẠPgBouncer áá áºáá¯á á®ááᯠá¡áá¯ááºááŸáááºááŸá¬ážááá¯ááºááŒá®áž áááºážáá±á«áºááœáẠáá±á¬ááºá á áºáááºáá¯á¶á á¶áá¯á¶á á¶ááᯠá¡áá¯á¶ážááŒá¯á áá¯ááºáá±á¬ááºááá¯ááºáááºá áá« áá«ááá¯á·áá¯ááºáá²á·áááºá
áá»ááºááŒááºá áœá¬ ááŒáá·áºáá»ááºááŒááºážá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠá ááºážáááºááŸá¯áááºáááºážáá»ááºááœáẠplaybooks á¡á¬ážáá¯á¶ážááᯠá ááºážáááºááŒá®ážááŒá áºáá±á¬ááŒá±á¬áá·áºá áá¬ááºááœáŸááºážá¡ááŒáá·áºá¡á á¯á¶ááá¯ááºáá±á¬ááºáá»áááºááẠshard áá áºáá¯á á®á¡ááœáẠ1,5 á០2 áááá áºá¡ááááŒá áºáááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·ááááºáá±á¬ááºááŸá¯ááᯠááááºááá·áºáá² shard áá áºáá¯á á®áá®ááá¯á· á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá¯ááºáá±ážááá¯ááºáá±á¬áºáááºážá áá»áœááºá¯ááºááá¯á·ááẠPostgreSQL áá áºáá¯á á®ááᯠáááá áºá¡áá±á¬áºááŒá¬ ááááºáá¬ážááááºááŒá áºáááºá á€ááá á¹á ááœááºá ဠShard ááœááºááŸááá±á¬áá±áá¬á¡áá¯á¶ážááŒá¯áá°áá»á¬ážááẠááá¯á¡áá»áááºááœáẠá¡ááŒáá·áºá¡áá¡áá¯ááºááá¯ááºááá¯ááºáá«á áááºážááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠáááºááá¶ááá¯ááºáá«á
á€á¡ááŒá±á¡áá±ááŸááœááºááŒá±á¬ááºáááºáááºážáááºážááŸá¬ á ááá
áºááŒáááºááŒá¯áá¯ááºáá±á¬ááŒááºáááºááááºážááááºážááŸá¯ááŒá
áºáááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·ááááºáá±á¬ááºááŸá¯ááᯠáá¯á¶ážáááááºááá¯ááºááŒá®áž áá»áœááºá¯ááºááá¯á·ááá±áá¬áá±á·á
áºááŒá
áºáááºáá»á¬ážááᯠá¡ááá·áºááŒáŸáá·áºáá±á¬á¡áá«ááœáẠá
á®á
ááºáá¬ážááá·áºá¡áá¯ááºá¡ááœáẠáááºážááá¯ážáá
áºáá¯ááŒá
áºáááºá áá±á¬ááºááŒáááºážáá±á«ááºáá±á¬ááºááá¯á· áá
áºáááºáá²áá»ááºáá±á¬á·áááºá á
á±á¬áá·áºááá¯ááºážááŒá®áž ááŒááºáááºááá¯á· áá¯á¶ážááŒááºááá¯ááºáááºá á
á±á¬áá·áºááá¯ááºážáá»áááºá¡ááœááºážá áá»áœááºá¯ááºááá¯á·ááẠááááááá¯ááºááᯠáá¯á¶ááŒá¯á¶á
á±áááº- PostgreSQL shard áá
áºáá¯á
á®á¡ááœááºá áá±á¬ááºáá¯á¶ážááœááºáá±áá¬ááᯠááááºážáááºážááẠáá»ááºááœááºááœá¬ážáá±á¬á¡áá«ááœááºá Patroni á¡á
á¯á¡áá±ážááœáẠáá¯á¶á
á¶áá°á¡áá
áºááŒá
áºáá¬ááá·áº shard áá
áºáá¯á
á®á¡ááœáẠááá°áá¬á¡áá
áºáá
áºáá¯ááᯠáááºáá±á¬ááºážááá·áºááœááºážáá¬ážáá«áááºá áá±áá¬ááá¯áá»ááºáá
áºááẠcommand ááá¯ááá¯ááºáá±á¬ááºáááºá áá«ááœá±á¡á¬ážáá¯á¶ážá á¡ááŸá¬ážá¡ááœááºážááŒá
áºááá¯ááºááŒá±ááᯠáá»áŸá±á¬á·áá»ááá¯á· áá°áá®áá±ážáá²á·áááºá
áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·ááááºáá±á¬ááºááŸá¯ááᯠááŒááºáááºá
áááºááá¯ááºáááºá á¡á¬ážáá¯á¶ážááẠááá·áºá¡áá±ááŒáá·áº áá¯ááºáá±á¬ááºáá²á·áááºá áá¯á¶ážá
áœá²áá°áá»á¬ážá áááºáááºáá¯ááºáá±á¬ááºáá±ááŒáá±á¬áºáááºáž ááááºáá»á¬ážááœáẠáá±á¬ááºá
á
áºáááºáá¬áá¬áá»á¬ážáá±á«áºááœáẠáá¯á¶ááŸááºááá¯ááºáá±á¬ áááºááá¬áááᯠáááááŒá¯áááá«áááºá
áá«ááᯠá
ááºážáááºáá²á· áááºáááºážáá»ááºááŸá¬ áá¬ááŒá±á¬áá·áº áááœá±á·áá²á·ááá¬áá²á á€ááŒá¿áá¬ááẠá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶á¡á¬áž áá¯ááºáááá¬áá¡ááŒá
Ạááá¯ááºáá¬áááºááŸáá·áº á
ááºážáááºááŸá¯áááºáááºážáá»ááºá០áá¯ááºáá¯ááºááŸá¯á¡áá á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶áá
áºáá¯áá¯á¶ážááᯠááŒá¯ááŒááºááẠááá¯á¡ááºááŒá±á¬ááºáž áá±á¬ááºážá
áœá¬áá±á¬áºááŒáááºá áá®ááá¯ááŸááá¯ááºááẠáá»áœááºáá±á¬áºááá¯á·ááá¬áá²á· ááŒá¿áá¬ááᯠáááá¯á·á á¡áááºážááœááºáá«áááºá áá¬ááŒá
áºáá¬áá²? áá±á¬ááºá
á
áºáááºááẠáá¯ááºáá¯ááºááŸá¯ááœáẠááááá¯á¶ážáá±á«áºáá¬ááŒá®áž á
ááºážáááºááŸá¯áááºáááºážáá»ááºááœáẠááááºá¡áá±ááŒáá·áº á
ááºážáááºáááºáááºážáá»ááºááœáẠáá±á¬ááºá
á
áºáááºááá¬ážááŸááºážááẠáá¯ááºáá¯ááºááŸá¯ááẠááá¯ááá¯ááŒáá·áºáá¬ážáááºá áá¯ááºáá±ááŸá¯áá
áºáá¯ááœááºá Consul-template ááŸáá·áºá¡áá¯ááºáá¯ááºáá±á¬á¡áá« 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 á¡á á¯á¡áá±ážááẠáááºážáá¡á á¯á¡áá±ážá¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºáá»á¬ážááᯠááŒááºáááºááá°á ááŒááºáááºá áááºááá¯ááºááŒááºážáááŸááá²á·áá«á
ááŒá±ááŸááºážáá»ááºááŸá¬áááºá áá»áœááºá¯ááºááá¯á·ááẠGithub ááœáẠááŒá¿áá¬áá áºáá¯ááŸáá áºááá·áº Patroni á á¬áá±ážááá¬áá»á¬ážááᯠáááºááœááºáá²á·áááºá áááºážááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááá¯ááºáá»á¬ážá¡ááœáẠááá¯ážáááºááŸá¯áá»á¬ážááᯠá¡ááŒá¶ááŒá¯áá¬ážáááº-
consul:
consul.checks: []
bootstrap:
dcs:
retry_timeout: 8
áá»áœááºá¯ááºááá¯á·ááẠá ááºážáááºááŸá¯áááºáááºážáá»ááºááœáẠááŒá¿áá¬ááᯠáá¯á¶áá°ááœá¬ážá á±ááŒá®áž ááá¯ááœá±ážáá»ááºá áá¬áá»á¬ážááᯠá ááºážáááºááá¯ááºáá²á·áá±á¬áºáááºáž áá¶ááá±á¬ááºážá áœá¬ááŒáá·áº áááºážááá¯á·ááẠá¡áá¯ááºáááŒá áºáá²á·áá«á
ááŒá¿áá¬á áááŒá±ááŸááºážááá¯ááºáá±ážáá°ážá á¡á±á¬ááºáá«ááŒá±ááŸááºážáááºážáá»á¬ážááᯠá ááºážáá¯á¶ážááŒáá·áºááẠá á®á ááºáá¬ážáá«áááºá
- Patroni á¡á á¯á¡áá±ážáá áºáá¯á á®ááœáẠáá±á¬ááºá á áºáááº-á¡á±ážáá»áá·áºááᯠá¡áá¯á¶ážááŒá¯áá«á
- áá¯ááºááœáẠááŒá¿áá¬ááᯠááŒá±ááŸááºážáá«á
á¡ááŸá¬ážá¡ááœááºážááŒá áºááœá¬ážááá·áºáá±áá¬ááᯠáá»áœááºá¯ááºááá¯á·áá¬ážáááºáá«áááº- ááŒá¿áá¬ááŸá¬ ááœá²á·á ááºážááŸá¯ááá¯ááºááŸáá áºááá·áº ááœáŸááºážááá¯ážááŒááºážáááŒá¯ááá·áº áá¯á¶áá±á¡áá»áááºááœááºá¡áá¯á¶ážááŒá¯ááŒááºáž ááŒá áºááá¯ááºáááºá áá±á¬ááºáá¯á¶áž Consul áá¬áá¬ááᯠá¡á á¯á¡áá±ážá០áááºááŸá¬ážááá¯ááºáá±á¬á¡áá«á áá±á¬ááºá á áºááẠá¡á á¯á¡áá±ážáá áºáá¯áá¯á¶ážááẠáá áºá áá¹ááá·áºáá»á±á¬áºááŒá¬á¡á±á¬áẠááá¯ááºážáá¶á·áá¬ážáá±á¬ááŒá±á¬áá·áº Patroni ááẠá¡á á¯á¡áá±ážá á¡ááŒá±á¡áá±ááᯠááááŸáááá¯ááºááá·áºá¡ááŒáẠá¡á á¯á¡áá±ážáá áºáá¯áá¯á¶ážááᯠá¡ááŒá®ážá¡ááá¯áẠááŒááºáááºá áááºáááºá
áá¶áá±á¬ááºážáá±á¬ááºáá áœá¬á áá»áœááºá¯ááºááá¯á·ááẠáá±á¬ááºááẠá¡ááŸá¬ážá¡ááœááºážáá»á¬ážááᯠáááŒá¯á¶ááœá±á·ááá«á
Patroni á¡áá¯á¶ážááŒá¯ááŒááºážáááááºáá»á¬áž
Patroni ááᯠá¡á±á¬ááºááŒááºá
áœá¬ ááœáŸáá·áºáááºááŒá®ážáá±á¬ááºá á¡á
á¯á¡áá±ážáá
áºáá¯á
á®ááœáẠáá±á¬ááºááẠáá¯á¶á
á¶áá°áá
áºáá¯ááᯠáááºáá±á¬ááºážááá·áºáá¬ážáá«áááºá ááá¯á¡áá« á¡á
á¯á¡ááœá²á·áá
áºáá¯á
á®ááœáẠá¡áááŒá±á¬ááºáá¯á¶ááá¹áá¬ááºááŸááá«áááº- áá±á«ááºážáá±á¬ááºáá
áºáŠážááŸáá·áº áá¯á¶á
á¶áá°ááŸá
áºáá¯á áá°ážááŒá±á¬ááºážááá·áºá¡áá« áŠážááŸá±á¬ááºááœá²ááœá¬ážááá·áºá¡áá« áá±ážáááºážá
á±áááºá¡ááœáẠááœááºááá·áºáá
áºáá¯ááŸááááºá
Patroni ááẠáá¯ááºáá¯ááºááŸá¯ááᯠáá¯á¶ážááá»á±á¬áº áá¯ááºááá¯ááºáá²á·áááºá áá®á¡áá»áááºááŸá¬áá±á¬á· áá°á áá»áœááºáá±á¬áºááá¯á·ááᯠáá°áá®ááá¯á· á
á®áá¶áá¬ážááŒá®ážáá¬ážá áááŒá¬áá±ážáá®áá á¡á
á¯á¡ááœá²á·áá»á¬ážáá²ááŸáá
áºáá¯ááá±á«ááºážáá±á¬ááºááẠAWS ááœááºáá±áá¯á¶ážááœá¬ážáááºá á¡ááá¯á¡áá»á±á¬ááºáá»ááºááœááºááŸá¯á¡áá¯ááºáá¯ááºááŒá®ážá¡áá¯á¶ážááŒá¯áá°áá»á¬ážáááºáááºá¡áá¯ááºáá¯ááºáá²á·áááºá Patroni ááẠáááºážá á¡ááááá¬áááºááᯠááŒá®ážááŒá±á¬ááºáá²á·áááºá
Patroni áá¡áá¯á¶ážááŒá¯ááŸá¯á¡áá±ážá áááºá¡áá»ááºážáá»á¯ááº
- ááœá²á·á ááºážááŸá¯ááŒá±á¬ááºážáá²ááŒááºážá¡ááœáẠááœááºáá°ááŒááºážá instance áá áºáá¯ááœáẠconfiguration ááá¯ááŒá±á¬ááºážááẠáá¯á¶áá±á¬ááºááŒá®áž áááºážááᯠcluster áá áºáá¯áá¯á¶ážá¡áá ááœá²áááºáááºááŒá áºáááºá ááœá²á·á ááºážááŸá¯á¡áá áºááᯠá¡áá¯á¶ážááŒá¯ááẠááŒááºáááºá áááºááẠááá¯á¡ááºáá«á Patroni á ááá·áºá¡á¬áž á¡áááá±ážáá«áááºá Patroni ááẠá¡ááœááºá¡áááºááŒá±ááá·áº command áá áºáá¯áááºážááŒáá·áº cluster áá áºáá¯áá¯á¶ážááᯠááŒááºáááºá áááºááá¯ááºáááºá
- á¡ááá¯á¡áá»á±á¬áẠáá»ááºááœááºááŸá¯ááẠá¡áá¯ááºáá¯ááºááŒá®áž áá»áœááºá¯ááºááá¯á·ááᯠáá°áá®ááẠá á®áá¶áá¬ážááŒá®ážááŒá áºáááºá
- á¡ááá®áá±ážááŸááºáž áááºááá·áºááŒááºážáááŸááá² PostgreSQL á¡ááºááááºáá¯ááºáá«á áá¯á¶áá°áá»á¬ážááᯠáá¬ážááŸááºážá¡áá áºááá¯á· áŠážá áœá¬ á¡ááºááááºáá¯ááºááá«áááºá ááá¯á·áá±á¬áẠPatroni á¡á á¯á¡áá±ážááŸá áá±á«ááºážáá±á¬ááºááᯠááŒá±á¬ááºážáᬠáá±á«ááºážáá±á¬ááºáá±á¬ááºážááᯠá¡ááºááááºáá¯ááºááá«áááºá á€ááá á¹á ááœááºá á¡ááá¯á¡áá»á±á¬ááºáá»ááºááœááºááŸá¯áááá¯á¡ááºáá±á¬á ááºážáááºááŸá¯ááŒá áºáá±á«áºáááºá
source: www.habr.com