recent
أخبار ساخنة

شرح إعداد failover وhigh availability في Linux ... بالخطوات

الصفحة الرئيسية
high availability

نشرح هنا طريقة ربط الشبكة (network bonding) على خادم Linux.

Network Bonding

في نظام التشغيل Windows يسمى ربط الشبكة بفريق الشبكة (network teaming) وهي ميزة تساعد  على توفير high availability و failover في حالة عطل أو إعداد  بشكل خاطئ.


سنستخدم Oracle Linux 6.4  إصدار 32 بت.
الخطوات تنطبق أيضًا على CentOS و Red Hat OS distro وأنظمة 64 بت أيضًا.

ليس هناك حاجة إلى تثبيت أي شيء.

يتضمن تثبيت Linux الافتراضي للخادم جميع الحزم المطلوبة إعدادات الـ network bonding.


تأكد من أن وجود 2 ethernet interfaces على الأقل.

للتحقق من ذلك انتقل إلى مجلد إعداد الشبكة وقم بعرض الـ ethernet interfaces المتاحة.


cd /etc/sysconfig/network-scripts/
ls *ifcfg*eth*

ستحصل على النتيجة

ifcfg-eth0 ifcfg-eth1 



لاحظ هنا لدينا 2 ethernet interfaces  وهما ETH0 و ETH1.

قم بإعداد  bonding interface  تسمى BOND0.
ستكون هذه الواجهة عبارة عن واجهة إيثرنت افتراضية تحتوي على واجهة إيثرنت المادية ETH0 و ETH1.

vi ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
MASTER=yes
IPADDR=172.20.43.110
NETMASK=255.255.255.0
GATEWAY=172.20.43.1
BONDING_OPTS="mode=1 miimon=100"
TYPE=Ethernet 

ثم اعرض النتيجة بالأمر

ls *ifcfg*bon*

ستحصل على النتيجة:

ifcfg-bond0 

لاحظ أنه داخل واجهة BOND0 قمنا بتضمين عنوان IP.
سيكون عنوان IP هذا هو عنوان IP الوحيد المتصل بالخادم.
سنقوم إلى تعديل واجهةphysical ethernet المتعلقة بـ BOND0.


vi ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond0
SLAVE=yes 
vi ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond0
SLAVE=yes 


لقد أجرينا تعديل الواجهة ETH0 و ETH1.
لاحظ أننا قمنا بإزالة عنوان IP من كلتا الواجهتين وألحقناه بالـ MASTER = bond0.
هذا ضروري للتحقق من أن كلا الواجهتين ستكونان واجهات افتراضية مخصصة لواجهة Ethernet BOND0.

قم بإنشاء ملف إعداد الترابط باسم bonding.conf داخل /etc/modprobe.d. 

vi /etc/modprobe.d/bonding.conf
alias bond0 bonding
options bond0 mode=1 miimon=100 
modprobe bonding 

قمنا بتكوين وحدة ربط باستخدام واجهة BOND0.
قمنا أيضًا بتعيين تكوين الربط لاستخدام الوضع = 1 وهو ctive-backup policy.
يمثل الخيار miimon = 100 hg الـ monitoring frequency للخادم الخاص بنا لمراقبة حالة الـ interface بالمللي ثانية.
سيوفر هذا الوضع fault tolerance في إعدادات شبكة الخادم.

قم بإعادة تشغيل خدمة الشبكة من أجل تحميل اللإعدادات الجديدة.

service network restart
Shutting down interface eth0: [ OK ]
Shutting down interface eth1: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface bond0: [ OK ] 

ستلاحظ أن الواجهة الجديدة المسماة BOND0 ستظهر في قائمة الشبكات.
ستلاحظ أيضًا أنه لا يوجد عنوان IP معين لواجهة ETH0 و ETH1  فقط واجهة BOND0 تعرض عنوان IP.

ifconfig
bond0 Link encap:Ethernet HWaddr 08:00:27:61:E4:88
inet addr:172.20.43.110 Bcast:172.20.43.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe61:e488/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:1723 errors:0 dropped:0 overruns:0 frame:0
TX packets:1110 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:147913 (144.4 KiB) TX bytes:108429 (105.8 KiB) 
eth0 Link encap:Ethernet HWaddr 08:00:27:61:E4:88
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:1092 errors:0 dropped:0 overruns:0 frame:0
TX packets:1083 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:103486 (101.0 KiB) TX bytes:105439 (102.9 KiB) 
eth1 Link encap:Ethernet HWaddr 08:00:27:61:E4:88
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:632 errors:0 dropped:0 overruns:0 frame:0
TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:44487 (43.4 KiB) TX bytes:3288 (3.2 KiB) 
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:208 errors:0 dropped:0 overruns:0 frame:0
TX packets:208 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:18080 (17.6 KiB) TX bytes:18080 (17.6 KiB) 

يمكنك أيضًا التحقق من حالة الـ bonding عبر هذا الأمر:



cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009) 
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
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 08:00:27:61:e4:88
Slave queue ID: 0 
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 08:00:27:c8:46:40
Slave queue ID: 0 

لاحظ في ما سبق أننا نجحنا في تحويل الواجهات ETH0 و ETH1 إلى bonding باستخدام active-backup.
 تم الإشارة أيضًا إلى أن الخادم يستخدم الآن الواجهة ETH0 وسيكون ETH1 كواجهة احتياطية.

التحقق من الإعدادات

سنجري اختبارًا بسيطًا للتأكد من صحة الإعدادات.
سنقوم بتسجيل الدخول إلى خادم جديد (أو سطح مكتب Linux) والبدء في اختبار اتصال خادم الربط الخاص بنا (pinging) لمعرفة ما إذا كان هناك اتصال متقطع يحدث أثناء الاختبار.


login as: root
root@172.20.43.120's password:
Last login: Wed Sep 14 12:50:15 2016 from 172.20.43.80
ping 172.20.43.110
PING 172.20.43.110 (172.20.43.110) 56(84) bytes of data.
64 bytes from 172.20.43.110: icmp_seq=1 ttl=64 time=0.408 ms
64 bytes from 172.20.43.110: icmp_seq=2 ttl=64 time=0.424 ms
64 bytes from 172.20.43.110: icmp_seq=3 ttl=64 time=0.415 ms
64 bytes from 172.20.43.110: icmp_seq=4 ttl=64 time=0.427 ms
64 bytes from 172.20.43.110: icmp_seq=5 ttl=64 time=0.554 ms
64 bytes from 172.20.43.110: icmp_seq=6 ttl=64 time=0.443 ms
64 bytes from 172.20.43.110: icmp_seq=7 ttl=64 time=0.663 ms
64 bytes from 172.20.43.110: icmp_seq=8 ttl=64 time=0.961 ms
64 bytes from 172.20.43.110: icmp_seq=9 ttl=64 time=0.461 ms
64 bytes from 172.20.43.110: icmp_seq=10 ttl=64 time=0.544 ms
64 bytes from 172.20.43.110: icmp_seq=11 ttl=64 time=0.412 ms
64 bytes from 172.20.43.110: icmp_seq=12 ttl=64 time=0.464 ms
64 bytes from 172.20.43.110: icmp_seq=13 ttl=64 time=0.432 ms 

دعنا نعود إلى خادم الـ  bonding الخاص بنا ونوقف تشغيل واجهة إيثرنت ETH0. 

ifconfig eth0
eth0 Link encap:Ethernet HWaddr 08:00:27:61:E4:88
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:1092 errors:0 dropped:0 overruns:0 frame:0
TX packets:1083 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:103486 (201.0 KiB) TX bytes:105439 (122.9 KiB) 
ifdown eth0 

لقد قمنا الآن بإيقاف تشغيل خدمات واجهة الشبكة ETH0.
دعنا نتحقق من حالة الـ bonding.

cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009) 
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0 
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 08:00:27:c8:46:40
Slave queue ID: 0 

ستلاحظ أن واجهة ETH0 لم تعد موجودة في حالة الـ bonding.
ارجع إلى خادم الاختبار السابق ونتحقق من الأمر ping المستمر لخادم الربط الخاص بنا.

64 bytes from 172.20.43.110: icmp_seq=22 ttl=64 time=0.408 ms
64 bytes from 172.20.43.110: icmp_seq=23 ttl=64 time=0.402 ms
64 bytes from 172.20.43.110: icmp_seq=24 ttl=64 time=0.437 ms
64 bytes from 172.20.43.110: icmp_seq=25 ttl=64 time=0.504 ms
64 bytes from 172.20.43.110: icmp_seq=26 ttl=64 time=0.401 ms
64 bytes from 172.20.43.110: icmp_seq=27 ttl=64 time=0.454 ms
64 bytes from 172.20.43.110: icmp_seq=28 ttl=64 time=0.432 ms
64 bytes from 172.20.43.110: icmp_seq=29 ttl=64 time=0.434 ms
64 bytes from 172.20.43.110: icmp_seq=30 ttl=64 time=0.411 ms
64 bytes from 172.20.43.110: icmp_seq=31 ttl=64 time=0.554 ms
64 bytes from 172.20.43.110: icmp_seq=32 ttl=64 time=0.452 ms
64 bytes from 172.20.43.110: icmp_seq=33 ttl=64 time=0.408 ms
64 bytes from 172.20.43.110: icmp_seq=34 ttl=64 time=0.491 ms 

على الرغم من ايقاف ETH0 ما زلنا قادرين على الوصول إلى خادم الربط الخاص بنا.
لنقم الآن باختبار واحد آخر.
أعد تشغيل واجهة ETH0 وأوقف تشغيل واجهة ETH1.

ifup eth0
cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009) 
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0 
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 08:00:27:c8:46:40
Slave queue ID: 0 
Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 08:00:27:61:e4:88
Slave queue ID: 0 

نظرًا لأن واجهة ETH0 كانت قيد التشغيل بالفعل ، فلنغلق واجهة ETH1.

ifdown eth1
cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009) 
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
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 08:00:27:61:e4:88
Slave queue ID: 0 

ارجع إلى خادم الاختبار وتحقق مما يحدث في اختبار ping المستمر الذي تم إجراؤه على خادم الربط

64 bytes from 172.20.43.110: icmp_seq=84 ttl=64 time=0.437 ms
64 bytes from 172.20.43.110: icmp_seq=85 ttl=64 time=0.504 ms
64 bytes from 172.20.43.110: icmp_seq=86 ttl=64 time=0.401 ms
64 bytes from 172.20.43.110: icmp_seq=87 ttl=64 time=0.454 ms
64 bytes from 172.20.43.110: icmp_seq=88 ttl=64 time=0.432 ms
64 bytes from 172.20.43.110: icmp_seq=89 ttl=64 time=0.434 ms
64 bytes from 172.20.43.110: icmp_seq=90 ttl=64 time=0.411 ms
64 bytes from 172.20.43.110: icmp_seq=91 ttl=64 time=0.420 ms
64 bytes from 172.20.43.110: icmp_seq=92 ttl=64 time=0.487 ms
64 bytes from 172.20.43.110: icmp_seq=93 ttl=64 time=0.551 ms
64 bytes from 172.20.43.110: icmp_seq=94 ttl=64 time=0.523 ms
64 bytes from 172.20.43.110: icmp_seq=95 ttl=64 time=0.479 ms 


لقد نجحنا في إعداد الخادم
google-playkhamsatmostaqltradent