ارتباط multipath و oracleasm
برای اینکه شما از
قابلیت multipath و یا سرویسهایی از این قبیل
مانند powerpath برای کاهش ریسک افتادن اوراکل خود
میخواهید بهره ببرید، تنها نصب و کانفیگ Multipath کافی نمیباشد.
شما میبایست ASM خود را نیز برای کار با سرویس Multipath تطبیق دهید. ما
زمانی از Multipath استفاده میکنیم که مسیر (path)های زیادی
(بیشتر از یک مسیر) از سیستم عامل به دیسکهای اوراکل برقرار باشد.
کاری که asm انجام میدهد
این است که در هدر دیسک مشخصاتی را درج میکند تا بفهمد که این دیسک برای اوراکل
است. شما وقتی Multipath را کانفیگ کنید
تنها سرویسهایی که از لایهی Multipath رد میشوند میتوانند
از قابلیتهای آن استفاده کنند. بنابراین اگر شما asm خود را برای
این منظور کانفیگ نکنید، احتمال این وجود دارد که لایهی Multipath درگیر بازی
نشود و در این صورت این بدان منزله است که گویی شما multipath ندارید.
وقتی دیسکی پشت
سرویس Multipath قرار میگیرد یک نام مانند mpatha به آن اختصاص
مییابد که بهطور مثال دو مسیر sdb و sdc برای دیسک
موردنظر موجود میباشد. در نتیجه این دیسک در سیستم عامل با سه نام sdb,sdc,mpatha دیده
میشود. اگر شما asm را برای این منظور کانفیگ نکرده باشید و آن را با کانفیگ پیشفرض
رها کرده باشید هیچ تضمینی وجود ندارد که به سراغ کدام مسیر برود و از آن استفاده
کند. اگر به صورت تصادفی از maptha استفاده کند شما به صورت تصادفی
سرویس multipath را در بازی دارید ولی اگر هر مسیر دیگری را
انتخاب کند دیگر شما از قابلیتهای multipath برخوردار
نخواهید بود. برای کانفیگ asm کافیست شما در فایل /etc/sysconfig/oracleasm دو خط زیر را
اضافه کنید:
ORACLEASM_SCANORDER="dm"
ORACLEASM_SCANEXCLUDE="sd"
مقادیر موجود بین “” به عنوان prefix درنظر گرفته میشوند.
با استفاده از مغیر
اول شما اولویت scan دیسکهای خود را مشخص میکنید، به این معنی که به asm میگویید که
نخست به سراغ مسیرهای multipath برود.
با استفاده از
متغیر دوم شما به asm میگویید که دیسکهایی که با sd شروع میشوند
را در فرآیند scan نادیده بگیرد و به
این ترتیب از اختصاص مسیرهای غیرmultipathی به asm جلوگیری میکند.
مشکلی که برای من
پیش آمده بود این بود که بعد از کانفیگ asm برای استفاده
از multipath ، باز هم asm به سراغ لایهی
multipath نمیرفت و مسیرهایی از قبیل sdb را به عنوان
دیسک asm خود درنظر میگرفت. پس از کمی جستجو متوجه شدم فایل /etc/sysconfig/oracleasm در اصل یک symbolic
link به فایل /etc/sysconfig/oracleasm-_dev_oracleasm است که این لینک شکسته شده است. که در ابتدا
مجبور به پاک کردن فایل /etc/sysconfig/oracleasm و پس از آن
ساخت یک لینک جدید شدم که باعص برطرف شدن مشکل شد.
#ll /etc/sysconfig/oracleasm*
lrwxrwxrwx 1 root
root 24 Dec 20 2013 /etc/sysconfig/oracleasm ->
oracleasm-_dev_oracleasm
-rw-r--r--. 1 root root 976 May 21 2014 /etc/sysconfig/oracleasm-_dev_oracleasm
حال از کجا بفهمیم
که asm آیا از سرویس multipath استفاده میکند
یا خیر؟
دستور
Oracleasm
listdisks لیست دیسکهای asm را به ما میدهد.
احتمالا با دستور
Oracleasm querydisk –p
آشنایی دارید. این
دستور در اصل لیست دیسکهای متناظر دیسکهای ASMی را در سیستم عامل
به ما میدهد. این دستور در این مورد به شما کمکی نخواهد کرد چرا که مثلا برای شما
برای دیسک DATA01 در ASM خروجی با سه خط
DATA01 is a valid disk on mpatha
…. On sdb
… on
sdc
مشاهده خواهید کرد.
هر سه مسیر به یک دیسک منتهی میشوند ولی ASM از کدام مسیر
استفاده میکند؟
با استفاده از
سوئیچ d در دستور Oracleasm
querydisk شما خروجی مانند زیر
خواهید یافت
Disk
"DATA01" is a valid ASM disk on device [253,200]
و سپس با استفاده
از دستورات زیر(و major-minor number)دقیقا مشاهده
خواهید کرد که آیا asm در حال حاضر از سرویس multipath شما استفاده میکند
یا خیر
#cat /proc/partitions | grep "\ 253\
" | grep "\ 200\ "
253
200 461371392 dm-200
#ll /dev/* | grep dm-200
brw-rw----
1 root disk 253, 200 Sep 2 11:26 /dev/dm-200
lrwxrwxrwx 1 root root 9 Sep 2 11:26 253:200 -> ../dm-200
lrwxrwxrwx 1 root root 9 Sep
2 11:26 mpathcwp1 -> ../dm-200
هماگونه که مشاهده
میفرمائید در حال حاضر asm از سرویس multipath استفاده میکند.
اگر اینگونه نبود
شما زمانی که را اجرا میکردید نتیجهای مانند زیر مییافتید:
#
cat /proc/partitions | grep "\ 70\ " | grep "\ 65\ "
70
65 461371392 sdcw1
که به وضوح میگوید
که asm مسیر sdcw را برای کار برگزیده است.