Ethernet Channel Bonding یا NIC Teaming امکان استفاده از دو یا چند کارت شبکه (NIC) را به صورت یک کارت شبکه واحد فراهم می کند. از مزایای Channel bonding افزایش پهنای باند (بسته به روش انتخابی، پهنای باند کارت های شبکه تجمیع می گردد)، ایجاد Redundancy کارت های شببکه می باشد , که امکان fault tolerance و load balancing , high availability شبکه را در محیط های عملیاتی فراهم میکند. به عنوان مثال اگر یکی از کارت های شبکه قطع شود یا unplugged گردد ترافیک به صورت خودکار به کارت شبکه دیگر هدایت خواهد شد.
کارت های شبکه استفاده شده در bonding با نام Slave معرفی می شوند.
روش های Bonding
channel Bonding دارای 7 روش به شرح زیر می باشد که ما در این آموزش قصد داریم از دو روش پر استفاده و پرکاربرد آن استفاده کنیم.
Mode 0 یا (balance-rr)
در این روش که به صورت Round-Robin فعالیت میکند، پکت ها به صورت متوالی از طریق اولین کارت شبکه (Slave) در دسترس تا آخرین کارت شبکه انتقال خواهند یافت. بدین شکل که اگر دو کارت شبکه با یکدیگر Bond شده باشند، پکت اول و دوم به ترتیب از کارت شبکه اول و دوم خارج خواهد شد و پکت سوم مجددا از کارت شبکه اول منتقل خواهد شد و به همین ترتیب انتقال پکت ها ادامه خواهد یافت در نتیجه load balancing و fault tolerance در این روش محقق خواهد شد.
Mode 1 یا (active-backup)
در این حالت یکی از کارت های شبکه در مود active و دیگری در مود Backup قرار می گیرد. کارت شبکه backup تنها زمانی به حالت فعال (active) تغییر وضعیت خواهد داد که لینک active از دسترس خارج گردد. لازم به ذکر است در لحظه فقط یک کارت شبکه در حالت active قرار خواهد داشت. در این روش Fault tolerance محقق خواهد شد.
Mode 2 یا (balance-xor)
در این حالت انتقال پکت ها بر اساس فرمولی از XOR انجام می پذیرد. ( مک ادرس Source یا مبدا با با مک آدرس Destination با همان مقصد XOR خواهد شد.)
در این روش یک کارت شبکه برای هر مقصد با مک آدرس آن انتخاب می گردد که load balancing و fault tolerance را محقق می کند.
Mode 3 یا (broadcast)
در این حالت پکت ها از تمام کارت های شبکه منتقل خواهند شد. این روش به علت کاربرد های خاص آن کمتر استفاده می گردد و تنها fault tolerance را فراهم می کند.
Mode 4 یا (802.3ad)
این روش با نام Dynamic Link Aggregation نیز شناخته می شود. این روش یک گروه تجمیع شده از کارت های شبکه ایجاد می کند که سرعت و Duplex برابر را با یکدیگر به اشتراک کی گذارند. این روش نیاز به سوویچی دارد که 802.3ad را ساپورت کند. خصوصیات این استاندارد را میتوانید از این لینک مطالعه کنید.
Mode 5 یا (balance-tlb)
این روش با نام Adaptive transmit load balancing نیز شناخته می شود و روش انتقال داده ها و پخش آنها با توجه به load و queue موجود بر هر Slave انجام می گیرد. ترافیک ورودی نیز توسط همان Slave دریافت می گردد.
Mode 6یا (balance-alb)
این روش خود شامل روش balance-tlb به همراه receive load balancing (rlb) برای ترافیک IPv4 می باشد. receive load balancing از طریق ARP negotiation انجام می شود. درایور Bonding در پکت های ARP Reply خروجی، مک آدرس Source را با مک ادرس یکی از Slave ها جایگزین می کند در نتیجه هر یک از کلاینت ها با یکی از Slave ها در ارتباط می باشند.
پارمتر های قابل استفاده:
پارامتر های قابل استفاده توسط درایور bonding به شرح زیر می باشد. در صورتی که مقداری برای پارامتری مشخص نشده باشد از مقدار پیش فرض ان استفاده می گردد.
برای پارامتر های متنی امکان استفاده از نام آن پارامتر یا مقدار عددی آن وجود دارد. به عنوان مثال “mode=802.3ad” و “mode=4” هر دو یک کار انجام می دهند.
-
arp_intervalاین پارامتر بیانگر فواصلی( به میلی ثانیه) است که وضعیت لینک ها بررسی می شود. اگر در ether channel از ARP monitoring استفاده شود (مود های ۰ و ۲) سوپیچ باید به نحوی پیکربندی گردد که پکت ها بین لینک ها به صورت مساوی توزیع شود. مقدار پیش فرض این پارامتر 0 است که به معنای غیر فعال بود آن می باشد.
-
arp_ip_targetدر صورتی که arp_interval بیشتر از ۰ انتخاب شده باشد, جهت مشخص کردن IP آدرس peer در ARP Monitoring به کار می رود.
-
downdelayبیانگر مدت زمانی است که پس از تشخیص failure سیستم صبر می کند تا لینک را disable کند. این پارامتر تنها در زمان استفاده از پارامتر miimon قابل استفاده است. مقدار این پارامتر همواره می بایست ضریبی از عدد انتخاب شده برای miimon باشد. در غیر این صورت سیستم به صورت خودکار نزدیک ترین ضریب را انتخاب خواهد کرد. مقدار ویش فرض این پارامتر نیز صفر است.
-
lacp_rateاین پارامتر در مود 802.3ad استفاده می شود و بیانگر ریت درخواست ارسال LACPDU از طرف سایر لینک ها است.مقدایر قابل تنظیم برای این پارامتر به شرح زیر است.
-
slow or 0درخواست ارسال LACPDU هر ۳۰ ثانیه یک بار ارسال می گردد. (مقدار پیش فرض)
-
fast or 1درخواست ارسال LACPDU هر ۱ ثانیه یک بار ارسال می گردد.
-
max_bondsبیانگر تعداد bond های است به عنوان instance از bond فعلی ایجاد خواهد شد. به عنوان مثال در صورتی که این مقدار برابر با ۳ ثبت شود, سه bond با نام های bond0, bond1 و bond2 ایجاد خواهد شد. مدار پیش فرض این پارامتر ۱ می باشد.
-
- miimon
بیانگر فواصلی است که وضعیت هر slave جهت تشخص قطعی یا مشکل احتمالی بررسی می گردد. مقدار صفر پایش وضعیت را غیر فعال می کند. عدد ۱۰۰ میزان خوبی برای شروع می باشد و بنا به شرایط عملیاتی سرور می تواند کمتر یا بیشتر گردد.
-
modeبیانگر روش انجام bonding می باشد. که روش های آن در ادامه توضیح داده خواهد شد.
-
primary
مشخص کننده این است که کدام Slave به عنوان primary فعالیت کند. اینترفیس انتخاب شده تا زمانی که قطعی ایجاد نشود به عنوان اینترفیس فعال فعالیت خواهد کرد. این پارامتر زمانی کاربرد دارد که استفاده از یک اینترفیس نسبت به دیگر اینترفیس ها ترجیح داشته باشد. این پارمتر تنها در مود active-backup قابل استفاده می باشد.
-
updelayبیانگر مدت زمانی است که پس از تشخیص بازگشت لینک قطع شده به حالت عادی, سیستم صبر میکند تا آن را به حالت enable بازگرداند.
-
این مقدار تنها در زمانی که از miimon استفاده می شود کاربرد دارد و دارای مقدار پیش فرض صفر می باشد. مقدار این پارامتر نیز می بایست ضریبی از miimon باشد در غیر این صورت مقدار آن نزدیک ترین ضریب ممکن انتخاب خواهد شد.
-
xmit_hash_policyبیانگر روش انتخاب slave در دو روش balance-xor و 802.3ad می باشد.
-
layer2
از XOR مک آدرس مبدا و مقصد استفاده می شود.
-
-
-
layer3+4از فرمول زیر جهت انتخاب slave استفاده می کند.
-
ایجاد Ethernet Channel Bonding
در اینجا ما دو کارت شبکه با نام های eth1 و eth2 داریم که قرار است یکدیگر Bond گردند. bond ایجاد شده در این آموزش bond0 خواهد بود. برای ایجاد bonding نیاز به دسترسی Superuser یا روت می باشد.
روش Load Balancing (Round-Robin)
پیکر بندی eth1
فایل پیکربندی eth1 را از میسر زیر با ویرایشگر مورد علاقه خود باز کنید و پارامتر ها را به صورت زیر در آن وارد نمایئد.
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
در تنظیمات زیر bond بیانگر این می باشد که bond مستر، bond0 می باشد و Slave بیانگر این می باشد که این کارت شبکه قرار است به عنوان slave در bond معرفی شده فعالیت کند.
DEVICE="eth1" TYPE=Ethernet ONBOOT="yes" BOOTPROTO="none" USERCTL=no MASTER=bond0 SLAVE=yes
پیکربندی eth2
در فایل پیکربندی eth2 نیز پارامتر های master و slave را وارد نمائید.
# vi /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE="eth2" TYPE="Ethernet" ONBOOT="yes" USERCTL=no #NM_CONTROLLED=yes BOOTPROTO=none MASTER=bond0 SLAVE=yes
ایجاد فایل پیکربندی bond0
در مسیر /etc/sysconfig/network-scripts/ فایل پیکربندی مربوط به bond0 را با نام ifcfg-bond0 ایجاد نمائید و پارمتر های آن را به صورت زیر تکمیل فرمائید.
# vi /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0 ONBOOT=yes IPADDR=192.168.246.130 NETMASK=255.255.255.0 BONDING_OPTS="mode=0 miimon=100"
در تنظیمات بالا mode=0 روش انتخاب شده (راند رابین) و miimon=100 بیانگر Polling interval به میلی ثانیه می باشد.
حال با دستور ifconfig می توانید وضعیت bonding ایجاد شده را مشاهده نمایئد.
# ifconfig
خروجی می بایست به صورت زیر باشد.
در زیر میبینید که اینترفیس bond0 همانطور که مد نظر بود, ایجاد شده است
bond0 Link encap:Ethernet HWaddr 00:0C:29:57:61:8E inet addr:192.168.246.130 Bcast:192.168.246.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe57:618e/64 Scope:Link UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1 RX packets:17374 errors:0 dropped:0 overruns:0 frame:0 TX packets:16060 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1231555 (1.1 MiB) TX bytes:1622391 (1.5 MiB) eth1 Link encap:Ethernet HWaddr 00:0C:29:57:61:8E UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:16989 errors:0 dropped:0 overruns:0 frame:0 TX packets:8072 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1196931 (1.1 MiB) TX bytes:819042 (799.8 KiB) Interrupt:19 Base address:0x2000 eth2 Link encap:Ethernet HWaddr 00:0C:29:57:61:8E UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:385 errors:0 dropped:0 overruns:0 frame:0 TX packets:7989 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:34624 (33.8 KiB) TX bytes:803583 (784.7 KiB) Interrupt:19 Base address:0x2080 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:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:480 (480.0 b) TX bytes:480 (480.0 b)
حال سرویس network را با دستور زیر restart نمائید.
# service network restart Shutting down interface bond0: [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface bond0: [ OK ]
حال با دستور زیر می توانید وضعیت bond ایجاد شده را مشاهده نمائید.
# watch -n .1 cat /proc/net/bonding/bond0
نمونه خروجی
خروجی دستور بالا به صورت زیر می باشد که همانطور که مشاهده می نمائید نشان میدهد که مود انتخاب شده برای bonding، Load Balancing می باشد و Slave های این bound نیز eth1 , eth2 هستند.
Every 0.1s: cat /proc/net/bonding/bond0 Thu Sep 12 14:08:47 2013 Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009) Bonding Mode: load balancing (round-robin) MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth1 MII Status: up Speed: Unknown Duplex: Unknown Link Failure Count: 2 Permanent HW addr: 00:0c:29:57:61:8e Slave queue ID: 0 Slave Interface: eth2 MII Status: up Speed: Unknown Duplex: Unknown Link Failure Count: 2 Permanent HW addr: 00:0c:29:57:61:98 Slave queue ID: 0
ایجاد bond در مود active-backup
در این قسمت پیکربندی کارت شبکه های slave همانند قبل خواهند ماند و تغییر نخواهند داشت. تنها تفاوت پیکرنبدی برای این مود قرار دادن bonding option 1 به جای 0 می باشد.
# vi /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0 ONBOOT=yes IPADDR=192.168.246.130 NETMASK=255.255.255.0 BONDING_OPTS="mode=1 miimon=100"
پس از تغییر مود، سرویس network را restart نمائید تا تغییرات اعمال گردد.
# service network restart
Shutting down interface bond0: [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface bond0: [ OK ]
مجددا با دستور زیر می توانید وضعیت bound را بررسی نمائید.
# watch -n .1 cat /proc/net/bonding/bond0
نمونه خروجی
همانطور که در خروجی نمونه مشاهده میکنید، bonding mode از load balance به fault tolerance یا همان active-backup تغییر یافته است.
Every 0.1s: cat /proc/n... Thu Sep 12 14:40:37 2013 Ethernet Channel Bonding Driver: v3.6.0 (September 2 6, 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: Unknown Duplex: Unknown Link Failure Count: 0 Permanent HW addr: 00:0c:29:57:61:8e Slave queue ID: 0 Slave Interface: eth2 MII Status: up Speed: Unknown Duplex: Unknown Link Failure Count: 0 Permanent HW addr: 00:0c:29:57:61:98 Slave queue ID: 0
برای تست عملکرد نیز میتوانید به صورت دستی یکی از اینترفیس ها را قطع و وصل نمائید و عملکرد bound را مشاهده نمائید.
# ifconfig eth1 down # ifconfig eth1 up
امیدوارم مفید واقع شده باشد.
دیدگاهتان را بنویسید