ကျွန်ုပ်တို့ ဆွေးနွေးမည့်အရာ-
drbd+ocfs2 ဖြေရှင်းချက်များကို အခြေခံ၍ ဆာဗာနှစ်ခုအတွက် မျှဝေသိုလှောင်မှုကို လျင်မြန်စွာအသုံးချနည်း။
ဤအရာသည် မည်သူအတွက် အသုံးဝင်မည်နည်း။
သင်ခန်းစာသည် စနစ်စီမံခန့်ခွဲသူများနှင့် သိုလှောင်မှုအကောင်အထည်ဖော်မှုနည်းလမ်းကို ရွေးချယ်သော သို့မဟုတ် ဖြေရှင်းချက်ကို စမ်းသပ်လိုသူတိုင်းအတွက် အသုံးဝင်မည်ဖြစ်သည်။
ကျွန်ုပ်တို့သည် မည်သည့်ဆုံးဖြတ်ချက်များကို ငြင်းဆိုခဲ့ကြပြီး အဘယ်ကြောင့်နည်း။
မကြာခဏဆိုသလို ကျွန်ုပ်တို့သည် ဝဘ်အစုအဝေးငယ်တစ်ခုတွင် ကောင်းမွန်သော ဖတ်ရှုရေးစနစ်ဖြင့် မျှဝေထားသော သိုလှောင်ခန်းကို အကောင်အထည်ဖော်ရန် လိုအပ်သည့် အခြေအနေမျိုးနှင့် ကြုံတွေ့နေရသည်။ ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့၏ပရောဂျက်များအတွက် မျှဝေထားသောသိုလှောင်မှုကို အကောင်အထည်ဖော်ရန်အတွက် ရွေးချယ်စရာအမျိုးမျိုးကို ကြိုးပမ်းခဲ့သော်လည်း အနည်းငယ်သော ညွှန်ကိန်းများစွာကို တစ်ပြိုင်နက်တွင် ကျွန်ုပ်တို့အား ကျေနပ်နိုင်ခဲ့သည်။ အခုငါမင်းကိုဘာကြောင့်ပြောပြမယ်။
- Glusterf များသည် စာဖတ်ခြင်းနှင့် စာရေးခြင်းစွမ်းဆောင်ရည်အတွက် ကျွန်ုပ်တို့အား မကျေနပ်ပါ; ဖိုင်အများအပြားကို တစ်ပြိုင်နက်ဖတ်ရှုခြင်းတွင် ပြဿနာများရှိပြီး CPU တွင် load များပါသည်။ ဖိုင်များဖတ်ခြင်းဆိုင်ရာ ပြဿနာကို အုတ်မှ တိုက်ရိုက်ဝင်ရောက်ခြင်းဖြင့် ဖြေရှင်းနိုင်သော်လည်း ၎င်းသည် အမြဲတမ်း သက်ဆိုင်ခြင်းမရှိသည့်အပြင် ယေဘုယျအားဖြင့် မှားယွင်းပါသည်။
- အထူးသဖြင့် ပရောဂျက်ကို နောက်ပိုင်းတွင် ထိန်းသိမ်းထားလျှင် Ceph သည် ဆာဗာ 2-4 ခုပါသော ပရောဂျက်များတွင် အန္တရာယ်ဖြစ်စေနိုင်သည့် အလွန်ရှုပ်ထွေးမှုကို မကြိုက်ပါ။ တဖန်၊ glusterf များကဲ့သို့ သီးခြားသိုလှောင်မှုအစုအဝေးများကို တည်ဆောက်ရန် ကျွန်ုပ်တို့အား တွန်းအားပေးသည့် ပြင်းထန်သောစွမ်းဆောင်ရည်ကန့်သတ်ချက်များရှိပါသည်။
- မျှဝေထားသောသိုလှောင်ခန်းကိုအကောင်အထည်ဖော်ရန် NFS ဆာဗာတစ်ခုအသုံးပြုခြင်းသည် အမှားခံနိုင်ရည်ရှိခြင်းဆိုင်ရာမေးခွန်းများ ပေါ်ပေါက်စေသည်။
- s3 သည် အလုပ်အချို့အတွက် အလွန်ကျော်ကြားသော ဖြေရှင်းချက်တစ်ခုဖြစ်သော်လည်း ၎င်းသည် ၎င်း၏နယ်ပယ်ကို ကျဉ်းသွားစေသည့် ဖိုင်စနစ်မဟုတ်ပါ။
- lsSyncd အကယ်၍ ကျွန်ုပ်တို့သည် "ဖိုင်စနစ်မဟုတ်သောစနစ်များ" အကြောင်း စတင်ပြောဆိုနေပြီဆိုလျှင်၊ ဤနာမည်ကြီးဖြေရှင်းချက်ကို ကျော်သွားသင့်ပါသည်။ နှစ်လမ်းကူးလဲလှယ်ခြင်းအတွက် မသင့်တော်ရုံသာမက (သင်တကယ်လိုချင်လျှင် သင်လုပ်နိုင်သည်)၊ ၎င်းသည် ဖိုင်အများအပြားတွင် တည်ငြိမ်စွာအလုပ်မလုပ်ပါ။ အရာတစ်ခုလုံးအတွက် ကောင်းမွန်တဲ့အပြင်တစ်ခုကတော့ ကြိုးတစ်ချောင်းပါ၀င်ပါတယ်။ အကြောင်းရင်းမှာ ပရိုဂရမ်၏ တည်ဆောက်ပုံတွင် ဖြစ်သည်- ၎င်းသည် အလုပ်အရာဝတ္တုများကို စောင့်ကြည့်ရန် inotify ကို အသုံးပြု၍ စတင်ချိန်တွင် နှင့် ပြန်လည်စကင်န်လုပ်နေစဉ်အတွင်း တာဝန်ပေးသည်။ rsync ကို လွှဲပြောင်းမှု ကြားခံအဖြစ် အသုံးပြုသည်။
ကျူတိုရီရယ်- drbd+ocfs2 ကို အခြေခံ၍ မျှဝေထားသော သိုလှောင်ခန်းကို မည်သို့အသုံးပြုရမည်နည်း။
ကျွန်ုပ်တို့အတွက် အဆင်ပြေဆုံးဖြေရှင်းနည်းများထဲမှတစ်ခုမှာ လင့်ခ်ဖြစ်သည်။ ocfs2+drbd. ဖြေရှင်းချက်ဒေတာဘေ့စ်ကို အခြေခံ၍ ဆာဗာနှစ်ခုအတွက် မျှဝေသိုလှောင်မှုကို သင်မည်ကဲ့သို့ လျင်မြန်စွာအသုံးချနိုင်ပုံကို ယခုကျွန်ုပ်တို့ပြောပြပါမည်။ ဒါပေမယ့် ပထမဦးစွာ ပါဝင်ပစ္စည်းများအကြောင်း အနည်းငယ်
DRBD - ဘလောက်များတွင် ဆာဗာများကြား ဒေတာကို ထပ်တူပွားနိုင်စေမည့် စံ Linux ဖြန့်ဖြူးမှုမှ သိုလှောင်မှုစနစ်။ အဓိက အပလီကေးရှင်းသည် အမှား-ခံနိုင်ရည်ရှိသော သိုလှောင်မှု တည်ဆောက်ရန် ဖြစ်သည်။
OCFS2 - စနစ်များစွာဖြင့် တူညီသောသိုလှောင်မှုအား မျှဝေအသုံးပြုမှုကို ပံ့ပိုးပေးသည့် ဖိုင်စနစ်။ Linux ဖြန့်ဖြူးမှုတွင် ပါ၀င်ပြီး FS နှင့် လုပ်ဆောင်ရန်အတွက် kernel module နှင့် userspace tools တစ်ခုဖြစ်သည်။ OCFS2 ကို DRBD တွင်သာမက ချိတ်ဆက်မှုများစွာဖြင့် iSCSI တွင်လည်း အသုံးပြုနိုင်သည်။ ကျွန်ုပ်တို့၏ဥပမာတွင် DRBD ကိုအသုံးပြုသည်။
လုပ်ဆောင်ချက်အားလုံးကို ubuntu ဆာဗာ 18.04 တွင် အနည်းငယ်မျှသာ ဖွဲ့စည်းမှုဖြင့် လုပ်ဆောင်ပါသည်။
အဆင့် 1. DRBD ကို စီစဉ်သတ်မှတ်ပါ-
ဖိုင် /etc/drbd.d/drbd0.res တွင် ကျွန်ုပ်တို့၏ virtual block device /dev/drbd0 ကို ဖော်ပြထားပါသည်။
resource drbd0 {
syncer { rate 1000M; }
net {
allow-two-primaries;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
}
startup { become-primary-on both; }
on drbd1 {
meta-disk internal;
device /dev/drbd0;
disk /dev/vdb1;
address 10.10.10.192:7789;
}
on drbd2 {
meta-disk internal;
device /dev/drbd0;
disk /dev/vdb1;
address 10.10.10.193:7789;
}
}
meta-disk အတွင်းပိုင်း — မက်တာဒေတာကိုသိမ်းဆည်းရန် တူညီသောပိတ်ဆို့ကိရိယာများကို အသုံးပြုပါ။
စက် /dev/drbd0 — drbd volume သို့လမ်းကြောင်းအဖြစ် /dev/drbd0 ကိုသုံးပါ။
disk /dev/vdb1 - /dev/vdb1 ကိုသုံးပါ။
syncer { နှုန်း 1000M; } — gigabit ချန်နယ် bandwidth ကိုသုံးပါ။
ခွင့်ပြု-နှစ်-မူလတန်း - အဓိကဆာဗာနှစ်ခုတွင် အပြောင်းအလဲများကို လက်ခံနိုင်စေမည့် အရေးကြီးသော ရွေးချယ်မှုတစ်ခု
after-sb-0pri၊ after-sb-1pri၊ after-sb-2pri — splitbrain ကိုတွေ့ရှိသောအခါ node ၏လုပ်ဆောင်ချက်များအတွက် တာဝန်ရှိသောရွေးချယ်စရာများ။ အသေးစိတ်အချက်အလက်များကို စာရွက်စာတမ်းများတွင် ကြည့်ရှုနိုင်ပါသည်။
နှစ်ခုလုံးတွင် အဓိကဖြစ်လာသည်။ — node နှစ်ခုလုံးကို အဓိကအဖြစ် သတ်မှတ်သည်။
ကျွန်ုပ်တို့၏အခြေအနေတွင်၊ ကျွန်ုပ်တို့တွင် 10 gigabits ရှိသော သီးသန့် virtual network တစ်ခုဖြင့် လုံးဝတူညီသော VM နှစ်ခုရှိသည်။
ကျွန်ုပ်တို့၏ဥပမာတွင်၊ cluster node နှစ်ခု၏ကွန်ရက်အမည်များသည် drbd1 နှင့် drbd2 ဖြစ်သည်။ သင့်လျော်သောလည်ပတ်မှုအတွက်၊ သင်သည် /etc/hosts ရှိ host များ၏ အမည်များနှင့် IP လိပ်စာများကို ကိုက်ညီရန် လိုအပ်သည်။
10.10.10.192 drbd1
10.10.10.193 drbd2
အဆင့် 2. node ကို စနစ်ထည့်သွင်းပါ-
ဆာဗာနှစ်ခုလုံးတွင် ကျွန်ုပ်တို့ လုပ်ဆောင်သည်-
drbdadm create-md drbd0
modprobe drbd
drbdadm up drbd0
cat /proc/drbd
ကျွန်ုပ်တို့သည် အောက်ပါတို့ကို ရရှိသည်-
synchronization ကို စတင်နိုင်ပါသည်။ ပထမဆုံး node တွင် သင်လုပ်ဆောင်ရန် လိုအပ်သည်-
drbdadm primary --force drbd0
အခြေအနေကို ကြည့်ရအောင်။
cat /proc/drbd
ကောင်းပြီ၊ ထပ်တူပြုခြင်း စတင်ပါပြီ။ အဆုံးထိစောင့်ပြီး ပုံကိုကြည့်ပါ-
အဆင့် 3. ဒုတိယ node တွင် ထပ်တူပြုခြင်းကို စတင်ပါ။
drbdadm primary --force drbd0
ကျွန်ုပ်တို့သည် အောက်ပါတို့ကို ရရှိသည်-
ယခု ကျွန်ုပ်တို့သည် ဆာဗာနှစ်ခုမှ drbd သို့ စာရေးနိုင်ပါပြီ။
အဆင့် 4. ocfs2 ကို install လုပ်ပြီး configure လုပ်ပါ။
ကျွန်ုပ်တို့သည် အလွန်သေးငယ်သော ဖွဲ့စည်းမှုပုံစံကို အသုံးပြုပါမည်-
cluster:
node_count = 2
name = ocfs2cluster
node:
number = 1
cluster = ocfs2cluster
ip_port = 7777
ip_address = 10.10.10.192
name = drbd1
node:
number = 2
cluster = ocfs2cluster
ip_port = 7777
ip_address = 10.10.10.193
name = drbd2
တွင် ရေးမှတ်ထားရန် လိုအပ်ပါသည်။ /etc/ocfs2/cluster.conf node နှစ်ခုလုံးတွင်။
မည်သည့် node တွင်မဆို drbd0 တွင် FS တစ်ခုကို ဖန်တီးသည် ။
mkfs.ocfs2 -L "testVol" /dev/drbd0
ဤနေရာတွင် ကျွန်ုပ်တို့သည် ပုံသေဘောင်များကို အသုံးပြု၍ drbd0 တွင် အညွှန်း testVol ဖြင့် ဖိုင်စနစ်တစ်ခုကို ဖန်တီးခဲ့သည်။
/etc/default/o2cb တွင် (ကျွန်ုပ်တို့၏ configuration file တွင်ကဲ့သို့) သတ်မှတ်ရန် လိုအပ်သည်
O2CB_ENABLED=true
O2CB_BOOTCLUSTER=ocfs2cluster
node တစ်ခုစီတွင် execute လုပ်ပါ။
o2cb register-cluster ocfs2cluster
ထို့နောက် ကျွန်ုပ်တို့သည် ဖွင့်ပြီး အလိုအလျောက်လည်ပတ်ရန် လိုအပ်သည့် ယူနစ်အားလုံးကို ပေါင်းထည့်သည်-
systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2
ဤအရာအချို့ကို စနစ်ထည့်သွင်းခြင်းလုပ်ငန်းစဉ်အတွင်း လုပ်ဆောင်နေလိမ့်မည်။
အဆင့် 5. node နှစ်ခုစလုံးတွင် fstab သို့ mount အမှတ်များထည့်ပါ-
/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0
လမ်းညွှန် /media/shared ကြိုတင်ဖန်တီးထားရမယ်။
ဤနေရာတွင် ကျွန်ုပ်တို့သည် noauto ရွေးချယ်မှုများကို အသုံးပြုသည်၊ ဆိုလိုသည်မှာ ဖိုင်ကို စတင်ချိန်တွင် တပ်ဆင်မည်မဟုတ်ကြောင်း (ကျွန်ုပ်သည် systemd မှတစ်ဆင့် ကွန်ရက်ဖိုင်များကို တပ်ဆင်ရခြင်းကို နှစ်သက်သည်) နှင့် heartbeat=local၊ ဆိုလိုသည်မှာ node တစ်ခုစီရှိ heartbeat ဝန်ဆောင်မှုကို အသုံးပြုခြင်းကို ဆိုလိုသည်။ ကြီးမားသောအစုအဝေးများအတွက် ပို၍သင့်လျော်သော ကမ္ဘာလုံးဆိုင်ရာနှလုံးခုန်သံလည်းရှိသည်။
နောက်တစ်ခုက mount လုပ်လို့ရတယ်။ /media/shared နှင့် အကြောင်းအရာ ထပ်တူပြုခြင်းကို စစ်ဆေးပါ။
Done! ရလဒ်အနေဖြင့် ကျွန်ုပ်တို့သည် အတိုင်းအတာနှင့် သင့်လျော်သောစွမ်းဆောင်ရည်ဖြင့် အမှားအယွင်းခံနိုင်ရည်ရှိသော သိုလှောင်မှုကို အနည်းနှင့်အများရရှိမည်ဖြစ်သည်။
source: www.habr.com