الأحد، فبراير 14، 2010

ربط كبلي شبكة بـ IP واحد في سيرفرات لينكس لتفادي الإنقطاع

في الشبكات وبالذات في تخصص إدارة السيرفرات، المحفاظة على إتصال السيرفر من الإنقطاع هذا شيء أساسي ومهم قبل أي شىء لأن لو إنقطع الإتصال بالسيرفر لن تكون هناك فائده من السيرفر
بشكل أبسط، نفترض إني صاحب بنك، وفي بنكي انا مقدم خدماتي عن طريق الإنترنت ﻷجل أسهل على العملاء إنهم ينهوا معاملاتهم البنكية من تحويل وإدراة أرصدة بدون حضورهم شخصياً للبنك.كى أقدم خدماتي عن طريق الإنترنت، لا بد أن يكون عندى سيرفر مستضيف موقعي، وموقعي فيه كل التعاملات البنكية التي يحتاجها العميل. ماذا إذا السيرفر فقد الإتصال بالإنترنت؟
العملاء الخاصين ببنكي لن يدخلون الموقعولو تكلمنا بشكل تقني أكثر، السيرفر كى يتعطل، له أكثر من سبب، يمكن فيه سبب أمني، يمكن فيه خلل بداخل السيرفر وتوابعه، يمكن فيه عطل بالشبكة ويمنع العملاء من إنهم يدخلون على السيرفر عن طريق الإنترنت، وأسباب كثيرة صعبة أحصرها.
لكن، فيه سبب محتمل الا وهو إن الكيبل المشبوك بالسيرفر مفصول أو متعطل 
نرى الخط الأحمر، هذا هو كيبل السيرفر، في حالة إنفصاله من السيرفر سوف يتعطل وبيمنع أي دخول له.
كيف تطمئن إنه مهما حدث في الشبكة الخاصة بك من تعطل، بتضمن إن السيرفر الخاص بك لن يفقدالإتصال بالإنترنت أو بشبكتك الخاصة.
الطريقة هذه تسمى Network Bonding/Teaming، وفكرتها إنك تربط كرتي شبكة مع بعض، ثم تنشئ كرت إضافي ثالث – وهمي Virtual – وهو الذي يتحكم بالترافيك الذي يدخل ويطلع من كرتي الشبكة، والكرت الوهمي هذا هو الذي سوف يحتوي على الأي بي IP الخاص بالسيرفر.
المتطلبات:
المطلوب، فقط كرتي شبكة على سيرفر اللينكس، وشرحي بيكون على لينكس ريدهات\سنتوس\فيدورا، وباقي التوزيعات نفس الفكرة، اللهم تغير في أماكن الملفات.
التنفيذ:
ننشىء كرت شبكة وهمي\تخيلي Virtual،و نسميه bond0:
vi /ets/sysconfig/network-scripts/ifcfg-bond0
وتضيف فيه إعدادت الشبكة الخاصة بك، الأي بي IP والنت ماسك NetMask والبوابة Gateway:
DEVICE=bond0
ONBOOT=yes
USERCTL=no
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.1.2
NETMASK=255.255.255.0
NETWORK=192.168.1.0
GATEWAY=192.168.1.1
الكرت الوهمي\التخيلي جاهز،و يتبقى:
1- تعديل كروت الشبكة الحالية، وجعلها تشتغل تحت إدارة الكرت الوهمي Bond0:
لنفترض إن اسم الكرت الأول بسيرفرك eth0، عدل على الملف:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
وأحذف إعدادته الشبكة الخاصة فيه كلها، ثم أضف مثل الأسفل:
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
HWADDR=xx:xx:xx:xx:xx:xx
MASTER=bond0
SLAVE=yes
ونفس الشيء على الكرت الثاني، لنفترض اسمه eth1:
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
HWADDR=xx:xx:xx:xx:xx:xx
MASTER=bond0
SLAVE=yes
أنظر لالخط العريض بالأعلى، هو السر بجعل كرت الشبكة الوهمي bond0 هو المتحكم – الماستر Master – والكروت الثانية تحت تصرفه – سليف Slave -.
تحديد كيف يتم التفاهم بين الكرتين؟
من الذي يشتغل أولا؟ الكرت eth0 او eth1؟أو كلهم يشتغلون بنفس الوقت؟
هنا نحتاج نوضح حاجة مهمة، لو شغلت الشبكة بالوضع السابق، سيكون هناك تعارض بين الكرتين، واحد يرسل باكت Packet والثاني يستقبلها، والسويتش المشبوك عليه السيرفر بيتلخبط عنده الترافيك، لأن الترافيك يوصل له من كرت، ويرجع لنفس السيرفر من كرت ثاني-لعدم وجود الماك أدرس MAC Address في إعددات كل كرت الحل؟
لا بد إنك تحدد كيف يعمل الكرتين، وفيه كذا وضع لتشغيلهم، نشغل الكرتين في وضع يسمى “fault tolerance” وبالعربي يسمى -تجاوز الخطأ-، وفكرته إن واحد من الكروت يكون فعال -يعني Active-، والثاني يكون في حالة سبات -Backup-. الكرت الثاني الموجود في حالة سبات لن يشتغل لوقت ما الكرت الأول يتعطل أو ينفصل عنه الكيبل. وهذه أفضلهالأنها تضمن لك عدم تعارض بين الترافيك المار بسيرفرك.
كيف تفعلها؟
تعدل على المودويولز Modules الخاصة بالسيرفر، عن طريق التعديل على الملف /etc/modprobe.conf:
echo -e "alias bond0 bonding\noptions bond0 miimon=100 mode=1" >> /etc/modprobe.conf
ولو شرحنا الخيارات الموجوده فوق، نلاحظ إننا وضحنا للسيرفر إن الكرت bond0 لا بد نفعل فيه خاصية دمج الكروت bonding، ثم طلبنا من السيرفر إنه يراقب حالة الكروت كل 100 جزء من الثانية، عن طريق الخيار miimon الخاص بمراقبة حالة الكرت ووضعه التشغيلي، وبالأخير قلنا له فعل لنا خاصية “تجاوز الخطأ Fault tolerance”، عن طريق الخيار mode=1.
أعد تشغيل الشبكة عندك:
/etc/init.d/network restart
ونفذ الأمر ifconfig لعرض كروت الشبكة عندك، وستجد كرت bond0 تم تفعيله، وإضافة كلمة Slave في معلومات الكروت الثانية.
وإذا كنت تحتاج تعرف حالة الـ Network Teaming في سيرفرك، ومن الذى يشتغل كـ Active ومين Backup، نفذ الأمر التالي:
cat /proc/net/bonding/bond0
وبيعرض لك نتيجة مقاربة لكذا:
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: xx:xx:xx:xx:xx:xx
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: xx:xx:xx:xx:xx:xx
نقاط:
1- من الممكن أن تستغنى عن فكرة Fault Tolerance للكروت، وتستخدم مثلاً Load Balance لأجل توازن الترافيك بين الكرتين في حالة وجود ضغط كبير على سيرفر
2- حاول تشبك الكيابل في سويتشات مختلفة، يعني لاتشبكهم كلهم بسويتش واحد، لأجل تتفادى تعطله، ومن ثم تعطل السيرفر.

3- تستطيع تشبك أكثر من أثنينن.
4- هذا سيزيد ثبات السيرفر الخاص ب -Stability-، ومن ثم ستوفروقت على الشبكة بدون إنقطاع -Availability-، ومن ثم تزيد من قوة سمعتك.
5- أحتمال كبير تواجهك مشكلة إن الكيبل الأضافي بعدما ينقطع الأول لايعمل السيرفر الخاص بك ينقطع إتصاله، حاول ترجع لإعدادات السويتش الخاص بك مثل إعددات برتوكول HSRP و Trunk.