Bonding
Bonding

آموزش ایجاد channel bonding یا NIC Teaming در لینوکس

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

 

امیدوارم مفید واقع شده باشد.

 

حامد
اشتراک دانش رو دوست دارم برای همین سعی میکنم مطالب آموزشی ای تهیه شده دارای جزئیات خوب و به صورت کامل تهیه بشوند.استفاده از مطالب این سایت در هر جایی بلا مانع می باشد. اما ذکر منبع رفتاری حرفه ای و اخلاقی خواهد بود. من را از نظرات خود مطلع سازید. و اگر میخواهید در مورد من بیشتر بدانید سری به صفحه "در باره من" بزنید.