تجربیات کاری چند دوست

در این وبلاگ تجربیاتی که در حین کار بدست آورده ایم را به اشتراک خواهیم گذاشت

تجربیات کاری چند دوست

در این وبلاگ تجربیاتی که در حین کار بدست آورده ایم را به اشتراک خواهیم گذاشت

تجربیات کاری چند دوست
آخرین نظرات
  • ۱۶ مرداد ۹۸، ۰۱:۰۰ - علی جهان نما
    عالی بود

معرفی 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


امیدوارم مفید بوده باشد...

  • موافقین ۲ مخالفین ۰
  • ۹۶/۱۰/۲۶
  • ۱۳۰۱ نمایش
  • حامد اسماعیلی

DRBD

Disaster Web Site

DisasterApplication

Replication

نظرات (۲)

  • مهدی غفاری
  • عالی بود حامد جان
  • علی فکاری
  • سلام حامد جان عالی بود ،همین فرمون برو حلو
    ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
    شما میتوانید از این تگهای html استفاده کنید:
    <b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
    تجدید کد امنیتی