معرفی DRBD
Distributed Replicated Block Device یکی از ابزارهای مورد استفاده در سیستم عامل های بر پایه لینوکس است که از آن برای Sync کردن دائمی یا موقتی یک یا چند دیسک بین چند سیستم استفاده می شود.. DRBD مشابه RAID1 عمل میکند با این تفاوت که از بستر شبکه بهره گرفته شده است. یعنی در هر زمان داده ها بر روی دو (یا چند) دیسک واقعی نوشته میشود و در صورت از دست دادن یکی از دیسکها میتوان از دیسک دیگر استفاده و به اطلاعات دسترسی پیدا نمود.کاربر اصلی DRBD در سیستمهای کلاسترینگ می باشد. همچنین میتوان برای سایت های DISASTER به عنوان روشی مطمئن در یکسان سازی دیتای دو سرور استفاده نمود. ( پیشنهاد می شود از این روش برای یکسان سازی Application ها و وب سرورهااستفاده شود و برای دیتابیس ها از روشهای مختص همان دیتابیس نظیر Active Data Guard در اوراکل ، استفاده شود )
تصویر1 : عملکرد ابزارDRBD
تصویر2 : توپولوژی ابزارDRBD
از DRBD میتوان در موارد زیر استفاده کرد:
1- استفاده در مجموعه کلاسترینگ
2- استفاده برنامههای خاص مانند MQ ها
3- ساخت پارتیشن های مجازی
4- راه اندازی پشتیبان گیری آنلاین بین سرورها
در این مقاله قصد داریم به راه اندازی ابزار DRBD در محیط Redhat 7.2 بپردازیم .
برای راه اندازی نیاز به حداقل 2 سرور لینوکسی داریم . بهتر است فضایی که برای دیسک مشترک در نظر گرفته میشود بر روی هر دو سرور یکسان باشد . البته در صورت عدم یکسان بودن میتوان با یک پارامتر در فایل تنظیمات ، فضای دیسک را یکسان در نظر گرفت . یکسان بودن فضای دیسکها و سایر بلاکهای آنها برای DRBD اهمیت دارد و ممکن است باعث بروز خطا گردد.
در ابتدا مطمئن شوید که دو سرور با نام یکدیگر را ping کنند.
[root@DRBD-NODE2 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.162.206 DRBD-NODE1
192.168.162.214 DRBD-NODE2
پکیج های مربوط به این ابزار را نصب میکنیم :
[root@DRBD-NODE1 ~]# rpm -ivh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
Retrieving http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
Retrieving http://elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
warning: /var/tmp/rpm-tmp.fQ5Wpz: Header V4 DSA/SHA1 Signature, key ID baadae52: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:elrepo-release-7.0-3.el7.elrepo ################################# [100%]
[root@DRBD-NODE1 ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
[root@DRBD-NODE1 ~]# yum info *drbd* | grep Name
Name : drbd84-utils
Name : drbd84-utils-sysvinit
Name : kmod-drbd84
[root@DRBD-NODE1 ~]# yum -y install drbd84-utils kmod-drbd84 drbd84-utils-sysvinit
Installed:
kmod-drbd84.x86_64 0:8.4.10-1_2.el7_4.elrepo drbd84-utils.x86_64 0:9.1.0-1.el7.elrepo drbd84-utils-sysvinit.x86_64 0:9.1.0-1.el7.elrepo
Complete!
[root@DRBD-NODE1 ~]# rpm --import /etc/pki/rpm-gpg/*
[root@DRBD-NODE1 ~]# lsmod | grep -i drbd
OR
[root@DRBD-NODE1 ~]# find / -name drbd.ko
/usr/lib/modules/3.10.0-693.11.6.el7.x86_64/weak-updates/drbd84/drbd.ko
/usr/lib/modules/3.10.0-693.el7.x86_64/extra/drbd84/drbd.ko
سپس اقدام به ساخت فایل Resource میکنیم.
vim /etc/drbd.d/r0.res
resource r0 {
protocol C;
on drbd-node1 {
device /dev/drbd0;
address 192.168.162.206:7788;
meta-disk internal;
disk /dev/sdb;
}
on drbd-node2{
device /dev/drbd0;
address 192.168.162.214:7788;
meta-disk internal;
disk /dev/sdb;
}
این فایل را بر روی سرور دوم کپی میکنیم:
[root@DRBD-NODE1 ~]# scp /etc/drbd.d/r0.res drbd-node2:/etc/drbd.d/
سپس تنظیمات فایل drbd.conf را مشابه زیر انجام میدهیم:
[root@DRBD-NODE1 etc]# vim drbd.conf
Global {
dialog-refresh 1;
usage-count yes;
minor-count 5;
}
resource r0 {
startup {
wfc-timeout 30;
outdated-wfc-timeout 20;
degr-wfc-timeout 120;
}
syncer {
rate 10M;
al-extents 257;
on-no-data-accessible io-error;
}
net {
cram-hmac-alg sha1;
shared-secret sync_disk;
}
protocol C;
disk {
on-io-error detach;
size 20G;
}
on drbd-node1 {
device /dev/drbd0;
address 192.168.162.206:7788;
meta-disk internal;
disk /dev/sdb;
}
on drbd-node2 {
device /dev/drbd0;
address 192.168.162.214:7788;
meta-disk internal;
disk /dev/sdb;
}
}
اقدام به Initial نمودن Storage بر روی دو سرور میکنیم :
[root@DRBD-NODE1 ~]# drbdadm create-md r0
You want me to create a v08 style flexible-size internal meta data block.
There appears to be a v09 flexible-size internal meta data block
already in place on /dev/sdb at byte offset 21474832384
Valid v09 meta-data found, convert to v08?
[need to type 'yes' to confirm] yes
Writing meta data...
New drbd meta data block successfully created.
success
[root@DRBD-NODE2 drbd.d]# drbdadm create-md r0
'r0' not defined in your config (for this host).
این فایل را نیز بر روی سرور دوم کپی میکنیم :
[root@DRBD-NODE1 etc]# scp /etc/drbd.conf drbd-node2:/etc/drbd.conf
root@drbd-node2's password:
drbd.conf 100% 478 0.5KB/s 00:00
[root@DRBD-NODE2 ~]# drbdadm create-md r0
initializing activity log
initializing bitmap (640 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.
در این مرحله سرویس DRBD را استارت میکنیم :
[root@DRBD-NODE1 ~]# systemctl start drbd
[root@DRBD-NODE1 ~]# systemctl enable drbd
Created symlink from /etc/systemd/system/multi-user.target.wants/drbd.service to /usr/lib/systemd/system/drbd.service.
[root@DRBD-NODE2 ~]# drbdadm status drbd
'drbd' not defined in your config (for this host).
[root@DRBD-NODE2 ~]# systemctl status drbd
● drbd.service - DRBD -- please disable. Unless you are NOT using a cluster manager.
Loaded: loaded (/usr/lib/systemd/system/drbd.service; enabled; vendor preset: disabled)
Active: active (exited) since Mon 2018-01-15 01:07:51 AKST; 19h ago
Process: 1478 ExecStart=/lib/drbd/drbd start (code=exited, status=0/SUCCESS)
Main PID: 1478 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/drbd.service
Jan 15 01:07:31 DRBD-NODE2 drbd[1478]: DRBD's startup script waits for the peer node(s) to appear.
Jan 15 01:07:31 DRBD-NODE2 drbd[1478]: - If this node was already a degraded cluster before the
Jan 15 01:07:31 DRBD-NODE2 drbd[1478]: reboot, the timeout is 120 seconds. [degr-wfc-timeout]
Jan 15 01:07:31 DRBD-NODE2 drbd[1478]: - If the peer was available before the reboot, the timeout
Jan 15 01:07:31 DRBD-NODE2 drbd[1478]: is 30 seconds. [wfc-timeout]
Jan 15 01:07:31 DRBD-NODE2 drbd[1478]: (These values are for resource 'r0'; 0 sec -> wait forever)
Jan 15 01:07:31 DRBD-NODE2 drbd[1478]: To abort waiting for DRBD connections, kill this process: kill 1793
Jan 15 01:07:51 DRBD-NODE2 drbd[1478]: .
Jan 15 01:07:51 DRBD-NODE2 systemd[1]: Started DRBD -- please disable. Unless you are NOT using a cluster manager..
Jan 15 01:08:56 DRBD-NODE2 systemd[1]: Started DRBD -- please disable. Unless you are NOT using a cluster manager..
اقدام به فعالسازی Node1 به عنوان Primary میکنیم :
[root@DRBD-NODE1 ~]# drbdadm primary r0 --force
0: State change failed: (-2) Need access to UpToDate data
Command 'drbdsetup-84 primary 0 --force' terminated with exit code 17
reboot
[root@DRBD-NODE1 ~]# drbdadm -- --overwrite-data-of-peer primary r0
[root@DRBD-NODE1 ~]# drbdadm primary r0
[root@DRBD-NODE1 ~]# cat /proc/drbd
version: 8.4.10-1 (api:1/proto:86-101)
GIT-hash: a4d5de01fffd7e4cde48a080e2c686f9e8cebf4c build by mockbuild@, 2017-09-15 14:23:22
0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r----s
ns:0 nr:0 dw:0 dr:912 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:20970844
استارت سرویس بر روی Node2 :
[root@DRBD-NODE2 ~]# systemctl start drbd
[root@DRBD-NODE2 ~]# systemctl enable drbd
Created symlink from /etc/systemd/system/multi-user.target.wants/drbd.service to /usr/lib/systemd/system/drbd.service
فایل سیستم را میسازیم :
[root@DRBD-NODE1 ~]# mkfs.ext3 /dev/drbd0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242711 blocks
262135 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[root@DRBD-NODE1 ~]#mount /dev/drbd0 /mnt
[root@DRBD-NODE1 ~]#touch /mnt/hamed
[root@DRBD-NODE1 ~]#ll /mnt/
وضعیت sync بودن drbd را چک میکنیم :
[root@DRBD-NODE1 ~]# drbd-overview
NOTE: drbd-overview will be deprecated soon.
Please consider using drbdtop.
0:r0/0 WFConnection Primary/Unknown UpToDate/DUnknown
پورت مربوط به drbd باید بر روی فایروال دو سرور باز باشد:
[root@DRBD-NODE1 ~]# iptables -F
[root@DRBD-NODE1 ~]# drbd-overview
NOTE: drbd-overview will be deprecated soon.
Please consider using drbdtop.
0:r0/0 SyncSource Primary/Secondary UpToDate/Inconsistent
[>....................] sync'ed: 0.1% (20476/20476)M
[root@DRBD-NODE2 ~]# drbd-overview
NOTE: drbd-overview will be deprecated soon.
Please consider using drbdtop.
0:r0/0 SyncTarget Secondary/Primary Inconsistent/UpToDate
[=>..................] sync'ed: 12.5% (17936/20476)M
[root@DRBD-NODE2 ~]# drbd-overview
NOTE: drbd-overview will be deprecated soon.
Please consider using drbdtop.
0:r0/0 SyncTarget Secondary/Primary Inconsistent/UpToDate
[======>.............] sync'ed: 36.3% (13052/20476)M
[root@DRBD-NODE2 ~]# drbd-overview
NOTE: drbd-overview will be deprecated soon.
Please consider using drbdtop.
0:r0/0 Connected Secondary/Primary UpToDate/UpToDate
#watch -n 1 cat /proc/drbd
تست و جایگزینی سرورهای Primary و Secondary :
[root@DRBD-NODE1 ~]# umount /mnt
[root@DRBD-NODE1 ~]# drbdadm secondary r0
[root@DRBD-NODE2 ~]# drbdadm primary r0
[root@DRBD-NODE2 ~]# mount /dev/drbd0 /mnt
[root@DRBD-NODE2 ~]# ll /mnt
هم اکنون DRBD بطور کامل راه اندازی و قابل استفاده میباشد.در ادامه توضیحات بیشتری در مورد پارامترهای فایل کانفیگ ارائه خواهد شد .
پارامتر های فایل drbd.conf
سرویس drbd اطلاعات مورد نیاز خودرا از فایل تنظیمات drbd.conf به طور پیشفرض در مسیر /etc/drbd.d/ میباشد دریافت می کند .در این فایل، چندین پارامتر جهت ایجاد محدودیت و استفاده بهتراز ابزار وجود دارد.که در اینجا به برخی از این پارامتر ها اشاره می شود:
پارامتر های فایل منبع drbd
ردیف |
پارامتر |
توضیحات |
1 |
Hostname |
مشخصات سیستمهای یک کلاستر جهت همگام سازی |
2 |
rate |
حداکثر نرخ انتقال اطلاعات در برقراری سینک |
3 |
resource |
نام مستعار استوریج |
4 |
protocol |
Protocol مورد استفاده برای انتقال اطلاعات |
5 |
Startup |
حداکثر مدت زمان انتظار سیستم جهت ارتباط استوریج ها |
6 |
Disk |
تنظیمات مربوط به دیسک ها و خطاهای I/o |
7 |
Syncer |
محدودیت پهنای باند شبکه در عملیات سینک |
در بین پارامترهای موجود در فایل drbd.conf ،پارامتر Disk دارای زیر پارامتری به نام Size است.که با استفاده از این پارامتر میتوانیم حداکثر سایزی که قرار است از یک دیسک به یک استوریج اختصاص داده شود را محدود نماییم.
نکته: ابزار DRBD به تعداد بیتهای یک دیسک نیزحساس میباشد به این شکل که بایستی بین دو دیسک استفاده شده در یک استوریج (منبع)که هر کدام از آنها در سیستمی می باشد، قانون زیر رعایت شده باشد:
تعداد بیتهای دیسک انتخاب شده در سیستم اصلی(primary) بایستی از تعداد بیتهای دیسک سیستم پشتیبان(secondery) کمتر یا یکسان باشد.زمانی که دو سیستم به عنوان primary در نظر گرفته می شود بایستی حتماً تعداد بیتهای هر دو دیسک انتخاب شده یکسان باشند.
کاربرد این پارامتر زمانی پررنگ میشود که دو دیسک مورد استفاده ما، دارای سایزی غیریکسان باشند.
پارامتر Size وظیفه محدود کردن سایز دیسک ها در Sync را بر عهده دارد و از این طریق ابزار DRBD را در استفاده کردن از تمام سایز یک دیسک محروم می کند.
در صورتی که مقدار این پارامتر را در هر دو سیستم ازکلاستر برابر قرار دهیم، اختلاف سایز بین دیسک ها را از بین می بریم و ابزار DRBD بدون هیچ خطایی شروع به کار می کند.
در صورتی که بدون استفاده کردن از این پارامتر قصد استفاده از ابزار DRBD را داشته باشیم و حجم دیسک ها مطابق شرایط توضیح داده شده نباشد ابزار DRBD نمیتواندعملیاتی شود و با خطای غیریکسان بودن سایز دیسک ها مواجه می شود.
برخی از عواملی که باعث غیر یکسان شدن حجم استوریج ها میشود عبارتند از:
نوع کنترلر RAID مورد استفاده در هر سیستم
نوع RAID انتخاب شده برای دیسک ها
نوع هارددیسک های استفاده شده در هر سیستم
اطلاعات تکمیلی در https://docs.linbit.com/docs/users-guide-9.0/#p-intro
قسمتی از مطالب برگرفته از http://pdnsoft.com
امیدوارم مفید بوده باشد...