Tuesday, February 16, 2010

Server Clustering ဆိုတာ . . . (1)

Clustering ဆိုတာ ဘာလည္း ?
ႏွစ္လုံး သို႕မဟုတ္ ႏွစ္လုံးထက္ပိုတယ့္ Server ေတြ၊ ဒါမွမဟုတ္လည္း Computer ေတြဟာ Application တစ္ခု ( တနည္းအားျဖင့္ အလုပ္တစ္ခု) ကို အတူတကြ အလုပ္လုပ္ၾက ၊ serve လုပ္ၾကတာျဖစ္ပါတယ္။ website ေတြ လူသုံးအလြန္မ်ားလာတာမ်ိဳး ၊ database ေတြ query access အလြန္မ်ားလာတာမ်ိဳးၾကရင္ Server တစ္လုံးထဲနဲ႕ ျပန္ျပီး respond လုပ္ဖို႕ မႏိုင္ေတာ့ပါဘူး။ Server ေတြခြဲျပီး Cluster လုပ္လိုက္ခ်င္းအားျဖင့္ ပိုေကာင္းတယ့္ respond time ကိုလည္းရႏိုင္သလို ၊ Server တစ္လုံးလုံးမွာ network error ပဲျဖစ္ျဖစ္ hardware failure ပဲျဖစ္ျဖစ္ ( HDD ပ်က္သြားတာမ်ိဳး) တစ္ခုခုျဖစ္ရင္ Site တစ္ခုလုံး ၊ Database တစ္ခုလုံး ရပ္သြားျခင္းမွလည္း ကာကြယ္ႏိုင္ပါတယ္။

Clustering လုပ္တဲ့ ပံုစံ အမ်ိဳးမ်ိဳးရွိပါတယ္။ Cluster တစ္ခုမတည္ေဆာက္ခင္မွာ ကိုယ့္ရဲ့ လိုအပ္ခ်က္ ေပၚမွာ မူတည္ျပီး ဘယ္လို Clustering မ်ိဳးလုပ္မလဲဆိုတာ ဆုံးျဖတ္ရပါတယ္။ ေယဘူရ အားျဖစ္ေတာ့ Clustering ပံုစံ ႏွစ္မ်ိဳးရွိပါတယ္။

Failover cluster
Server ႏွစ္လုံးရွိေနမယ္၊ တစ္လုံးက down သြားရင္ ေနာက္တစ္လုံးက ခ်က္ခ်င္း ပထမ server ေနရာကိုယူျပီး respond ဆက္လုပ္ေနတာမ်ိဳးပါ။ User ေတြဘက္ကၾကည့္ရင္ Server တစ္လုံး down သြားတာ သိလိုက္မွာမဟုတ္ပါဘူး။ Active - Passive setup လို႕လည္း ေခၚပါတယ္။

ဥပမာ WebSvr1 နဲ႕ WebSvr2 ဆိုၾကပါဆို႕။Server ႏွစ္လုံးစလုံးက www.example.org ဆိုတဲ့ Website ကို host လုပ္ထားတယ္ ဆိုပါေတာ့။ ပံုမွန္အားျဖင့္ WebSvr1 ကပဲ respond လုပ္ပါတယ္။ User 1 က www.example.org လို႕ surf လုပ္ရင္ WebSvr1 ကပဲ respond ျပန္သလို၊ User 2 က www.example.org လို႕ surf ရင္လည္း WebSvr1 ကပဲ respond လုပ္ပါတယ္။ WevSvr1 အေၾကာင္းတစ္ခုခုေၾကာင့္ down သြားရင္ေတာ့ WevSvr2 က အစားထိုးဝင္ေရာက္ျပီး User 1 နဲ႕ User 2 ကို respond လုပ္ပါတယ္။ User 1 နဲ႕ User 2 အေနနဲ႕ Svr1 down သြားေၾကာင္း သိလိုက္မွာ မဟုတ္ပါဘူး။ ဒါ Failover cluster ပါ။

Load balance cluster
Active - Active setup လို႕လည္း သုံးေလ့ရွိပါတယ္။ Server ႏွစ္လုံး သို႕မဟုတ္ ႏွစ္လုံးထက္ပိုတယ့္ server ေတြက အလုပ္တစ္ခုကို မွ်ေဝလုပ္ၾကတာမ်ိဳးပါ။ ( Grid computing ၊ Server System Image တို႕ကို hardware level clustering အျဖစ္ေျပာၾကေလ့ရွိပါတယ္။ Server clustering technology တစ္ခုခ်င္းကို ေနာက္မွ အခြင့္သင့္ရင္ အေသးစိတ္ေရးပါအုန္းမယ္။ )

အခုေတာ့ ျမင္သာေအာင္ Network Load Balancing Cluster ကို ဥပမာေပးပါရေစ။၊ အေပၚက ဥပမာအတိုင္း Website တစ္ခုကို web server ႏွစ္လုံးက round-robin network load balanced ပံုစံနဲ႕ ဥပမာ ေျပာရရင္၊ Web Server ႏွစ္လုံးရွိမယ္ WebSvr1 နဲ႕ WebSvr2။ Server ႏွစ္လုံးစလုံးက www.example.org ဆိုတဲ့ Website ကို host လုပ္ထားတယ္ ဆိုပါေတာ့။ User 1 က www.example.org လို႕ surf လုပ္လိုက္ရင္ WebSvr1 က respond လုပ္ပါမယ္။ User 2 က surf လုပ္ရင္ WebSvr2 က respond လုပ္ပါမယ္။ တကယ္လို႕ User 3 ထပ္ေရာက္လာရင္ WebSvr1 က respond လုပ္ပါလိမ့္မယ္။ Server loading ကို balance လုပ္ယူလိုက္တာပါ။ User 4 ထပ္ေရာက္လာရင္ Svr2 က respond လုပ္ပါလိမ့္မယ္။ တကယ္လို႕ Svr1 ကသာ down သြားရင္ User ေလးေယာက္လုံးကို Svr2 က ဆက္ျပီး respond လုပ္ပါလိမ့္မယ္။ Load balanced လုပ္ထားရာကေန ၊ တစ္လုံးျပဳတ္သြားေတာ့ ပိုေတာ့ ေႏွးသြားေကာင္း ေႏွးသြားႏိုင္ပါတယ္။

Failover နဲ႕ NLB ဘာကြာလဲ
Srv 1 down သြားရင္ Srv 2 က အလုပ္လုပ္ေပးတာ၊ ဒါဆို သိပ္မကြာဘူးလို႕ ထင္ႏိုင္ပါတယ္။ ေရာေနႏိုင္လို႕ ျပန္ရွင္းပါမယ္။ Failover မွာတုန္းက Server ႏွစ္လုံးက Active-Passive ပါ။ Active အလုံးက ေကာင္းေကာင္းအလုပ္လုပ္ေန ေသးသမွ် Passive အလုံးက standby အေနအထားမွာပဲေနပါတယ္။ အလုပ္ဝင္မလုပ္ပါဘူး။ သူ႕ဟာသူ မႏိုင္မနင္းျဖစ္လည္း ဂ႐ုမစိုက္ပါဘူး။ သူ down မွ ငါ role တက္မွာဆိုတာမ်ိဳးစိတ္ထားနဲ႕ကို လစ္လွ်ဴ႐ႉထားပါတယ္။ NLB မွာကေတာ့ Active-Active ပါ။ ရွိသမွ် Server အားလုံးက load ကို ခြဲယူထားတာပါ။ အေပၚက Scenario မွာ server ႏွစ္လုံးဆိုေပမယ့္ Server သုံးလုံး အေနနဲ႕ စဥ္းစားရင္ ပိုရွင္းမယ္ထင္ပါတယ္။ User ေျခာက္ေယာက္ကို Server သုံးလုံးက ႏွစ္ေယာက္စီခြဲျပီး respond လုပ္ေနရာကေန၊ Srv 1 down သြားရင္ Srv 2 ေန႕ Srv 3 က သုံးေယာက္ဆီ ခြဲယူျပီး respond လုပ္ေပးပါလိမ့္မယ္။ Srv 1 မ down ခင္ကလည္း သူတို႕ အလုပ္လုပ္ေနပါတယ္။ Srv 1 down သြားေတာ့ သူတို႕ပိုအလုပ္ရွုပ္သြားတယ္။

အခုေနာက္ပိုင္းမွာ failover စစ္စစ္ကို သုံးတာ ရွားပါတယ္။ NLB server ငါးလုံးအတြက္ Srv တစ္လုံးကို standby အေနနဲ႕ ထားေပးထားတာမ်ိဳးပဲရွိပါေတာ့တယ္။ Server တစ္လုံးအတြက္ ေနာက္တစ္လုံး standby ထားေပးထားတာမ်ိဳး မလုပ္ၾကေတာ့ပါဘူး။ ကုန္က်စရိတ္အရေရာ ၊ မီတာအလကား ကုန္ေနတာမ်ိဳးလည္း မျဖစ္ေအာင္ပါ။


Server ေတြကို cluster လုပ္ျပီး သုံးရင္ ဘာေတြပိုေကာင္းမလည္း ?
1 . High Availability
ႏွစ္လုံးထက္ပိုတယ့္ Server ေတြကို အတူတကြ အလုပ္လုပ္ေစတာမို႕လို႕ Failover မွာပဲျဖစ္ျဖစ္ NLB မွာပဲျဖစ္ျဖစ္ Server တစ္လုံး down သြားရုံနဲ႕ operational state ရပ္မသြားပါဘူး။ ဆက္ျပီး အလုပ္လုပ္ေနႏိုင္ေသးတယ့္ အတြက္ Availability အသုံးျပဳႏိုင္စြမ္း ပိုျမင့္ေစပါတယ္။ ဒါဟာ User ေတြရဲ့ စိတ္ေၾကနပ္မႈအတြက္ အေရးပါပါတယ္။
2. Better Performance
Failover cluster မွာေတာ့ ဒီအခ်က္ဟာ သိပ္အၾကဳံးမဝင္ပါဘူး။ NLB cluster မွာေတာ့ Request 200 ကို Server တစ္လုံးထဲက reply လုပ္တာထက္၊ Server ႏွစ္လုံးက reply လုပ္တာမို႕ ပိုျမန္ျမန္ဆန္ဆန္ respond လုပ္ႏိုင္တာ ေတြ႕ရပါလိမ့္မယ္။
( Note: CPU 3.0 MHz နဲ႕ Memory 4GB server ႏွစ္လုံးကို cluster လုပ္တာနဲ႕ CPU 3.0 MHz Dual Processor နဲ႕ Memory 8GB server တစ္လုံး performance ခ်င္းယွဥ္ရင္ Cluster ကသာပါလိမ့္မယ္။ ကိန္း ဂဏန္းအရ အတူတူေလာက္ရွိေပမယ့္ motherboard က bus speed တို႕၊ Network traffic တို႕ ထဲ့တြက္ရပါလိမ့္မယ္။ Critical application ဆိုရင္ High-Availablity(HA) ကိုလည္း အေရးပါတယ့္ factor အေနနဲ႕ ထဲ့တြက္ရပါတယ္။ )
3. Better Scalability
User ေတြအရမ္းမ်ားလာမွ တစ္လုံးထဲကေန ပိုျပီး powerful ျဖစ္တယ့္ Server ကိုေရႊ႕ရရင္ မလြယ္ပါဘူး။ Clustered environment မွာေတာ့ cluster ကို တိုးခ်ဲ႕ရတာ ပိုလြယ္ပါတယ္။ Cluster ထဲကို Server ေတြတိုးျပီး ၊ load ကိုျပန္ထိန္းဖို႕က ပိုျပီး အဆင္ေျပ လြယ္ကူပါတယ္။

Clustering မွာ ဒီႏွစ္ခုကိုပဲေျပာေနတယ္ ထင္အုန္းမယ္။ ဒီ concept ႏွစ္ခုအတြက္ technology အမ်ိဳးမ်ိဳး ကြဲျပီးျဖစ္လာတာမို႕၊ ဒီႏွစ္ခုကို အရင္ေျပာခ်င္လို႕ပါ။ ဒါေပမယ့္ ဆက္ေျပာခ်င္တယ့္ အေၾကာင္းအရာေတြက စာၾကီးပဲဖတ္ဖို႕ထက္ ပံုေလးေတြနဲ႕မွပိုအဆင္ေျပမယ္ထင္တယ္။ ပံုေလးေတြဆြဲျပီးမွ ေနာက္ post တစ္ခုဆက္ေရးေတာ့မယ္ဗ်ာ။

Divinity

2 comments:

Zephyr said...

Hello bro,

ဗ်စ္တသွ်လိုေလးဘာေလးေရးမွ ရံုးက ကေလးေတြလည္း ဖတ္လို႕ရမွာေပါ႔ ...။ အခုေတာ႔ ေခါင္းစဥ္ေတြၾကည္႕ျပီး ... ေအာ္ load balancing ကိုး ဆိုတာေလာက္ပဲ သိၾကရွာတယ္။

ေသခ်ာတာကေတာ႔ cluster လုပ္လုိက္တာ developers ေတြအတြက္ ဘယ္server ကိုသြားေနမွန္းမသိေတာ႔တာပဲ။ အထူးသျဖင္႔ log file ကို ဟိုမွာၾကည္႕ရမလိုလို ဒီမွာၾကည္႕ရမလိုလိုေတြျဖစ္ပါတယ္။ ...

load test မလုပ္လုိက္ရတဲ႔အတြက္ high performance တကယ္ရမရ မသိလုိက္ပါဘူး။ high availability ကေတာ႔ ေသခ်ာေပါက္ရပါတယ္။ ရံုးက GIC လို App Server တစ္လံုးက ေႏွးေနတဲ႔အတြက္ customer ေတြအေနနဲ႕ ေႏွးလုိက္ျမန္လိုက္ ျဖစ္ေနတာကိုပါ ထူးထူးျခားျခား ခံစားရႏိုင္ပါေသးတယ္။

load balancing အေၾကာင္းလည္းဖတ္ဖို႕ေစာင္႔ေနပါေသးတယ္။

Zephyr

Divinity said...

ဒါ က customer ေတြကို excitement ေလးေပးခ်င္လို႕ပါ။ ေဟာ ေႏွးသြားျပန္ျပီ၊ ေဟာ ျမန္လာျပီဆိုတာမ်ိဳးေပါ့။ :D