Бид юу ярих вэ:
drbd+ocfs2 шийдэл дээр тулгуурлан хоёр серверт зориулсан хуваалцсан хадгалах санг хэрхэн хурдан байршуулах вэ.
Энэ нь хэнд ашигтай вэ:
Энэхүү заавар нь системийн администраторууд болон хадгалалтын хэрэгжүүлэх аргыг сонгосон эсвэл шийдлийг туршиж үзэхийг хүссэн хэн бүхэнд хэрэгтэй болно.
Бид ямар шийдвэрээс татгалзсан бэ, яагаад?
Жижиг вэб кластер дээр унших, бичих чадвар сайтай хуваалцсан санах ойг хэрэгжүүлэх шаардлагатай нөхцөл байдал ихэвчлэн тулгардаг. Бид төслүүдийнхээ дундын хадгалах санг хэрэгжүүлэх янз бүрийн хувилбаруудыг туршиж үзсэн боловч цөөхөн нь хэд хэдэн үзүүлэлтээр нэгэн зэрэг сэтгэл хангалуун байж чадсан. Одоо бид яагаад гэдгийг танд хэлэх болно.
- Glusterfs нь унших, бичих чадвараараа биднийг хангаагүй, олон тооны файлуудыг нэгэн зэрэг уншихад асуудал гарч, CPU дээр ачаалал ихтэй байсан. Файлуудыг уншихтай холбоотой асуудлыг тоосгоноос шууд хандах замаар шийдэж болох боловч энэ нь үргэлж хэрэглэгдэхгүй бөгөөд ерөнхийдөө буруу юм.
- Кеф нь хэт нарийн төвөгтэй байдлаасаа болоод таалагдаагүй бөгөөд энэ нь 2-4 төслүүдэд хор хөнөөл учруулж болзошгүй юм. серверүүд, ялангуяа төслийг дараа нь үргэлжлүүлэн ажиллуулбал. Дахин хэлэхэд, гүйцэтгэлийн мэдэгдэхүйц хязгаарлалтууд байгаа нь glusterfs-тэй адил тусдаа хадгалах кластеруудыг үүсгэхэд хүргэдэг.
- Хуваалцсан санах ойг хэрэгжүүлэхийн тулд нэг NFS серверийг ашиглах нь алдааны хүлцлийн талаар асуулт үүсгэдэг.
- s3 нь тодорхой хэмжээний даалгавруудыг гүйцэтгэх маш сайн түгээмэл шийдэл боловч энэ нь файлын систем биш бөгөөд түүний хамрах хүрээг нарийсгадаг.
- lsyncd. Хэрэв бид "файлын бус системүүд"-ийн талаар аль хэдийн ярьж эхэлсэн бол энэ түгээмэл шийдлийг авч үзэх нь зүйтэй юм. Энэ нь зөвхөн хоёр талын солилцоонд тохиромжгүй төдийгүй (хэрэв та үнэхээр хүсч байвал болно), энэ нь олон тооны файл дээр тогтвортой ажиллахгүй. Бүх зүйлд сайхан нэмэлт нь нэг урсгалтай байдаг. Үүний шалтгаан нь програмын архитектурт байгаа юм: энэ нь эхлүүлэх болон дахин хайлт хийх үед ажлын объектуудыг хянахын тулд inotify ашигладаг. rsync-ийг дамжуулагч болгон ашигладаг.
Заавар: drbd+ocfs2 дээр суурилсан хуваалцсан хадгалах санг хэрхэн ашиглах талаар
Бидний хувьд хамгийн тохиромжтой шийдлүүдийн нэг бол холбоос байв ocfs2+drbdОдоо бид танд хоёр хүнд зориулсан хуваалцсан санг хэрхэн хурдан байршуулахыг хэлж өгье серверүүд Эдгээр шийдлүүд дээр үндэслэсэн. Гэхдээ эхлээд бүрэлдэхүүн хэсгүүдийн талаар бага зэрэг ярих болно:
DRBD - стандарт хүргэлтээс эхлэн хадгалах систем Linux, энэ нь серверүүдийн хооронд блок дээр суурилсан өгөгдлийг хуулбарлах боломжийг олгодог. Үүний үндсэн хэрэглээ нь алдаа тэсвэртэй хадгалалтыг бий болгоход оршино.
OCFS2 — нэг хадгалалтын санг олон систем хамтран ашиглах боломжийг олгодог файлын систем. Түгээлтэд багтсан болно Linux Энэ нь файлын системүүдтэй ажиллах цөмийн модуль болон хэрэглэгчийн орон зайн хэрэгслүүдээс бүрдэнэ. 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
