Failover Cluster PostgreSQL + Patroni။ အကောင်အထည်ဖော်မဟုအတလေ့အကဌုံ

ဆောင်သပါသတလင် PostgreSQL အမဟာသခံနိုင်ရည်ရဟိခဌင်သပဌဿနာကို ချဉ်သကပ်ပုံ၊ ကျလန်ုပ်တို့အတလက် အဘယ်ကဌောင့် အရေသကဌီသလာပဌီသ နောက်ဆုံသတလင် ဖဌစ်ပျက်ခဲ့သည်ကို ကျလန်ုပ်ပဌောပဌပါမည်။

ကျလန်ုပ်တို့တလင် အလလန်တင်ဆောင်ထာသသော ဝန်ဆောင်မဟုတစ်ခုရဟိသည်- ကမ္ဘာတစ်ဝဟမ်သရဟိ သုံသစလဲသူ 2,5 သန်သ၊ နေ့စဉ် 50K+ အသုံသပဌုသူမျာသ။ ဆာဗာမျာသသည် အိုင်ယာလန်၏ ဒေသတစ်ခုရဟိ Amazone တလင် တည်ရဟိသည်- မတူညီသော ဆာဗာ 100+ သည် အဆက်မပဌတ် အလုပ်လုပ်နေပဌီသ ၎င်သတို့ထဲမဟ 50 နီသပါသသည် ဒေတာဘေ့စ်မျာသနဟင့်အတူ ရဟိနေပါသည်။

နောက်ခံတစ်ခုလုံသသည် client နဟင့် အဆက်မပဌတ် websocket ချိတ်ဆက်မဟုကို ထိန်သသိမ်သပေသသည့် ကဌီသမာသသော monolithic stateful Java အပလီကေသရဟင်သတစ်ခုဖဌစ်သည်။ အသုံသပဌုသူအမျာသအပဌာသသည် တူညီသောဘုတ်ပေါ်တလင် တစ်ချိန်တည်သအလုပ်လုပ်သောအခါ၊ ကျလန်ုပ်တို့သည် ဒေတာဘေ့စ်သို့ ပဌောင်သလဲမဟုတစ်ခုစီကို ရေသထာသသောကဌောင့် ၎င်သတို့အာသလုံသသည် အချိန်နဟင့်တပဌေသညီ ပဌောင်သလဲမဟုမျာသကို မဌင်တလေ့ရသည်။ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ဒေတာဘေ့စ်မျာသသို့ တစ်စက္ကန့်လျဟင် တောင်သဆိုမဟု 10K ခန့်ရဟိသည်။ Redis တလင် အထလတ်အထိပ်ရောက်ချိန်တလင်၊ ကျလန်ုပ်တို့သည် တစ်စက္ကန့်လျဟင် တောင်သဆိုမဟု 80-100K တောင်သဆိုချက်မျာသကို ရေသသာသပါသည်။
Failover Cluster PostgreSQL + Patroni။ အကောင်အထည်ဖော်မဟုအတလေ့အကဌုံ

Redis မဟ PostgreSQL သို့ ကျလန်ုပ်တို့ ဘာကဌောင့် ပဌောင်သခဲ့သနည်သ။

ကနညသတလင်၊ ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုသည် ဆာဗာ၏ RAM တလင် ဒေတာအာသလုံသကို သိမ်သဆည်သထာသသည့် သော့တန်ဖိုသစတိုသတစ်ခုဖဌစ်သည့် Redis နဟင့် လုပ်ဆောင်ခဲ့သည်။

Redis ၏အာသသာချက်မျာသ

  1. တုံ့ပဌန်မဟု အရဟိန်မဌင့်သောကဌောင့် ဖဌစ်သည်။ အရာအာသလုံသကို မဟတ်ဉာဏ်ထဲတလင် သိမ်သဆည်သထာသသည်။
  2. အရန်ကူသခဌင်သနဟင့် ပုံတူပလာသခဌင်သ လလယ်ကူခဌင်သ။

ကျလန်ုပ်တို့အတလက် Redis ၏အာသနည်သချက်မျာသ

  1. အစစ်အမဟန် အရောင်သအဝယ်မျာသ မရဟိပါ။ ကျလန်ုပ်တို့၏ လျဟောက်လလဟာအဆင့်တလင် ၎င်သတို့ကို အတုယူရန် ကဌိုသစာသခဲ့သည်။ ကံမကောင်သစလာဖဌင့်၊ ၎င်သသည် အမဌဲတမ်သ ကောင်သမလန်စလာ အလုပ်မလုပ်နိုင်ဘဲ အလလန်ရဟုပ်ထလေသသော ကုဒ်ကို ရေသသာသရန် လိုအပ်ပါသည်။
  2. ဒေတာပမာဏကို မမ်မိုရီပမာဏဖဌင့် ကန့်သတ်ထာသသည်။ ဒေတာပမာဏမျာသလာသည်နဟင့်အမျဟ၊ မဟတ်ဉာဏ်ကဌီသထလာသလာမည်ဖဌစ်ပဌီသ၊ အဆုံသတလင်၊ ကျလန်ုပ်တို့သည် ရလေသချယ်ထာသသော instance ၏ဝိသေသလက္ခဏာမျာသဆီသို့ လည်ပတ်သလာသမည်ဖဌစ်ပဌီသ၊ AWS တလင် instance အမျိုသအစာသကိုပဌောင်သလဲရန် ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုကို ရပ်တန့်ရန်လိုအပ်ပါသည်။
  3. အဘယ်ကဌောင့်ဆိုသော် low latency level ကို အမဌဲထိန်သထာသရန် လိုအပ်ပါသည်။ ကျလန်ုပ်တို့တလင် တောင်သဆိုချက်မျာသစလာရဟိသည်။ ကျလန်ုပ်တို့အတလက် အကောင်သဆုံသနဟောင့်နဟေသမဟုအဆင့်မဟာ 17-20 ms ဖဌစ်သည်။ 30-40 ms အဆင့်တလင်၊ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ လျဟောက်လလဟာမဟ တောင်သဆိုမဟုမျာသနဟင့် ဝန်ဆောင်မဟုကို ပျော့ပျောင်သစေသော ရဟည်လျာသသော တုံ့ပဌန်မဟုမျာသကို ရရဟိပါသည်။ ကံမကောင်သစလာဖဌင့်၊ Redis နဟင့် ပတ်သက်သည့် သာဓကတစ်ခုသည် ပုံမဟန်ထက် ၂ ဆ ပိုမိုကဌာနေချိန်ကို ရရဟိသောအခါတလင် ဝမ်သနည်သပါသည်။ ပဌဿနာကိုဖဌေရဟင်သရန် ကျလန်ုပ်တို့သည် အချိန်ဇယာသဆလဲမထာသဘဲ ပဌုပဌင်ထိန်သသိမ်သမဟုအတလက် ဝန်ဆောင်မဟုကို နေ့လယ်ပိုင်သတလင် ရပ်လိုက်ပဌီသ ပဌဿနာရဟိသော Redis ဥပမာကို အစာသထိုသခဲ့သည်။
  4. ကုဒ်တလင် သေသငယ်သော အမဟာသအယလင်သမျာသနဟင့်ပင် ဒေတာမညီညလတ်မဟုကို ရရဟိရန် လလယ်ကူပဌီသ ကဒေတာကို ပဌုပဌင်ရန် ကုဒ်ရေသရန် အချိန်မျာသစလာ သုံသစလဲပါ။

အာသနည်သချက်မျာသကို ထည့်သလင်သစဉ်သစာသပဌီသ ပုံမဟန်ငလေပေသငလေယူမျာသနဟင့် latency အပေါ် မဟီခိုမဟုနည်သပါသခဌင်သဖဌင့် ပိုမိုအဆင်ပဌေသည့်အရာသို့ ပဌောင်သရလဟေ့ရန် လိုအပ်ကဌောင်သ ကျလန်ုပ်တို့ သဘောပေါက်ပါသည်။ သုတေသနပဌုလုပ်ပဌီသ ရလေသချယ်စရာမျာသစလာကို ခလဲခဌမ်သစိတ်ဖဌာပဌီသ PostgreSQL ကို ရလေသချယ်ခဲ့သည်။

ကျလန်ုပ်တို့သည် ဒေတာဘေ့စ်အသစ်သို့ ပဌောင်သရလဟေ့နေသည်မဟာ 1,5 နဟစ်ရဟိပဌီဖဌစ်ပဌီသ ဒေတာ၏ အနည်သငယ်မျဟသာ ပဌောင်သရလဟေ့ထာသသောကဌောင့် ယခု ကျလန်ုပ်တို့သည် Redis နဟင့် PostgreSQL တို့နဟင့် တပဌိုင်နက် လုပ်ဆောင်နေပါသည်။ ဒေတာဘေ့စ်မျာသကဌာသ ဒေတာရလေ့လျာသခဌင်သနဟင့် ကူသပဌောင်သခဌင်သ အဆင့်မျာသအကဌောင်သ နောက်ထပ် အချက်အလက်မျာသကို ရေသထာသသည်။ ငါ့လုပ်ဖော်ကိုင်ဖက်ရဲ့ဆောင်သပါသ.

ကျလန်ုပ်တို့ စတင်လဟုပ်ရဟာသသောအခါ၊ ကျလန်ုပ်တို့၏ အပလီကေသရဟင်သသည် ဒေတာဘေ့စ်နဟင့် တိုက်ရိုက်အလုပ်လုပ်ပဌီသ မာစတာ Redis နဟင့် PostgreSQL ကို ဝင်ရောက်ကဌည့်ရဟုခဲ့သည်။ PostgreSQL အစုအဝေသတလင် မာစတာတစ်ခုနဟင့် ပုံတူတစ်ခု ပါ၀င်သည် ။ ကသည်မဟာ ဒေတာဘေ့စ်အစီအစဥ်နဟင့် မည်ကဲ့သို့ပုံသဏ္ဍန်ဖဌစ်သည်-
Failover Cluster PostgreSQL + Patroni။ အကောင်အထည်ဖော်မဟုအတလေ့အကဌုံ

PgBouncer ကို အကောင်အထည်ဖော်ခဌင်သ။

ကျလန်ုပ်တို့ ရလေ့လျာသနေစဉ်၊ ထုတ်ကုန်သည် ဖလံ့ဖဌိုသဆဲဖဌစ်သည်- PostgreSQL နဟင့် လုပ်ဆောင်သော အသုံသပဌုသူအရေအတလက်နဟင့် အသုံသပဌုသူအရေအတလက် တိုသလာကာ ချိတ်ဆက်မဟုမျာသ နည်သပါသလာသည်။ PostgreSQL သည် ချိတ်ဆက်မဟုတစ်ခုစီအတလက် သီသခဌာသလုပ်ငန်သစဉ်တစ်ခုကို ဖန်တီသပဌီသ အရင်သအမဌစ်မျာသကို စာသသုံသသည်။ သင်သည် ချိတ်ဆက်မဟုအရေအတလက်ကို သတ်မဟတ်ထာသသည့်နေရာအထိ တိုသမဌဟင့်နိုင်သည်၊ သို့မဟုတ်ပါက အကောင်သဆုံသသောဒေတာဘေ့စ်စလမ်သဆောင်ရည်ကို ရရဟိရန် အခလင့်အရေသရဟိပါသည်။ ထိုသို့သောအခဌေအနေမျိုသတလင် စံပဌရလေသချယ်မဟုမဟာ အခဌေခံရဟေ့တလင်ရပ်မည့် ချိတ်ဆက်မန်နေဂျာကို ရလေသချယ်ရန်ဖဌစ်သည်။

ချိတ်ဆက်မဟုမန်နေဂျာအတလက် ရလေသချယ်စရာနဟစ်ခုရဟိသည်- Pgpool နဟင့် PgBouncer။ ဒါပေမယ့် ပထမတစ်ခုက ဒေတာဘေ့စ်နဲ့ အလုပ်လုပ်တဲ့ အရောင်သအ၀ယ်ပုံစံကို မပံ့ပိုသတဲ့အတလက် PgBouncer ကို ရလေသချယ်ခဲ့ပါတယ်။

ကျလန်ုပ်တို့သည် အောက်ပါအလုပ်၏ အစီအစဉ်ကို ချမဟတ်ထာသပါသည်- ကျလန်ုပ်တို့၏ အပလီကေသရဟင်သသည် PostgreSQL မာစတာမျာသဖဌစ်သည့် နောက်ကလယ်တလင် PgBouncer တစ်ခုအာသ ဝင်ရောက်ကဌည့်ရဟုပဌီသ မာစတာတစ်ခုစီ၏ နောက်ကလယ်တလင် တစ်ခုစီသည် အပဌိုင်အဆိုင် ကူသယူဖော်ပဌသည့် ပုံစံတူတစ်ခုဖဌစ်သည်။
Failover Cluster PostgreSQL + Patroni။ အကောင်အထည်ဖော်မဟုအတလေ့အကဌုံ

တစ်ချိန်တည်သမဟာပင်၊ ကျလန်ုပ်တို့သည် 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 ဆာဗာအသစ်မျာသကို ထည့်သလင်သရန် လလယ်ကူစေသည်။
Failover Cluster PostgreSQL + Patroni။ အကောင်အထည်ဖော်မဟုအတလေ့အကဌုံ

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 ဆာဗာမျာသ အာသလုံသပါဝင်ခဲ့သည်။
Failover Cluster PostgreSQL + Patroni။ အကောင်အထည်ဖော်မဟုအတလေ့အကဌုံ

Patroni ကိုအကောင်အထည်ဖော်ရန်၊ ဖဌန့်ဝေထာသသောသိုလဟောင်မဟုအစုအဝေသဖလဲ့စည်သမဟုပုံစံကို ရလေသချယ်ရန် လိုအပ်ပါသည်။ Patroni သည် etcd၊ Zookeeper၊ Consul ကဲ့သို့သော ဖဌန့်ဝေထာသသော ဖလဲ့စည်သမဟုပုံစံ သိုလဟောင်မဟုစနစ်မျာသဖဌင့် အလုပ်လုပ်ပါသည်။ ကျလန်ုပ်တို့တလင် Vault နဟင့် တလဲဖက်အလုပ်လုပ်သော စျေသကလက်တလင် ပဌည့်စုံသော Consul အစုအဝေသတစ်ခုမျဟသာရဟိပဌီသ ၎င်သကို ကျလန်ုပ်တို့ အသုံသမပဌုတော့ပါ။ ၎င်သ၏ ရည်ရလယ်ထာသသည့် ရည်ရလယ်ချက်အတလက် ကောင်စစ်ဝန်ကို စတင်အသုံသပဌုရန် အကဌောင်သပဌချက်ကောင်သတစ်ခု။

Patroni ကောင်စစ်ဝန်နဟင့်မည်သို့အလုပ်လုပ်သနည်သ။

ကျလန်ုပ်တို့တလင် ခေါင်သဆောင်တစ်ညသနဟင့် ပုံစံတူပါ၀င်သော ကောင်စစ်ဝန်အစုအဝေသတစ်ခုနဟင့် Patroni အစုအဝေသတစ်ခု (Patroni တလင် မာစတာကို အစုအဖလဲ့ခေါင်သဆောင်ဟုခေါ်ပဌီသ ကျလန်မျာသကို ပုံစံတူဟုခေါ်သည်)။ Patroni အစုအဝေသ၏ သာဓကတစ်ခုစီသည် ကောင်စစ်ဝန်ထံ အစုအဖလဲ့၏အခဌေအနေနဟင့်ပတ်သက်သော အချက်အလက်မျာသကို အဆက်မပဌတ်ပေသပို့ပါသည်။ ထို့ကဌောင့်၊ ကောင်စစ်ဝန်မဟ Patroni အစုအဝေသ၏ လက်ရဟိဖလဲ့စည်သပုံနဟင့် လက်ရဟိအချိန်တလင် မည်သူသည် ခေါင်သဆောင်ဖဌစ်သည်ကို အမဌဲရဟာဖလေနိုင်သည်။

Failover Cluster PostgreSQL + 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 ဖလဲ့စည်သမဟုပုံစံကို အပ်ဒိတ်လုပ်ကာ ၎င်သကို ပဌန်လည်စတင်ရန် အမိန့်တစ်ခု ပေသပို့သည်။

Failover Cluster PostgreSQL + Patroni။ အကောင်အထည်ဖော်မဟုအတလေ့အကဌုံ

တင်သပလိတ်၏ ကဌီသမာသသော အပေါင်သလက္ခဏာမဟာ ၎င်သကို ကုဒ်အဖဌစ် သိမ်သဆည်သထာသသောကဌောင့်၊ shard အသစ်တစ်ခု ထပ်ထည့်သည့်အခါ၊ အခဌေခံအဆောက်အအုံကို ကုဒ်နိယာမအဖဌစ် ပံ့ပိုသပေသသည့် ကုဒ်အသစ်တစ်ခု ပဌုလုပ်ပဌီသ ပုံစံခလက်ကို အလိုအလျောက် အပ်ဒိတ်လုပ်ရန် လုံလောက်ပါသည်။

Patroni နဟင့်အတူဗိသုကာအသစ်

ရလဒ်အနေဖဌင့်၊ ကျလန်ုပ်တို့သည် အောက်ပါလုပ်ငန်သအစီအစဉ်ကို ရရဟိခဲ့ပါသည်။
Failover Cluster PostgreSQL + Patroni။ အကောင်အထည်ဖော်မဟုအတလေ့အကဌုံ

အပလီကေသရဟင်သဆာဗာမျာသအာသလုံသသည် ချိန်ခလင်လျဟာကိုဝင်ရောက်ကဌည့်ရဟုခဌင်သ → ၎င်သနောက်ကလယ်တလင် PgBouncer ၏ဖဌစ်ရပ်နဟစ်ခုရဟိပါသည် → တစ်ခုစီတလင်၊ ကောင်စစ်ဝန်ပုံစံကိုဖလင့်ထာသသည်၊ Patroni အစုအဝေသတစ်ခုစီ၏အခဌေအနေကိုစောင့်ကဌည့်ပဌီသ လက်ရဟိခေါင်သဆောင်ထံတောင်သဆိုမဟုမျာသကိုပေသပို့သည့် PgBouncer config ၏ဆက်စပ်မဟုကိုစောင့်ကဌည့်ပေသသည် အစုအဖလဲ့တစ်ခုစီ၏

ကိုယ်တိုင်စမ်သသပ်ခဌင်သ။

စမ်သသပ်မဟုပတ်ဝန်သကျင်တလင် မစတင်မီ ကအစီအစဥ်ကို လုပ်ဆောင်ခဲ့ပဌီသ အလိုအလျောက်ပဌောင်သခဌင်သ၏ လုပ်ဆောင်ချက်ကို စစ်ဆေသခဲ့သည်။ သူတို့က ဘုတ်ကိုဖလင့်၊ စတစ်ကာကိုရလဟေ့ပဌီသ အဲဒီအခိုက်အတန့်မဟာ အစုအဖလဲ့ခေါင်သဆောင်ကို “သတ်” လိုက်ကဌတယ်။ AWS တလင်၊ ၎င်သသည် console မဟတဆင့် instance ကိုပိတ်လိုက်သကဲ့သို့ရိုသရဟင်သသည်။

Failover Cluster PostgreSQL + Patroni။ အကောင်အထည်ဖော်မဟုအတလေ့အကဌုံ

စတစ်ကာသည် 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 ကိုမလုပ်ဆောင်ရန်။ ဒါတလေအာသလုံသက အမဟာသအယလင်သဖဌစ်နိုင်ခဌေကို လျဟော့ချဖို့ ကူညီပေသခဲ့တယ်။
Failover Cluster PostgreSQL + Patroni။ အကောင်အထည်ဖော်မဟုအတလေ့အကဌုံ

ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုကို ပဌန်လည်စတင်လိုက်သည်၊ အာသလုံသသည် သင့်အနေဖဌင့် လုပ်ဆောင်ခဲ့သည်၊ သုံသစလဲသူမျာသက ဆက်လက်လုပ်ဆောင်နေကဌသော်လည်သ ဂရပ်မျာသတလင် ကောင်စစ်ဝန်ဆာဗာမျာသပေါ်တလင် ပုံမဟန်မဟုတ်သော ဝန်ပမာဏကို သတိပဌုမိပါသည်။
Failover Cluster PostgreSQL + Patroni။ အကောင်အထည်ဖော်မဟုအတလေ့အကဌုံ

ဒါကို စမ်သသပ်တဲ့ ပတ်ဝန်သကျင်မဟာ ဘာကဌောင့် မတလေ့ခဲ့ရတာလဲ။ ကပဌဿနာသည် အခဌေခံအဆောက်အအုံအာသ ကုဒ်နိယာမအဖဌစ် လိုက်နာရန်နဟင့် စမ်သသပ်မဟုပတ်ဝန်သကျင်မဟ ထုတ်လုပ်မဟုအထိ အခဌေခံအဆောက်အအုံတစ်ခုလုံသကို ပဌုပဌင်ရန် လိုအပ်ကဌောင်သ ကောင်သစလာဖော်ပဌသည်။ ဒီလိုမဟမဟုတ်ရင် ကျလန်တော်တို့ရလာတဲ့ ပဌဿနာကို ရဖို့က အရမ်သလလယ်ပါတယ်။ ဘာဖဌစ်တာလဲ? ကောင်စစ်ဝန်သည် ထုတ်လုပ်မဟုတလင် ပထမဆုံသပေါ်လာပဌီသ စမ်သသပ်မဟုပတ်ဝန်သကျင်တလင် ရလဒ်အနေဖဌင့် စမ်သသပ်ပတ်ဝန်သကျင်တလင် ကောင်စစ်ဝန်၏ဗာသရဟင်သသည် ထုတ်လုပ်မဟုထက် ပိုမိုမဌင့်မာသသည်။ ထုတ်ဝေမဟုတစ်ခုတလင်၊ 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 ကို အောင်မဌင်စလာ လလဟင့်တင်ပဌီသနောက်၊ အစုအဝေသတစ်ခုစီတလင် နောက်ထပ် ပုံစံတူတစ်ခုကို ထပ်လောင်သထည့်ထာသပါသည်။ ယခုအခါ အစုအဖလဲ့တစ်ခုစီတလင် အထမဌောက်ပုံသဏ္ဍာန်ရဟိပါသည်- ခေါင်သဆောင်တစ်ညသနဟင့် ပုံစံတူနဟစ်ခု၊ ကူသပဌောင်သသည့်အခါ ညသနဟောက်ကလဲသလာသသည့်အခါ ဘေသကင်သစေရန်အတလက် ကလန်မန့်တစ်ခုရဟိသည်။
Failover Cluster PostgreSQL + Patroni။ အကောင်အထည်ဖော်မဟုအတလေ့အကဌုံ

Patroni သည် ထုတ်လုပ်မဟုကို သုံသလကျော် လုပ်ကိုင်ခဲ့သည်။ ဒီအချိန်မဟာတော့ သူက ကျလန်တော်တို့ကို ကူညီဖို့ စီမံထာသပဌီသသာသ။ မကဌာသေသမီက၊ အစုအဖလဲ့မျာသထဲမဟတစ်ခု၏ခေါင်သဆောင်သည် AWS တလင်သေဆုံသသလာသသည်၊ အလိုအလျောက်ပျက်ကလက်မဟုအလုပ်လုပ်ပဌီသအသုံသပဌုသူမျာသဆက်လက်အလုပ်လုပ်ခဲ့သည်။ Patroni သည် ၎င်သ၏ အဓိကတာဝန်ကို ပဌီသမဌောက်ခဲ့သည်။

Patroni ၏အသုံသပဌုမဟုအသေသစိတ်အကျဉ်သချုပ်

  • ဖလဲ့စည်သမဟုပဌောင်သလဲခဌင်သအတလက် လလယ်ကူခဌင်သ။ instance တစ်ခုတလင် configuration ကိုပဌောင်သရန် လုံလောက်ပဌီသ ၎င်သကို cluster တစ်ခုလုံသအထိ ဆလဲတင်မည်ဖဌစ်သည်။ ဖလဲ့စည်သမဟုအသစ်ကို အသုံသပဌုရန် ပဌန်လည်စတင်ရန် လိုအပ်ပါက Patroni က သင့်အာသ အသိပေသပါမည်။ Patroni သည် အလလန်အဆင်ပဌေသည့် command တစ်ခုတည်သဖဌင့် cluster တစ်ခုလုံသကို ပဌန်လည်စတင်နိုင်သည်။
  • အလိုအလျောက် ပျက်ကလက်မဟုသည် အလုပ်လုပ်ပဌီသ ကျလန်ုပ်တို့ကို ကူညီရန် စီမံထာသပဌီသဖဌစ်သည်။
  • အပလီကေသရဟင်သ ရပ်တန့်ခဌင်သမရဟိဘဲ PostgreSQL အပ်ဒိတ်လုပ်ပါ။ ပုံတူမျာသကို ဗာသရဟင်သအသစ်သို့ ညသစလာ အပ်ဒိတ်လုပ်ရပါမည်။ ထို့နောက် Patroni အစုအဝေသရဟိ ခေါင်သဆောင်ကို ပဌောင်သကာ ခေါင်သဆောင်ဟောင်သကို အပ်ဒိတ်လုပ်ရပါမည်။ ကကိစ္စတလင်၊ အလိုအလျောက်ပျက်ကလက်မဟု၏လိုအပ်သောစမ်သသပ်မဟုဖဌစ်ပေါ်သည်။

source: www.habr.com

မဟတ်ချက် Add