في الشبكات وبالذات في تخصص إدارة السيرفرات، المحافظة على اتصال السيرفر من الانقطاع شيء أساسي ومهم، فعندما ينقطع الاتصال بالسيرفر لا فائدة منه!
بشكل أبسط، لنفترض إني صاحب بنك، وفيه مقدم خدماتي عن طريق الإنترنت لأسهّل على العملاء إنهاء معاملاتهم البنكية من تحويل وإدارة أرصدة دون حضورهم شخصياً للبنك.
لأُقدم خدماتي عن طريق الإنترنت، لا بد أن يكون لدي سيرفر مستضيف الموقع الخاص بي، والموقع فيه كل هذه التعاملات البنكية التي يحتاجها العميل. حسنًا، إذا فقد السيرفر الاتصال بالإنترنت، ما الفائدة منه؟
العملاء الخاصين بالبنك لن يستطيعون الدخول للموقع، وهذا ينعكس على سمعتي، إن بنك جريس سيء في خدماته الإنترنتية، وكل فترة يتعطل موقعهم. بكذا خسرت شريحة كبيرة من عملائي المهتمين بالتعامل عن طريق الويب للتعاملات البنكية.
ولو تكلمنا بشكل تقني أكثر، السيرفر عندما يتعطل له أكثر من السبب: قد يكون سبب أمني، أو يكون بداخل السيرفر وتوابعه، وقد يكون عطل بالشبكة يمنع العملاء الدخول على السيرفر عن طريق الإنترنت، وأسباب كثيرة يُصعب حصرها.
لكن يوجد سبب محتمل، ألا وهو أن الكيبل المشبوك بالسيرفر مفصول أو متعطل، وهذا هو محور تدوينتي. شاهد هذه الصورة:
نرى الخط الأحمر، هذا هو كيبل السيرفر، في حالة انفصاله يتعطل السيرفر ويمنع أي دخول له.
فكرة التدوينة تشرح لك كيف تطمئن إن مهما صار في الشبكة الخاصة بك من تعطل، ستضمن إن السيرفر الخاص بك لا يفقد اتصاله بالإنترنت أو بشبكتك الخاصة.
الطريقة هذه تسمى 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- حاول تشبك الكيابل في سويتشات مختلفة، يعني لا تشبكهم كلهم بسويتش واحد، لأجل أن تتفادى تعطله، ومن ثم تعطل السيرفر. لا تضع بيضك في سلة واحدة
.
المصدر: http://omarnofl.com/site
good article , I added you in the ‘Liked’ category.. thanks for sharing the article!