|
XGRID تکنولوژی
|
||
|
پیاده سازی سیستم های توزیع شده |
برای آغاز شاید بد نباشد به سایتهای زیر سری بزنید. اطلاعات خوبی برای پیاده سازی یک کلاستر در آنها هست
http://www.mcsr.olemiss.edu/bookshelf/articles/how_to_build_a_cluster.html
همینطور راههای سادهتری هم هست٬ مثلاً از نرمافزارهای آمادهای که اینکار را انجام میدهند٬ استفاده کنید. به عنوان مثال:
OSCAR http://oscar.sourceforge.net
ROCKS http://www.rocksclusters.org
Scyld http://scyld.com
مثلاً اسکار به کاربر امکان میدهد٬ که بدون توجه به تجربهاش در محیطهای لینوکس٬ بتواند یک خوشه لینوکس راهاندازی کند.
منبع : http://www.blogger.com/profile/09208285748429855857
كلاسترينگ (3)
در اين مقاله ساير الگوريتمهاي كلاسترينگ توضيح داده شده اند
K-means clustering:
K- Means ،يکي از ساده ترين الگوريتم هاي يادگيري بدون نظارت است که مسائل کلاسترينگ معروف را حل مي کند. اين الگوريتم از يک شيوه ساده براي کلاسيفاي کردن يک مجموعه داده در يک تعداد از پيش مشخص شده (k) کلاستر،استفاده مي کند.ايده اصلي تعريف k مرکز براي هر يک از کلاستر ها مي باشد . اين مراکز بايستي با دقت زياد انتخاب شوند ، زيرا مراکز مختلف ، نتايج مختلف را به وجود مي آورند.
بنابراين بهترين انتخاب قرار دان آنها (مراکز) در فاصله هر چه بيشتر از يکديگر مي باشد . قدم بعدي تخصيص هر الگو به نزديک ترين مرکز مي باشد. وقتي همه ي نقاط به مراکز موجود تخصيص داده شدند، مرحله اول تکميل شده است و يک گروه بندي اوليه انجام شده است. در اين مرحه نياز داريم که k مرکز جديد براي کلاستر هاي مرحله قبل محاسبه کنيم. بعد از تعيين k مرکز جديد ،مجدداً داده ها را به مراکز مناسب تخصيص مي دهيم.
اين مراحل را آنقدر تکرار مي کنيم که ديگر k مرکز ،جابجا نشوند.
اين الگوريتم تلاش مي کند که يک تابع هدف (Objective Function) را که تابع Squared error مي باشد ، مينيمم کند:
اين الگوريتم از مراحل زير تشکيل شده است:
1- مشخص کردن مراکز اين نقاط معرفي کنند مراکز گروه هاي اوليه مي باشند.
2- تخصيص هر الگو به گروهي که نزديکترين مرکز به الگوي مربوطه را دارد.
3- وقتي که تمام الگو ها تخصيص داده شدند،موقعيت k مرکز دوباره محاسبه مي شود.
4- مراحل 2 و 3 آنقدر تکرار مي شوند تا مراکز ديگر جابجا نشوند.
اگر چه ثابت شده است که الگوريتم هميشه پايان ميپذيرد،الگوريتم k-mean ،لزوما جواب بهينه را پيدا نمي کند. اين الگوريتم داراي حساسيت زيادي به مراکز کلاستر اوليه است که به صورت تصادفي انتخاب مي شوند.براي کاهش اين تاثير مي توان الگوريتم را چندين بار اجرا کرد.
k-means ، يک الگوريتم ساده است که براي بسياري از کاربردها مناسب مي باشد.
Fuzzy C-means Clustering:
FCM ،يک روش کلاسترينگ است که اجازه مي دهد يک الگو به دو يا چند کلاستر تعلق داشته باشد.اين روش اغلب در باز شناسي الگو مورد استفاده قرارمي گيرد .
منبع : http://www.30sharp.com
الگوریتم کلاسترینگ (2)
در این مقاله به توضیح الگوریتم کلاسترینگ سلسله مراتبی پرداخته ایم.
با در دست داشتن N نمونه داده براي کلاستر شدن و يک ماتريس فاصله يا شباهت به ابعاد N*N ، پروسه اصلي کلاستريگ سلسله مراتبي به صورت زير ميباشد :
1. با تخصيص هر نمونه به يک کلاستر شروع کنيد . يعني اگر N نمونه داشته باشيم ، N کلاستر داريم که هر يک داراي يک نمونه مي باشند . فاصله بين کلاستر ها همان فاصله بين کلاستر هاي آنهاست .
2. دو کلاستري را که نزديک تر هستند پيدا کنيد و آنها را ادغام کنيد . حالا يک کلاستر کمتر داريم .
3. فاصله کلاستر جديد را با هر يک از کلاسترهاي قديمي محاسبه کنيد .
4. مراحل 2 و3 را آنقدر تکرار کنيد که همه نمونه ها در يک کلاستر به اندازه N قرار بگيرند
مرحله 3 مي تواند به روش هاي مختلفي انجام گيرد که کلاستريگ single-linkage ، complete-linkage و Average-linkage را مشخص مي کند .
در کلاستريگ single-linkage (که روش connectedness يا minimum هم ناميده مي شود( ، فاصله يک کلاستر از کلاستر ديگر را کوتاهترين فاصله هر عضو از کلاستر اول تا هر عضو از کلاستر دوم در نظر مي گيرند .
اگر داده ها شامل شباهت باشند ، شباهت يک کلاستر تا کلاستر ديگر را برابر بيشترين شباهت هر عضو از کلاستر اول تا هر عضو از کلاستر دوم در نظر مي گيرند .
در کلاستريگ complete-linkage (که روش diameter يا maximum هم ناميده مي شود(، فاصله يک کلاستر از کلاستر ديگر را بزرگترين فاصله هر عضو از کلاستر اول تا هر عضو از کلاستر دوم در نظر مي گيرند .
در کلاستريگ average-linkage ، فاصله يک کلاستر از کلاستر ديگر را ميانگين فاصله هر عضو از کلاستر اول تا هر عضو از کلاستر دوم در نظر مي گيرند .
کلاستريگ سلسله مراتبي ، agglomerative يا متراکم شونده نيز ناميده مي شود ، زيرا کلاستر ها را به تدريج ادغام مي کند .کلاسترينگ تقسيم کننده يا divisive هم وجود دارد که به صورت عکس عمل مي کند ، به اين صورت که ابتدا همه اشياء را در يک کلاستر قرار مي دهد و به تدريج آن را به قطعه هاي کوچکتر تقسيم مي کند.
البته اين نوع کلاستريگ به ندرت مورد استفاده قرار مي گيرد .
اين الگوريم agglomerative است و زمانيکه کلاستر ها براي تشکيل کلاستر هاي جديد ، ادغام مي شوند ، سطرها و ستون هاي مربوط به آنها را در ماتريس مجاورت پاک مي کند .
ماتريس مجاورت به ابعاد N*N ، D = [d(i,j)] را در نظر بگيريد . به کلاستر ها اعداد 0 و 1 و ... و n-1 ، تخصطص داده مي شود و L(k) ، سطح k امين کلاسترينگ است . کلاستري با شماره m به صورت (m) نمايش داده مي شود و مجاورت بين کلاسترهاي (r) و (s) به صورت d[(r) , (s)] نمايش داده مي شود .
الگوريتم شامل مراحل زير است :
1. با کلاسترينگ با سطح L(0)=0 و m=0 شروع کنيد .
2. بي شباهت ترين جفت از کلاستر ها را پيدا کنيد . ((r),(s)) :
D[(r),(s)] = min d[(i),(j)]
مينيمم بين همه جفت کلاسترها در نظر گرفته مي شود .
3.m=m+1 قرار دهيد . کلاستر هاي (r) و (s) را ادغام کنيد تا تا کلاستريگ بعدي را تشکيل دهد . سطح کلاستريگ را به اين صورت تنظيم کنيد :
L(m) = d[(r),(s)]
4. ماتريس مجاورت (D) را update کنيد . به اين ترتيب که سطرها و ستون هاي مربوط به کلاسترهاي(r) و (s) را حذف کنيد و يک سطر و ستون جديد براي کلاستري که تازه تشکيل شده ايجاد کنيد .
مجاورت بين کلاستر جديد (r,s) و کلاستر هاي قديمي k به اين ترتيب محاسبه مي شود:
d [(k), (r,s)] = min d[(k),(r)], d[(k),(s)]
5. اگر تمام اشياء در يک کلاستر قرار گرفتند متوقف مي شويم ، در غير اين صورت به مرحله 2 باز مي گرديم .
يک مثال :
به عنوان مثال يک کلاسترينگ از فواصل بين يک سري از شهر هاي ايتاليايي که بر حسب کيلومتر بيان شده اند را بررسي مي کنيم . روش استفاده شده ، single-linkage مي باشد .
ماتريس فاصله که ورودي مي باشد به صورت زير است : (براي همه کلاستر ها L=0 مي باشد .)
نزديکترين شهرها MI و TO هستند ، که به فاصله 138 کيلومتر مي باشند . آنها در يک کلاستر به نام MI/TO ادغام مي شوند . سطح کلاستر جديد L(MI/TO) = 138 و m=1 مي باشد .
مي توانيم فاصله اين شيء ترکيبي را از همه اشياء ديگر محاسبه کنيم . در کلاسترينگ single-linkage ، قانون اين است که فاصله شيء ترکيبي تا ساير اشياء ، برابر کوتاهترين فاصله از هر عضو از کلاستر تا شيء خارجي مي باشد . بنابراين فاصله MI/TO تا RM ، 564 انتخاب مي شود که فاصله از MI تا RM مي باشد.بعد از ادغام MI و TO ، خواهيم داشت :
min d(i,j) = d(NA,RM) = 219 =>
NA وRM در کلاستر جديدي به نام NA/RM ادغام مي شوند .
L(NA/RM) = 219
m = 2
min d(i,j) = d(BA,NA/RM) = 255 =>
BA و NA/RM در کلاستر جديدي به نام BA/ NA/RM ادغام مي شوند .
L(BA/NA/RM) = 255
m = 3
min d(i,j) = d(BA/NA/RM,FI) = 268 =>
BA/NA/RM و FI در کلاستر جديدي به نام BA/FI/NA/RM ادغام مي شوند .
L(BA/FI/NA/RM) = 268
m = 4
نهايتاً دو کلاستر باقيمانده را در سطح 295 ادغام مي کنيم .
پروسه انجام شده به صورت خلاصه در ساختار سلسله مراتبي درخت زير نمايش داده شده است .
مشکلات :
نقاط ضعف اصلي روش هاي کلاسترينگ agglomerative عبارتند از :
? پيچيدگي زماني ، حداقل ( O(n است که n ، تعداد کل اشياء مي باشد .
? مراحلي که قبلاً انجام شده ، قابل بازگشت نيستند و نمي توان تأثير قدم هاي قبلي را undo کرد .
منبع : http://www.30sharp.com
الگوریتم های کلاسترینگ (1)
در این مقاله به توضیح یکی از الگوریتمهای کلاسترینگ (مدل ترتیبی) پرداخته ایم.
در اين قسمت انواع الگوريتم هاي کلاسترينگ را بررسي مي کنيم. الگوريتم هاي کلاسترينگ را مي توان به دسته هاي اصلي زير تقسيم بندي کرد:
• الگوريتم هاي کلاسترينگ ترتيبي
• الگوريتم هاي کلاسترينگ سلسله مراتبي
• الگوريتم هاي کلا سترينگ مبتني بر بهينه سازي تابع هزينه
اين الگوريتم ها در ابتدا يک کلاستر تک توليد مي کنند و روش هاي سريع و واضحي مي باشند. در اکثر آنها بردارهاي خصوصيات به تعداد دفعات کمي و يا تنها يک بار به الگوريتم داده مي شوند. در اينجا بطور خلاصه الگوريتم ترتيبي پايه را توضيح مي دهيم. در اين نمونه تمام بردارها يک بار به الگوريتم ارائه مي شوند. تعداد دسته ها در اين مورد از قبل مشخص نيستند. در واقع کلاسترهاي جديد در حين اجراي برنامه ايجاد مي شوند. اگر به معناي فاصله (عدم شباهت) بين بردار خصوصيت و کلاستر باشد، هر بردار بسته به فاصله از کلاستر، به کلاسترهاي موجود و يا به کلاستر جديد نسبت داده مي شود. در زير الگوريتم کلاسترينگ ترتيبي پايه آورده شده است.
در الگوريتم هاي کلاسترينگ ترتيبي نتيجه نهايي به ترتيبي که بردارها به الگوريتم ارائه مي شوند بستگي دارد.
منبع : http://www.30sharp.com
مفاهیم اولیه کلاسترینگ
در این مقاله توضیح مختصری از مفاهیم پایه کلاسترینگ ارائه شده است.
کلاسترينگ به معناي کلاس بندي بدون نظارت است که کلاسها از قبل تعيين شده نيستند و يا به عبارت ديگر برچسب کلاس الگوهاي آموزشي در دسترس نيست. بنابراين اکنون هدف اصلي ما سازماندهي الگوها به گروهاي sensible است. که به ما اجازه مي دهند که شباهت و تفاوت بين الگوها را کشف کنيم و نتايج مفيد را درباره آنها استنتاج نماييم. اين ايده در زمينه هاي مختلف ديده مي شود. مثال زير از زيست شناسي الهام گرفته شده است و صورت مسئله را براي ما واضح مي سازد. به حيوانات زير توجه کنيد: گوسفند،سگ و گربه (پستاندار)، گنجشک و بلبل (پرنده)، ماهي قرمز، شاه ماهي (ماهي)، افعي و مارمولک(خزنده) و غوک(دوزيست). به منظور مرتب کردن اين حيوانات در داخل کلاسترها نياز داريم که يک ملاک دسته بندي تعريف کنيم. اگر وجود شش ها را بررسي کنيم، ماهي قرمز و شاه ماهي در يک کلاستر و بقيه در يک کلاستر ديگر قرار مي گيرند(شکل(الف)). اگر ملاک دسته بندي را محيطي که حيوانات زندگي مي کنند قرار دهيم آنگاه گوسفند، سگ، گربه، گنجشک، بلبل،افعي و مارمولک (حيواناتي که بيرون آب زندگي مي کنند) کلاستر اول و ماهي قرمز و شاه ماهي (حيواناتي که در آب زندگي مي کنند) کلاستر دوم را تشکيل مي دهند و غوک که مي تواند هم در آب و هم در خشکي زندگي کند کلاستر سوم را تشکيل مي دهد (شکل (ب)). اگر وجود ستون فقرات را ملاک دسته بندي باشد تمام حيوانات در يک دسته قرار مي گيرند. ما مي توانيم از ملاک دسته بندي مرکب استفاده کنيم. براي مثال اگر ملاک دسته بندي نحوه بدنيا آوردن فرزندان و وجود شش ها باشد ما سه نوع کلاستر داريم که در شکل (ج) آورده شده است.
اين مثال نشان مي دهد که فرايند نسبت دادن اشيا به کلاسترها ممکن است به نتايج بسيار متفاوتي منجر شود. کلاسترينگ يکي از ابتدايي ترين فعاليت هاي ذهني است که براي کنترل کردن مقادير زياد اطلاعات دريافت شده هر روزي استفاده مي شود. پردازش هر بخش از اطلاعات به عنوان يک موجوديت تک امکان پذير نيست. بنابراين انسانها به دسته بندي موجوديت ها (حوادث، انسانها، اشيا و غيره ) در کلاسترها روي مي آورند. هر کلاستر توسط خصوصيات مشترک موجوديت هايي که درون آن قرار مي گيرند تعريف مي شود. کلاستر، يک مجموعه از داده هاست بطوريکه:
· داده هاي موجود در يک کلاستر شبيه يکديگر هستند.
· داده هاي موجود در کلاسترهاي مختلف به يکديگر شبيه نيستند.
کلاستر ها انواع مختلفي دارند که در به زير تعدادي از آنها اشاره شده است:
- كلاسترهاي بخوبي جدا شده
مجموعه نقاط داخل اين كلاستر نسبت به نقاط خارج آن به يكديگر بسيار شبيهند.
- كلاسترهاي مبتني به مركز:
مجموعه نقاط داخل اين كلاستر به مركز كلاستر نسبت به مراكز كلاسترهاي ديگر بسيار نزديكترند.
- كلاسترهاي مبتني بر مجاورت و نزديكي:
مجموعه نقاط داخل اين كلاستر به يك يا تعداد بيشتري از نقاط داخل كلاستر نسبت به نقاط خارج آن شبيهند.
به منظور ايجاد کلاستر ها (انجام عمل کلاسترينگ) اعمال زير بايد انجام شوند:
1. انتخاب ويژگي: خصوصيات بايد به طور مناسبي انتخاب شوند تا اکثر اطلاعات را کدگذاري کنند.
2. مقياس نزديکي: معياري است که ميزان شباهت و يا عدم شباهت دو بردار خصوصيت را مشخص مي کند. تمام خصوصيات انتخاب شده بايد در محاسبه اين معيار شرکت کنند و هيچ خصوصيتي نبايد بر بقيه غلبه کند. به عنوان مثال فاصله اقليدسي يا فاصله منهتن.
3. ملاک دسته بندي: که در قسمتهاي بالا در مورد آن صحبت شده است.
4. الگوريتم کلاسترينگ: پس از اينکه ملاک دسته بندي و مقياس نزديکي انتخاب شدند در اين گام يک الگوريتم خاص جهت روشن کردن ساختار دسته بندي مجموعه داده انتخاب مي شود.
5. اعتبار نتايج: زمانيکه نتايج کلاسترينگ بدست آمد بايد صحت و درستي آنها بررسي شوند. اين کار معمولا بوسيله تست هاي مناسبي انجام مي شود.
منبع : http://www.30sharp.com
کلاسترینگ در ویندوز 2003
کلاسترینگ معنیش همون دسته بندی میشه.
با کلاسترینگ سرور ها میشه بارهای برروی یک سرور رو بین چندین سرور تقسیم کرد (NLB=Netwrok Load Balancing)
در صورت کلاستر کردن یک بالانس کلی بین سرور ها برقرار میشه.
این دسته بندی می تونه به روشهای متفاوتی انجام بشه.
مثلا" فکر کنید یک سایت دارید که هزاران نفر هر روز میان و به اون سر میزنن و ازاش بازدید میکنن و به همین خاطر بار زیادی رو سرورتون هست. شما می تونید با استفاده از چند سرور این بار رو بینشون تقسیم کنید. تنظیمات کلی دسته بندی سرورها رو انجام میدید و بعد از اون هر زمان که کاربرها به سرور شما میان هر دفعه کاربر به یک سرور مسیر داده میشه.
مثل round robin که در DNS هست.(هر دفعه dns یک ipدیگه رو بده)
نوع دیگر دسته بندی برای نرم افزارها و یا دیتابیس های تجاری هست.
شما یک شرکت بزرگ رو مدیریت میکنید و مثلا" نرم افزار و یا دیتابیس X همیشه باید آنلاین باشه و برنامه نویسها و یا کارمندان بخش حسابداریتون از اون دیتا استفاده کنن. شما باید چند سرور خریداری کنید یک هارد اشتراک بگذاریدو تنظیمات RAID و اتصالات دیگر رو روش انجام بدیدو بین سرورهاتون به اشتراک بگذارید.
حالا اگر یکی از سرور های شما ناگهان قطع بشه یا مشگلی پیش بیاد سریعا" سرور بعدی می تونه کار اون یکی سرور رو انجام بده.
این نوع کلاسترینگ یا دسته بندی رو Server Clusters میگن که فقط در ویندوز سرور 2003 ent و datacent فعال هست در صورتی که NLB در تمام نسخه های وین سرور فعال هست.
اگر دوست داشتیددرباره تنظیمات کلاسترها بدونید اون مقاله های آنلاین رو بخونید و به کتابهای مرجع ویندوز سرور مراجعه کنید تنظیمات زیادی داره.
به اینجا هم می تونید مراجعه کنید:
http://www.windowscluster.com
اگر می خواهید تنظیمات NLB رو ببینید می تونید به تنظیمات کارت شبکه خودتون مراجعه کنید و در اونجااز NLB یک properties بگیرید.
From its roots in the Wolfpack Project at Microsoft, clustering has matured into an
important part of any enterprise Windows implementation. This chapter examines
Microsoft’s latest cluster offerings and describes how they can be used to scale and
extend your Windows Server 2003 network.
Acluster can most easily be defined as a group of individual servers that work together
as a single system. Software and clients see the cluster as a single entity, and the cluster is
managed as a single unit. Clustering is used to ensure high availability for mission-critical
applications, manageability for 24/7 implementations, and scalability for large enterprise
solutions. Two clustering technologies are available in MicrosoftWindows Server 2003:
Network Load Balancing (NLB) Primarily intended to balance incoming
TCP/IP traffic. NLB is commonly used for web servers.
Server Clusters Implemented to provide failover services among the clustered
computers. The Cluster service is commonly used for database applications.
You can’t use both on the same server, but you can use the two cluster solutions
together to gain complementary functions—for example, making a database
application available to web site visitors
برای Clustering کردن، بستگی داره که شما در چه سطحی مایل به انجام این قضیه باشید. مثلاً میتونید یک نرم افزار رو Clustering کنید که برای این کار احتمالاً باید از Platform هایی مثل Java استفاده کنید که خود دارای امکانات Application Clustering هستند.
راه دیگه ای که داره توسط ما هم از اون استفاده میشه، Cluster کردن Apache و MySQL بر روی چندین سرور هست. برای این کار، باید DNS سروری داشته باشید که بر اساس Load سرور ها، IP های مختلف رو به کاربر در هنگام DNS Querry بده، بدین صورت کاربر شماره یک ، آدرس IP اول شما رو از DNS Server میگیره و کاربر شما دو هم آدرس شماره دوم رو و الی آخر
کاربر یک اتصال به سرور Apache شماره یک شما به IP مثلاً : xxx.xxx.xxx.1
کاربر دو اتصال به سرور Apache شماره دو شما به IP مثلاً : xxx.xxx.xxx.2
کاربر سه اتصال به سرور Apache شماره سه شما به IP مثلاً : xxx.xxx.xxx.3
....
حالا شما باید دارای چندین نسخه از سایتتون بر روی سرور های Apache تون باشید که برای این کار از نرم افزار های محتلفی برای Sync کردن اطلاعات می تونید استفاده کنید. در مورد MySQL یا SQL Server هم دقیقاً همین طور هست یعنی تعدادی سرور MySQL یا SQL هست که Cluster هستن. نرم افزار MySQL خودش از طریق MySQL Clustering از این امکان پشتیبانی می کنه، بنابر این شما می تونید تعداد نامحدودی سرور MySQL داشته باشید که Sync هستن و به صورت Cluster با هم کار می کنند.
این نوع کلاستر کاملاً Fail Safe هست، چرا که در صورت داون بودن هر کدم از سرور ها، سرور دیگری پاسخگوی کاربران خواهد بود.
شركت IBM ماشين محاسبات فني خود را تقويت مي كند
شركت IBM توان پردازشگر سرور P5-575 خود را تقويت خواهد كرد، سروري كه محاسبات فني پر قدرت را انجام مي دهد.
به گزارش بخش خبر سايت http://www.IRITN.com ،به نقل از News.com ، در حال حاضر هر يك از سرورهاي P5-575 با هر چيپ Power5 به بازار عرضه مي شود اما فقط يكي از دو موتور پردازشگر اين چيپ ها كه هسته نام دارد فعال است. با اين وجود شركت Big Blue تا انتهاي سال سيستمي با هشت پردازنده دو هسته اي به بازار عرضه خواهد كرد. سيستم هاي دو هسته اي 5/1 گيگاهرتز خواهد بود كه تا اندازه اي كمتر از مدل هاي يك هسته اي با سرعت 1.9 گيگاهرتز است اما كارايي كلي سيستم دو هسته اي تا 55 درصد افزايش خواهد يافت. بيشتر سرورهاي يونيكس كنوني شركت IBM از مدل دو هسته اي استفاده مي كنند. شركت IBM همزمان با كنفرانس 2005 بين المللي ابر كامپيوتر در آلمان اين سيستم ها را معرفي كرد. IBM براي كسب مقام اول در بازار محاسبات فني سخت تلاش مي كند. در اين بازار از تمامي امكانات از ماشين هاي قدرتمند گرفته تا كلاسترهاي وسيع متشكل از صدها ماشين كوچكتر براي انجام كارهايي چون شبيه سازي تصادفات خودرويي يا تحقيقات دارويي استفاده مي شود. رقباي IBM در اين بازار شركت هايي مثل HP ( رقيب درجه يك)، Cray ، سيليكون گرافيك، Dell و سان ميكروسيستم هستند. از سرور P5-575 در قالب بندي استاندارد كلاستر يعني Cluster 1600 به همراه 128 سيستم 12 اينچي ديگر استفاده مي شود.
Building a Web Cluster with FreeSBIE
What is FreeSBIE? Quoting from its developers:
What is FreeSBIE? Simply: It's a live system on compact disk (CD), or an operating system that is able to load directly from a bootable CD, without any installation process, without any hard disk. It's based on the FreeBSD operating system.
Great news! There were a lot of different so-called LiveCD projects based on FreeBSD, but as far as I know, none has released a stable and public version. FreeSBIE 1.0 was the first one, so it sounds like a good choice.
Is there much need for FreeSBIE? Currently, the price of hard disk drives is pretty low, so it's easy to equip all our servers and workstations with hard disks. The answer is lifecycle. A regular hard drive will break after an indefinite period of time; this is unavoidable. Hard drives work for a lot of read/write operations with a heavy load. The CD's lifecycle is much longer. It normally works only for read operations, was designed as a better storage alternative, and it's also worth mentioning that the cost of one blank compact disk is hundred times less than the cost of a hard disk drive.
There are a lot of ways that running a UNIX operating system from a standalone CD can save you time and money. I'd like to describe one situation where the use of LiveCD is a very easy and cost-effective solution — a clustering solution for diskless stations.
Suppose that we need to build a cluster of web servers to serve HTTP and HTTPS connections. Why do we need a cluster? First of all, our web services are heavily loaded; having one or two CPU systems and a lot of RAM is not enough anymore. Secondly, our services need 24x7 availability and this requires an excellent fail-over backup system, which should be completely transparent for customers and normal web surfers. Nobody cares how many servers and sites we have; everyone only wants to see the requested web page.
It's also much easier to kill one server with Denial of Service (DoS) attacks, but having multiple servers will keep us safe longer. More than that, we can not rely on only one hardware server. That would be stupid. Hardware faults can happen anytime and we should not risk our business because of this. To crown it all, I should say there are a lot of different arguments why a cluster can make sense.
Our clustering solution includes:
Load-balancing hardware or software. For hardware, we can use F5 BIG-IP or anything of this kind. This hardware can handle HTTP connections and route them to the correct server. It also knows many tricks and can cache HTTPS. Also, I like it because it runs BSD OS as a managing OS. I'll call it lb01.
There are a lot of different load-balancing systems. As a rule they are high configurable but it's usually easy to understand their syntax and write your own configuration. Our example needs to cache SSL and forward plain HTTP to our servers. It should choose the server with the least load and should remove broken ones from the list. All modern load balancers know how to do this well.
Before I start exploring the build process, I'd like to explain why I chose this cluster configuration. There are many different possible cluster configurations. The most popular configuration involves equipping the web servers with only network adapters and making them boot through PXE-BOOT. This configuration uses an additional DHCP server. Personally I think it's a good approach, but it has some weaknesses. For starters, it can be somewhat expensive. It also has a potential quality-of-service drawback; all cluster machines depend on the DHCP server, which may be heavily loaded and has the potential of network-killing hardware failure. On the other hand, this configuration requires less managing time.
Let's start from the FreeSBIE building process. To build a FreeSBIE LiveCD, we need a FreeBSD station. Preferably, it should run the same hardware configuration as all our cluster machines. In my case, this is an AMD Duron 1200 CPU with 128 MB of RAM. The build station also has a Maxtor 6Y120P0 UDMA 100 hard drive. Our cluster machines do not need this.
Finally, the build station also needs a CD-RW or DVD-RW disk drive to burn our CD ISO image, after we build a system, and spare, blank CD-R disks. (CD-RW may be better until you're familiar with the building and burning processes).
FreeSBIE has a FreeBSD port at /usr/ports/sysutils/freesbie. I used the version from 7 February 2004, freesbie-20040207.tar.bz2, with a size of 151,799 bytes. The FreeSBIE port is "a collection of scripts that help a user create CDs/DVDs containing a complete operating system based on FreeBSD. It is used as 'live-CD' and boots straight from CD." FreeSBIE uses compression to store a lot of software on the LiveFS file system.
The FreeSBIE site has pre-built LiveCD ISO images. When I wrote this article they had the following:
Latest ISO: FreeSBIE-1.0-i386
| Filename | Type | Size | Date |
|---|---|---|---|
| FreeSBIE-1.0-i386.iso | ISO image | 565,504 Kb | 02/27/2004 12:22:00 |
| FreeSBIE-1.0-i386.iso.md5 | MD5 signature | 1 Kb | 02/27/2004 12:28:00 |
| FreeSBIE-1.0-i386.pkg_info.txt | Package description | 20 Kb | 02/27/2004 12:21:00 |
If the default functions and configuration is OK for you, you can use these images. For our configuration we'll need to customize the defaults.
The first step is to build an ISO image to burn to a blank CD-R or CD-RW disk. The install process requires the following files:
| Filename | Size | Description |
|---|---|---|
| freesbie-20040207.tar.bz2 | 151,799 bytes | The collection of scripts. |
| cdrtools-2.00.3.tar.gz | 1,638,876 bytes | A collection of software needed to build an ISO image. |
| cloop_2.01-1.tar.gz | 21,862 bytes | Compressed file-system support. |
Installation is as simple as:
$ cd /usr/ports/sysutils/freesbie
$ make
$ su
# make installThe main part of this package is the collection of scripts that live under /usr/local/share/freesbie. The README suggests to run a user interface for the scripts, built using Savio Lam's dialog program. Let's run that ./freesbie. Start it from /usr/local/share/freesbie, since all the scripts use relative, not absolute, paths.
The first run of the script, shown in Figure 1, proposes a startup configuration.

Figure 1: FreeSBIE startup configuration.
We need to set paths and file names about the LiveFS file system to create. Let's put it in /usr/local/livefs. If the directory doesn't exist, the installer will prompt you to create it:
ATTENTION PLEASE!
The path you have entered does not seems a valid path or the directory does not
exist.
Do you wish to create it? [ Yes ] NoWe also need to set FreeSBIE's home directory, where the installer will create the kernel configuration file used to build a system. Use the current directory, /usr/local/share/freesbie.
Next, set the path to the ISO image to create. The default is /usr/local/share/freesbie/FreeSBIE.iso. I personally would rather not build a custom system in the system-wide directories, though. This will lead you to the main menu, shown in Figure 2.

Figure 2: The installer main menu.
The first section, Configure, we have already passed in the previous block. So we can move forward. Unfortunately, if you need a help system and press F1 as it advises at the bottom of the screen, it'll take you to a shell. You probably don't need the help, but beware.
Let's tackle the menu options in order.
This options runs the 0.rmdir.sh script to clean the LiveFS file system directory.
This options starts the 1.mkdir.sh script, which tries to create a directory structure for the new file system. After this happens, the /usr/local/livecd directory will resemble:
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 cdrom
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 home
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 mfs
drwxr-xr-x 37 root wheel 1024 23 Feb 17:44 mnt
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 stand
drwxr-xr-x 3 root wheel 512 23 Feb 17:44 usr
drwxr-xr-x 3 root wheel 512 23 Feb 17:44 var./mnt contains the directory structure for the various supported file systems:
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 dos.1
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 dos.2
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 dos.3
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 dos.4
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 dos.ext.1
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 dos.ext.2
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 dos.ext.3
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 dos.ext.4
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ext2fs.1
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ext2fs.2
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ext2fs.3
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ext2fs.4
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ext2fs.ext.1
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ext2fs.ext.2
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ext2fs.ext.3
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ext2fs.ext.4
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 floppy
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ntfs.1
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ntfs.2
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ntfs.3
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ntfs.4
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ntfs.ext.1
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ntfs.ext.2
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ntfs.ext.3
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ntfs.ext.4
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 temp
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 tmp
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ufs.1
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ufs.2
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ufs.3
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ufs.4
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ufs.5
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ufs.6
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ufs.7
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ufs.8The whole directory structure takes about 94 Kbytes now.
This step runs the 2.buildworld.sh script. It requires that you've installed the src-all package (FreeBSD sources for everything). I suggest that you perform a full upgrade for the whole system through CVSup. It can save you a lot of time and nerves instead of spending hours figuring out why something is not compiling. After the world building has finished, you can look at the results in the default /usr/obj/usr/src directory. In our case it takes up about 419 Mbytes of space.
This option runs the 3.installworld.sh script to install the freshly built world. This step will take less time than the build process. The /usr/local/livefs will then resemble:
-rw-r--r-- 2 root wheel 802 23 Feb 19:41 .cshrc
-rw-r--r-- 2 root wheel 251 23 Feb 19:41 .profile
-r--r--r-- 1 root wheel 4735 23 Feb 19:41 COPYRIGHT
drwxr-xr-x 2 root wheel 1024 23 Feb 19:42 bin
drwxr-xr-x 3 root wheel 512 23 Feb 19:43 boot
drwxr-xr-x 2 root wheel 512 23 Feb 19:43 bootstrap
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 cdrom
drwxr-xr-x 16 root wheel 2048 23 Feb 19:41 etc
drwxr-xr-x 3 root wheel 18432 23 Feb 19:41 dev
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 home
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 mfs
drwxr-xr-x 37 root wheel 1024 23 Feb 17:44 mnt
drwxr-xr-x 2 root wheel 512 23 Feb 19:41 modules
dr-xr-xr-x 2 root wheel 512 23 Feb 19:41 proc
drwxr-xr-x 2 root wheel 512 23 Feb 19:41 root
drwxr-xr-x 2 root wheel 2048 23 Feb 19:42 sbin
drwxr-xr-x 5 root wheel 1024 23 Feb 19:43 stand
lrwxr-xr-x 1 root wheel 11 23 Feb 19:41 sys -> usr/src/sys
drwxrwxrwt 2 root wheel 512 23 Feb 19:41 tmp
drwxr-xr-x 13 root wheel 512 23 Feb 19:41 usr
drwxr-xr-x 20 root wheel 512 23 Feb 19:41 varNow our LiveFS file system is 131 Mbytes in size.
This option runs the 4.kernel.sh script to compile and install a kernel to our LiveFS file system. The default FreeSBIE kernel configuration file is /usr/local/share/freesbie/FREESBIE. It's based on the GENERIC kernel configuration file with a lot of added options, so you should customize this file. If you're not familiar with the kernel configuration procedure, back up the original file as FREESBIE.orig.
The default configuration produces a kernel of about 5 Mbytes in size, which is definitely too much. After removing support for SCSI, RAID, missing network cards, and ISDN, my kernel size decreased to 2.2 Mbytes. You can do better.
I advise you to do a kernel compile and install using the /usr/local/share/freesbie/kernel.sh script, but not the visual dialog interface. If any errors appear during the compilation or installation it's hard to see because dialog clears all debug information too fast.
After you've finished this step, copy the kernel to the /usr/local/livefs kernel directory.
This option runs 5.patchfiles.sh, which adds a lot of different scripts to the LiveFS file system, especially in the scripts/ directory:
Patching files in /etc directory...
Making vnodes in /dev...
Copying cool scripts (from sysutils/livecd)
cp: /usr/local/share/freesbie/files/livecd/scripts/lang is a directory
(not copied).
/usr/local/share/freesbie/files/livecd/scripts/create_vnodes.sh
-> /usr/local/livefs/scripts/create_vnodes.sh
/usr/local/share/freesbie/files/livecd/scripts/lang/vnodes_En
-> /usr/local/livefs/scripts/lang/vnodes_En
Copying FloppyBackup and cardDetect scriptsThis options runs the 6.packages.sh script to install additional packages to your LiveFS file system. Figure 3 shows the menu of packages to choose.

Figure 3: The package menu.
The script generates this package list with information from pkg_info. In other words, LiveFS can install only those packages already installed on your build system. If you have installed some of your software manually without using the ports or pkg_add utility, you won't see it in the generated list. As Figure 4 shows, this operation is very similar to using the /stand/sysinstall utility for tuning your FreeBSD installation.

Figure 4: Package selection.
While choosing necessary packages, keep in mind that you're limited by the space of your storage medium. A CD-R or CD-RW normally holds between 650 and 800 Mbytes. If you use a DVD, you'll have much more room for your software.
This option runs 7.customuser.sh. This copies user profiles and software configurations from /usr/local/share/freesbie/files/foobar to the LiveFS file system. The defaults are:
Installing customized files...
/usr/local/share/freesbie/files/foobar/irssi_config ->
/usr/local/livefs/root/.irssi/config
.muttrc
.mutt/aliases
.mutt/auto_views
.mutt/bindings
.mutt/colours
.mutt/gpg
.mutt/headers
.mutt/macros
cp: /usr/local/share/freesbie/files/foobar/.. is a directory (not copied).
cp: /usr/local/share/freesbie/files/foobar/. is a directory (not copied).
/usr/local/share/freesbie/files/foobar/.xcustom.sh ->
/usr/local/livefs/root/.xcustom.sh
/usr/local/share/freesbie/files/foobar/.vimrc ->
/usr/local/livefs/root/.vimrc
/usr/local/share/freesbie/files/foobar/.tcshrc.complete ->
/usr/local/livefs/root/.tcshrc.complete
/usr/local/share/freesbie/files/foobar/.tcshrc.bindkey ->
/usr/local/livefs/root/.tcshrc.bindkey
/usr/local/share/freesbie/files/foobar/.tcshrc ->
/usr/local/livefs/root/.tcshrc
/usr/local/share/freesbie/files/foobar/.shrc ->
/usr/local/livefs/root/.shrc
/usr/local/share/freesbie/files/foobar/.rhosts ->
/usr/local/livefs/root/.rhosts
/usr/local/share/freesbie/files/foobar/.xsession ->
/usr/local/livefs/root/.xsession
/usr/local/share/freesbie/files/foobar/.mailrc ->
/usr/local/livefs/root/.mailrc
/usr/local/share/freesbie/files/foobar/.mail_aliases ->
/usr/local/livefs/root/.mail_aliases
/usr/local/share/freesbie/files/foobar/.login_conf ->
/usr/local/livefs/root/.login_conf
/usr/local/share/freesbie/files/foobar/.login ->
/usr/local/livefs/root/.login
/usr/local/share/freesbie/files/foobar/.custom.sh ->
/usr/local/livefs/root/.custom.sh
/usr/local/share/freesbie/files/foobar/.cshrc ->
/usr/local/livefs/root/.cshrc
/usr/local/share/freesbie/files/foobar/.Xauthority ->
/usr/local/livefs/root/.Xauthority
/usr/local/share/freesbie/files/foobar/.profile ->
/usr/local/livefs/root/.profile
/usr/local/share/freesbie/files/foobar/.xinitrc ->
/usr/local/livefs/root/.xinitrc
/usr/local/share/freesbie/files/foobar/mutt.tar.bz2 ->
/usr/local/livefs/root/mutt.tar.bz2
/usr/local/share/freesbie/files/foobar/irssi_config ->
/usr/local/livefs/root/irssi_configThis is not very useful for server configuration.
This option runs the 8.mkiso.sh script to create the ISO image file using the already configured path. In our case, this will generate the file /usr/local/share/freesbie/FreeSBIE.iso. We are almost done!
There are two different ways to customize the build. The first way is to edit all files in the /usr/local/share/freesbie directory before starting ./freesbie. The second way is to create a LiveFS file structure and then edit necessary files. Certainly, you can combine both of them, but I find the second approach much more sensible.
Now that you're familiar with the build process, I can describe how to customize the system.
First, we need to customize the /etc directory on the LiveFS. The /etc/rc.conf file holds hostname and interface configuration. We have no easy way to keep this file on an NFS drive, except for patching the startup scripts. Hopefully GUFI, the main Italian FreeBSD User Group developing FreeSBIE, will simplify this eventually. We can either prepare a different configuration for each server in web01-10 or edit the scripts to mount /etc/rc.conf from nfs01. You can also try to follow the /usr/share/examples/diskless/clone_root instructions of cloning a diskless configuration, although I believe it'll also require a lot of hacking. I have not looked at it closely, but it seemed more oriented to diskless configurations.
Once we've set a system hostname and have connected to the network, we must start our services. This means we'll need to edit /etc/fstab:
nfs01:/startup/usr/local/etc/rc.d/cluster
/usr/local/etc/rc.d/cluster nfs ro 0 0The /usr/local/etc/rc.d/cluster directory holds a startup script for local services. FreeBSD's /etc/rc script mounts NFS file systems before it starts local software, so we won't need any hacks there. Also we need to mount a data directory and software configuration, too:
nfs01:/storage/var/web /var/web nfs Ro 0 0The /var/web directory holds data for our web services. This could be a directory with a complex file structure. Though we shouldn't normally make changes there, we can do this if we mount it in rw mode.
nfs01:/startup/usr/local/etc /usr/local/etc nfs ro 0 0The /usr/local/etc directory holds our software configuration files.
To crown it all, nfs01 must store:
/startup/usr/local/etc
/startup/usr/local/etc/rc.d
/storage/var/webThis isn't a big deal, except for the data at /storage/var/web. This won't be a big load for our NetApp NFS server.
When we've finished customizing our system, we can prepare an ISO image to burn. It took me no more than two hours to reach this point from the very beginning. I hope it normally would take no more than four or five hours for any professional familiar with FreeBSD to prepare a completely new, highly customized cluster system.
You can now burn the ISO image to disk using any operating system or software you like. Under FreeBSD I like the burncd one and on the Windows platform I use Ahead Nero. Here's how to burn the system on a CD-RW disc under FreeBSD:
# burncd -s max -f /dev/acd0a blankThis will make a blank image. To burn a CD:
# burncd -s max -f /dev/acd0a /usr/local/share/freesbie/FreeSBIE.iso fixateIt's also worth mentioning how to keep your systems up-to-date. It's both easy and difficult. I believe that the most correct way to stay current is to keep your build system updated. As a rule, your production system needs infrequent updates — only when FreeBSD has important changes. So, while your build system is up-to-date, you can pass through the build process from the very beginning to create an image for the most recent version.
Now you can take a freshly burned CD disk and put it into the CD-ROM drive of your cluster machines. Boot it, then share your happiness at using such an easy and cost-effective solution with others!
کلاستر کاملاً Fail Safe
برای Clustering کردن، بستگی داره که شما در چه سطحی مایل به انجام این قضیه باشید. مثلاً میتونید یک نرم افزار رو Clustering کنید که برای این کار احتمالاً باید از Platform هایی مثل Java استفاده کنید که خود دارای امکانات Application Clustering هستند.
راه دیگه ای که داره توسط ما هم از اون استفاده میشه، Cluster کردن Apache و MySQL بر روی چندین سرور هست. برای این کار، باید DNS سروری داشته باشید که بر اساس Load سرور ها، IP های مختلف رو به کاربر در هنگام DNS Querry بده، بدین صورت کاربر شماره یک ، آدرس IP اول شما رو از DNS Server میگیره و کاربر شما دو هم آدرس شماره دوم رو و الی آخر
کاربر یک اتصال به سرور Apache شماره یک شما به IP مثلاً : xxx.xxx.xxx.1
کاربر دو اتصال به سرور Apache شماره دو شما به IP مثلاً : xxx.xxx.xxx.2
کاربر سه اتصال به سرور Apache شماره سه شما به IP مثلاً : xxx.xxx.xxx.3
....
حالا شما باید دارای چندین نسخه از سایتتون بر روی سرور های Apache تون باشید که برای این کار از نرم افزار های محتلفی برای Sync کردن اطلاعات می تونید استفاده کنید. در مورد MySQL یا SQL Server هم دقیقاً همین طور هست یعنی تعدادی سرور MySQL یا SQL هست که Cluster هستن. نرم افزار MySQL خودش از طریق MySQL Clustering از این امکان پشتیبانی می کنه، بنابر این شما می تونید تعداد نامحدودی سرور MySQL داشته باشید که Sync هستن و به صورت Cluster با هم کار می کنند.
این نوع کلاستر کاملاً Fail Safe هست، چرا که در صورت داون بودن هر کدم از سرور ها، سرور دیگری پاسخگوی کاربران خواهد بود.
دريافت جايزه جشنواره بينالمللي خوارزمي (بهمن 86)
|
پروژه «طراحي و ساخت ابررايانه با فناوري كلاستر» از طرف مركز تحقيقات پردازشهاي فوق سريع دانشگاه صنعتي اميركبير، در بيست ويكمين جشنواره بينالمللي خوارزمي رتبه دوم پژوهشهاي كاربردي را كسب نموده است. |
|
|
|
دانش طراحي و ساخت ابررايانه به روش كلاستر يك دستاورد بسيار مهم و جزو معدود فناوريهايي است كه نقش کليدي و مادر فناوريها را بازي ميكند. زيرا ابررايانه ميتواند به عنوان يك ابزار راهبردي در جهت توسعه و پيشرفت ساير شاخههاي علمي و مهندسي بكار رود. در حقيقت بدون اين ابزار، حل بسياري از مسائل پيچيده علمي و فني غيرممكن و يا بسيار مشكل خواهد بود. |
C-Sharifi Cluster Engine
A Kernelware for Cost-Effective High Performance Computation
Based on “Kernel-Level Paradigm” on Building Support for Non-Functional Requirements of Distributed Systems
Contrary to two school of thoughts in providing system software support for distributed computation and its non-functional requirements that advocate either the development of a whole new distributed operating system (like Mach), the development of library-based solutions (like MPI at the Program Level) or middleware-based solutions (like Kerrighed at the OS Interface Level) running on top of existing network operating systems, or patch-based solutions (like Mosix at the Kernel Interface Level) that patch and thus change the components of network operating systems, Dr. Mohsen Sharifi hypothesized another school of thought as his thesis in 1986 that believes all distributed systems software non-functional requirements and supports can be and must be built at the Kernel Level of existing network operating systems without changing the architecture, structure, and behavior of these operating systems; requirements like Ease of Programming, Simplicity, Efficiency, Accessibility, etc which may be coined as Usability. This is only one dimension of the eight dimensions of System Performance, namely, Extendibility, Security, Flexibility, Reliability, Functionality, Usability, Connectivity, and Privacy.
Although the thesis was hard to realize, a sample solution for distributed inter process communication, called DIPC, was built purely based on this thesis and openly announced to the Linux community worldwide in 1993. This was admired for being able to provide necessary supports for distributed communication at the Kernel Level of Linux for the first time in the world, and for providing Ease of Programming as a consequence of being realized at the Kernel Level. However, it was criticized at the same time as being inefficient. This did not force the school to trade Ease of Programming for Efficiency but instead tried hard to achieve efficiency, alongside ease of programming and simplicity, without sacrificing the school that advocates the provision of all non-functional needs at the kernel level. The result of this effort is now manifested in the C-Sharifi Cluster Engine.
C-Sharifi is a cost effective distributed system software engine in support of high performance computing using clusters of off-the-shelf computers. It is wholly implemented at the kernel level, and as a consequence of following this school, it has Ease of Clustering, Ease of Programming, and Simplicity, and it can be configured to fit as best as possible to the efficiency requirements of applications that need speedy response time. It supports both distributed shared memory and message passing styles, it is built in Linux, and its cost/performance ratio in some scientific applications (like meteorology and cryptanalysis) has been practically proved to be far better than non-kernel level solutions and engines (like MPI, Kerrighed and Mosix) under the same conditions. C-Sharifi must be specially tailored to each application in order to derive the best possible performance for that application. That is to say that each application requires an exclusive version of C-Sharifi adapted to that application.
By virtue of being built at the kernel level, C-Sharifi is the only high performance cluster solution in the world that can provide a single system image to heterogeneous clusters running any combinations of MPI, Mosix or C-Sharifi engines, as well as to homogeneous clusters each running under the same engine. This is particularly useful for simultaneously running multiple models on different (perhaps legacy) clusters within a single framework with a single system image.
Potential computations benefiting from the high performance of C-Sharifi are, to name a few, Finite Elements, Computational Fluid Dynamics, Molecular Dynamics, Numerical Analysis, and Computer Aided Engineering. These intensive computations predominantly try to model and simulate complex structures, dynamics, phenomena or behaviors, in order to predict their specific concerns to the highest possible degree of precision. Applications needing such numerically intensive computations include Automotive Applications, Aerospace Studies, Chemical and Pharmaceutical Studies, Electronics, Energy Research, Geophysics and Oil Applications, and Weather Prediction. Other applications like Data Stream Management, Cryptanalysis, WWW Servers, Network Management, Image Processing, On-Line Transaction Processing as well as Data and Web Mining in the computer field are beneficiaries too
روش Clustering (گروه بندی) در Ktreme
گاهی لازم است به محيط بيرون يك جعبه نيز فكر كنيد. اين كاری بود كه سال گذشته Srinidhi Varadarajan استاديار علم كامپيوتر در دانشكده مهندسی Virginia Tech انجام داد.
Varadarajan مدير (Tera Scale Computing Facility (TCF جديد Virginia Tech است كه قويترين ابر كامپيوتر خانگی دنيا می باشد. او سومين ابر كامپيوتر در ليست Top 500 Supercomputer Site است.
در حاليكه بسياری از گروههای كامپيوتری علمی به سرورهای با پردازنده های اينتل تكيه می كنند ولی TCF پردازنده G5 شركت آی بی ام و اپل را اساس كار خود قرار می دهد. TCF شامل گروهی از 1100 كامپيوتر G5 اپل است كه هر گره آن دارای پردازنده های دو گيگاهرتزی 64 بيتی دو طرفه PowerPC و چهار گيگابايت حافظه و 160 گيگابايت حافظه كمكی هستند. قيمت كلی TCF حدود 5.2 ميليون دلار تخمين زده شده است و Virginia Tech می گويد او سازنده اين ابر كامپيوتر نه چندان گران در جهان است.
اين مجموعه، System X لقب گرفته است چون هدف طراحان آن ايجاد سيستمی است كه دارای بيش از 10 Tera FLOPS باشد (10 تريليون محاسبه عدد شناور در ثانيه).
سيستم Virginia Tech تنها سيستم ثالثی بوده كه در مقايسه با سيستمهای ديگر دارای حداكثر كارآيی با بيش از ده Tera FLOPS بوده است.
Virginia Tech از اين مجموعه برای پشتيبانی از تحقيقات علمی از جمله فعل وانفعالات كامپيوتری، آمارهای مولكولی و شبيه سازی مولكولی پروتئينها استفاده خواهد كرد.
Cal Ribbens عضو هيئت علمی كامپيوتر كه روی اين سيستم كار می كند می گويد، ما برنامه های كاربردی علم كامپيوتر را در حد وسيعی اجرا خواهيم كرد و در زمينه برنامه های علوم طبيعی افرادی داريم كه كار شبيه سازی مولكولی از جمله عمليات محاسبات و ساختار پروتئينها را همچون اجرای Amber، انجام می دهند. همچنين كسانی هستند كه كار شبيه سازی Cell-cycle (چرخه سلولی) را با استفاده از كدهای ODE Sower نوشته شده در آن انجام می دهند يا افرادی كه برنامه های بيو انفورماتيك مثل BLAST را اجرا می كنند.
او معتقد است كه يك سوم چرخه كامپيوتر مربوط به علم طبيعی می شود و اين مقدار نيز رو به افزايش است.
يكی از اجزای مهم System X نرم افزار خانگی اين دانشكده به نام Deja Vu است كه می تواند در محيطهای كامپيوتری بزرگ يك fault tolerance را ايجاد نمايد. Ribbens می گويد، اگر يك گره دچار اشكال شود شما می توانيد پس از اطلاع از وضع كار و محاسبه خود ، برنامه را از نو راه اندازی نماييد.
بسياری از ابزارهای انتقال پيام قادر به انجام اينكار هستند ولی بخاطر اهميت اين مجموعه ای كه Virginia Tech آنرا Deja Vu نام نهاده و بايد فاقد بار اضافی نيز باشد، تضمين اين سيستم در كنترل برنامه های مديريتی به بن بست نرسيده است.
Virginia Tech اكنون در حال تعويض دستگاه های G5 مستقل و مستقر در مته های فلزی با G5 های xServer مداربند و ظرفيت مناسب ديگر است.
http://flash.lakeheadu.ca/~kkarimi
http://flash.lakeheadu.ca/~kkarimi/downloads.html
http://flash.lakeheadu.ca/~kkarimi/dipc.html
http://www.linux-kongress.org/1997/sharifi.html
نقدي بر پروژه CSharifi : >>
http://www.persianbb.com/viewtopic.php?p=81821
(مدیریت این وبلاگ مسئولیتی در باره محتوای این لینک ها ندارد)
خبرگزاري جمهوري اسلامي ۸۶/۰۸/۳۰
دومين "ابر رايانه" كشور توسط گروه فيزيك دانشكده علوم دانشگاه اصفهان ساخته شد و مورد بهره برداري قرار گرفت.
اين ابر رايانه كه "جي - صفر" نام دارد، يك كلاستر محاسباتي با ۶۰گره محاسباتي است و قدرت پردازش آن ۳۰۰) 300Gfگيگا فلاپس) ميباشد.
معاون اداري مالي دانشگاه اصفهان، در مراسمي كه عصر چهارشنبه براي بهره برداري از اين ابر رايانه برگزارشد، گفت: دانشمندان فيزيك كشور در سالهاي اخير براي دستيابي به هدف سند چشم انداز و تبديل شدن به قدرت اول علمي منطقه، به موفقيتهاي بزرگي در زمينه علوم هستهاي و نانو دست يافتهاند كه در تاريخ كشور بينظير ميباشد.
دكتر "حسين هرسيچ" افزود: جهتگيري پژوهشهاي دانشگاهي بايد به سمت رفع نيازهاي جامعه باشد و تنها با هدف ارائه در نشريات علمي صورت نگيرد.
وي اضافه كرد: بايد از نگرشهاي جزيرهاي و منفعت طلبيهاي شخصي پرهيز كرد و از منابع موجود براي توسعه كشور استفاده بهينه صورت گيرد و دانشگاه مي تواند در اين زمينه نقش تعيينكننده اي داشته باشد.
دكتر"سيدمجتبي مستجابالدعواتي" استاد گروه فيزيك دانشگاه اصفهان و مجري طرح ابر رايانه"جي - صفر" گفت: درصورت طراحي وساخت اين رايانه درسال ۲۰۰۲ تا ۲۰۰۳در رده ۵۰۰ابر رايانه جهان قرار ميگرفت و اكنون ما چهار سال از قويترين رايانههاي جهان عقب هستيم.
يكي از اعضاي تيم طراحي ابر رايانه جي - صفر نيز درگفت و گو با خبرنگار ايرنا گفت: اينرايانه پس ازابر رايانهاي كه دانشگاه اميركبير براي سازمان هواشناسي كشور طراحي و ساخته ، دومين ابر رايانه كشور است.
"قربان محمد توكلي" افزود: از ۱۰۰ابر رايانه جهان هيچيك در منطقه خاورميانه وجود ندارد وبخش اعظم اين رايانهها در اروپا و آمريكا ميباشند.
وي، قيمت تمام شده ابر رايانه جي - صفر را ۳۰۰هزار دلار اعلام كرد و گفت: خريد ابر رايانهاي با توان جي - صفر از كشورهاي صاحب اين فناوري دو ميليون دلار هزينه در بردارد.
توكلي تصريح كرد: اين ابر رايانه با سيستم عامل" گنولينوكس" كار ميكند و توان انجام ۴/۴ميليون عمل را در ثانيه دارد.
در ادامه اين مراسم باحضور مسوولان،اعضاي هيات علمي و دانشجويان دانشگاه اصفهان اين ابر رايانه به طور رسمي مورد بهره برداري قرار گرفت.
همهی شما دست کم یکبار تجربهی جست و جو در سایت Google™ را داشتهاید و بیگمان متوجه زمانی که "با افتخار" در بالای نتایج جستوجو و در کنار تعداد صفحات پیدا شده نوشته میشود گشتهاید. پیدا کردن صدها هزار صفحه در کسری از ثانیه واقعاً افتخار هم دارد. اما چه گونه چنین کاری ممکن است؟
در مقالهی "Serverها باهم چه تفاوتی دارند"[1] به برخی از تجهیزات سختافزاری و تکنولوژیهایی که در انجام این کار به کمک چنین سازمانهایی میآیند اشاره کردیم. حال در این مقاله به جزئیات بیشتری (و البته تنها به بحث دربارهی گوگل) میپردازیم.
بیایید ابتدا مشکل را پیدا کنیم: متوسط زمان پویش دادهها[2] در بهترین دیسکهای سخت موجود حدود 4میلی ثانیه است. زمانی که انسان به عنوان "لحظه" درنظر دارد حدود 50میلی ثانیه است. حال اگر شما فقط به یک پویش برای هر درخواست کاربران احتیاج داشته باشید، قبل از اینکه کاربری اعلام کندی سرعت کند، تنها12 درخواست را میتوانید جوابگو باشید. اگر برنامهی مدیریت پروندهها[3] و بانک اطلاعاتی را نیز اضافه کنید، این مقدار به یک سوم کاهش مییابد. درضمن نگهداری اطلاعات درخواستی در حافظهی نهانگاهی[4] نیز کمکی نمیکند، چرا که تنها به درد نفر دوم میخورد و وقتی که با میلیونها نفر در روز که هرکدام درخواست مخصوص خود را دارند سرکار دارید، کاربردی ندارد.
و اما راهحل: شاید باورکردن آن مشکل باشد اما.... همان گونه که سرویس "پیام فوری" شرکت AOL®[5] تمام پیامها را در حافظهی اصلی(RAM) "خدماترسان"یا Server های خود نگه میدارد، گوگل نیز از دیسکهای سخت خود فقط برای اجراشدن سیستمعامل و برنامههای مورد نیاز(به اصطلاح برای Bootشدن) استفاده میکند و تمام اطلاعات مربوط به جستوجو را در حافظهی اصلی(RAM) نگه میدارد!!
اگر دقت کرده باشید، وقتی گوگل سایتی را که با شرایط جستوجوی شما همخوانی دارد پیدا میکند، بخشهایی از سایت که دارای کلمات مورد نظرهستند را نیز نمایش میدهد. این درحالی است که سایر موتورهای جستوجو تنها چند جمله از اول صفحهی مورد نظر را نشان میدهند.
برای انجام چنین کاری، گوگل باید یک ( و حداقل یک) کپی از آن صفحه را دراختیار داشته باشد. این بدان معنی است که گوگل چندین[6] کپی از تمام وب در حافظهی Serverهای خود دارد[7].
گوگل غیر از جستوجوی سریع چه دارد؟
قدرت موتور جستوجوی گوگل نه تنها در زمان پایین جستوجوهای آن، بلکه در تعداد صفحاتی است که به عنوان نتیجه بر میگرداند.
گوگل وب را به دنبال صفحات جدید میگردد و یک کپی از آنها را به بانک خود اضافه میکند[8]. پس اگر هنگامی که به دنبال موضوعی بودید و سایت خود را در لیست سایتهای نتیجهی جستوجو یافتید، درحالی که آن را بصورت دستی به بانک گوگل اضافه نکرده بودید، تعجب نکنید (البته تعجب کنید چون جای تعجب دارد ولی دلیلش را بدانید).
سرویس جستوجوی باور نکردنی گوگل با سرویس پست الکترونیکی جدیدش باورنکردنیتر میشود. با راهاندازی این سرویس بنظر میرسد گوگل نهتنها قصد از راه به در کردن، بلکه شاید "له کردن" رقبا را در سر میپروراند. درحالی که Yahoo® با کاهش حجم جعبههای پستی[9] رایگان از 6مگابایت به 4مگابایت و خارج کردن سرویس POP3 از لیست سرویسهای رایگان، کاربران اش را به سمت سرویسهای غیر رایگان سوق میدهد، گوگل با دست و دلبازی تمام، درنظر دارد به هر جعبه پستی 1.000مگابایت فضا اختصاص دهد. البته درمورد سرویس POP3 اعلام کرده که هنوز برای راهاندازیاش تصمیمی نگرفته است.
برای نگهداری این اطلاعات، گوگل از یک تیم خبرهِی برنامه نویس برای ابداع یک File System مخصوص بهره گرفته است. این تیم، نتیجهی تحقیقات 10سال اخیر دانشگاهها را در زمینهی نرمافزار بهخدمت گرفتند تا یک روش نگهداری، بازیابی و پردازش اطلاعات غیرمتمرکز را به وجود بیاورند.
Hot Mail™، 60میلیون کاربر دارد. گوگل را باید برای 100میلیون کاربر درنظر بگیریم (هرچند کمکم به این مقدار برسد). واضحترین مسئله این است که شما نمیتوانید اطلاعات کاربرانتان را از دست بدهید، در ضمن نمیخواهید که هیچگاه در دسترس نباشید، پس باید اطلاعات را Replicateکنید. RAID هم پیشنهاد خوبی نیست، اگر یک دیسک خراب شود، به یک نفر برای تعویض آن نیاز دارید و اگر بیش از یک دیسک خراب شود احتمال از دست دادن اطلاعات را خواهید داشت. درضمن به سختافزارهای گرانی نیز احتیاج دارد. مهمتر از همهی اینها RAID دردسترس بودن را در سطح Server تضمین نمیکند(در سطح دیسک سخت تضمین میکند).
گوگل به کمک File System ابداعی خود، اطلاعات را در 3 محل نگهداری میکند. اگر یکی از Serverها(یا دیسکها) از کار بیافتند، آن را به همان حال رها میکنند تا در دورههای بازدیدی، تعمیر/تعویض شود. درعوض این از کارافتادگی را از طریق نرمافزاری و بصورت خودکار جبران میکنند. با از کار افتادن یکی از 3بخش نگهداری اطلاعات، یک کپی از دوبخش باقی مانده گرفته شده و پس از فشرده سازی 3به1، در محل جدیدی نگهداری میگردد.
مشکل Serverهای گوگل تنها ظرفیت دیسکهای نیست، بلکه پردازندههای آنها نیز بصورت دایم مشغول فهرست گذاری(Indexing) اطلاعات هستند. هر واحد از Serverهای گوگل تنها 1یا2 دیسک سخت دارد(بدون هیچ RAID Controllerای).
بخاطر این ابعاد گسترده و با توجه به نرمافزار مخصوص تهیه شده، هزینهی هر گیگابایت فضا برای کاربران حدود 2دلار برآورد میشود.
با تمام حرفها و حدیثهایی که دربارهی توقف یا به مرحلهی اجرا رسیدن این پروژه وجود دارد، بنظر نگارنده هیچچیز نمیتواند قدرت چنین فناوری را زیر سئوال ببرد.
برگرفته از:
http://www.google.com
1 جالب است بدانید که گوگل خیلی به استفاده از آن Serverهای گرانقیمت اعتقاد ندارد و از آنها چندان بهره نمیگیرد!!
2 Data Seek Time
3 File System Manager
4 Caching
5 AIM™: AOL® Instant Messages
6 اطلاعات در چندین محل نگهداری میشوند سپس بکمک سرویسهایی موسوم به سرویسهای "خوشهای"(Clustering) تمام این چند محل، بصورت یک واحد نمایان میشوند.
7 This means that Google™ is currently storing multiple copies of web in RAM
8 We add and update new sites to our index each time we crawl the web.
9 Mailbox
کلاسترهای لینوکس و ذخیره سازی مبتنی بر شیئ
آزمایشگاههای ملی لوس آلاموس اعلام کرده است که در حال نصب یک کلاستر ۱۴۰۰ نقطهای لینوکس است که از سیستم فایل جدید مبتنی بر شیئ (Object Based FileSystem) برای ذخیره سازی دادهها استفاده میکند. ایستگاههای این کلاستر قادر خواهند بود تا ۶۰۰ ترابایت داده را ذخیره نمایند که از آنها برای شبیه سازی انفجارهای سلاحهای اتمی استفاده خواهد شد. سرویس دهندههای این کلاستر از نوع کامپیوترهای پنتیوم هستند که زیر ۲۰۰۰ دلار قیمت دارند. برای اطلاعات کاملتر اینجا کلیک کنید.
راهاندازی یک سرور لینوکس مجازی
سایت newsforge.com مقالهای در مورد راهاندازی یک گروه سرور (cluster) با استفاده از پروژهی سرور مجازی لینوکس منتشر کرده است. در این مقاله میخوانیم: «با رشد انفجاری اینترنت، کار بر روی سرورهای وب، ایمیل و مدیا افزایش مییابد. سایتهای زیادی در حال مبارزه برای حفظ کردن خود در برابر تقاضاهای رو به رشد هستند و تکنیکهای زیادی را برای جلوگیری از overload شدن سرورهای خود به کار میگیرند. راهاندازی یک سرور بر روی یک گروه کامپیوتر (cluster) یکی از راههایی هست که بطور موثر مورد استفاده قرار میگیرد. با این روش در صورت لزوم میتوان با اضافه کردن یک سرور جدید به گروه سرورهای موجود، تقاضاهای بیشتر را به راحتی مدیریت کرد...»
ادامهی مقاله را از اینجا بخوانید.
108 مرکز اتوماتیک کلاستر در کشور نصب شد
| رئیس سازمان هواشناسی کشور با اشاره به رشد فناوری های هواشناسی در شناسائی دقیق تر پیش بینی هوای کشور اظهار داشت: برای این منظور 108 مرکز اتوماتیک کلاستر در ایستگاه های هواشناسی کشور راه اندازی شده است. | |
|
به گزارش خبرنگار مهر، علی محمد نوریان صبح جمعه در همایش سراسری مدیران کل هواشناسی کشور در اداره کل هواشناسی مازندران افزود: تعداد این مراکز اتوماتیک کلاستر به 320 مرکز در کشور افزایش خواهد یافت. وی خاطر نشان کرد: به منظور نگهداری و پردازش اطلاعات با ریکرد حرفه ای و همگام با استانداردهای جهانی مراکز اتوماتیک کلاستر در کشور راه اندازی تا با دقت بیشتری در پیش یابی های هواشناسی صورت گیرد. رئیس سازمان هواشناسی کشور با اشاره به استفاده از فناوری کلاستر در 24 کشور جهان تصریح کرد: این کلاستر در حد 128 میلیون کامپیوتر خانگی قدرت و توانائی پیش یابی وضع هوا را دارد. وی یادآور شد: با کاربردی کردن توانائی ها در مدیریت های زیربنائی سازمان هواشناسی کشور برای کاهش بلایای طبیعی گام برخواهیم داشت. این مسئول با بیان اینکه 33 مورد بلایای طبیعی در کشور شناسائی شده است اظهار داشت: بهره برداری و شناخت رفتارهای دریا با نصب رادارهای دریائی تحقق خواهد یافت. رئیس سازمان هواشناسی کشور با بیان این مطلب که در اکثر استانهای کشور مراکز تحقیقات هواشناسی کاربردی ایجاد شده است از افتتاح مرکز تحقیقات علمی کاربردی هواشناسی و رادار دریائی در منطقه ویژه اقتصادی بندر امیرآباد بهشهر با حضور وزیر راه و ترابری خبر داد. وی بیان داشت: شش رادار دریائی در کشور وجود دارد. رئیس سازمان هواشناسی کشور در بخش دیگری از سخنانش به وجود 14 ایستگاه جو بالا در کشور اشاره کرد و گفت: به زودی 2 ایستگاه سنجش عمودی باد در استان های زنجان و گیلان خبر داد.
|
کلاسترينگ
فهرست:
چرا به high availability نیاز داریم؟
روش های مختلف برای رسیدن بهhigh availability کدامند؟ (فصل 5 از منبع شماره 2)
¨ NLB (Network Load Balancing)
¨ MSCS (Microsoft Clustering Service)
|
0-Terminology |
|
1-Quick Setup |
|
2-Advanced Setup |
|
3-Background Processes |
|
4-Resources & Articles (English & Farsi) |
|
5-Multimedia Learning |
این بار برای استفاده بهینه تر، از تمام اندک قوای فکری و تجربه ام، برای مقاله ای بهتر از قبل، از حداوند متعال استمداد بجویم.
همین جا از دوستان و همکارانی که دیری نیست با آنها آشنا شده ام، از اینکه در چنین محیطی برای کسب در آمد و تجربه مرا پزیرفتند از ایشان تشکر می کنم و خدا را شاکرم.
با همه این نوشتن ها و تجربه ها همیشه احساس ضعف و نارضایتی از وضع کنونی و تلاش برای رسیدن به وضعی بهتر را سرلوحه کار خویش قرار داده ام. اما باز هم که قلم به دست می گیرم و می خواهم مفاهیم را که تا بحال به زبان انگلیسی و با کمک اصطلاحات بیگانه در ذهنم فرو کرده ام را به فارسی به رشته تحریر در آورم، احساس ضعف دو چندان می کنم. از دوستان پیشاپیش عذر خواهی می کنم و از اینکه جسارت کرده ام و دست به کاری زدم که بالاتر ار مهارتم است و قصوری که بواسطه آن ناگزیر پیش خواهد آمد، عذر خواهی می کنم.
به هر حال به نظرم رسید که ساده ترین و موثر ترین مقاله ها و روش هایی که برایم سودمند بوده اند استفاده کنم و امید وارم که برای خواننده نیر سودمند باشد. به نظرم رسید روش های مختلف را باهم و یکجا تدوین کنم. یعنی روش های مختلفی که برای ارائه و آموزش چه نوشتاری و چه چندرسانه ای[3]و با کمک عکس و توضیحات[4]، متنی متنوع تر و و داخل حوصله و وقت خواننده ارائه شود.
1- برای خوانندگانی که کم حوصله اند و می خواهند ابتدا برنامه را نصب کنند و نتیچه را ببینند و سپس تصمیم بگیرند که از زیر و بم کار با خبر شوند.
2- برای خواننندگانی که بعد از انجام تنظبمات می خواهند خود را برای انواع دیگری که می توان تنظیمات را انجام داد و به نتیجه ای دیگر رسید و یا بر حسب نیاز از دیگر امکانات موجود آن، استفاده کرد، استفاده کنند. (یا بسته به محیط های بزرگ تر چگونه می توان از قابلیت های آن استفاده کرد)
3- برای کسانی که از لمس کردن اتفاقاتی که در پشت صحنه رخ می دهد لذت می برند و یا نیاز به چنین دانشی را برای اشکالزدایی در خود حس می کنند.
4- مقالات و منابعی که مطالعه کرده ام تا متون کنونی را استخراج کنم به همراه ترجمه فارسی آنها را در اختیارتان قرار دهم، تا اگر منابع را در اختیار ندارید و یا شما نیاز به مطالعه ی بیشتر از روی منابع اصلی را ترجیح می دهید، به مطالعه آنها اقدام کنید.
موضوع: کلاسترینگ[5] و لود بلنسینگ[6]
مقدمه:
1- انواع مختلف نسخه های ویندوز[7]سرور و تفاوت و توانایی آنها برای میزبانی سرویس Clustering
2- انواع مختلف از سرویس ها که می بایست با کلاسترینگ هماهنگ باشند. در حقیقت توضیحی اجمالی در باره برنامه نویسی و خاصیتی است که باید سرویس آنگونه نوشته شده باشد و حتی طراح نرم افزار زمان طراحی موارد را لحاظ کرده باشد.
3- مراحل نصب و اعمال تنظیمات در ویندوز 2000[8]
4- مراحل پیکر بندی در ویندوز 2003 در محیط مجهز به اکتیو دایرکتوری[9]
5- تنظیم دسترسی و موارد امنیتی[10]
6- تجهیز (سخت افزاری) و تنظیم (نرم افزاری) منابع لازم برای ایجاد و پیکر بندی سرویس مربوطه
7- راه اندازی و انواع نصب به صورت Active-Passive و Active-Active و تشریح تفاوت ها و نقاط ضعف و قوت هر کدام.
8- اجرا
9- تست
10- اشکالزدایی[11]
برای اینکه بعضی از سرویس ها همیشه در دسترس بوده و بدلیل اهمیت موضوعی که سرور مربوطه در حال انجام وظیفه است و یا توجیه اقتصادی مربوطه، برای رضایت سرویس گیرنده از سرویسی که از ما خریداری کرده است، مدیران شبکه که ضمانت و عهده دار این مهم شده اند باید بتوانند مشتری را در ازای وجهی که پرداخته راضی نگه دارند تا مشتریان کم نشوند و در صورت افزایش بتوان از پس بار احتمالی برآمد که این بار از شلوغی در زمان های پیک بوجود میاید.
به هر حال یک سرویس دهنده موفق سرویس دهنده ای است که بر هر هدفی که کار می کند، باید به فکر تامین مخارج از یک سمت، و گسترش و بسط دامنه کاری خود برای مشتریان خود باشد.
1) UPS(Uninterrupted Power Supply): مهمترین و اساسی ترین نیاز قبل از هر چیز برای یک شبکه کامپیوتری، تامین برق سرور هاست به گونه ای که هم همیشه برق داشته باشیم و هم نوسانات برق نامطلوب نباشد و از بروز صدمات احتمالی به تجهیزاتی که بابت آنها هزینه زیادی شده است، جلوگیری شود. برای این کار مدیران شبکه علاوه بر تجهیزاتی که مستقیما کامپیوتری هستند، نیاز به تجهیزات پیشرفته ای هستند که برق را با کیفیتی که گفته شد در اختیار تجهیزات کامپیوتری قرار گیرد "پشتیبان بی وقفه برق"[12]
2) سرور های خریداری شده از لحاظ مورد اعتماد بودن و قدرت سخت افزاری و عمر تجهیزات و گارانتی و خدمات پس از فروش به گونه ای باشد که مدیران شبکه گرفتار مشکلات پیش پا افتاده که قبلا حل شده اند نشود. همیشه استفاده از بهترین تجهیزات، برای یک مدیر شبکه به منزله ابزاری مثل اره ی خوب و خوشدست برای یک نجار و یا جنس مناسب است برای یک مجسمه ساز و ... وقتی ابزار ها پیشرفته تر باشند، تخصص ها بیشتر هویدا می شود. و متخصص بیشتر به کار حرفه ای اش مشغول می شود و هزینه های ما یقینا پایین می آید.
3) سرویسی که قرار است توسط تیم نرم افزاری ارائه شود. یعنی ما می خواهیم سرویسی بنویسیم و طراحی کنیم که بر روی مجموعه ای از سرور ها که کلاستر شده اند، انجام وظیفه کنند.
4) برای ایجاد دسترسی این سرور از طریق دامنه [13]نیاز به تعیین و تامین دسترسی لازم برای سرویس مزبور داریم. اصولا در اکتیو دایرکتوری هر سرویسی باید از مجوز دهی شده باشد تا در زمان تعیین هویت اقدامات لازم برای اجازه و کنترل دقیق دسترسی انجام شود تا به منابع درون شبکه آنگونه که مدیر دسترسی ها را تنظیم کرده در اختیار داشته باشد (نه بیشتر از آن محدوه).
مباحثی که می خواهیم توضیح دهیم دوباره لیستی از آنها ارائه می دهیم.
1- نسخه هایی از ویندوز 2003 که سرویس کلاسترینگ را پشتیبانی می کند، کدامند؟
2- سرویسی که بر روی مجموعه سرور های کلاستر شده انجام وظیفه می کند چیست؟
3- در ویندوز 2000 چگونه است.(برای آگاهی از تفاوت ساختاری با ویندوز 2003)
4- مراحل پیکر بندی در ویندوز 2003 در محیط مجهز به اکتیو دایرکتوری
5- تنظیم دسترسی و موارد امنیتی
6- تجهیز (سخت افزاری) و تنظیم (نرم افزاری) منابع لازم پیش نیاز
7- راه اندازی و انواع نصب به صورت Active-Passive و Active-Active
8- اجرا چگونه است
9- تست باید چگونه باشد؟
10- رفع مشکلات
نسخه هایی از سیستم عامل ویندوز باید اسن سرویس را پشتیبانی کند. یادآوری می کنیم که سرویسی که از مجموعه ی سرویس های کلاسترینگ برای دادن سرویس استفاده می کند، باید خصوصیات لازم را داشته باشد تا بر روی کلاسترینگ قادر به پیاده سازی شان باشیم. نسخه ای از ویندوز که قادر به نصب کلاسترینگ بر روی آن باشیم، (طبق اطلاعات موجود در سایت مایکروسافت و کتب مربوطه[14])دو نسخه ی Datacenter Edition و Enterprise Edition می باشد.
با توجه به نسخه سیستم عامل میزبان، سرویسی مثل Exchange برای میزبانی و ارائه سرویس مربوطه اش دو حالت به خود می گیرد: بر روی نسخه استاندارد خودش 2 نود کلاسترینگ را پشتیبانی می کند و بر روی نسخه Enterprise خودش تا 4نود و 8 نود ساپورت می کند. بر روی ویندوز دیتاسنتر همه چیز فرق می کند.
سرویس اکسچینج به شکل استانداردی طراحی شده است که می تواند از این امکان، یعنی کلاسترینگ سود ببرد. البته ایمیل سرویس در حالت کلی این قابلیت را دارد که منطقا و در محیط انتزاعی این مفهوم را به صورت کلاسترینگ، توجیه کند. به همین دلیل باید سرویس مورد نظر مفهوم سرویس دهی بر روی کلاسترینگ را توجیه کند.
برای مثال، با توجه به شکل بالا، بر روی سرور هایی که سرویس می دهند هیچ اطلاعات خاصی مربوط به سرویس ارائه شده نیست و همه چیز یا بر روی SAN هستند و یا بر روی دیتابیسی که معمولا سیکوئل سرور هستند و تمام تراکنش ها رو آنلاین لاگ می کند. اگر هم اطلاعات بر روی حافظه اصلی کامپیوتر مزبور به نحوی پاک شد( مثلا سرور رستارت شود) سروری دیگر بتواند آناً از روی اطلاعاتی که بر روی SAN هستند، قادر به ادامه و یا پیگیری سرویس نیمه تمام باشد. پس مجموعه کلاستر شده سرورهایِ ایمیل، صندوق های پستی[15]را بر روی SAN که از طریق تمام سرویس ها در دسترس هستند، در اختیار دارند و در صورت از کار افتادن یکی از آنها، دیگران کارشان را ادامه می دهند.
این نوع سرویس ها از تکنیک برنامه نویسی خاصی استفاده می کنند که خارج از این مقال است. اما بدانید که اگر برنامه ی مورد نظر از لحاظ منطقی و مفهومی قابلیت پیاده سازی به صورت کلاسترینگ را داشته باشد، تکنیکی توسط دات نت در اختیار برنامه نویسان قرار داده شده که به آسانی می توانند برنامه شان را بر روی کلاسترینگ و یا NLB تولید و پیاده سازی کنند.
فقط بدانید که متفاوت است. برای اطلاعات بیشتر باید به کسی مراجعه کنیم که مدارک قدیمی تر دارد.
منابع:
1-Training Guide MCSE Windows Server 2003 Network Infrastructure (فصل پنجم)
2-Windows 2000 Server Professional Reference (صفحه 1244)
3- دانش و تجارب قبلی در رمینه Clustering در Exchange 2003
4-Learn key
[2] Weblog
[3] Multimedia
[4] Illustration
[5] MSCS (Microsoft Clustering Service
[6] NLB (Network Load Balancing)
[7] Windows Server Edition
[8] از روی منبع شماره 2 مقاله در صفحه انتهایی
[9]از روی منبع شماره 1 مقاله در صفحه انتهایی
[10] ساختن کاربر با مجوز لازم
[11] Troubleshooting
[12] Uninterrupted Power Supply
[13] Domain Controllers in Active Directory - Directory Service
[14] کتاب ویندوز 2003 سرور – انتشارات ناقوس – فصل اول
[15] که فضای ذخیره سازی مربوط به داده ها هستند
|
| |
|
شرکت مايکروسافت اعلام کرد که ويندوزويژه محاسبات با کارايي بالا(Windows Server for high performance computing :HPC) تا نيمه نخست سال آينده عرضه نخواهد شد. همچنين عرضه نهايي نگارش نخست ويندوز ويژه کلاسترها که با نام Windows Server 2003 Compute Cluster Edition (CCE) شناخته ميشود نيزبه نيمه دوم سال جاري موکول شده است.
| |
کلاسترینگ بهترین روش توزیع پردازش ها و محاسبات در مقایسه با CORBA, RMI, COM و … است. مزیت اصلی کلاسترینگ ساده سازی مدل برنامه نویسی است. کلاسترینگ و به طور کلی توزیع باید از دید برنامه ساز پنهان باشد، اما روش های موجود این امکان را فراهم نمی کنند و منطق نرم افزار تحت تاثیر توزیع قرار می گیرد. به عنوان مثال برای استفاده از کلاسترینگی که Application server هایی چون BEA Weblogic ارائه می دهد، برنامه ساز باید به serializable بودن اشیا (به منظور جابه جایی بر روی ندهای کلاستر در هنگام نیاز) توجه داشته باشد. ساده ترین راه حل برای ارائه ظرفیت قابل پیش بینی، دسترس پذیری بالا و قابلیت توسعه ، بدون اثرگذاری بر منطق نرم افزار، بیرون بردن موارد مربوط به کلاسترینگ از لایه application به JVM است. Terracotta for Spring یک Framework برای سیستم های مبتنی بر Spring framework است که کلاسترینگ با کارایی بالا و شفاف، بدون نیاز به کوچکترین تغییری در کد را فراهم می کند. به وسیله آن می توان یک Single node application ایجاد کرده و سپس اشیای مورد نظر برای توزیع در کلاستر را در فایل تنظیمات معرفی نمود. Terracotta خود ادامه پروسه را هندل خواهد کرد.
منبع | بررسی ویژگی های محصول | دانلود نرم افزار
تمامی کاربران لینوکس و کسانی که با این سیستم عامل کار کرده و از ره آورد آن و قابلیتهای چشمگیر موجود لذت برده اند در صورتی که تمایل به کار بابرنامه های گرافیکی داشته و بخواهند تنظیمات سیستم خود را از طرق ساده تر به انجام برسانند اغلب به توزیعهایی از لینوکس مثل suse و mandrake و ... گرایش پیدا میکنند تا به مدد برنامه های کمکی گرافیکی مدیریت سیستمی مثل yast و Mcc موجود دراین توزیعها به امور جاری و مدیریتی و تنظیمات اساسی سیستم خود سرعت بخشند ...
در این بین برنامه کمکی webmin که بصورت یک پروژه مستقل برای اغلب توزیعهای لینوکس و یونیکس و os/2 . ... طراحی و پیاده سازی گردیده و امکان نصب برروی توزیعهای مختلف لینوکس را به راحتی داراست یک محیط کامل و ابزار مدیریتی کافی در دستان مدیران سیستم قرار میدهد تا به سهولت و از طریق یک رابط گرافیکی وب مانند web base هرکاری را اراده دارند به ساده ترین شکل ممکن ودر اسرع وقت با دقت فراوان به انجام برسانند .
ورود به محیط این برنامه پس از نصب آن برروی سیستم از طزیق یک مرورگر وب مثل mozilla و با وارد کردن آدرس url و پورت اتصال به webmin بصورت زیر صورت میگیرد :
در این مرحله برنامه webmin کلمه عبور و رمزکاربر ریشه را سوال میکند تا اجازه دسترسی کاربر را به منابع سیستمی صادر نماید .
از جمله قابلیتهای این برنامه سودمند ایجاد رابط گرافیکی با امکان مدیریت کامل بر تنظیمات سیستمی لینوکس در همه قسمتهای نصب شده و بعنوان مثال بسته های نرم افزاری زیر میباشد :
برنامه های سرور لینوکس :
برنامه های سودمند تنظیم سیستمی لینوکس System :
برنامه های سودمند تنظیم ابزارهای شبکه لینوکس Networking:
برنامه های سودمند مدیریت سخت افزار در لینوکس Hardware :
برنامه های سودمند مدیریت بر ابزارهای کلاستر closter سازی در لینوکس :
برنامه های سودمند مدیریت بر سایر قسمتهای لینوکس مثل :
همانطوریکه در این قسمت بصورت خلاصه شده ملاحظه میکنید در این برنامه همه جنبه های مهم و اساسی در امر مدیریت یک سیستم عامل مبتنی بر لینوکس در نظر گرفته شده و استفاده از آن برای هر مدیر شبکه یا حتی یک کاربر ساده لینوکس مزایای بسیاری را در پی خواهد داشت .
در اینجا ما ۴ گره داریم که روی هر کدام اوبونتو نصب است. نام های آن ها ub2, ub1, ub0 و ub3 است.
فایل etc/hosts/ خود را به صورت زیر ویرایش می کنیم:
127.0.0.1 localhost
192.168.133.100 ub0
192.168.133.101 ub1
192.168.133.102 ub2
192.168.133.103 ub3
دقت کنید که محتوات فایل فوق به صورت زیر نباشد:
127.0.0.1 localhost
127.0.1.1 ub0
192.168.133.100 ub0
192.168.133.101 ub1
192.168.133.102 ub2
192.168.133.103 ub3
برای نصب سرور NFS دستور زیر را در خط فرمان اجرا می کنیم:
omid@ub0:~$ sudo apt-get install nfs-kernel-server
پوشه ای را در تمامی گره ها ایجاد می کنیم. برنامه ها و داده های ما در این پوشه قرار خواهند گرفت:
omid@ub0:~$ sudo mkdir /mirror
سپس آن را در گره اصلی توسط NFS برای گره های دیگر به اشتراک می گذاریم:
omid@ub0:~$ sudo echo /mirror *(rw,sync) >> /etc/exports
دقت کنید که برنامه ها و دیگر داده های ما فقط در mirror/ گره اصلی ذخیره میشوند و گره های دیگر توسط گره اصلی به آنها دسترسی دارند.
omid@ub1:~$sudo mount ub0:/mirror /mirror
omid@ub2:~$sudo mount ub0:/mirror /mirror
omid@ub3:~$sudo mount ub0:/mirror /mirror
بهتر است که fstab را تنظیم کنیم تا این کار به طور خودکار در هربار راه اندازی سیستم انجام شود.
کاربری با نام واحد برای تمامی گره ها تعریف می کنیم به طوری که پوشه خانگی آن در mirror/ باشد. دقت کنید که userid این کاربر باید در تمام گره ها یکسان باشد.
در اینجا ما آن را mpiu می نامیم!
همچنین این کاربر را مالک mirror/ می کنیم:
omid@ub0:~$ sudo chown mpiu /mirror
دستور زیر را برای نصب OpenSSH Server در همه گره ها اجرا می کنیم:
omid@ub0:~$ sudo apt-get install opensshserver
ابتدا با کاربر جدید وارد می شویم :
omid@ub0:~$ su - mpiu
سپس کلید DSA را برای کاربر mpiu می سازیم:
mpiu@ub0:~$ ssh-keygen -t dsa
در اینجا از شما passphrase خواسته می شود که باید آن را خالی بگذارید.
سپس کلید ساخته شده را در لیست کلیدهای مورد تایید قرار می دهیم:
mpiu@ub0:~$ cd .ssh
mpiu@ub0:~/.ssh$ cat id_pub.dsa >> authorized_keys
به دلیل اینکه پوشه خانگی کاربر ما در همه گره ها یکی است (در گره اصلی) نیازی به اجرای دستورات فوق در تک تک گره ها نیست.
برای امتحان درستی عملکرد SSH دستور زیر را اجرا می کنیم:
mpiu@ub0:~$ ssh ub1 hostname
این دستور باید بدون درخواست کلمه عبور نام گره مورد نظر (ub1) را چاپ کند.
بسته build-essential را نصب می کنیم
mpiu@ub0:~$ sudo apt-get install build-essential
برای نصب MPICH باید از قبل کامپایلرهای مورد مورد نیاز نصب شده باشند.
در این مرحله باید کامپایلرهای مورد نیاز خود مانند Intel Fortran و ... را نصب کنیم.
کد منبع MPICH2 را از سایت http://www-unix.mcs.anl.gov/mpi/mpich دریافت کنید.
فایل tar. را در پوشه mirror/ باز می کنیم.همچنین پوشه ای برای نصب mpich ایجاد می کنیم.
mpiu@ub3:/mirror$ mkidr mpich2
mpiu@ub3:/mirror$ tar xvf mpich2-1.0.5p3.tar.gz
mpiu@ub3:/mirror$ cd mpich2-1.0.5p3
mpiu@ub3:/mirror/mpich2-1.0.5p3$ ./configure --prefix=/mirror/mpich2
mpiu@ub3:/mirror/mpich2-1.0.5p3$ make
mpiu@ub3:/mirror/mpich2-1.0.5p3$ sudo make install
برای تنظیمات بیشتر قبل از کامپایل می توانید فایل README داخل بسته را مطاله کنید.
بعد از اجرای موفقیت آمیز دستورات فوق خطوط زیر را به فایل mirror/mpiu/.bashrc/ اضافه می کنیم:
export PATH=/mirror/mpich2/bin:$PATH
export PATH
LD_LIBRARY_PATH="/mirror/mpich2/lib:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH
سپس دستور زیر را در هر گره اجرا می کنیم تا برای اجرای mpdboot نیاز به تعریف مسیر mpd نداشته باشیم:
mpiu@ub0:~$ sudo echo /mirror/mpich2/bin >> /etc/environment
برای بررسی صحت نصب دستورات زیر را اجرا می کنیم:
mpiu@ub0:~$ which mpd
mpiu@ub0:~$ which mpiexec
mpiu@ub0:~$ which mpirun
فایل mpd.hosts را در پوشه خانه mpiu با محتویات زیر ایجاد می کنیم . این فایل حاوی فهرست گره هاست.
ub3
ub2
ub1
ub0
سپس دستورات زیر را اجرا می کنیم:
mpiu@ub0:~$ echo secretword=something >> ~/.mpd.conf
mpiu@ub0:~$ chmod 600 .mpd.conf
حالا برای آزمایش MPD دستورات زیر را اجرا می کنیم . خروجی باید نام گره فعلی باشد:
mpiu@ub0:~$ mpd &
mpiu@ub0:~$ mpdtrace
mpiu@ub0:~$ mpdallexit
بعد از اینکه همه چیز با موفقیت انجام شد mpd daemon را اجرا می کنیم:
mpiu@ub0:~$ mpdboot -np 4
mpiu@ub0:~$ mpdtrace
بعد از اجرای دستور فوق باید نام تمامی گره ها در خروجی چاپ شود.
تعدادی برنامه نمونه در mpich2-1.0.5/examples قرار دارند که یکی از آن ها را اجرا می کنیم:
mpiu@ub0:~$ mpiexec -n 4 cpi
برای اطلاعات بیشتر می توانید به سایت زیر سری بزنید:
http://www-unix.mcs.anl.gov/mpi/mpich/
يک سيستم فايل موازی نسل جديد برای کلاسترهای لينوکس
مقدمه ای بر دومين سيستم فايل موازی مجازی
خلاصه
دانشمندان علوم کامپيوتر از کامپيوترهای عظيم موازی به منظور شبيه سازی رويدادهايی که در دنيای واقعی رخ می دهند استفاده می کنند. اين اعمال در چنين مقياس بزرگی جهت درک بهتر نمودهای علمی يا پيش بينی رفتارها لازم و ضروری می باشند. در اغلب موارد منابع محاسباتی يک فاکتور محدود کننده در حوزه اين شبيه سازی ها محسوب می گردند. منابع محدود تنها شامل CPU و حافظه نمی شوند، بلکه اين منابع زيرسيستم های ورودی/خروجی را نيز در بر می گيرند، چرا که چنين برنامه هايی معمولا حجم زيادی از داده را توليد و يا پردازش می نمايند. برای اينکه روند شبيه سازی با سرعت بالا اجرا شده و ادامه يابد، سيستم ورودی/خروجی بايستی قادر به ذخيره صدها مگابايت داده در هر ثانيه باشد، و در اين عمليات بايد ديسک های زيادی مورد استفاده قرار گيرد. نرم افزاری که اين ديسک ها را به صورت يک سيستم فايل مرتبط سازماندهی می کند يک "سيستم فايل موازی" ناميده می شود.
سيستم های فايل موازی بويژه به منظور فراهم نمودن ورودی/خروجی های بسيار سريع در مواقعی که بايستی توسط پردازش های زيادی در يک لحظه مورد دسترسی قرار گيرند طراحی شده اند. اين پردازش ها ميان چندين کامپيوتر مختلف، يا ميان گره ها(nodes)، که کامپيوتر موازی را تشکيل می دهند توزيع گرديده است. شکل 1 يک نمای سطح بالا از يک کامپيوتر موازی به همراه يک سيستم فايل موازی را نمايش می دهد. گره هايی که کار محاسبه را انجام می دهند به يکديگر متصل شده اند و از سوی ديگر توسط شبکه کلاستر به گره های سرور ورودی/خروجی مرتبط هستند، و داده را بر روی ديسک های الصاقی به گره های سرور ذخيره می نمايند.

شکل 1
لازم نيست که شما برای بهره بردن از يک سيستم فايل موازی در يک لابراتوار ملی، که دارای يک کلاستر 1000 گره ای است، مشغول به کار باشيد. برای سالها سيستم فايل موازی مجازی (PVFS) مخصوص کلاسترهای لينوکس در دسترس بوده است، که به هر شخصی امکان برپا کردن و استفاده از همان سيستم فايل موازی که در حال حاضر بر روی کلاسترهای بزرگ فراوانی در سراسر دنيا مورد استفاده قرار می گيرند را می دهد. اخيرا يک سيستم فايل موازی کامل تر و جديدتر بنام PVFS2 عرضه شده است. اين سيستم فايل جديد دارای انعطاف پذيری بيشتری بوده، و بهره بيشتری از سخت افزار موجود در کلاسترهای امروزی می برد، با کلاسترهای بزرگتر مطابقت بيشتری دارد، و مديريت آن نسبت به نسل قبل ساده تر است.
مفاهيم سيستم فايل موازی
برای دستيابی به کارآيی بالا، يک سيستم فايل موازی فايل ها را همانند سيستم RAID ميان گره ها قطعه قطعه و تقسيم می نمايد. در اين سيستم، بجای ديسک ها، گره ها سرورهای داده محسوب می شوند. همانگونه که يک RAID چندين کانال را به منظور افزايش کارآيی در يک مجموعه از ديسک های محلی متمرکز می کند، يک سيستم فايل موازی نيز اتصالات شبکه را در يک مجموعه از ديسک هايی که به صورت شبکه در آمده اند متمرکز می نمايد. قطعه قطعه کردن داده در ميان گره ها يک روش ساده برای دستيابی به موازی سازی ميان چندين سيستم ورودی/خروجی سری است. بر خلاف حالتی که چندين گره از يک RAID به صورت اشتراکی استفاده می کنند، يک سيستم فايل موازی قادر به استفاده همزمان از چندين لينک شبکه، با حذف گلوگاه محدودکننده، می باشد. تا زمانی که فايلها به اين روش قطعه قطعه می شوند و برنامه های موازی وادار به کار بر روی نواحی معينی از يک فايل به اشتراک گذاشته شده می گردند، شبکه و محتويات لود شده ديسک ها توانايی گسترش در ميان گره های ذخيره سازی را دارند.
در مقابل، سيستم های فايل شبکه ای دارای نقش متفاوتی هستند. امروزه، داشتن يک پيکربندی از چندين ماشين با برخی از انواع ذخيره سازی اشتراکی يا سيستم فايل همچون NFS، Windows Networking يا AppleTalk ديگر امر غير عادی محسوب نمی شود. اين سيستم ها با توجه به پيشرفت های حاصل شده در کارآيی آنها (پيشرفت هايی نظير عمل کش کردن سمت کلاينت) به خوبی home directory ها کار خود را انجام می دهند. کش سازی سمت کلاينت تاريخچه تغييرات محلی فايل را بدون بروزرسانی بيدرنگ در وضعيتی که داده بر روی سرور و يا بر روی حافظه های کش موجود بر روی ساير کلاينت ها ذخيره شده باشد نگه داری می کند. اين رويکرد بطور کلی بارگذاری های شبکه را کاهش داده و سرعت انجام اعمال معمولی از قبيل ويرايش يا کامپايل فايل ها را به روشی که هزينه های شبکه را تقريبا شفاف می سازد افزايش می دهد.
در حالی که مزيت کش سازی سمت کلاينت در سيستم های فايل شبکه ای بر کسی پوشيده نيست، برنامه های موازی در صورتيکه داده ارائه شده به آنها ناهماهنگ و متناقض باشد می توانند نتايج نادرستی را توليد نمايند. اگر پردازش ها همواره يک ديد مشترک از داده را به اشتراک گذارند، برنامه های موازی قادر خواهند بود بدون خطا به کار خود ادامه دهند. يک روش، حصول اطمينان از اين مسئله است که حافظه های کش موجود در هر گره همواره حاوی آخرين داده است. تکنيک های گوناگونی برای حفظ هماهنگی و سازگاری وجود دارد، که توسط هر تکنيک به مشخصه های متفاوتی از کارآيی می توان دست يافت.
برای مثال، برخی سيستم های فايل کلاستر مسئله سازگاری و هماهنگی داده را با استفاده از قفل های فايل به منظور جلوگيری از دستيابی همزمان به فايل حل می کنند. بطور کلی، قفل ها روشی برای حصول اطمينان از اين مطلب هستند که تنها يک فرايند در يک لحظه قادر به اعمال تغييرات بر روی داده است. در يک سيستم فايل شبکه ای، معمولا يک قفل بايستی از يک مدير قفل مرکزی کسب اجازه نمايد. قفل های فايل نوع Coarse-grained تضمين می کنند که فقط يک پردازش در يک لحظه قادر به نوشتن داده در يک فايل باشد. کارآيی با افزايش تعداد پردازش ها تنزل خواهد يافت. ساير روش ها شامل طرح های قفل فايل fine-grained، همچون قفل محدوده بايت (byte-range)، می باشند که اين امکان را فراهم می آورند که چندين پردازش بصورت همزمان نواحی مختلفی از يک فايل به اشتراک گذاشته شده را بنويسند. به هر حال، آنها با محدوديت های مقياس پذيری ((scalability نيز مواجه می شوند. بالاسری (overhead) ناشی از نگهداری تعداد زيادی از قفل های از اين نوع در نهايت به تنزل کارآيی ختم می گردد. در حالت کلی تر، هر سيستم قفل شبکه ای با يک گلوگاه محدود کننده برای دسترسی داده مواجه می شود. برای دستيابی به مقياس پذيری و کارآيی در مورد درخواست های برنامه هايی که اعمال ورودی/خروجی زيادی دارند، يک سيستم بدون بالاسری قابل توجه (همچون قفل کردن) و بدون عرضه متفاوت داده ميان گره ها (همچون کش سازی سمت کلاينت) مورد نياز است. برنامه های موازی تمايل دارند که هر فرايند را وادار به نوشتن در نواحی مجزايی از يک فايل به اشتراک گذاشته شده نمايند. برای اين نوع برنامه ها، در حقيقت هيچ نيازی به عمل قفل کردن نيست، و ما می خواهيم که تمام اعمال نوشتن بصورت موازی و بدون تاخير موجود در چنين رويکردهايی ادامه يابد.
بجای داشتن يک سيستم فايل با کارآيی بالا که زمان زيادی را صرف مجادله برای منابع مشترک يا تلاش برای حفظ سازگاری و هماهنگی حافظه های کش کند، حالت ايده آل اين است که سيستمی را طراحی کنيم که به اشتراک گذاری منابع و سازگاری مناسب را پشتيبانی نمايد. PVFS2 مثالی از يک سيستم فايل موازی نسل آينده است که برای برآورده ساختن اين موارد طراحی شده است. در قسمت بعد به بحث در مورد چگونگی راه اندازی PVFS2 خواهيم پرداخت.
سيستم PVFS2
PVFS2 نشان می دهد که ساختن يک سيستم فايل موازی که بصورت مجازی با پی ريزی دقيق فوق داده و فضانام و همچنين تعريف معانی دستيابی داده که می تواند بدون قفل کردن در دسترس قرار گيرد سازگاری را حفظ کند، امکانپذير است. اين طراحی به بروز برخی از رفتارهای سيستم فايل که مورد انتظار تعدادی از برنامه های سنتی نيست ختم می شود. اين معانی در زمينه ورودی/خروجی موازی بحث جديدی به شمار نمی روند. PVFS2 بصورت دقيق تر معانی را که توسط MPI-IO، يک API ورودی/خروجی با کارآيی بالا، ديکته می شود پياده سازی می نمايد.
PVFS2 همچنين دارای پشتيبانی محلی برای الگوهای انعطاف پذير ناپيوسته دستيابی داده می باشد. اغلب برنامه های سنتی (نظير "cat" و "vi") به نواحی داده پيوسته از فايل های باز شده دسترسی دارند، در حاليکه برنامه های علمی اغلب اوقات نيازمند الگوهای دستيابی هستند که ناپيوسته باشند. برای مثال، شما می توانيد برنامه ای را تصور نماييد که ستونی از عناصر خارج از يک آرايه را می خواند. برای بازيابی اين داده، برنامه ممکن است تعداد زيادی عمل خواندن کوچک و پراکنده را بر روی سيستم فايل انجام دهد. در صورتيکه، اگر بتواند طی يک مرحله تمامی عناصر ناپيوسته را از سيستم فايل درخواست نمايد، هم سيستم فايل و هم برنامه به نحو کارآمد تری وظيفه خود را انجام خواهند داد (شکل 2 را ببينيد).

شکل 2
علاوه بر کارآيی، ثبات و مقياس پذيری scalability)) نيز اهداف مهم طراحی به شمار می آيند. به منظور کمک به دستيابی به اين اهداف، PVFS2 بر اساس يک معماری مستقل از وضعيت ((stateless طراحی گرديده است. اين به آن معنی است که سرورهای PVFS2 تاريخچه مربوط به اطلاعات سيستم فايل، اطلاعاتی مانند اينکه کدام فايل ها باز شده اند يا موقعيت فايل ها و مواردی از اين قبيل، را نگهداری نمی کنند. همچنين در اين مورد هيچ وضعيت قفل مشترکی برای مديريت وجود ندارد. مزيت اصلی يک معماری مستقل از وضعيت اين است که در آن کلاينت ها قادرند بدون بهم زدن کل سيستم دچار خطا شده و مجددا به کار خود ادامه دهند. اين معماری همچنين به PVFS2 اين امکان را می دهد که در مواجهه با صدها سرور و هزاران کلاينت بدون اينکه تحت فشار بالاسری و پيچيدگی پيگيری وضعيت فايل يا اطلاعات قفل متعلق به کلاينت های مذکور قرار گيرد وظيفه خود را بدرستی انجام دهد.
بر خلاف PVFS نسل گذشته، PVFS2 دارای يک سيستم شبکه ای و ذخيره سازی ماژولار است. يک سيستم ذخيره سازی ماژولار اين امکان را برای چندين back-end ذخيره سازی فراهم می آورد که به راحتی به PVFS2 متصل شوند. اين خاصيت تلفيقی کار افرادی را که در حال تحقيق بر روی ورودی/خروجی به منظور آزمايش و تجربه تکنيک های مختلف ذخيره سازی هستند ساده می سازد. همچنين يک سيستم شبکه ای ماژولار اجازه کار بر روی اتصالی از شبکه های چندگانه را داده و فرايند افزودن پشتيبانی برای انواع ديگری از شبکه ها را آسان می نمايد. PVFS2 در حال حاضر TCP/IP و همچنين شبکه های Infiniband و Myrinet را پشتيبانی می کند.
اين طراحی ها PVFS2 را قادر به انجام وظايف خود به نحو عالی در يک محيط موازی می سازد، اما در وضعيتی که به عنوان يک سيستم فايل محلی مورد استفاده قرار گيرد کار خود را به خوبی قبل انجام نخواهد داد. بدون کش سازی فوق داده سمت کلاينت، برخی اعمال زمان زيادی صرف می کنند.اين امر می تواند مدت زمان انجام برنامه هايی همچون "ls" را بيشتر از حد انتظار افزايش دهد. با وجود اين محدوديت، PVFS2 برای برنامه هايی که دارای اعمال ورودی/خروجی زيادی هستند مناسب تر است، تا اينکه برای ميزبانی يک home directory مورد استفاده قرار گيرد. PVFS2 برای خواندن و نوشتن کارآمد حجم زيادی از داده بهينه شده است، و از اينرو بسيار مناسب برنامه های علمی می باشد.
اجزاء PVFS2
بسته اصلی PVFS2 شامل سه جزء متفاوت است: يک سرور، يک کلاينت و يک ماژول کرنل. سرور بر روی گره هايی که داده سيستم فايل يا فوق داده را ذخيره می کنند اجرا می شود. کلاينت و ماژول کرنل نيز بوسيله گره هايی که به شکل فعال داده (يا فوق داده) را از سرورهای PVFS2 ذخيره يا بازيابی می کنند مورد استفاده قرار می گيرند.
بر خلاف PVFS اصلی، هر سرور PVFS2 توانايی ايفای نقش به عنوان يک سرور داده، يک سرور فوق داده يا هر دو را بصورت همزمان دارد. همانگونه که قبلا گفته شد، سيستم های فايل موازی از تعدادی گره سود می برند که تمام داده ميان آنها به شکل قابل پيش بينی قطعه قطعه شده است. اين گره ها همان سرورهای داده در PVFS2 هستند. برخی از انواع پيکربندی نيز ممکن است از چندين سرور فوق داده بهره ببرند. ذخيره کردن فوق داده در ميان چندين گره کمکی است به موازنه بارگذاری سرور تحت اعمالی که شامل دسترسی سنگين و زياد به فوق داده هستند (مثلا ايجاد يا تغيير نام تعداد زيادی فايل). اين نوع پيکربندی بطور کامل در PVFS2 پشتيبانی می گردد. بهرحال، تعداد سرورهای فوق داده هيچ فشاری بر روی اعمال خواندن يا نوشتن وارد نمی آورد، و اکثر برنامه های علمی اعمال فوق داده کافی جهت هر گونه بهره برداری از پيچيدگی افزوده انجام نمی دهند.
کلاينت های PVFS2 با سرورهای PVFS2 بر روی اتصال شبکه ارتباط برقرار می نمايند. تمامی ارتباط به صورت اختياری به حالت رمز در می آيند تا اطمينان حاصل گردد که ماشين های دارای معماری های متفاوت توانايی درک يکديگر را دارند. يک کلاستر مختلط شامل گره های x86، Itanium و PowerPC را تصور نماييد. رمزبندی ارتباط ما تضمين می کند که تمامی گره ها قادر به استفاده از يک PVFS2 volume، صرفنظر از ترتيب بايت محلی يا اندازه کلمه خواهند بود.
ماژول کرنل PVFS2 يک درايور کرنل لينوکس است که به يک PVFS2 اجازه نصب را همانند هر نوع سيستم فايل لينوکس ديگری می دهد. وظيفه اصلی آن ترجمه واضح تمامی اعمال سيستم فايل به دستورات کلاينت PVFS2 بر روی PVFS2 نصب شده است.
دستيابی به سيستم های فايل PVFS2
دو روش جهت دستيابی به سيستم های فايل PVFS2 فراهم گرديده است. روش اول نصب کردن سيستم فايل PVFS2 است. اين روش اعمال تغييرات توسط کاربر و دايرکتوری های ليست، يا انتقال فايل ها و همچنين اجرای باينری ها از سيستم فايل را مجاز می شمارد. اين مکانيزم با برخی بالاسری های کارآيی مواجه می گردد اما مناسب ترين روش جهت دستيابی تعاملی به سيستم فايل می باشد.
برنامه های علمی از روش دوم (MPI-IO) استفاده می نمايند. اينترفيس MPI-IO به دستيابی بهينه به فايل های منفرد توسط تعداد زيادی از پردازش ها بر روی گره های مختلف کمک می کند. آن همچنين اعمال دستيابی غيرپيوسته را فراهم می آورد که جهت دستيابی کارآمد به داده گسترش يافته در سراسر فايل مورد استفاده قرار می گيرد. در مورد تصوير 2 اين کار با درخواست هر عنصر هشتمی که در آفست 0 شروع شده و در آفست 56 پايان می يابد، کلا به عنوان يک عمليات سيستم فايل، صورت می پذيرد.
در اين مقاله ما بر روی روش اول تمرکز کرده ايم.
راه اندازی PVFS2
PVFS2 جهت اجرا بر روی چندين ماشين در نظر گرفته شده است. در هر صورت، برای سادگی کار، ما PVFS2 را بر روی يک ماشين نصب و راه اندازی می کنيم. ما ماشين را با نام "testmachine1" صدا خواهيم زد و نصب را در محل پيش فرض (/usr/local) انجام خواهيم داد. سپس نسخه PVFS2 را در /mnt/pvfs نصب خواهيم کرد. فرايند مربوط به نصب بر روی چندين ماشين کاملا مشابه روند گفته شده است.
PVFS2 بر روی اغلب توزيع های جديد GNU/Linux ايجاد شده است، اما اگر شما مايليد از ماژول کرنل استفاده نماييد، شما به کرنل لينوکس نسخه 2.6.0-test4 يا پس از آن نياز خواهيد داشت.
PVFS2 با استفاده از "configure" و "make" ايجاد و نصب گرديده است. در مثال هايی که در ادامه آمده است اينگونه فرض شده که شما به عنوان root وارد سيستم شده ايد. در صورتيکه شما مايل به ايجاد ماژول کرنل باشيد گزينه "--with-kernel" مورد نياز خواهد بود.
./configure --with-kernel=/usr/src/linux-2.6.x
make
make install
اگر شما قصد ايجاد ماژول کرنل اختياری را داريد، اکنون بايد آن را بصورت مجزا کامپايل نماييد. اين کار را با تغيير دايرکتوری ها به دايرکتوری "src/kernel/linux-2.6" و اجرای "make" انجام دهيد. پس از اينکه ماژول ايجاد شد، فايل pvfs2.ko را در محلی به انتخاب خود کپی نماييد (مثلا در /lib/modules/`uname -r`/kernel/fs/pvfs2.ko).
پس از آنکه نرم افزار ايجاد و نصب گرديد، بايستی پيکربندی شود. بسته PVFS2 ابزاری بنام pvfs2-genconfig را جهت ايجاد فايل های پيکربندی برای هر يک از سرورهای شما فراهم آورده است. هر سرور به دو فايل پيکربندی نياز دارد (يکی برای پيش فرض های عمومی، و يکی برای تنظيمات محلی) که بايستی در هنگام اجرای pvfs2-genconfig مشخص گردند. يک مثال دستور خط فرمان می تواند به صورت زير باشد:
pvfs2-genconfig global.conf local.conf
اين فرمان اطلاعات ديگری نيز از شما دريافت می نمايد؛ بهرحال، احتمالا موارد پيش فرض برای اين مثال کفايت می کند. توجه داشته باشيد که فايل های ايجاد شده global.conf و local.conf-testmachine1 خواهند بود.
قبل از آغاز به کار سرور PVFS2، شما بايستی دايرکتوری هايی را که برای عمل ذخيره سازی مورد استفاده قرار خواهند گرفت را تعيين نماييد. اين کار بسيار ساده با آغاز pvfs2-server به همراه يک آرگومان "-f" در کنار نام فايل های پيکربندی صورت می گيرد.
pvfs2-server global.conf local.conf-testmachine1 -f
سرور، فضای ذخيره سازی را آغاز سازی نموده و سپس خارج می شود. حال از اين پس با همين خط فرمان اما بدون آرگومان "-f" می تواند شروع به کار نمايد.
pvfs2-server global.conf local.conftestmachine1
در مرحله بعد، يک فايل با نام /etc/pvfs2tab ايجاد نماييد. اين فايل حاوی خط زير است:
tcp://testmachine1:3334/pvfs2-fs /mnt/pvfs pvfs2 default 0 0
در اين مرحله از کار، اگر شما اينترفيس ماژول کرنل لينوکس را مورد آزمايش قرار نداده ايد، می توانيد بدون هيچ مشکلی به قسمت Testing برويد. در غير اينصورت، همين حالا آن را با استفاده از insmod يا modprobe لود نماييد.
گام بعدی آغاز به کار برنامه کلاينت PVFS2 است. برنامه کلاينت PVFS2 شامل دو برنامه به نام های pvfs2-client-core و pvfs2-client است. در صورتيکه برنامه pvfs2-client-core در PATH سيستم شما نصب شده باشد، برنامه pvfs2-client آن را بصورت خودکار يافته و شما به سادگی می توانيد "pvfs2-client" را اجرا نماييد. در غير اينصورت، شما بايد با استفاده از سوييچ خط فرمان –p محل برنامه pvfs2-client-core را برای pvfs2-client مشخص نماييد.
pvfs2-client -p /usr/local/bin/pvfs2-client-core
و در نهايت، برای نصب نوع نسخه PVFS2 :
mount -t pvfs2 pvfs2 /mnt/pvfs
حالا PVFS2 نصب شده و آماده آزمايش است!
سيستم فايل جديد خود را آزمايش نماييد
نخستين کار استفاده از ابزار pvfs2-ping به منظور اطمينان از روشن و در حال اجرا بودن سرور است. اين ابزار طی يکسری مراحل تعيين می نمايد که سيستم بدرستی پيکربندی شده و به درخواست هايی که از سوی کلاينت (کلاينتی که بر روی آن نصب شده است) صادر می شود پاسخ می دهد.
pvfs2-ping -m /mnt/pvfs
سپس يک فايل را با استفاده از pvfs2-import بر روی سيستم کپی نماييد. اين ابزار از برخی جهات شبيه "cp" است، اما در هنگام انتقال داده به سيستم فايل از بافرهای بزرگی استفاده می کند. همچنين زمان کپی را محاسبه می نمايد.
pvfs2-import linuxdistro.iso /mnt/pvfs/linuxdistro.iso
برای چک کردن فضای قابل استفاده بر روی سرورها، ما ابزاری بنام pvfs2-statfs فراهم کرده ايم. اين ابزار اطلاعات را مشابه فرمان "df" گزارش می دهد؛ آن در ميان تمامی سرورهای PVFS2 پيکربندی شده شما کار خود را انجام می دهد. همانند "df"، استفاده از گزينه "-h" موجب نمايش خروجی در اندازه خوانا توسط انسان می شود.
pvfs2-statfs -h -m /mnt/pvfs
اگر شما PVFS2 را نصب کرده باشيد، امکان استفاده از ابزارهای سيستمی استاندارد همچون "cp" و "df" برای شما فراهم خواهد بود. در هنگام کار با سيستم فايل آزمايشی تان، اين احتمال وجود دارد که برخی از اعمال بنظر پاسخ دهندگی کمی داشته باشند. مجددا ذکر اين نکته اهميت دارد که سيستم های فايل موازی همچون PVFS2 برای انتقال حجم زيادی از داده بهينه شده اند.
نتيجه گيری
هيچ سيستم فايلی وجود ندارد که راه حل کاملی برای هر نوع از اعمال ورودی/خروجی باشد، و PVFS2 نيز از اين قاعده مستثنی نيست. برنامه های با کارآيی بالا برای دستيابی داده بر روی مجموعه متفاوتی از مشخصه ها تکيه دارند. به طور خاص، PVFS2 جهت برنامه های دارای حجم زيادی از اعمال ورودی/خروجی بسيار مناسب است. اگر شما حجم زيادی از داده داريد و نيازمند دسترسی سريع به آن از ماشين های فراوانی هستيد، ارزش آن را دارد که نگاهی به PVFS2 بياندازيد.
امروز اپل نسخه آزمایشی Xsan را که یک سیستم ذخیره سازی اطلاعات در مقیاس بزرگ - Storage Area Network یا SAN - است منتشر کرد. Xsan یک فایل سیستم 64 بیتی با قابلیت کلاستر شدن برای MacOSX است که به موسسات اجازه ادغام و حذف کردن منابع ذخیره سازی اطلاعات مانند سرور ها ، سیستم های Backup و هارد دیسک ها را میدهد. Xsan امکان دسترسی خواندن/نوشتن به طور همزمان را بر روی خطوط فیبر نوری به وجود می آورد. اپل همچنین نرم افزار ها و سخت افزار های جدید زیر را به بازار عرضه کرد که در مورد یکی از آن ها یعنی نرم افزاری به نام Motion در بخش "بازی ها ، چند رسانه، ویدیو " همین صفحه خواهیم نوشت.
نسخه آینده کرنل سری 2.6 لینوکس دارای امکانات بسیار مهمی خواهد بود که شامل پشتیبانی از سیستم مجازی سازی Xen ، سیستم کلاسترینگ Infiniband و NFS 4 خواهد بود. به نظر می رسد به زودی بتوانید در خانه خودتان یک تونل باد را شبیه سازی کنید یا به پیش بینی آب و هوا بپردازید.
Linux 2.6 Kernel to Include Xen; Infiniband, NFS 4
سوپر کامپیوتر خانگی
نرم افزار OpenMosix شبکه ای از کامپیوتر های گنو/لینوکس را تبدیل به یک کلاستر می کند. حفظ تعادل بار بین گره ها به صورت اتوماتیک انجام می شود. گره ها می توانند عضو کلاستر شوند یا از گروه خارج شوند بدون این که وقفه ای در سیستم به وجود بیاید. آدرس : http://openmosix.sourceforge.net
البته در قسمت مقالات کلاستر در آرشیو موضوعی می توانید طریقه نصب نرم افزار OpenMosix را ببینید.
آی.بی.ام : نرم افزار کلاسترینگ در یک سی دی
در یکی از عجیب و غریب ترین مقالاتی که به زندگی ام دیده ام، مایانک شارما -Mayank Sharma - از آی.بی.ام روشی برای راه اندازی یک سیستم کلاسترینگ را پیشنهاد می کند که نه از نرم افزار های چند هزار دلاری اچ.پی ، سان و آی.بی.ام، و نه از سرور های سوپردام، اولترا اسپارک و پاور استفاده نمی کند. نسخه مایانک شامل یک سی دی Knopix ( قابل تهیه از سوپر مارکت محل شما در تهران) و پی سی های معمولی می شود. این مقاله به طرز عجیبی من را به یاد ماجرای گداخت سرد -Cold Fusion- می اندازد. یعنی واقعا به همین سادگی است؟
Craft a load-balancing cluster with ClusterKnoppix
ویندوز هم کلاسترینگ را پشتیبانی خواهد کرد
بلاخره بعد از سالها انتظار (دقیقا از زمانی که ویندوز ان.تی 4 به بازار آمد، که قرار بود پوزه سولاریس را به خاک بمالد(!))مایکروسافت نسخه ویندوز با قابلیت کلاسترینگ واقعی را پاییز امسال (میلادی) به بازار خواهد داد. سایت نیوز دات کام عنوان خبر را به این شکل نقل کرده است: " نسخه ویندوز برای سوپرکامپیوتر ها این پاییز به بازار می آید".این عنوان که واقعا قابل تمسخر است نشان دهند این است که احتمالا خبرنگار نیوز دات کام یا موضوع کلاسترینگ را (که تبدیل کردن کامپیوتر های معمولی به نوعی سوپر کامپیوتر است، نه سیستم عاملی برای سوپرکامپیوتر ها)نفهمیده یا این که این متد بازاریابی جدیدی از مایکروسافت است. (خدای من ، از فردا مشتریان از ما سوپر کاپیوتر ویندوز که دات نت هم داشته باشد خواهند خواست.)
حدس بزنید این نقشه های "سوپر کامپیوتر" (چه اسم پر طمطراقی، بازار یاب های سان، اچ.پی، اراکل، رد هت و اپل باید از مایکروسافت یاد بگیرند)فعلا حول چه موضوعی می گردد؟ البته مسئله مهم و بسیار فنی و عالمانه پولی که مایکروسافت می خواهد برای هر گره کلاستر از مشتریان دریافت کند.
خبر نیوز دات کام را خودتان بخوانید و بخندید.
مندریک سافت : نسخه بلادرنگ مندریک برای ایتانیوم 2
مندریک سافت -Mandrakesoft - تولید کننده مشهور و معتبر لینوکس که بین مدیران شبکه و هکر ها محبوبیت خاصی دارد نسخه چند پردازنده ای و بلادرنگ -Realtime- مندریک لینوکس را برای پردازنده های ایتانیوم 2 به رایگان منتشر کرد. مندریک معتقد است امکانات و بهبود های این سیستم عامل بی شمارند. ما در اینجا به سه موردی که در سایت مندریک منتشر شده است اکتفا می کنیم: توانایی سریال کردن در کلاستر ها به کمک تکنولوژی موسوم به CLIC توانایی ارایه گواهینامه برای سخت افزار شما از طرف مندریک توانایی محاسبه به صورت بلادرنگ -Realtime- تصویر -Image- این سیستم عامل را که در یک دی.وی.دی جا می گیرد از اینجا در یافت کنید.
Mandrakesoft's Itanium 2 services
یک interface ساده و ارزان و در دسترس برای ارتباط پردازنده ها استفاده از یک شبکه ip با تجهیزات مربوطه است. در قسمت قبل مختصرا توضیح دادم که چطور می توان یک cluster بسیار ابتدایی بر پایه لینوکس داشت. قدم بعد از مهیا کردن سخت افزار نوشتن نرم افزاری است که به طور موازی روی این سیستم اجرا شود.
با توجه به معماری مالتی کامپیوتر سیستم ما، به عنوان اولین راه که به ذهن می رسد می توان از توابع شبکه موجود در کتابخانه های زبان های برنامه نویسی معمول که به عنوان مثال می توانید با آن ها یک socket بر پایه tcp درست کنید و قبل و بعد از اجرای هر بخش الگوریتم روی هر پردازنده داده ها را بین پردازنده ها جا به جا کنید استفاده کرد. این یک کار low-level است و انجام آن برای برنامه های بزرگ نسبتا سخت می باشد. به علاوه ملاحظاتی که در برنامه موازی باید در نظر داشته باشید را ممکن است رعایت نکنید و گذشته از همه این ها کد شما کاملا وابسته به سیستمی است که طراحی کردهاید و قابل انتقال روی یک سیستم دیگر نمی باشد.
در اوایل دهه نود میلادی گروهی با عنوان mpi forum مسئول بررسی کتابخانه های برنامه سازی موازی به شیوه انتقال پیام شدند و با در نظر گرفتن ویژگی های یک برنامه موازی و نقاط ضعف و قوت آن ها کتابخانه توابع mpi را طراحی پیشنهاد کردند. یکی از ویژگی های این کتابخانه این بود که کد نوشته شده توسط شما مستقل از platform بود و شما می توانستید کد خود را روی هر سیستمی که کتابخانه mpi روی آن پیاده سازی شده بود به کار ببرید.
کتابخانه توابع mpi را به طور ساده شاید بتوان مجموعه ای از دستورات که صرفا عمل انتقال بلوک هایی از داده ها از یک node یا گره به گره دیگر را انجام می دهند در نظر گرفت (هر node را یک cluster در نظر بگیرید که می تواند به طور ساده یک مادربرد باشد)
یکی از پیاده سازی های معروف mpi که همراه بسیاری از distro های لینوکس (مانند Fedora) می باشد lam-mpi است. من پورت مربوط به bsd آن را در سایت freebsd.org نیز دیده ام. بعد از نصب این برنامه آنچه شما خواهید داشت کتابخانه ای از توابع مورد استفاده در زبان های c و c++ و FORTRAN است که شما در برنامه نویسی از آن ها استفاده می کنید، یک سرویس به صورت daemon است که هنگام اجرای برنامه ها باید فعال باشد و در نهایت یک سری دستور خط فرمانی برای راه اندازی و توقف سرویس، اجرای برنامه ها و آسان تر کردن عمل compile برنامه ها.
توجه کنید که برای کار با این library لزومی ندارد که سیستمی مانند آنچه در قسمت اول توضیح دادم داشته باشید بلکه اگر فقط دو pc به همراه لینوکس داشته باشید که به هم شبکه شده باشند کفایت می کند.
قدم اول در اجرای الگوریتم به طور موازی نوشتن برنامه است. در خصوص نوشتن برنامه بعدا توضیحاتی می دهم ولی فعلا فرض کنید برنامه نوشته شده و آماده کامپایل و اجرا می باشد. مانند تمامی دیگر برنامه ها باید gcc (یا g++) را به همراه سوئیچ های مربوطه صدا کنید ولی برای این کار شاید مجبور باشید یک دستور دو سه خطی بنویسید زیرا احتمالا مجبورید تعداد زیادی library را به همراه سوئیچ های مربوطه مشخص کنید. چون این آرگومان های خط فرمانی عموما ثابت هستند به همین خاطر دستورهای mpicc و mpiCC (برای cوc++) در نظر گرفته شده که خود به خود کامپایلر را با پارامترهای لازم صدا می کنند که در نتیجه کار ساده می شود.
بعد از کامپایل برنامه و پیش از اجرای آن شما باید محیط lam را فعال کنید تا بتوانید برنامه mpi خود را در آن اجرا کنید. برای این کار ابتدا یک فایل متنی که حاوی آدرس node هایی است که شما قصد دارید برنامه روی آن ها اجرا شود بسازید (در هر node باید lam-mpi و sshیاrsh و همچنین یک کپی از برنامه کامپایل شده موجود باشد) سپس با دستور lamboot و مشخص کردن hostfile گفته شده محیط را اجرا می کنید. در نهایت با استفاده از دستورات mpirun یا mpiexec و مشخص کردن اینکه برنامه تان را می خواهید با چند process موازی اجرا نمایید، کار را تمام می کنید.
این مقاله کوتاه صرفا برای آشنایی و درک شمای کلی یک سیستم پردازش موازی نوشته شده است. برای انجام کار جدی می بایست مستندات mpi و همچنین lam-mpi را به دقت مطالعه نمایید.
قصد دارم تجربیات مختصری در خصوص دست و پا کردن یه سیستم ساده برای انجام کارهای پردازش موازی با استفاده از لینوکس رو طی یکی دو قسمت به عرض برسونم.
آنچه در نهایت خواهید داشت یک سیستم پردازشی موازی با معماری multicomputer است که با کتابخانه mpi (برنامه نویسی موازی به شیوه انتقال پیام) با آن می توانید برنامه بنویسید. شاید برای کسانی که یه تعداد کامپیوتر بی کار در دسترسشون هست و یک مقداری هم وقت دارند که نمی دونن چطور تلف کنند این مقاله خوبی باشه. شاید هم بعدا به درد یه کسی بخوره.
سخت افزار مورد نیاز:
یک عدد رایانه سرور کامل حداقل پنتیوم 3، و حافظه اصلی 256 به بالا، فضای دیسک سخت زیاد (مثلا 10 الی 15 گیگابایت) و یک یا تعداد بیشتری کارت شبکه نسبتا سریع و مادربرد با قابلیت بوت از روی کارت شبکه (معروف به PXE دار).
تعدادی client حداقل پنتیوم 2، حافظه اصلی 128 به بالا ) و یک کارت شبکه نسبتا سریع و مادربرد با قابلیت بوت از روی کارت شبکه (معروف به PXE دار) داشتن دیسک سخت و صفحه کلید و موشواره اختیاری است.
در صورت نیاز به switch باید از نوع سریع باشند، HUB های معمولی جواب خوبی نمی دهند.
نرم افزار مورد نیاز:
پیش از شروع کار یک عدد لینوکس (ترجیحا FC3 یا Mandrake یا Debian اگر از روش دوم استفاده می کنید) روی سرور خود نصب کنید. چون روش کار بدین ترتیب است که client ها به طور کامل از روی شبکه بوت می شوند بنابراین حتی ممکن است دیسک سخت هم نداشته باشند. تنها کاری که برای client ها باید انجام دهید این است که در setup آن اولویت بوت را کارت شبکه بگذارید و مطمئن شوید که به یکی از کارت های شبکه سرور شما مستقیم یا با استفاده از یک switch متصل اند.
من دو روش برای راه اندازی سیستم می نیمم ذکر می کنم: روش اول که روش دستی است و انجام آن سخت، ولی با امکانات خط اینترنت معمول قابل انجام است و روش دوم که با استفاده از یک package از قبل نوشته شده است و بسیار آسان می باشد ولی احتمالا خط اینترنت پر سرعت برای نصب لازم دارد.
روش اول (روش دستی):
ابتدا مراحل بوت شدن یک سیستم از روی کارت شبکه را مختصرا ذکر می کنم. وقتی یه سیستم از روی یک کارت شبکه مجهز به epromی که مثلا PXE را ساپورت می کند می خواد بالا بیاد، اول به دنبال یه سرویس BOOTP یا DHCP می گردد تا از آن ip بگیرد. بنابراین باید روی سرور خود یک عدد DHCP یا BOOTP پیکره بندی شده داشته باشید. سپس با استفاده از پروتکلی مثل TFTP (مشابه همون FTP خودمون) کرنل که یه کم هم دستکاری شده دانلود شده و اجرا می شود پس TFTP هم باید سرویسش نصب باشه. بعد احتمالا لازم دارید که یک root دایرکتوری یا مثلا یک دایرکتوری مشابه etc و یا چیز های مشابه برای اینکه سرویس های دیگر را run کنید، mount شود. از آن جایی که دیسک سخت ندارید پس باید این کار را با چیزی شبیه NFS انجام دهید که آن را هم نصب و پیکره بندی می کنید ( از این قسمت برای سفارشی کردن clientها مورد استفاده قرار می گیرد).
برای انجام دقیق و مرحله به مرحله این روش شما را به HOWTO زیر راهنمایی می کنم:
http://www.tldp.org/HOWTO/Network-boot-HOWTO
مراحل کار به صورت خلاصه عبارتند از:
ساخت مجدد کرنل و دستکاری آن با پارامتر های مورد نیاز
نصب و پیکره بندی NFS
نصب و پیکره بندی BOOTP
نصب و پیکره بندی TFTP
تنظیم client ها
حال کردن با سیستمی که راه انداخته اید
روش دوم(روشی دیگر):
یه دانشگاه یا موسسه تایوانی می خواسته یه سیستم راه بندازه که کامپیوترهای شبکه اش بدون هارد لینوکس رو بالا بیارند. واسه همین هم کارهای بالا رو اومده یه کم جمع و جور کرده و ساده تر کرده. کاری که انجام داده اینه که اومده یه سری script به زبان perl نوشته که با اجرای اون ها سیستم نصب و پیکره بندی می شه. آدرس:
http://drbl.sourceforge.net
با اجرای یکی از برنامه هاش (فکر کنم drblsrv) فرض می کنه که eth0 کامپیوتر سرور به اینترنت وصل هست و بعد شروع می کنه تمام بسته های مورد نیاز و حتی کرنل رو نصب و به روز می کنه و بعد دایرکتوری های معادل client ها رو می سازه.
با اجرای یکی دیگه از برنامه ها (به اسم drblpush) بقیه کارت های شبکه تون ( eth1 به بعد) رو به عنوان زیر شبکه هایی در نظر می گیره که هر کدوم یه تعدادی client بهش وصل هستند. Ip ها، تعداد client ها، امکانات هر client و چیزهایی از این قبیل همین جا قابل تنظیم هستند.
بعد از نصب هم یک سری دستورات shell برای تنظیمات آتی در اختیار خواهید داشت. این روش با اینکه خاص هست و برای همه کاربرد ها در نظر گرفته نشده ولی امکانات پیکره بندی ساده و زیادی به شما می ده (مثلا اینکه clientهاتون گرافیکی login کنند یانه، چه جور loginی براشون در نظر گرفته بشه و...). اون سیستمی که من باهاش کار می کردم یه رک بود که سه تا مادربرد تو یه طبقه داشت و طبقه زیریش سه تا powerشون بود و از بیرون به یکیشون کی برد و مانیتور وصل شده بود بنابراین زیاد با امکانات گرافیکی loginش ور نرفتم ماکزیمم چیزی که می خواستم یه سرور ssh روی دوتای دیگه بود که بتونم با شبکه بهشون دسترسی داشته باشم. عکس هاشو پیوست می کنم.
البته خیال کسی رو بر نداره که الآن می تونیم یه supercomputer بسازیم فقط پولش باید باشه. هر چند که راهش همینه ولی اهل فن (مطمئنا منظورم نرم افزاری ها نیست، شاید سخت افزاری ها که یه کم از رشته ما رو می خونن) می دونن که اون ابر کامپیوترهایی که تو اخبار می گن آرایه های پیچیده ای از پردازنده های طراحی شده برای این کار، ram های multiport، switching matrix های پیچیده و... هست. ضمنا این رو هم حتما می دونید که فعلا تو سرعت تقریبا به بن بست رسیده ایم. چون برای با لا بردن سرعت باید ماسفت ها رو کوچیک کرد ولی تکنولوژی کوانتم مکانیک فعلی جواب کوچیک تر از چند ده نانومتر رو نمی ده به همین خاطر دارن روی پردازنده های چند هسته ای یا سیستم های چند پردازنده ای کار می کنن. البته هر چند که ما نه شبیه سازی انفجار اتمی می کنیم و ماهواره هواشناسی داریم که بخواهیم داده های عظیمشو تحلیل کنیم ولی اگر بخواهیم روزی به این سمت بریم برنامه نویسی موازی به نظر می رسه فعلا تنها راه حله :موفق:
همین دیگه .... دفعه بعد می گم با این سیستم چطوری برنامه موازی می نویسم.
ParallelKnoppix یک دیسک زنده بر پایهی کناپیکس است که می تواند پردازش موازی و کلاسترینگ را در مدت ۱۵ دقیقه برای شما فراهم کند.
پارالل کناپیکس بدون نیاز به دیسک سخت یا مراحل نصب مانند هر دیسک زندهی دیگری در چند دقیقه سیستم را بوت میکند و در ربع ساعت شما را قادر میسازد تا یک کلاستر برپایهی لینوکس ایجاد کنید که با ابزارهای برنامه نویسی و کتابخانههایی مانند MPI کار میکند.
سایت : >>> http://www.knoppix.net
Scalable Cluster Environment 1.5
This is a set of interoperable open source tools that enable users to build and deploy a Beowulf cluster. You can use this to build a disk-less cluster or cluster unused computers without disrupting local hard disks

دانلود : >>>
منبع :مجله علم الکترونیک و کامپیوتر
دانشمندان علوم کامپیوتر از کامپیوترهای عظیم موازی به منظور شبیه سازی رویدادهایی که در دنیای واقعی رخ می دهند استفاده می کنند. این اعمال در چنین مقیاس بزرگی جهت درک بهتر نمودهای علمی یا پیش بینی رفتارها لازم و ضروری می باشند. در اغلب موارد منابع محاسباتی یک فاکتور محدود کننده در حوزه این شبیه سازی ها محسوب می گردند. منابع محدود تنها شامل CPU و حافظه نمی شوند، بلکه این منابع زیرسیستم های ورودی/خروجی را نیز در بر می گیرند، چرا که چنین برنامه هایی معمولا حجم زیادی از داده را تولید و یا پردازش می نمایند. برای اینکه روند شبیه سازی با سرعت بالا اجرا شده و ادامه یابد، سیستم ورودی/خروجی بایستی قادر به ذخیره صدها مگابایت داده در هر ثانیه باشد، و در این عملیات باید دیسک های زیادی مورد استفاده قرار گیرد. نرم افزاری که این دیسک ها را به صورت یک سیستم فایل مرتبط سازماندهی می کند یک "سیستم فایل موازی" نامیده می شود.
سیستم های فایل موازی بویژه به منظور فراهم نمودن ورودی/خروجی های بسیار سریع در مواقعی که بایستی توسط پردازش های زیادی در یک لحظه مورد دسترسی قرار گیرند طراحی شده اند. این پردازش ها میان چندین کامپیوتر مختلف، یا میان گره ها(nodes)، که کامپیوتر موازی را تشکیل می دهند توزیع گردیده است. شکل 1 یک نمای سطح بالا از یک کامپیوتر موازی به همراه یک سیستم فایل موازی را نمایش می دهد. گره هایی که کار محاسبه را انجام می دهند به یکدیگر متصل شده اند و از سوی دیگر توسط شبکه کلاستر به گره های سرور ورودی/خروجی مرتبط هستند، و داده را بر روی دیسک های الصاقی به گره های سرور ذخیره می نمایند.
لازم نیست که شما برای بهره بردن از یک سیستم فایل موازی در یک لابراتوار ملی، که دارای یک کلاستر 1000 گره ای است، مشغول به کار باشید. برای سالها سیستم فایل موازی مجازی (PVFS) مخصوص کلاسترهای لینوکس در دسترس بوده است، که به هر شخصی امکان برپا کردن و استفاده از همان سیستم فایل موازی که در حال حاضر بر روی کلاسترهای بزرگ فراوانی در سراسر دنیا مورد استفاده قرار می گیرند را می دهد. اخیرا یک سیستم فایل موازی کامل تر و جدیدتر بنام PVFS2 عرضه شده است. این سیستم فایل جدید دارای انعطاف پذیری بیشتری بوده، و بهره بیشتری از سخت افزار موجود در کلاسترهای امروزی می برد، با کلاسترهای بزرگتر مطابقت بیشتری دارد، و مدیریت آن نسبت به نسل قبل ساده تر است.
● مفاهیم سیستم فایل موازی
برای دستیابی به کارآیی بالا، یک سیستم فایل موازی فایل ها را همانند سیستم RAID میان گره ها قطعه قطعه و تقسیم می نماید. در این سیستم، بجای دیسک ها، گره ها سرورهای داده محسوب می شوند. همانگونه که یک RAID چندین کانال را به منظور افزایش کارآیی در یک مجموعه از دیسک های محلی متمرکز می کند، یک سیستم فایل موازی نیز اتصالات شبکه را در یک مجموعه از دیسک هایی که به صورت شبکه در آمده اند متمرکز می نماید. قطعه قطعه کردن داده در میان گره ها یک روش ساده برای دستیابی به موازی سازی میان چندین سیستم ورودی/خروجی سری است. بر خلاف حالتی که چندین گره از یک RAID به صورت اشتراکی استفاده می کنند، یک سیستم فایل موازی قادر به استفاده همزمان از چندین لینک شبکه، با حذف گلوگاه محدودکننده، می باشد. تا زمانی که فایلها به این روش قطعه قطعه می شوند و برنامه های موازی وادار به کار بر روی نواحی معینی از یک فایل به اشتراک گذاشته شده می گردند، شبکه و محتویات لود شده دیسک ها توانایی گسترش در میان گره های ذخیره سازی را دارند. >
در مقابل، سیستم های فایل شبکه ای دارای نقش متفاوتی هستند. امروزه، داشتن یک پیکربندی از چندین ماشین با برخی از انواع ذخیره سازی اشتراکی یا سیستم فایل همچون NFS، Windows Networking یا AppleTalk دیگر امر غیر عادی محسوب نمی شود. این سیستم ها با توجه به پیشرفت های حاصل شده در کارآیی آنها (پیشرفت هایی نظیر عمل کش کردن سمت کلاینت) به خوبی home directory ها کار خود را انجام می دهند. کش سازی سمت کلاینت تاریخچه تغییرات محلی فایل را بدون بروزرسانی بیدرنگ در وضعیتی که داده بر روی سرور و یا بر روی حافظه های کش موجود بر روی سایر کلاینت ها ذخیره شده باشد نگه داری می کند. این رویکرد بطور کلی بارگذاری های شبکه را کاهش داده و سرعت انجام اعمال معمولی از قبیل ویرایش یا کامپایل فایل ها را به روشی که هزینه های شبکه را تقریبا شفاف می سازد افزایش می دهد.
در حالی که مزیت کش سازی سمت کلاینت در سیستم های فایل شبکه ای بر کسی پوشیده نیست، برنامه های موازی در صورتیکه داده ارائه شده به آنها ناهماهنگ و متناقض باشد می توانند نتایج نادرستی را تولید نمایند. اگر پردازش ها همواره یک دید مشترک از داده را به اشتراک گذارند، برنامه های موازی قادر خواهند بود بدون خطا به کار خود ادامه دهند. یک روش، حصول اطمینان از این مسئله است که حافظه های کش موجود در هر گره همواره حاوی آخرین داده است. تکنیک های گوناگونی برای حفظ هماهنگی و سازگاری وجود دارد، که توسط هر تکنیک به مشخصه های متفاوتی از کارآیی می توان دست یافت.
برای مثال، برخی سیستم های فایل کلاستر مسئله سازگاری و هماهنگی داده را با استفاده از قفل های فایل به منظور جلوگیری از دستیابی همزمان به فایل حل می کنند. بطور کلی، قفل ها روشی برای حصول اطمینان از این مطلب هستند که تنها یک فرایند در یک لحظه قادر به اعمال تغییرات بر روی داده است. در یک سیستم فایل شبکه ای، معمولا یک قفل بایستی از یک مدیر قفل مرکزی کسب اجازه نماید. قفل های فایل نوع Coarse-grained تضمین می کنند که فقط یک پردازش در یک لحظه قادر به نوشتن داده در یک فایل باشد. کارآیی با افزایش تعداد پردازش ها تنزل خواهد یافت. سایر روش ها شامل طرح های قفل فایل fine-grained، همچون قفل محدوده بایت (byte-range)، می باشند که این امکان را فراهم می آورند که چندین پردازش بصورت همزمان نواحی مختلفی از یک فایل به اشتراک گذاشته شده را بنویسند. به هر حال، آنها با محدودیت های مقیاس پذیری ((scalability نیز مواجه می شوند. بالاسری (overhead) ناشی از نگهداری تعداد زیادی از قفل های از این نوع در نهایت به تنزل کارآیی ختم می گردد. در حالت کلی تر، هر سیستم قفل شبکه ای با یک گلوگاه محدود کننده برای دسترسی داده مواجه می شود. برای دستیابی به مقیاس پذیری و کارآیی در مورد درخواست های برنامه هایی که اعمال ورودی/خروجی زیادی دارند، یک سیستم بدون بالاسری قابل توجه (همچون قفل کردن) و بدون عرضه متفاوت داده میان گره ها (همچون کش سازی سمت کلاینت) مورد نیاز است. برنامه های موازی تمایل دارند که هر فرایند را وادار به نوشتن در نواحی مجزایی از یک فایل به اشتراک گذاشته شده نمایند. برای این نوع برنامه ها، در حقیقت هیچ نیازی به عمل قفل کردن نیست، و ما می خواهیم که تمام اعمال نوشتن بصورت موازی و بدون تاخیر موجود در چنین رویکردهایی ادامه یابد.
بجای داشتن یک سیستم فایل با کارآیی بالا که زمان زیادی را صرف مجادله برای منابع مشترک یا تلاش برای حفظ سازگاری و هماهنگی حافظه های کش کند، حالت ایده آل این است که سیستمی را طراحی کنیم که به اشتراک گذاری منابع و سازگاری مناسب را پشتیبانی نماید. PVFS2 مثالی از یک سیستم فایل موازی نسل آینده است که برای برآورده ساختن این موارد طراحی شده است. در قسمت بعد به بحث در مورد چگونگی راه اندازی PVFS2 خواهیم پرداخت.
● سیستم PVFS2
PVFS2 نشان می دهد که ساختن یک سیستم فایل موازی که بصورت مجازی با پی ریزی دقیق فوق داده و فضانام و همچنین تعریف معانی دستیابی داده که می تواند بدون قفل کردن در دسترس قرار گیرد سازگاری را حفظ کند، امکانپذیر است. این طراحی به بروز برخی از رفتارهای سیستم فایل که مورد انتظار تعدادی از برنامه های سنتی نیست ختم می شود. این معانی در زمینه ورودی/خروجی موازی بحث جدیدی به شمار نمی روند. PVFS2 بصورت دقیق تر معانی را که توسط MPI-IO، یک API ورودی/خروجی با کارآیی بالا، دیکته می شود پیاده سازی می نماید.
PVFS2 همچنین دارای پشتیبانی محلی برای الگوهای انعطاف پذیر ناپیوسته دستیابی داده می باشد. اغلب برنامه های سنتی (نظیر "cat" و "vi") به نواحی داده پیوسته از فایل های باز شده دسترسی دارند، در حالیکه برنامه های علمی اغلب اوقات نیازمند الگوهای دستیابی هستند که ناپیوسته باشند. برای مثال، شما می توانید برنامه ای را تصور نمایید که ستونی از عناصر خارج از یک آرایه را می خواند. برای بازیابی این داده، برنامه ممکن است تعداد زیادی عمل خواندن کوچک و پراکنده را بر روی سیستم فایل انجام دهد. در صورتیکه، اگر بتواند طی یک مرحله تمامی عناصر ناپیوسته را از سیستم فایل درخواست نماید، هم سیستم فایل و هم برنامه به نحو کارآمد تری وظیفه خود را انجام خواهند داد (شکل 2 را ببینید).
علاوه بر کارآیی، ثبات و مقیاس پذیری scalability)) نیز اهداف مهم طراحی به شمار می آیند. به منظور کمک به دستیابی به این اهداف، PVFS2 بر اساس یک معماری مستقل از وضعیت ((stateless طراحی گردیده است. این به آن معنی است که سرورهای PVFS2 تاریخچه مربوط به اطلاعات سیستم فایل، اطلاعاتی مانند اینکه کدام فایل ها باز شده اند یا موقعیت فایل ها و مواردی از این قبیل، را نگهداری نمی کنند. همچنین در این مورد هیچ وضعیت قفل مشترکی برای مدیریت وجود ندارد. مزیت اصلی یک معماری مستقل از وضعیت این است که در آن کلاینت ها قادرند بدون بهم زدن کل سیستم دچار خطا شده و مجددا به کار خود ادامه دهند. این معماری همچنین به PVFS2 این امکان را می دهد که در مواجهه با صدها سرور و هزاران کلاینت بدون اینکه تحت فشار بالاسری و پیچیدگی پیگیری وضعیت فایل یا اطلاعات قفل متعلق به کلاینت های مذکور قرار گیرد وظیفه خود را بدرستی انجام دهد.
بر خلاف PVFS نسل گذشته، PVFS2 دارای یک سیستم شبکه ای و ذخیره سازی ماژولار است. یک سیستم ذخیره سازی ماژولار این امکان را برای چندین back-end ذخیره سازی فراهم می آورد که به راحتی به PVFS2 متصل شوند. این خاصیت تلفیقی کار افرادی را که در حال تحقیق بر روی ورودی/خروجی به منظور آزمایش و تجربه تکنیک های مختلف ذخیره سازی هستند ساده می سازد. همچنین یک سیستم شبکه ای ماژولار اجازه کار بر روی اتصالی از شبکه های چندگانه را داده و فرایند افزودن پشتیبانی برای انواع دیگری از شبکه ها را آسان می نماید. PVFS2 در حال حاضر TCP/IP و همچنین شبکه های Infinibandو Myrinet را پشتیبانی می کند.
این طراحی ها PVFS2 را قادر به انجام وظایف خود به نحو عالی در یک محیط موازی می سازد، اما در وضعیتی که به عنوان یک سیستم فایل محلی مورد استفاده قرار گیرد کار خود را به خوبی قبل انجام نخواهد داد. بدون کش سازی فوق داده سمت کلاینت، برخی اعمال زمان زیادی صرف می کنند.این امر می تواند مدت زمان انجام برنامه هایی همچون "ls" را بیشتر از حد انتظار افزایش دهد. با وجود این محدودیت، PVFS2 برای برنامه هایی که دارای اعمال ورودی/خروجی زیادی هستند مناسب تر است، تا اینکه برای میزبانی یک home directory مورد استفاده قرار گیرد. PVFS2 برای خواندن و نوشتن کارآمد حجم زیادی از داده بهینه شده است، و از اینرو بسیار مناسب برنامه های علمی می باشد.
● اجزاء PVFS2
بسته اصلی PVFS2 شامل سه جزء متفاوت است: یک سرور، یک کلاینت و یک ماژول کرنل. سرور بر روی گره هایی که داده سیستم فایل یا فوق داده را ذخیره می کنند اجرا می شود. کلاینت و ماژول کرنل نیز بوسیله گره هایی که به شکل فعال داده (یا فوق داده) را از سرورهای PVFS2 ذخیره یا بازیابی می کنند مورد استفاده قرار می گیرند. بر خلاف PVFS اصلی، هر سرور PVFS2 توانایی ایفای نقش به عنوان یک سرور داده، یک سرور فوق داده یا هر دو را بصورت همزمان دارد. همانگونه که قبلا گفته شد، سیستم های فایل موازی از تعدادی گره سود می برند که تمام داده میان آنها به شکل قابل پیش بینی قطعه قطعه شده است. این گره ها همان سرورهای داده در PVFS2 هستند. برخی از انواع پیکربندی نیز ممکن است از چندین سرور فوق داده بهره ببرند. ذخیره کردن فوق داده در میان چندین گره کمکی است به موازنه بارگذاری سرور تحت اعمالی که شامل دسترسی سنگین و زیاد به فوق داده هستند (مثلا ایجاد یا تغییر نام تعداد زیادی فایل). این نوع پیکربندی بطور کامل در PVFS2 پشتیبانی می گردد. بهرحال، تعداد سرورهای فوق داده هیچ فشاری بر روی اعمال خواندن یا نوشتن وارد نمی آورد، و اکثر برنامه های علمی اعمال فوق داده کافی جهت هر گونه بهره برداری از پیچیدگی افزوده انجام نمی دهند.
کلاینت های PVFS2 با سرورهای PVFS2 بر روی اتصال شبکه ارتباط برقرار می نمایند. تمامی ارتباط به صورت اختیاری به حالت رمز در می آیند تا اطمینان حاصل گردد که ماشین های دارای معماری های متفاوت توانایی درک یکدیگر را دارند. یک کلاستر مختلط شامل گره های x86، Itanium و PowerPC را تصور نمایید. رمزبندی ارتباط ما تضمین می کند که تمامی گره ها قادر به استفاده از یک PVFS2 volume، صرفنظر از ترتیب بایت محلی یا اندازه کلمه خواهند بود. ماژول کرنل PVFS2 یک درایور کرنل لینوکس است که به یک PVFS2 اجازه نصب را همانند هر نوع سیستم فایل لینوکس دیگری می دهد. وظیفه اصلی آن ترجمه واضح تمامی اعمال سیستم فایل به دستورات کلاینت PVFS2 بر روی PVFS2 نصب شده است.
● دستیابی به سیستم های فایل PVFS2
دو روش جهت دستیابی به سیستم های فایل PVFS2 فراهم گردیده است. روش اول نصب کردن سیستم فایل PVFS2 است. این روش اعمال تغییرات توسط کاربر و دایرکتوری های لیست، یا انتقال فایل ها و همچنین اجرای باینری ها از سیستم فایل را مجاز می شمارد. این مکانیزم با برخی بالاسری های کارآیی مواجه می گردد اما مناسب ترین روش جهت دستیابی تعاملی به سیستم فایل می باشد.برنامه های علمی از روش دوم (MPI-IO) استفاده می نمایند. اینترفیس MPI-IO به دستیابی بهینه به فایل های منفرد توسط تعداد زیادی از پردازش ها بر روی گره های مختلف کمک می کند. آن همچنین اعمال دستیابی غیرپیوسته را فراهم می آورد که جهت دستیابی کارآمد به داده گسترش یافته در سراسر فایل مورد استفاده قرار می گیرد. در مورد تصویر 2 این کار با درخواست هر عنصر هشتمی که در آفست 0 شروع شده و در آفست 56 پایان می یابد، کلا به عنوان یک عملیات سیستم فایل، صورت می پذیرد. در این مقاله ما بر روی روش اول تمرکز کرده ایم.
● راه اندازی PVFS2
PVFS2 جهت اجرا بر روی چندین ماشین در نظر گرفته شده است. در هر صورت، برای سادگی کار، ما PVFS2 را بر روی یک ماشین نصب و راه اندازی می کنیم. ما ماشین را با نام "testmachine1" صدا خواهیم زد و نصب را در محل پیش فرض (/usr/local) انجام خواهیم داد. سپس نسخه PVFS2 را در /mnt/pvfs نصب خواهیم کرد. فرایند مربوط به نصب بر روی چندین ماشین کاملا مشابه روند گفته شده است. PVFS2 بر روی اغلب توزیع های جدید GNU/Linux ایجاد شده است، اما اگر شما مایلید از ماژول کرنل استفاده نمایید، شما به کرنل لینوکس نسخه 2.6.0-test4 یا پس از آن نیاز خواهید داشت. PVFS2 با استفاده از "configure" و "make" ایجاد و نصب گردیده است. در مثال هایی که در ادامه آمده است اینگونه فرض شده که شما به عنوان root وارد سیستم شده اید. در صورتیکه شما مایل به ایجاد ماژول کرنل باشید گزینه "--with-kernel" مورد نیاز خواهد بود.
./configure --with-kernel=/usr/src/linux-2.6.x
▪ make
make install
اگر شما قصد ایجاد ماژول کرنل اختیاری را دارید، اکنون باید آن را بصورت مجزا کامپایل نمایید. این کار را با تغییر دایرکتوری ها به دایرکتوری "src/kernel/linux-2.6" و اجرای "make" انجام دهید. پس از اینکه ماژول ایجاد شد، فایل pvfs2.ko را در محلی به انتخاب خود کپی نمایید (مثلا در /lib/modules/`uname -r`/kernel/fs/pvfs2.ko). پس از آنکه نرم افزار ایجاد و نصب گردید، بایستی پیکربندی شود. بسته PVFS2 ابزاری بنام pvfs2-genconfig را جهت ایجاد فایل های پیکربندی برای هر یک از سرورهای شما فراهم آورده است. هر سرور به دو فایل پیکربندی نیاز دارد (یکی برای پیش فرض های عمومی، و یکی برای تنظیمات محلی) که بایستی در هنگام اجرای pvfs2-genconfig مشخص گردند. یک مثال دستور خط فرمان می تواند به صورت زیر باشد:
▪ pvfs2-genconfig global.conf local.conf
این فرمان اطلاعات دیگری نیز از شما دریافت می نماید؛ بهرحال، احتمالا موارد پیش فرض برای این مثال کفایت می کند. توجه داشته باشید که فایل های ایجاد شده global.conf و local.conf-testmachine1 خواهند بود. قبل از آغاز به کار سرور PVFS2، شما بایستی دایرکتوری هایی را که برای عمل ذخیره سازی مورد استفاده قرار خواهند گرفت را تعیین نمایید. این کار بسیار ساده با آغاز pvfs2-server به همراه یک آرگومان "-f" در کنار نام فایل های پیکربندی صورت می گیرد.
▪ pvfs2-server global.conf local.conf-testmachine1 -f
سرور، فضای ذخیره سازی را آغاز سازی نموده و سپس خارج می شود. حال از این پس با همین خط فرمان اما بدون آرگومان "-f" می تواند شروع به کار نماید.
▪ pvfs2-server global.conf local.conftestmachine1
در مرحله بعد، یک فایل با نام /etc/pvfs2tab ایجاد نمایید. این فایل حاوی خط زیر است:
▪ tcp://testmachine1:3334/pvfs2-fs /mnt/pvfs pvfs2 default 0 0
در این مرحله از کار، اگر شما اینترفیس ماژول کرنل لینوکس را مورد آزمایش قرار نداده اید، می توانید بدون هیچ مشکلی به قسمت Testing بروید. در غیر اینصورت، همین حالا آن را با استفاده از insmod یا modprobe لود نمایید. گام بعدی آغاز به کار برنامه کلاینت PVFS2 است. برنامه کلاینت PVFS2 شامل دو برنامه به نام های pvfs2-client-core و pvfs2-client است. در صورتیکه برنامه pvfs2-client-core در PATH سیستم شما نصب شده باشد، برنامه pvfs2-client آن را بصورت خودکار یافته و شما به سادگی می توانید "pvfs2-client" را اجرا نمایید. در غیر اینصورت، شما باید با استفاده از سوییچ خط فرمان –p محل برنامه pvfs2-client-core را برای pvfs2-client مشخص نمایید.
▪ pvfs2-client -p /usr/local/bin/pvfs2-client-core
و در نهایت، برای نصب نوع نسخه PVFS2 :
▪ mount -t pvfs2 pvfs2 /mnt/pvfs
حالا PVFS2 نصب شده و آماده آزمایش است!
● سیستم فایل جدید خود را آزمایش نمایید
نخستین کار استفاده از ابزار pvfs2-ping به منظور اطمینان از روشن و در حال اجرا بودن سرور است. این ابزار طی یکسری مراحل تعیین می نماید که سیستم بدرستی پیکربندی شده و به درخواست هایی که از سوی کلاینت (کلاینتی که بر روی آن نصب شده است) صادر می شود پاسخ می دهد.
▪ pvfs2-ping -m /mnt/pvfs
سپس یک فایل را با استفاده از pvfs2-import بر روی سیستم کپی نمایید. این ابزار از برخی جهات شبیه "cp" است، اما در هنگام انتقال داده به سیستم فایل از بافرهای بزرگی استفاده می کند. همچنین زمان کپی را محاسبه می نماید.
▪ pvfs2-import linuxdistro.iso /mnt/pvfs/linuxdistro.iso
برای چک کردن فضای قابل استفاده بر روی سرورها، ما ابزاری بنام pvfs2-statfs فراهم کرده ایم. این ابزار اطلاعات را مشابه فرمان "df" گزارش می دهد؛ آن در میان تمامی سرورهای PVFS2 پیکربندی شده شما کار خود را انجام می دهد. همانند "df"، استفاده از گزینه "-h" موجب نمایش خروجی در اندازه خوانا توسط انسان می شود.
▪ pvfs2-statfs -h -m /mnt/pvfs
اگر شما PVFS2 را نصب کرده باشید، امکان استفاده از ابزارهای سیستمی استاندارد همچون "cp" و "df" برای شما فراهم خواهد بود. در هنگام کار با سیستم فایل آزمایشی تان، این احتمال وجود دارد که برخی از اعمال بنظر پاسخ دهندگی کمی داشته باشند. مجددا ذکر این نکته اهمیت دارد که سیستم های فایل موازی همچون PVFS2 برای انتقال حجم زیادی از داده بهینه شده اند.
● نتیجه گیری
هیچ سیستم فایلی وجود ندارد که راه حل کاملی برای هر نوع از اعمال ورودی/خروجی باشد، و PVFS2 نیز از این قاعده مستثنی نیست. برنامه های با کارآیی بالا برای دستیابی داده بر روی مجموعه متفاوتی از مشخصه ها تکیه دارند. به طور خاص، PVFS2 جهت برنامه های دارای حجم زیادی از اعمال ورودی/خروجی بسیار مناسب است. اگر شما حجم زیادی از داده دارید و نیازمند دسترسی سریع به آن از ماشین های فراوانی هستید، ارزش آن را دارد که نگاهی به PVFS2 بیاندازید.
خب، امروز برای شروع مطالب تکنیکال، یکی از اساسی ترین موضوعات
مطرح در علوم کامپیوتر رو انتخاب کردم و امیدوارم برای آن کاربردهای خوبی پیدا
کنید.
ماشین موازی مجازی(به جاوا مربوط نیست) یک سرویس و
API مخصوص به خود در سرورهای لینوکس است(به صورت پیش فرض
در RedHat وجود دارد؛ منظورم از سرویس
daemon است).
با کمک این ابزار می توانید پردازش را در یک شبکه پخش کنید(یعنی هر چه تعداد
کامپیوترها بیشتر شوند، سرعت برنامه ی شما نیز بالاتر می رود). یکی از مزایای این
کار پایین آوردن هزینه خرید کامپیوتر های خاص بسیار گران می باشد. از این روش برای
تولید فیلم های انیمیشن سنگین به طور فوق العاده ای استفاده می شود.
پردازش موازی(Parallelism) ساده دو نوع است: 1-تابعی(Functional)،
و 2-داده ای(Data)
در نوع تابعی هر سرور بسته به توان خاص خود توابع را اجرا می کند و آن را به سرور
دیگر می دهد. در نوع دوم همه روی یک پردازش عمل می کنند. البته نکته ی مهم دیگری در
اینجا وجود دارد و آن کیفیت خط داده ها می باشد. در هنگام نوشتن این الگوریتم ها به
علت مبادله پیام(Messaging) بین سرورها باید سرعت خطوط و
حجم پیام ها کنترل شود(Load Balancing).
:: برای سرور:
#include
#include "pvm3.h"
#define MAX 10
int main(int argc,char **argv)
{
int numhost, numarch;
int slavesStarted;
int mytid;
int tids[32];
char hostname[12];
char arch[8];
struct pvmhostinfo *hostp;
int i,nextVal,max;
int returntid,returnflag,returnnum;
mytid = pvm_mytid();
pvm_config( &numhost, &numarch, &hostp);
numhost = 3*numhost;
if(numhost > 32) numhost = 32;
slavesStarted = pvm_spawn("prime_slave",(char**)0, 0,"",numhost,tids);
if((slavesStarted==0) || (slavesStarted < numhost))
{
printf("\n Trouble spawning slaves:\n");
for(i=slavesStarted; i
printf("\tTID %d %d\n",i,tids[i]);
}
for(i=0 ; i
pvm_kill( tids[i] );
}
pvm_exit();
exit(1);
}
else
{
printf("Started %d Slaves...\n",numhost);
}
/*Send out the initial request*/
for(i=0;i
pvm_initsend(PvmDataDefault);
pvm_pkint(&numhost, 1, 1);
pvm_pkint(&i,1,1);
/* send msg type 0*/
pvm_send(tids[i], 0);
}
/* Read the intial responses, plus MAX more */
if(argc >= 2) max = atoi(argv[1]);
else if(MAX
for(i=0;i
/* receive on message type 2 */
pvm_recv( -1, 2);
pvm_upkint( &returntid, 1, 1 );
pvm_upkint( &returnnum, 1, 1 );
pvm_upkint( &returnflag, 1, 1 );
printf("%d %s from %d\n",returnnum
,((returnflag==0)?"is prime":"is not prime")
,returntid);
/* Get the same host to do it again */
nextVal = i+numhost;
if(nextVal < max)
{
pvm_initsend(PvmDataDefault);
pvm_pkint(&numhost, 1, 1);
pvm_pkint(&nextVal,1,1);
pvm_send(returntid,0);
}
else
{
nextVal = -1;
pvm_initsend(PvmDataDefault);
pvm_pkint(&numhost, 1, 1);
pvm_pkint(&nextVal,1,1);
pvm_send(returntid,0);
}
}
pvm_exit();
}
:: برای Client ها
#include
#include "pvm3.h"
int main(int argc,char **argv)
{
int parentid;
int mytid;
int numhost,prime;
int i,flag;
mytid = pvm_mytid();
parentid = pvm_parent();
while(1)
{
flag = 0;
pvm_recv( -1,0);
pvm_upkint(&numhost, 1, 1);
pvm_upkint(&prime, 1, 1);
if(prime<0) break;
for(i=2;i
if(prime%i == 0)
{
flag = 1;
break;
}
}
pvm_initsend(PvmDataDefault);
pvm_pkint(&mytid, 1, 1);
pvm_pkint(&prime,1,1);
pvm_pkint(&flag,1,1);
pvm_send(parentid,2);
sleep(2);/* Don't be too responsive*/
}
pvm_exit();
}

| گزارش انتشار نهایی: Rocks Cluster Distribution 4.2.1 |
نسخه بهروز شده جدیدی از Rocks Cluster Distribution منتشر شد. این نسخه برای معماریهای i386 و x86_64 منتشر شده است. این نسخه تعدادی از اشکالات فنی نسخه 4.2 را برطرف مینماید. در این نسخه حداقل حافظه مورد نیاز برای گرههای پردازشی به ۵۱۲ مگابایت کاهش یافته است. برای اطلاعات دقیقتر اینجا را ببینید. برای دریافت به اینجا مراجعه نمایید. |
کلاستر لینوکس زیر بار
خوب با پیگیری و انجام مراحل شرح داده شده در بخشهای پیشین مقاله کلاسترها، اکنون یک کلاستر آماده به کار دارید که میتوانید قدرت آنرا آزمایش کرده و به نحوه کلی عملکرد کلاسترها پی ببرید.
برای شروع، از روی ایستگاه کاری که بعنوان مانیتور آنرا در نظر گرفتهام، از روی کنسول وارد گره شماره ۱ و گره شماره ۲ میشوم. روی گره شماره ۱ با استفاده از دستور mosmon برنامه مانیتور کلاستر را که میزان بار هر گره را بصورت نمودارهای میلهای نمایش میدهد، اجرا میکنم. روی گره شماره ۲، دستور زیر را در خط فرمان تايپ میکنم:
# for x in 1 2 3 4
do
awk 'BEGIN {for(i=0;i<10000;i++)for(j=0;j<10000;j++);}' &
done
دستور فوق، ۴ اسکریپت awk را که شدیدا بار CPU را بالا خواهند برد، بطور همزمان اجرا میکند. به کنسول گره شماره ۱ بازگشته و نمودار بار را زیر نظر میگیرم:

بیچاره گره شماره ۲! نمودار به سقف رسیده است! انتظار میرود پس از چند لحظه پردازشها به گرههای بعدی کلاستر (که ما فقط گره شماره ۱ را داریم) منتقل شوند. بسیار جالب است. پس از چند ثانیه پردازشها به گره شماره ۱ منتقل شده و بار آن به سرعت بالا میرود:

همانطوری که در تصویر بالا مشاهده میکنید، میزان بار گره شماره ۱ به شدت بالا رفته و از بار گره شماره ۲ کاسته میشود. خوب این آزمایش بدی برای حصول اطمینان از کارکرد کلاستر نیست، ولی برای بررسی دقیقتر و گرفتن نتایج عملیتر، نیاز داریم تا تعدادی عملیات واقعی پردازشی را روی کلاستر انجام دهیم. یکی از بهترین عملیات پردازشی که میتواند به خوبی کارایی کلاستر را در بوته آزمایش قرار دهد، عملیات کد کردن فایلهای موسیقی است.
به این منظور، ما دو نرمافزار کد کردن فایلهای موسیقی با فرمت wav را انتخاب کرده و آزمایشات را به کمک آنها انجام خواهیم داد.
نصب نرمافزارهای لازم
نرمافزارهای مورد نیاز را تنها در گرهای که مایلید آزمایشات را از طریق آن انجام دهید نصب نمایید و نصب آن در سایر گرهها ضروری نیست. این قابلیت کلاستر سازی نامحسوس OpenMosix است که باعث میشود تا ما نیازی به نصب این نرمافزارها و قرار دادن فایلهای هدف روی یک اشتراک قابل دسترس در تمام شبکه نداشته باشیم.
نرمافزاری که ما از آن برای آزمایشات خود استفاده خواهیم کرد، نرمافزار کدینگ فایلهای صوتی به فرمت MP3 به نام Lame میباشد که یکی از سریعترین کد کنندههای MP3 در جهان بوده و یک نرمافزار بازمتن است. این نرمافزار را از لینک زیر دانلود نمایید. ضمنا حجم آن کمی بیشتر از ۱ مگابایت میباشد:
http://unc.dl.sourceforge.net/sourceforge/lame/lame-3.93.1.tar.gz
پس از دانلود بسته کد منبع، جهت نصب نرمافزار دستورات زیر را در خط فرمان اجرا نمایید:
# gunzip lame-3.93.1.tar.gz
# tar -xf lame-3.93.1.tar
# cd lame-3.93.1
# ./configure
# make
# make install
نرمافزار Lame پس از چند دقیقه کامپایل و به راحتی نصب میشود. من نرمافزار را روی هر دو گره کلاستر نصب کردهام، چون میخواهم دقیقا نحوه عملکرد آنرا در شرایط مختلف بررسی کنم. مورد دیگری که به آن نیاز است، تعدادی فایل wav است که باید آنها را تهیه کنید. من ۵ عدد فایل wav برای انجام آزمایشات تهیه کردهام که حجم آنها حدود ۱۹۶ مگابایت میباشد (در حقیقت فایلهای MP3 بودهاند که توسط XMMS به فرمت wav برگردانده شدند).
من در دایرکتوری root هریک از گرهها یک دایرکتوری به نام wav ایجاد کرده و فایلهای wav را در آنجا قرار دادم. در مرحله نخست آزمایش، هر یک از گرهها بصورت فردی فایلهای MP3 را کد میکنند. برای انجام آزمایش، دستور زیر را در خط فرمان وارد میکنم:
# cd /root/wav
# for x in *.wav
do
lame $x
done
در حقیت یک حلقه عملیات تبدیل فایلها را یک به یک انجام میدهد. نتیجه حاصل مطابق جدول زیر میباشد:
|
نام گره |
زمان انجام |
|
Cyber |
18:46 s |
|
Debian |
5:01 s |
خوب نتیجه قابل انتظار است، ماشین پنتیوم ۸۰۰ مگاهرتزی باید هم سریعتر از سلرون ۳۳۳ مگاهرتزی باشد. پس از این مرحله OpenMosix را اجرا کرده و کلاستر را زیر بار میگذارم. دستور عملیات به صورت زیر است:
# cd /root/wav
# for x in *.wav
do
lame $x &
done
با اضافه شدن کاراکتر & تمامی ۵ عملیات به صورت همزمان و در پس زمینه اجرا خواهند شد. اجرای همزمان ۵ پروسه باعث مهاجرت پروسهها به گره دیگر کلاستر و وارد شدن کلاستر در عملیات میگردد. خوب همانطور که انتظار میرفت، کلاستر واقعا کار میکند! بسیار هیجان انگیز است. نتیجه کار مطابق جدول زیر میباشد:
|
نام گره آغاز کننده پروسهها |
زمان انجام |
|
Cyber |
4:11 s |
|
Debian |
3:36 s |
همانطور که میبینید، نتیجه عملیات بسیار جالب است. زمان ۵ دقیقهای عملیات در دستگاه قویتر به سه دقیقه و نیم و زمان ۱۸ دقیقه و ۴۶ ثانیهای دستگاه ضعیفتر به چهار دقیقه و ۱۱ ثانیه کاهش یافته است!
برپا سازی کلاسترهای OpenMosix
جهت برپا سازی یک کلاستر، شما به حداقل دو دستگاه مبتنی بر لینوکس که به یک شبکه داخلی متصل بوده و قادر به کامپایل کردن و اجرای هستههای سری 2.4 باشند، نیاز دارید. همچنین شبکه شما باید دارای حداقل سرعت ۱۰۰ مگابیت باشد. این سرعت به شما سرعت بسیار خوبی را اعطا خواهد نمود. سرعت اترنت استاندارد یعنی ۱۰ مگابیت به شما سرعت چندان جالب توجهی نخواهد داد. البته در صورتی که شبکه شما از این نوع است و مایل هستید تا فقط OpenMosix را تجربه نمایید، پاسخگو خواهد بود. استفاده از اترنتهای گیگابیت مفید بوده ولی انتخابی است. البته ممکن است واقعا به آن نیاز نداشته باشید و اترنت ۱۰۰ مگابیت امور شما را به خوبی انجام دهد.
اتصال گرههای کلاستر به یک سوئیچ پرسرعت سیستمهای شما را قادر خواهد ساخت تا در حالت Full Duplex عمل نموده و پهنای باند شما دو برابر گردد. همچنین میتوانید در یک کلاستر ۲ یا ۳ گرهای از سیم کشی مخصوص جهت اتصال مستقیم گرهها به هم استفاده نمایید.
داشتن فضای Swap کافی قویا توصیه میشود. به این صورت شما قادر خواهید بود تا گرهها را بصورت دینامیک از کلاستر خارج نمایید بدون اینکه با کمبود حافظه مواجه شوید. این موضوع نیز انتخابی بوده و ممکن است در شرایط خاصی که کلاستر تحت فشار کاری بالایی قرار دارد، به شما کمک کند.
در کنار مطالب بالا، باز هم اضافه میکنم که امکان ایجاد یک کلاستر مبتنی بر فقط دو دستگاه لینوکس و یک اترنت استاندارد نیز وجود دارد.
لازم نیست که تمام کامپیوترهایی که در یک کلاستر قرار میگیرند قوی باشند و یا مهم نیست که دارای سختافزارهای متنوعی باشند. هر قدرت پردازشی میتواند به سرعت جمعی کمک کند!
شروع کار
فرایند برپاسازی کلاسترهای لینوکس بسیار ساده میباشد. ابتدا باید هستههایی که OpenMosix روی آنها فعال شدهاند را روی گرههای کلاسترها نصب کرده و سپس ابزارهای کاربری را روی همه آنها نصب کرده و یک تنظیم کوچک در یک فایل پیکربندی انجام دهیم.
به عنوان نخستین مرحله از کار، باید ابزارهای نرمافزاری لازم را فراهم آورید. نخستین چیزی که به آن نیاز دارید، کد منبع هستهای است که مایلید روی آن کار کنید. کد منبع هسته خود را میتوانید از http://kernel.org دریافت نمایید. من برای اجرای پروژه، از هسته 2.4.23 استفاده کردهام. در قدم بعدی باید وصلههای هسته OpenMosix و سپس ابزارهای نرمافزاری OpenMosix را دریافت نمایید. برای دانلود وصلههای هسته OpenMosix میتوانید به سایت رسمی آن در آدرس http://openmosix.sf.net یا http://openmosix.org مراجعه کنید و یا از لینکهای زیر برای هستههای مورد نظرتان استفاده کنید:
هسته 2.4.21:http://tab.tuxfamily.org/download/openmosix/releases/patch-2.4.21-om-20030825.bz2
هسته 2.4.22:http://tab.tuxfamily.org/download/openmosix/releases/patch-2.4.22-om-20031215.bz2
هسته 2.4.23:http://tab.tuxfamily.org/download/openmosix/stable/patch-2.4.23-om-20031215.bz2
هسته 2.6.0 (آزمایشی):http://tab.tuxfamily.org/download/openmosix/unstable/patch-2.6.0-om-0.20031202.1.bz2
ابزارهای نرمافزاری:http://umn.dl.sourceforge.net/sourceforge/openmosix/openmosix-tools-0.3.5.tar.bz2
فراموش نکنید که همیشه میتوانید جدیدترین نسخههای وصله هسته و ابزارهای نرمافزاری OpenMosix را از سایت رسمی آن دریافت نمایید. پس از اتمام دریافت تمامی اقلام مورد نیاز (تنها کد منبع هسته دارای حجم زیادی است و بقیه ابزارها همگی بین ۲۰۰ تا ۳۰۰ کیلوبایت ظرفیت دارند!) باید تجهیز گرههای کلاستر را شروع کنید. ابتدا لازم است در شبکه محلی خود کامپیوترهایی را که مایلید به عنوان گرههای کلاستر استفاده کنید، تعیین نمایید. من در دفتر کار خود دو دستگاه را برای این منظور انتخاب کردم. (تصویر زیر)

همانطوری که قبلا اشاره کردم، لازم نیست که گرههای کلاستر حتما قویترین ایستگاههای کاری روی شبکه باشند. دستگاههای انتخابی من دارای مشخصات زیر هستند:
Node No.1 : Debian (LAN SERVER)
CPU : P-III 800 MHz
RAM: 128 MB SD-RAM
NIC : SIS 100 Mbps
HDD: 2x40GB
Distro : Debian GNU/Linux 3.0 (woody)
Kernel: 2.4.23 (will be 2.4.23-om)
Node No.2 : Cyber (Workstation)
CPU : Celeron 333 MHz
RAM: 160 MB SD-RAM
NIC : D-Link 100 Mbps
HDD: 1x6.4GB
Distro : Libranet GNU/Linux 2.8.1
Kernel: 2.4.21 (will be 2.4.23-om)
پس از تعیین گرههای کلاستر، شروع به نصب نرمافزارهای لازم برای این کار میکنیم. این عملیات را برای تمام گرهها باید تکرار کرد. برای شروع هسته OpenMosix را نصب میکنیم. ابتدا کد منبع هسته را در آدرس usr/src کپی کرده و آنرا با استفاده از دستورهای زیر باز میکنیم:
# cd /usr/src
# bzip2 -d linux-2.4.23.tar.bz2
# tar -xf linux-2.4.23.tar
# mv linux linux.old
# ln -s linux-2.4.23 linux
سپس وصله هسته را در کد منبع خود اعمال میکنیم:
# cd linux
# cat /home/alan/patch-2.4.23-om-20031215.bz2 | bzip2 -d | patch -p1 -l
کد منبع هسته در چند ثانیه وصله خواهد شد. اکنون میتوانید طبق روالهای گذشته هسته را پیکربندی و کامپایل نمایید. فقط اطمینان حاصل کنید که گزینههای زیر را در بخش OpenMosix پیکربندی هسته انتخاب کنید:
[*] openMOSIX process migration support
[*] Stricter security on openMOSIX ports
[*] openMOSIX File-System
[*] Poll/Select exceptions on pipes
برای شروع پیکربندی هسته، دستور زیر را وارد نمایید:
# cd /usr/src/linux
# make menuconfig
پس از اتمام پیکربندی و ذخیره تغییرات، برای کامپایل شدن هسته دستورات زیر را وارد نمایید:
# make-kpkg clean
# make-kpkg --revision=8:MOSIX01 kernel_image
و یا خیلی سادهتر:
# make-kpkg clean
# make-kpkg kernel_image
این نحو عملیات کامپایل هسته به یک بسته دبیان ختم خواهد شد که قادرید آنرا به راحتی روی سیستم نصب نمایید. مدت زمان انجام عملیات کامپایل هسته به سرعت پردازنده سیستم بستگی دارد. پس از اتمام عملیات کامپایل هسته، بستهای را که ایجاد شده است، نصب میکنیم:
# dpkg -i kernel_image-2.4.23-om_MOSIX01_i386.deb
هنگام نصب این بسته، مدیر بوت Lilo به طور خودکار پیکربندی خواهد شد. در صورتی که از گراب استفاده میکنید، باید تغییرات را بطور دستی در فایل پیکربندی آن اعمال نمایید. برای این منظور باید فایل boot/grub/menu.lst را ویرایش کرده و خطوط زیر را اضافه نمایید. البته مقادیری مانند پارتیشنهای قابل بوت و سایر آدرسها ممکن است روی سیستمهای شما متفاوت باشد که آنها را باید تغییر دهید:
title Libranet GNU/Linux, kernel 2.4.23 OpenMosix
root (hd0,1)
kernel /vmlinuz-2.4.23-om root=/dev/hda3 ro hdb=scsi
savedefault
boot
پس از اتمام نصب هستهها، اکنون باید ابزارهای نرمافزاری OpenMosix را نصب نماییم. برای این منظور، فایلی را که دانلود کرده بودیم، باز کرده و کامپایل و نصب میکنیم:
# bzip2 -d openmosix-tools-0.3.5.tar.bz2
# tar -xf openmosix-tools-0.3.5.tar
# cd openmosix-tools-0.3.5
# ./configure --with-kerneldir=/usr/src/linux-2.4.23/
# make
# make install
کامپایل و نصب ابزارهای نرمافزاری مدت زیادی طول نمیکشد (۱-۲ دقیقه یا کمتر روی پردازندههای قویتر). پس از اتمام آن، باید در یکی از فایلهای پیکربندی مربوطه لیست گرههای کلاستر را تعریف کرده و سپس سرویس OpenMosix را طوری تعریف کنیم تا هر بار بصورت خودکار اجرا شود. به این منظور ابتدا دستور:
# vi /etc/openmosix.map
اجرا کرده و باید مشخصات گرهها را بصورت <شماره گره> <آدرس IP گره> <تعداد> وارد نماییم:
1 192.168.0.1 1
1 192.168.0.7 1
آرگومان شماره هنگامی مفید است که بخواهیم چند آدرس IP پشت سرهم را تعریف نماییم. مثلا در صورتی که ۱۰ گره داشته باشیم که آدرس آنها از ۲۵ شروع میشود، وارد خواهیم کرد:
1 192.168.0.25 10
و عملیات تایپ ما را بسیار کمتر خواهد کرد. این فایل پیکربندی روی تمام گرهها یکسان است. بنابراین میتوانید آنر روی تمام گرهها کپی کنید. پس از انجام این کار به راهاندازی خودکار OpenMosix میپردازیم. ابتدا باید تعیین کنید که سطح اجرایی پیشگزیده هر یک از گرهها کدام است. به این منظور دستور زیر را وارد نمایید:
# runlevel
N 2
خوب سطح اجرایی پیشگزیده ما ۲ است (سیستمهای مبتنی بر دبیان). بنابراین وارد دایرکتوری etc/rc2.d میشویم. در صورتی که سطح اجرایی شما متفاوت شد، این عملیات را با دایرکتوری مربوط به آن که میتواند rc3.d، rc4.d و... باشد انجام دهید:
# cd /etc/rc2.d
# ln -s ../init.d/openmosix S20openmosix
در اینجا نمیخواهم فلسفه دستورات بالا را توضیح دهم زیرا از مسیر اصلی دور خواهیم شد. پس از اتمام عملیات بالا و بوت سیستمها، سیستمهایی داریم که مبتنی بر OpenMosix بوده و سرویس آن نیز بطور خودکار اجرا میشود. برای بکار افتادن کلاستر، گرهها را بوت میکنیم. گره شماره ۱ با موفقیت OpenMosix را اجرا میکند، ولی گره شماره ۲ با پیغام Invalid Map File قادر به اتصال به کلاستر نیست. پس مقداری جستجو و بررسی فایل پیکربندی، متوجه میشوم که در فایل etc/hosts یک ورودی به صورت زیر موجود است:
127.0.0.1 cyber
آنرا تبدیل به ورودی زیر میکنم:
192.168.0.7 cyber
مجددا سرویس OpenMosix را با دستور etc/init.d/openmosix restart اجرا میکنم. اکنون بدون مشکل اجرا میشود. برای حصول اطمینان از شناخته شدن تمام گرههای کلاستر، با دستور زیر آنها را آزمایش میکنم:
# mosctl status 1
up.
# mosctl status 2
up.
بسیار عالی! هر دو گره کلاستر در حال اجرا هستند. اکنون کلاستر ما آماده است. با استفاده از دستور mosmon میتوانید وضعیت کلی کلاستر را بررسی نمایید. اینکه کدام سیستمها دارای چه مقدار بار فعال هستند و با گذاشتن بار روی یکی از آنها چه اتفاقی خواهد افتاد و ...
مفاهیم کلاسترها و OpenMosix
پیشدرآمد
مبحث کلاسترها در لینوکس یکی از جذابترین و جالبترین مباحث برای افراد علاقهمند به پردازشهای موازی است. بدلیل علاقه بسیار زیاد خودم به این مبحث تصمیم به تهیه مقالهای در این مورد گرفتم و بهتر دیدم یکی از بهترین مقالات موجود را ترجمه کرده و تجربههای خودم را نیز به آن اضافه کنم. مقاله حاضر برگرفته از نوشتههای دانیل رابینز (Daniel Robbins) میباشد. این نوشتهها را میتوانید از این نشانی دریافت نمایید. دانیل رابینز طراح و خالق لینوکس Gentoo میباشد. همانطور که اشاره کردم، این یک ترجمه تنها نیست. من خود تمام آنرا عملا انجام داده و بخشهای عملی راهنمای فوق را کاملا تغییر داده و روش آسانتری را برای اجرای کلاستر پیشنهاد کردهام. در بخش نخست این مقاله که اکنون در حال خواندن آن هستید، با مفاهیم کلاسترهای لینوکس تا حدودی آشنا خواهید شد. در بخش بعدی به طور عملی اقدام به برپاسازی یک کلاستر لینوکس خواهیم کرد.
کلاسترها چه هستند؟
به طور عمومی هنگامی که صحبت از کلاسترها میشود، مقصود فناوریهایی است که از طریق آن کامپیوترهای مختلف بتوانند با هم و با اشتراک قدرت پردازش هم، بتوانند امور پردازشی را که به آنها محول شده است، انجام دهند. این امور پردازشی همه چیز میتواند باشد. از پردازشهای سنگین علمی تا تبدیل فایلهای موسیقی و یا رندر کردن جلوههای ویژه فیلمهای سینمایی. برای مثال، تمامی جلوههای ویژه فیلمهای ارباب حلقهها توسط کلاسترهای لینوکس رندر و پردازش شدهاند.
انواع مختلفی از فناوریهای کلاستر سازی برای سیستمعامل لینوکس وجود دارند. یکی از شناخته شده ترین آنها کلاستر Beowulf است. این کلاستر حاوی چندین ماشین است که توسط یک شبکه محلی پرسرعت به هم متصل شدهاند. برای استفاده از این سیستمهای کلاستر، برنامههای کاربردی باید مجددا برای استفاده از آن با استفاده از کتابخانههای کلاستر سازی نوشته شوند. عمومیترین کتابخانههای کلاستر سازی عبارتند از PVM و MPI. هر دوی این کتابخانهها بسیار عالی کار میکنند. با استفاده این کتابخانهها، برنامه نویسان قادر به نوشتن برنامههایی هستند که از منابع روی کلاستر همانند منابع روی یک کامپیوتر، بهره گیری نمایند.برای بسیاری از برنامههای کاربردی، PVM و MPI امکان افزایش خطی قدرت پردازش کلاسترها را با توجه به تعداد ماشینهای روی آن فراهم مینمایند.
PVM و MPI به درد همه نمیخورد!
با اینکه کلاسترهای Beowulf بسیار قدرتمند هستند، ولی به درد همه کس نمیخورند! بزرگترین اشکال آنها نیاز به نرمافزارهای خاص میباشد که با استفاده از PVM و MPI نوشته شده باشند تا بتوانند از مزایای کلاستر استفاده کنند. البته این برای مراکز علمی و تحقیقاتی که برنامههای کاربردی خاص خود را از ابتدا مینویسند، اشکال مهمی نیست. آنها به راحتی قادرند تا از MPI و PVM استفاده کنند.
حقیقتا درصد افراد و موسساتی که برنامههای کاربردی خود را از ابتدا مینویسند بسیار پایین است. برای کسانی که مایل هستند تا یک کلاستر بنا کرده و از مزایای آن در اجرای برنامههای کاربردی عادی استفاده کنند، این یک مسئله بزرگ است! برنامههای کاربردی این دسته از موسسات بدون استفاده از کتابخانههای کلاستر سازی نوشته شدهاند، بنابراین این گونه موسسات قادر نیستند تا از مزایای کلاسترها بهرهگیری نمایند.
آیا جالب نیست که یک فناوری وجود داشته باشد تا بتوانید با استفاده از آن از مزایای کلاسترهای لینوکس استفاده کنید، بدون آنکه نیاز داشته باشید تا برنامههای کاربردی خود را از ابتدا نوشته و یا حتی آنها را مجددا کامپایل نمایید؟ خوشبختانه چنین فناوری وجود دارد و نام آن OpenMosix است!
ورود به OpenMosix
OpenMosix قابلیتهای کلاستر سازی را به هسته لینوکس اضافه میکند، بنابراین هر پروسه استاندارد لینوکس قادر خواهد بود تا از مزایای منابع کلاستر استفاده نماید. با استفاده از تکنیکهای موازنه بار تطبیقی (Adaptive Load Balancing) پردازشهای در حال اجرا بر روی یک گره (node) از کلاستر، قادرند تا بطور نامحسوس به یک گره دیگر از کلاستر مهاجرت کرده و بتوانند سریعتر اجرا شوند. بدلیل اینکه OpenMosix بطور کاملا نامحسوس (Transparent) عمل میکند، پردازشهایی که از یک گره به گره دیگر مهاجرت میکنند، حتی نمیدانند (لازم هم نیست بدانند) که در یک ماشین دیگر در حال اجرا هستند!
نامحسوس بودن OpenMosix به این معنی است که برای استفاده از مزایای موازنه بار تطبیقی آن، نیازی به برنامه نویسی خاصی نیست. در حقیقت، یک نصب پیشگزیده OpenMosix به طور خودکار پردازشها را به بهترین گره منتقل خواهد کرد. این قابلیت OpenMosix را تبدیل به یک راهحل کلاستر سازی میکند که میتواند برای بخش عظیمی از برنامهها مفید باشد.
OpenMosix دقیقا چکار میکند؟
بزرگترین کاری که OpenMosix انجام میدهد، تبدیل دستهای از ماشینهای لینوکس به یک سیستم بزرگ مجازی چند پردازندهای متقارن (SMP=Symmetric MultiProcessor) است. هرچند نحوه عملکرد آن با سیستمهای SMP واقعی مقداری تفاوت دارد. نخست اینکه سیستمهای واقعی SMP که مبتنی بر ۲ یا چند پردازنده هستند، میتوانند اطلاعات را با سرعت بسیار بالا تبادل نمایند، در صورتی که در OpenMosix سرعت ارتباط بین گرههای کلاستر، محدود به سرعت شبکه محلی است که گرهها در آن قرار دارند. استفاده از ارتباطات اترنت گیگابیت و یا سایر انواع پر سرعت اترنت باعث خواهد شد تا تبادل دادهها با سرعت بالاتری صورت گرفته و کارایی کلاستر بالاتر باشد.
البته OpenMosix دارای مزایایی نسبت به سیستمهای چند پردازندهای سنتی داراست. با استفاده از OpenMosix شما قادر به ایجاد کلاسترهایی حاوی دها و حتی صدها کامپیوتر با سختافزار ارزان هستید در حالی که سیستمهای SMP که حاوی تعداد زیادی پردازنده باشند، میتوانند بسیار گرانقیمت باشند. برای بسیاری از برنامههای کاربردی، OpenMosix نسبت به سیستمهای SMP یا Mainframe، حرف بیشتری برای گفتن دارد. البته دلیلی وجود ندارد که شما نتوانید OpenMosix را بر روی سیستمهای قدرتمند چند پردازندهای اجرا نمایید. حتی این امکان وجود دارد تا OpenMosix را به همراه برنامههای کاربردی که با MPI یا PVM توسعه یافتهاند، اجرا نمایید تا سرعت کلاستر خود را بهینه نمایید.
همانند سیستمهای SMP سنتی، OpenMosix قادر نیست تا یک پروسه را روی چند پردازنده فیزیکی اجرا نماید. واضحتر اینکه نباید انتظار داشته باشید تا اجرای برنامهای مانند مرورگر موزیلا روی یک کلاستر سریعتر از یک سیستم تک پردازندهای باشد، مگر اینکه اجرا پروسه آنرا به یک گره سریعتر روی کلاستر منتقل نمایید. بعلاوه در حال حاضر OpenMosix امکان جداسازی رشتههای متعدد به هم پیوسته را از یکدیگر فراهم نمیکند.
OpenMosix قادر است تا پروسههای استاندارد لینوکس را بین گرههای کلاستر بدون مشکل مهاجرت دهد. در صورتی که یک برنامه کاربردی تعداد زیادی زیر پروسه داشته باشد، آنگاه OpenMosix قادر است تا هر یک از آنها را به یک گره مناسب در کلاستر منتقل کند. شما میتوانید از این قابلیت حتی در برنامههای کاربردی که دارای زیر پروسه نیستند نیز استفاده کنید. برای مثال، در صورتی که نیاز دارید تا تعدادی فایل موسیقی را از فرمت wav به mp3 تبدیل نمایید، تبدیل هر فایل یک پروسه خواهد بود. شما میتوانید تمام این پروسهها را یکجا اجرا نمایید. در آنصورت عمل پردازش بین کلاستر پخش خواهد شد (بجای اینکه عملیات تبدیل فایلها را یک به یک انجام دهید). در صورتی که شما ۱۲ فایل موسیقی و ۱۲ گره همسان داشته باشید، عملیات تبدیل ۱۲ بار سریعتر انجام خواهد شد.
Mosix در برابر OpenMosix
پروژه OpenMosix جدیدترین شعبه پروژه Mosix میباشد که یکی از اهداف آن فراهم کردن کلاستر سازی نامحسوس روی لینوکس است. پس چرا ما از OpenMosix استفاده کنیم؟ دلایل خوبی برای این امر وجود دارد. در اواخر سال ۲۰۰۱ رهبری پروژه Mosix تصمیم به انتشار نسخههای جدیدی از Mosix تحت مجوزهای غیر GPL گرفت (کدهایی که قبلا GPL بودند). بنابراین نسخههای جدید Mosix دیگر نرمافزار آزاد نبودند و حقوق کاربران نیز در آنها نامشخص بود و هیچ مانعی برای نویسنده Mosix وجود نداشت تا از کاربران درخواست پرداخت وجه نماید.
این تغییر مجوز باعث ایجاد نگرانیهایی در میان کاربران Mosix شد و برداشته شدن کدهای منبع و حذف لیستهای پستی Mosix بدون توضیح موجه، این نگرانی را تشدید نمود. خوشبختانه این کاربران تنها کسانی نبودند که در باره این تغییرات جدید نگران بودند. موشه بار (Moshe Bar) یکی از مدیران پروژه Mosix با این تغییر مجوز از GPL موافق نبود. بنابراین وی پروژه OpenMosix را شروع کرد تا این اطمبنان حاصل شود که ارائه نسخه آزاد و رایگان Mosix به عموم مردم ادامه پیدا خواهد کرد. سایت رسمی پروژه OpenMosix در آدرس http://openmosix.sf.net یا http://openmosix.org قرار دارد.
پس از آغاز این پروژه، تعداد زیادی از کاربران Mosix به OpenMosix روی آوردند. سیاست توسعه باز موشه باعث شد تا توسعه OpenMosix سرعت بیشتری بگیرد. در حال حاصر ۱۴ نفر بطور فعال روی پروژه OpenMosix کار میکنند در حالی که تعداد افراد پروژه Mosix تنها ۴ نفر است. در حال حاضر تعداد زیادی رفع اشکال، بهینه سازی سرعت و بهینه سازی در کدهای OpenMosix صورت گرفته است و تعدادی قابلیت جدید و بهینه سازی مجدد در سرعت نیز بزودی ارائه خواهند شد. در حقیت جدا شدن پروژه OpenMosix از Mosix باعث ارائه راهحلهای بهتری برای کلاستر سازی تحت سیستمعامل لینوکس فراهم نموده است.