Бид юу ярих вэ:
drbd+ocfs2 шийдэл дээр тулгуурлан хоёр серверт зориулсан хуваалцсан хадгалах санг хэрхэн хурдан байршуулах вэ.
Энэ нь хэнд ашигтай вэ:
Энэхүү заавар нь системийн администраторууд болон хадгалалтын хэрэгжүүлэх аргыг сонгосон эсвэл шийдлийг туршиж үзэхийг хүссэн хэн бүхэнд хэрэгтэй болно.
Бид ямар шийдвэрээс татгалзсан бэ, яагаад?
Жижиг вэб кластер дээр унших, бичих чадвар сайтай хуваалцсан санах ойг хэрэгжүүлэх шаардлагатай нөхцөл байдал ихэвчлэн тулгардаг. Бид төслүүдийнхээ дундын хадгалах санг хэрэгжүүлэх янз бүрийн хувилбаруудыг туршиж үзсэн боловч цөөхөн нь хэд хэдэн үзүүлэлтээр нэгэн зэрэг сэтгэл хангалуун байж чадсан. Одоо бид яагаад гэдгийг танд хэлэх болно.
- Glusterfs нь унших, бичих чадвараараа биднийг хангаагүй, олон тооны файлуудыг нэгэн зэрэг уншихад асуудал гарч, CPU дээр ачаалал ихтэй байсан. Файлуудыг уншихтай холбоотой асуудлыг тоосгоноос шууд хандах замаар шийдэж болох боловч энэ нь үргэлж хэрэглэгдэхгүй бөгөөд ерөнхийдөө буруу юм.
- Цеф хэт нарийн төвөгтэй байдалд дургүй байсан бөгөөд энэ нь 2-4 сервертэй төслүүдэд, ялангуяа төслийг дараа нь засварлаж байгаа тохиолдолд хор хөнөөл учруулж болзошгүй юм. Дахин хэлэхэд, glusterfs-тэй адил тусдаа хадгалах кластеруудыг бий болгоход хүргэдэг гүйцэтгэлийн ноцтой хязгаарлалтууд байдаг.
- Хуваалцсан санах ойг хэрэгжүүлэхийн тулд нэг NFS серверийг ашиглах нь алдааны хүлцлийн талаар асуулт үүсгэдэг.
- s3 нь тодорхой хэмжээний даалгавруудыг гүйцэтгэх маш сайн түгээмэл шийдэл боловч энэ нь файлын систем биш бөгөөд түүний хамрах хүрээг нарийсгадаг.
- lsyncd. Хэрэв бид "файлын бус системүүд"-ийн талаар аль хэдийн ярьж эхэлсэн бол энэ түгээмэл шийдлийг авч үзэх нь зүйтэй юм. Энэ нь зөвхөн хоёр талын солилцоонд тохиромжгүй төдийгүй (хэрэв та үнэхээр хүсч байвал болно), энэ нь олон тооны файл дээр тогтвортой ажиллахгүй. Бүх зүйлд сайхан нэмэлт нь нэг урсгалтай байдаг. Үүний шалтгаан нь програмын архитектурт байгаа юм: энэ нь эхлүүлэх болон дахин хайлт хийх үед ажлын объектуудыг хянахын тулд inotify ашигладаг. rsync-ийг дамжуулагч болгон ашигладаг.
Заавар: drbd+ocfs2 дээр суурилсан хуваалцсан хадгалах санг хэрхэн ашиглах талаар
Бидний хувьд хамгийн тохиромжтой шийдлүүдийн нэг бол холбоос байв ocfs2+drbd. Одоо бид шийдлийн мэдээллийн санд тулгуурлан хоёр серверт зориулж хуваалцсан хадгалах санг хэрхэн хурдан байршуулахыг танд хэлэх болно. Гэхдээ эхлээд бүрэлдэхүүн хэсгүүдийн талаар бага зэрэг:
DRBD - серверүүдийн хооронд өгөгдлийг блок болгон хуулбарлах боломжийг олгодог стандарт Linux түгээлтийн хадгалах систем. Гол хэрэглээ нь алдаатай санах ойг бий болгох явдал юм.
OCFS2 - нэг санах ойг хэд хэдэн систем хамтран ашиглах боломжийг олгодог файлын систем. Линукс түгээлтэд багтсан бөгөөд FS-тэй ажиллахад зориулсан цөмийн модуль болон хэрэглэгчийн орон зайн хэрэгсэл юм. OCFS2 нь зөвхөн DRBD дээр төдийгүй олон холболттой iSCSI дээр ашиглагдах боломжтой. Бидний жишээн дээр бид DRBD ашигладаг.
Бүх үйлдлийг ubuntu сервер 18.04 дээр хамгийн бага тохиргоогоор гүйцэтгэдэг.
Алхам 1. DRBD-г тохируулах:
/etc/drbd.d/drbd0.res файлд бид виртуал блок төхөөрөмж /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;
}
}
дотоод мета диск — мета өгөгдлийг хадгалахын тулд ижил блок төхөөрөмжийг ашиглах
төхөөрөмж /dev/drbd0 — /dev/drbd0-г drbd эзлэхүүний зам болгон ашигла.
диск /dev/vdb1 - /dev/vdb1 ашиглах
синхрончлол { хувь 1000M; } — гигабит сувгийн зурвасын өргөнийг ашиглах
зөвшөөрөх-хоёр үндсэн - хоёр үндсэн сервер дээр өөрчлөлтийг хүлээн авах боломжийг олгодог чухал сонголт
дараа-sb-0pri, дараа-sb-1pri, дараа-sb-2pri - хуваагдмал тархи илэрсэн үед зангилааны үйлдлийг хариуцах сонголтууд. Дэлгэрэнгүй мэдээллийг баримтаас олж болно.
аль алинд нь үндсэн-болно — хоёр зангилааг анхдагч болгож тохируулна.
Манай тохиолдолд бид 10 гигабит дамжуулах хүчин чадалтай тусгай виртуал сүлжээтэй, яг адилхан хоёр VM-тэй.
Бидний жишээн дээр кластерийн хоёр зангилааны сүлжээний нэр нь drbd1 ба drbd2 юм. Зөв ажиллахын тулд та /etc/hosts доторх хостуудын нэр, IP хаягтай таарах хэрэгтэй.
10.10.10.192 drbd1
10.10.10.193 drbd2
Алхам 2. Зангилаа тохируулах:
Бид хоёр сервер дээр ажилладаг:
drbdadm create-md drbd0
modprobe drbd
drbdadm up drbd0
cat /proc/drbd
Бид дараахь зүйлийг авна.
Та синхрончлолыг эхлүүлж болно. Эхний зангилаа дээр та дараахийг гүйцэтгэх хэрэгтэй:
drbdadm primary --force drbd0
Статусыг харцгаая:
cat /proc/drbd
Гайхалтай, синхрончлол эхэллээ. Бид эцэс хүртэл хүлээж, зургийг харна уу:
Алхам 3. Хоёр дахь зангилаа дээр синхрончлолыг эхлүүлнэ үү:
drbdadm primary --force drbd0
Бид дараахь зүйлийг авна.
Одоо бид хоёр серверээс drbd руу бичиж болно.
Алхам 4. ocfs2-г суулгаж тохируулна уу.
Бид маш энгийн тохиргоог ашиглах болно:
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 хоёр зангилаа дээр.
Бид дурын зангилаа дээр drbd0 дээр FS үүсгэдэг:
mkfs.ocfs2 -L "testVol" /dev/drbd0
Энд бид анхдагч параметрүүдийг ашиглан drbd0 дээр testVol гэсэн шошготой файлын системийг үүсгэсэн.
/etc/default/o2cb дотор та тохируулах хэрэгтэй (манай тохиргооны файлын адил)
O2CB_ENABLED=true
O2CB_BOOTCLUSTER=ocfs2cluster
болон зангилаа бүр дээр гүйцэтгэнэ:
o2cb register-cluster ocfs2cluster
Дараа нь бид асааж, автоматаар ажиллуулахад шаардлагатай бүх нэгжийг нэмнэ:
systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2
Эдгээрийн зарим нь тохиргоо хийх явцад аль хэдийн ажиллаж байх болно.
Алхам 5. Хоёр зангилаа дээрх fstab-д холбох цэгүүдийг нэмнэ үү:
/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0
Лавлах /хэвлэл мэдээлэл/хуваалцсан үүнийг урьдчилан бий болгох ёстой.
Энд бид noauto тохируулгуудыг ашигладаг бөгөөд энэ нь файлыг эхлүүлэх үед холбохгүй (би systemd-ээр сүлжээний файлуудыг холбохыг илүүд үздэг) болон heartbeat=local гэсэн үг бөгөөд энэ нь зангилаа бүр дээр зүрхний цохилтын үйлчилгээг ашиглах гэсэн үг юм. Мөн дэлхийн зүрхний цохилт байдаг бөгөөд энэ нь том кластерт илүү тохиромжтой байдаг.
Дараа нь та суулгаж болно /хэвлэл мэдээлэл/хуваалцсан мөн агуулгын синхрончлолыг шалгана уу.
Дууссан! Үүний үр дүнд бид илүү их эсвэл бага хэмжээний алдааг тэсвэрлэх чадвартай, өргөтгөх боломжтой, зохистой гүйцэтгэлтэй хадгалалтыг авдаг.
Эх сурвалж: www.habr.com