Байнгын бэлэн ажиллагаатай байх (High-availability) нь бизнесийн чухал програм хангамжуудын хувьд хамгийн гол шаардлага бөгөөд тийм хадгалалтын төхөөрөмж нь уг орчны түлхүүр хэсэг юм. Highly Available STorage буюу HASTHighly Available STorage-г Pawel Jakub Dawidek хөгжүүлсэн бөгөөд энэ нь өгөгдлийг TCP/IP сүлжээнд холбогдсон хэд хэдэн тусдаа байгаа машинууд дээр тунгалгаар хадгалах боломжийг бүрдүүлдэг. HAST-г сүлжээний RAID1 (толь) гэж ойлгож болох бөгөөд GNU/Linux® тавцангийн хувьд байдаг DRBD® хадгалалтын системтэй төстэй юм. CARP зэрэг FreeBSD-н бусад байнгын бэлэн ажиллагааг хангагч боломжуудын хамтаар HAST нь тоног төхөөрөмжийн эвдрэлээс ангид байнгын бэлэн ажиллагаатай хадгалалтын кластер бүтээх боломжийг бүрдүүлдэг.
Энэ хэсгийг уншаад та дараах зүйлсийг мэдэх болно:
HAST гэж юу болох, хэрхэн ажилладаг болон ямар боломжуудыг хангадаг талаар.
FreeBSD дээр HAST-г хэрхэн тохируулж ашиглах талаар.
CARP болон devd(8)-г хэрхэн тохируулж уян хатан хадгалалтын систем бүтээх талаар.
Энэ хэсгийг уншихаасаа өмнө та дараах зүйлсийг мэдсэн байх шаардлагатай:
UNIX® болон FreeBSD-ийн үндсийг ойлгосон байх (Бүлэг 4, Юниксийн үндэс).
Сүлжээний интерфэйсүүд болон FreeBSD-н бусад гол дэд системүүдийг хэрхэн тохируулах талаар мэддэг байх (Бүлэг 12, Тохиргоо ба Тааруулалт).
FreeBSD-н сүлжээний талаар сайн мэддэг байх (хэсэг IV, «Сүлжээний Холболт»).
FreeBSD 8.1-RELEASE буюу түүнээс хойшхи хувилбарыг ашиглах.
HAST төслийг FreeBSD сан OMCnet Internet Service GmbH болон TransIP BV-н дэмжлэгтэйгээр санхүүжүүлжээ.
HAST системийн гол боломжуудад:
Локал хатуу дискний хөтчүүд дээрх I/O алдаануудыг халхлахад ашиглаж болох боломж.
FreeBSD-н дэмждэг дурын файлын системийг ашиглах боломжийг бүрдүүлдэг файлын системээс үл хамаарсан байдал.
Тухайн цэг унасан байх үед зөвхөн өөрчлөгдсөн блокуудыг синхрончлох замаар үр ашигтай, хурдан дахин синхрончлох боломж.
Нэмэлт нөөц бололцоог нэмэхийн тулд аль хэдийн бий болгосон орчинд ашиглах боломж.
CARP, Heartbeat эсвэл бусад хэрэгслүүдийн хамтаар уян хатан, бөх бат хадгалалтын системийг бүтээхэд цуг ашиглаж боломж.
HAST нь дурын хадгалалтын төхөөрөмжийн
хувьд блок түвшний синхрон олшруулалтыг хэд хэдэн машин уруу
хийдэг болохоор хамгийн багадаа хоёр цэг (физик машинууд) шаарддаг
— Эдгээр нь анхдагч
(бас
мастер
гэгддэг) цэг болон
хоёрдогч
(боол
) цэг юм.
Энэ хоёр машиныг хамтад нь кластер гэж дуудах болно.
HAST нь одоогоор хоёр кластерын цэгээр хязгаарлагдсан байгаа.
HAST нь анхдагч-хоёрдогч тохиргоогоор
ажилладаг болохоор тухайн үед зөвхөн нэг кластерын цэгийг
идэвхтэй байхыг зөвшөөрдөг. анхдагч
цэг буюу
актив
нь HAST-р удирдуулсан
төхөөрөмжүүдэд хандах I/O хүсэлтүүдтэй ажилладаг цэг юм.
хоёрдогч
цэг нь дараа нь primary
цэгээсээ автоматаар синхрончлогддог.
HAST системийн физик хэсгүүд нь:
локал диск (анхдагч цэг дээрх)
алсын машин дээрх диск (хоёрдогч цэг)
HAST нь блок түвшинд синхроноор
ажилладаг бөгөөд энэ нь файлын системүүд болон програм хангамжуудын
хувьд тунгалаг болгодог. HAST нь
бусад хэрэгслүүд эсвэл програм хангамжуудад ашиглах боломжтойгоор
/dev/hast/
санд ердийн
GEOM үйлчилгээ үзүүлэгчдээр хангадаг бөгөөд ингэснээр
HAST-р хангагдсан төхөөрөмжүүд болон
түүхий дискнүүд, хуваалтууд гэх зэргүүдийн хооронд ялгаа байхгүй
болдог байна.
Бичих, устгах, эсвэл flush үйлдэл бүрийг локал диск болон алсын диск рүү TCP/IP ашиглан илгээдэг. Унших үйлдэлд локал диск дээрх мэдээлэл шинэ биш эсвэл I/O алдаа гараагүй л бол локал дискнээс хариу өгдөг. Хэрэв тийм тохиолдол байвал унших үйлдлийг хоёрдогч цэг рүү илгээдэг.
HAST нь унасан байдлаас хурдан сэргээх боломжийг бий болгохыг оролддог. Энэ зорилгоор цэг унасны дараа синхрончлох хугацааг багасгах нь хамгийн чухал юм. Синхрончлолыг хурдан хангахын тулд HAST нь диск дээрх бохир өгөгдлүүдийн битмапыг зохицуулж байдаг бөгөөд ердийн синхрончлолын үед зөвхөн тэдгээрийг синхрончилдог (эхний синхрончлолыг тооцолгүйгээр).
Синхрончлолтой ажиллах олон аргууд байдаг. HAST нь янз бүрийн синхрончлолын аргуудтай (доор дурдсан) ажиллахын тулд хэд хэдэн олшруулалтын горимыг хийдэг:
memsync: локал бичих үйлдэл дууссан ба алсын цэг өгөгдөл ирснийг баталгаажуулсан бөгөөд өгөгдлийг яг хадгалахаас өмнөх үед бичих үйлдэл дууссан гэж үздэг. Алсын цэг дээрх өгөгдөл баталгаажуулалт илгээгдсэний дараа хадгалагддаг. Энэ горим нь саатлыг багасгах зориулалттай бөгөөд маш сайн найдвартай байдлыг хангадаг. memsync олшруулалтын горим нь одоогоор хийгдээгүй байгаа.
fullsync: локал болон алсын бичих үйлдэл хийгдэж дууссаны дараа бичих үйлдэл дууссан гэж үздэг. Энэ нь хамгийн найдвартай бөгөөд удаан горим юм. Энэ горим нь анхдагч байдаг.
async: локал бичих үйлдэл дууссан үед бичих үйлдлийг дууссан гэж үздэг. Энэ нь хамгийн хурдан бөгөөд аюултай олшруулалтын горим юм. Энэ горимыг бусад горимын хувьд саатал хэтэрхий өндөр байгаа алсын цэг рүү олшруулахдаа ашиглах ёстой. async олшруулалтын горим одоогоор хийгдээгүй байгаа.
Зөвхөн fullsync олшруулалтын горим одоогоор дэмжигдсэн.
HAST нь ажиллахын тулд
GEOM_GATE
дэмжлэгийг шаарддаг.
GENERIC
цөм нь анхдагчаар
GENERIC
-г агуулдаггүй
боловч FreeBSD-н анхдагч суулгацад дуудагдах боломжтой
geom_gate.ko
модуль байдаг.
Мөн дараах мөрийг цөмийн тохиргооны файлд нэмэн
GEOM_GATE
дэмжлэгийг цөмд оруулан бүтээж
болдог:
options GEOM_GATE
HAST тогтолцоо нь үйлдлийн системийн өнцгөөс харахад хэд хэдэн хэсгээс тогтдог:
өгөгдлийн синхрончлолд зориулсан hastd(8) демон,
хэрэглэгчийн талбарын удирдлагын хэрэгсэл hastctl(8),
hast.conf(5) тохиргооны файл.
Дараах жишээ хоёр цэгийг
мастер
-боол
/
анхдагч
-хоёрдогч
үйлдлийн хувьд өгөгдлийг уг хоёр цэгийн хооронд олшруулахын
тулд HAST ашиглан тохируулах талаар
тайлбарлана. Цэгүүдийг 172.16.0.1
IP
хаягтай hasta
болон
172.16.0.2
IP хаягтай
hastb
гэж нэрлэе.
Эдгээр цэгүүд нь HAST үйлдлийн хувьд ижил хэмжээтэй
өөр өөрийн /dev/ad6
хатуу дисктэй байна. HAST нөөцийг (заримдаа
эх үүсвэр гэгддэг, өөрөөр хэлбэл /dev/hast/
дахь GEOM үйлчилгээ
үзүүлэгч) test
гэж нэрлэнэ.
HAST-н тохиргоог
/etc/hast.conf
файлд хийнэ. Энэ файл нь
хоёр цэг дээр ижил байх ёстой. Боломжит хамгийн хялбар
тохиргоо дараах байдалтай байна:
resource test { on hasta { local /dev/ad6 remote 172.16.0.2 } on hastb { local /dev/ad6 remote 172.16.0.1 } }
Илүү дэлгэрэнгүй тохиргооны талаар hast.conf(5) гарын авлагаас үзнэ үү.
Мөн remote
гэсэн хэсэгт хостын
нэрийг ашиглаж бас болно. Тэр тохиолдолд тэдгээр хостуудыг
таних боломжтой байх ёстойг анхаараарай, өөрөөр хэлбэл
тэдгээр нь /etc/hosts
файл юм уу эсвэл
локал DNS дээр тодорхойлогдсон байх
ёстой.
Одоо хоёр цэг дээр тохиргоо байгаа болохоор HAST нөөцийг үүсгэх боломжтой. Хоёр цэг дээр дараах тушаалыг ажиллуулж эхний мета өгөгдлийг локал диск дээр байрлуулж hastd(8) демонг ажиллуулна:
#
hastctl create test
#
/etc/rc.d/hastd onestart
GEOM үйлчилгээ үзүүлэгчдийг одоо байгаа файлын систем дээр ашиглаж болохгүй (жишээ нь HAST-р удирдуулсан нөөц рүү одоо байгаа хадгалалтын төхөөрөмжийг хувиргах). Учир нь энэ процедур нь ямар нэг мета өгөгдлийг үйлчилгээ үзүүлэгч дээр хадгалах хэрэгтэй байдаг бөгөөд шаардлагатай зай хангалттай байхгүй байх болно.
HAST цэгийн үүргийг
(анхдагч
эсвэл хоёрдогч
)
администратор тохируулах юм уу эсвэл
hastctl(8) хэрэгсэл ашиглан Heartbeat
зэрэг бусад програмаар тохируулж болно. Анхдагч цэг рүү
(hasta
) шилжээд
дараах тушаалыг өгнө:
#
hastctl role primary test
Үүнтэй адилаар хоёрдогч цэг дээр
(hastb
)
дараах тушаалыг ажиллуулна:
#
hastctl role secondary test
Хоёр цэг хоорондоо холбогдож чадахгүй бөгөөд
хоёулаа анхдагч гэж тохируулагдсан бол үүнийг
split-brain
гэж нэрлэдэг.
Энэ тохиолдолд алдааг олж засварлахын тулд Хэсэг 19.18.5.2, «Split-brain нөхцлөөс сэргэж гарах» хэсэгт зааснаар ажиллана.
Цэг бүр дээр hastctl(8) хэрэгсэл ашиглан үр дүнг шалгаж болно:
#
hastctl status test
Хамгийн чухал текст нь status
мөр бөгөөд хоёр цэг дээр complete
гэж
байх ёстой. Хэрэв энэ нь degraded
гэж байх юм бол ямар нэг юм болохоо больсныг илтгэнэ.
Энэ үед цэгүүдийн хооронд синхрончлол явагдаад эхэлчихсэн
байна. hastctl status
тушаал
dirty
гэдэг дээр 0 байт харуулж байвал
синхрончлол дууссан гэсэн үг юм.
Дараагийн алхам бол /dev/hast/test
GEOM үйлчилгээ үзүүлэгч дээр файлын систем үүсгэж холбох явдал юм.
Үүнийг анхдагч
цэг (учир нь
/dev/hast/test
зөвхөн primary
цэг дээр харагдана) дээр
хийх ёстой. Хатуу дискийн хэмжээнээс хамаарч хэдэн
минут үргэлжилж болох юм:
#
newfs -U /dev/hast/test
#
mkdir /hast/test
#
mount /dev/hast/test /hast/test
HAST тогтолцоог зөв тохируулсны дараа
хамгийн сүүлийн алхам бол HAST систем
ачаалах үед автоматаар эхэлсэн байхыг шалгах явдал юм.
Дараах мөрийг /etc/rc.conf
файлд
нэмж өгөх шаардлагатай:
hastd_enable="YES"
Энэ жишээний зорилго нь өгөгдсөн дурын цэг ажиллахаа
больсон тохиолдолд ажиллаж байх уян хатан хадгалалтын
систем бүтээх явдал юм.
Кластерын анхдагч
цэг ажиллахаа болих
тохиолдол байж болно. Хэрэв ийм явдал боллоо гэхэд
хоёрдогч
цэг сааталгүйгээр авч
ажиллан файлын системийг шалган холбож өгөгдлийн нэг
ч битийг алдалгүйгээр үргэлжлүүлэн ажиллах ёстой.
Энэ зорилтод хүрэхийн тулд FreeBSD-ийн
IP давхарга дээр автоматаар шилжих боломжийг
бүрдүүлдэг CARP-г ашиглах шаардлагатай
байдаг. CARP (Common Address Redundancy Protocol)
ижил сүлжээнд олон хостууд IP хаяг
хуваалцаж хэрэглэх боломжийг бүрдүүлдэг. CARP-г
кластерын цэг бүр дээр Хэсэг 32.13, «Common Address Redundancy Protocol (CARP)» хэсэгт зааснаар
тохируулна. Үүнийг хийсний дараа цэг бүр
хуваалцсан IP 172.16.0.254
гэсэн
хаягтай carp0
гэсэн интерфэйстэй байх
болно. Кластерын анхдагч HAST цэг
мастер CARP цэг байх ёстой.
Өмнөх хэсэгт үүсгэсэн HAST нөөц
сүлжээн дэх бусад хостууд руу экспорт хийгдэхэд
бэлэн болсон байна. Үүнийг NFS,
Samba гэх мэтүүдийн тусламжтайгаар
хуваалцсан IP хаяг 172.16.0.254
ашиглан экспорт хийх замаар хийнэ. Шийдэгдээгүй цор
ганц асуудал бол анхдагч цэг унахад автоматаар шилжих
асуудал юм.
Хэрэв CARP интерфэйсүүд унаж босоод байвал FreeBSD үйлдлийн систем devd(8) үйл явдал гаргах бөгөөд энэ нь CARP интерфэйсүүд дээр төлвийг харах боломжийг бүрдүүлдэг. CARP интерфэйс дээрх төлвийн өөрчлөлт нь аль нэг цэг ажиллахаа байсан эсвэл ажиллаж эхэлснийг харуулна. Эдгээр төлвийн өөрчлөлт нь HAST шилжилтийг автоматаар зохицуулах тусгай скриптийг ажиллуулах боломжтой юм.
CARP интерфэйсүүд дээрх төлвийн өөрчлөлтүүдийг
барьж чадахын тулд дараах тохиргоог цэг бүр дээр
/etc/devd.conf
файлд хийж өгөх ёстой:
notify 30 { match "system" "IFNET"; match "subsystem" "carp0"; match "type" "LINK_UP"; action "/usr/local/sbin/carp-hast-switch master"; }; notify 30 { match "system" "IFNET"; match "subsystem" "carp0"; match "type" "LINK_DOWN"; action "/usr/local/sbin/carp-hast-switch slave"; };
Шинэ тохиргоог идэвхтэй болгохын тулд devd(8)-г цэг бүр дээр дахин ажиллуулна:
#
/etc/rc.d/devd restart
carp0
интерфэйс унаж босож байгаа
тохиолдолд (өөрөөр хэлбэр интерфэйсийн төлөв өөрчлөлгдсөн тохиолдолд)
систем мэдээлэл өгөх бөгөөд энэ нь devd(8) дэд системд
скрипт ажиллуулах боломжийг бүрдүүлэх бөгөөд энэ тохиолдолд
/usr/local/sbin/carp-hast-switch
байна. Энэ скрипт нь
автоматаар шилжих шилжилтийг зохицуулах юм. Дээрх devd(8)
тохиргооны талаар дэлгэрэнгүйг devd.conf(5) гарын авлагаас
үзнэ үү.
Ийм скриптийн жишээ дараах байдлаар байж болох юм:
#!/bin/sh # Original script by Freddie Cash <fjwcash@gmail.com> # Modified by Michael W. Lucas <mwlucas@BlackHelicopters.org> # and Viktor Petersson <vpetersson@wireload.net> # The names of the HAST resources, as listed in /etc/hast.conf resources="test" # delay in mounting HAST resource after becoming master # make your best guess delay=3 # logging log="local0.debug" name="carp-hast" # end of user configurable stuff case "$1" in master) logger -p $log -t $name "Switching to primary provider for ${resources}." sleep ${delay} # Wait for any "hastd secondary" processes to stop for disk in ${resources}; do while $( pgrep -lf "hastd: ${disk} \(secondary\)" > /dev/null 2>&1 ); do sleep 1 done # Switch role for each disk hastctl role primary ${disk} if [ $? -ne 0 ]; then logger -p $log -t $name "Unable to change role to primary for resource ${disk}." exit 1 fi done # Wait for the /dev/hast/* devices to appear for disk in ${resources}; do for I in $( jot 60 ); do [ -c "/dev/hast/${disk}" ] && break sleep 0.5 done if [ ! -c "/dev/hast/${disk}" ]; then logger -p $log -t $name "GEOM provider /dev/hast/${disk} did not appear." exit 1 fi done logger -p $log -t $name "Role for HAST resources ${resources} switched to primary." logger -p $log -t $name "Mounting disks." for disk in ${resources}; do mkdir -p /hast/${disk} fsck -p -y -t ufs /dev/hast/${disk} mount /dev/hast/${disk} /hast/${disk} done ;; slave) logger -p $log -t $name "Switching to secondary provider for ${resources}." # Switch roles for the HAST resources for disk in ${resources}; do if ! mount | grep -q "^/dev/hast/${disk} on " then else umount -f /hast/${disk} fi sleep $delay hastctl role secondary ${disk} 2>&1 if [ $? -ne 0 ]; then logger -p $log -t $name "Unable to switch role to secondary for resource ${disk}." exit 1 fi logger -p $log -t $name "Role switched to secondary for resource ${disk}." done ;; esac
Товчхондоо скрипт нь эдгээр алхмуудыг цэг мастер
/
анхдагч
болох үед хийнэ:
Өгөгдсөн цэг дээр HAST нөөцийг анхдагч болгоно.
HAST нөөц доор байгаа файлын системийг шалгана.
Тохирох газарт нь нөөцүүдийг холбоно.
нөөц
/
хоёрдогч
болсон тохиолдолд:
HAST нөөцүүдийг салгана.
HAST нөөцүүдийг хоёрдогч болгож бууруулна.
Энэ нь зөвхөн боломжой шийдэл байдаг гэдгийг харуулсан жишээ скрипт гэдгийг санаарай. Энэ нь бүх л боломжит нөхцлийг тооцоогүй бөгөөд шаардлагатай үйлчилгээг эхлүүлэх/зогсоох гэх мэтээр сайжруулж өргөтгөх юм уу эсвэл дураараа өөрчлөх боломжтой юм.
Энэ жишээн дээр бид стандарт UFS файлын системийг ашигласан. Сэргээхэд шаардлагатай цагийг багасгахын тулд журнал дэмжигдсэн UFS эсвэл ZFS файлын системийг ашиглаж болох юм.
Нэмэлт жишээнүүд бүхий илүү дэлгэрэнгүй мэдээллийг HAST Wiki хуудаснаас олж болно.
HAST ерөнхийдөө асуудалгүй ажиллах ёстой. Гэхдээ бусад програмуудын нэгэн адил ажиллах ёстойгоосоо өөрөөр ажиллах тохиолдол байдаг. Асуудлын шалтгаан өөр өөр байж болох боловч гол шалгах юм нь кластерын цэгүүдийн хооронд цаг синхрончлогдсон байгаа эсэхийг мэдэх явдал юм.
HAST-н асуудлуудыг шалгаж байхдаа
hastd(8)-г -d
өгөгдөлтэйгээр
ажиллуулан hastd(8)-н дибаг түвшинг ихэсгэж үзэх ёстой.
Дибаг түвшинг дахин дахин ихэсгэхийн
тулд энэ аргументыг олон удаа тавьж өгч болно. Энэ замаар
маш их хэрэгтэй мэдээллийг олж авч болно.
Мөн -F
аргументыг ашиглан hastd(8)
демонг ил ажиллуулах нь зүйтэй байдаг.
split-brain
гэдэг нь хоёр цэг нэг нэгэнтэйгээ
холбогдож чадахгүй бөгөөд хоёул анхдагч цэг гэж тохируулагдсан
үе юм. Энэ нь аюултай нөхцөл
бөгөөд учир нь энэ тохиолдолд өгөгдөлд хоёр цэг хоёул
нийцгүй өөрчлөлтийг хийх боломжийг олгодог. Энэ нөхцлийг
системийн администратор гараар засварлах шаардлагатай.
Администратор аль цэг хамгийн чухал өөрчлөлттэй байгаа дээр шийдвэр гаргаж (эсвэл гараар нийлүүлэн) HAST-д эвдэрсэн өгөгдөл бүхий цэгийн бүтэн синхрончлол хийх боломжийг олгох ёстой. Ингэхийн тулд дараах тушаалуудыг дахин синхрончлол шаардлагатай байгаа цэг дээр ажиллуулна:
#
hastctl role init <resource>
#
hastctl create <resource>
#
hastctl role secondary <resource>
Энэ болон бусад баримтуудыг ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ хаягаас татаж авч болно.
FreeBSD-ийн талаар
<questions@FreeBSD.org>
хаягтай холбоо барихаасаа өмнө
баримтыг уншина уу.
Энэ бичиг баримттай холбоотой асуулт байвал
<doc@FreeBSD.org>
хаягаар цахим захидал явуулна уу.
Энэ бичиг баримтын орчуулгатай холбоотой асуулт байвал
<admin@mnbsd.org>
хаягаар цахим захидал явуулна уу.