1. Giới thiệu.
Network bonding (còn được gọi là NIC bonding hoặc Ethernet bonding) là một kỹ thuật trong hệ thống mạng cho phép bạn kết hợp nhiều card mạng thành một link logical duy nhất trên máy chủ. Mục tiêu chính của network bonding là tăng cường khả năng sẵn sàng và tăng hiệu suất của kết nối mạng bằng cách cho phép các card mạng hoạt động song song và cân bằng tải lưu lượng mạng giữa chúng. Nó cũng có khả năng dự phòng, tức là nếu một card mạng gặp sự cố, thì các card mạng khác vẫn có thể duy trì kết nối mạng.
Dưới đây là các chế độ hoạt động của network bonding trên CentOS 7:
- Balance Round Robin (mode=0): Trong chế độ này, dữ liệu được gửi đi qua các card mạng theo chu kỳ tuần tự. Nó không cân bằng tải dựa trên tải lưu lượng mạng, mà chỉ sử dụng tất cả các card mạng có sẵn theo thứ tự.
- Active Backup (mode=1): Chế độ này chỉ sử dụng một card mạng làm hoạt động chính và card mạng còn lại làm dự phòng. Nếu card mạng chính gặp sự cố, thì card mạng dự phòng sẽ tiếp quản.
- Balance XOR (mode=2): Dữ liệu được gửi đi dựa trên một hàm băm của địa chỉ nguồn và địa chỉ đích, nghĩa là lưu lượng mạng được cân bằng tải dựa trên các thông tin trong gói tin.
- Broadcast (mode=3): Chế độ này sử dụng tất cả các card mạng để gửi dữ liệu đến tất cả các card mạng khác. Nó thường không được sử dụng nhiều vì gây tăng tải mạng không cần thiết.
- 802.3ad (mode=4): Chế độ này yêu cầu cả hai phía (máy chủ và switch) hỗ trợ giao thức IEEE 802.3ad (LACP – Link Aggregation Control Protocol). Nó cân bằng tải dựa trên cơ sở nhiều thông tin như tình trạng của các card mạng.
- Balance TLB (mode=5): Cân bằng tải theo lưu lượng đến và ra. Dữ liệu ra được gửi đến một card mạng, trong khi dữ liệu vào được chia đều qua các card mạng.
- Balance ALB (mode=6): Chế độ này cân bằng tải theo địa chỉ MAC. Nó tạo ra một bản sao của địa chỉ MAC của card mạng chính và gửi dữ liệu ra thông qua các card mạng khác với các địa chỉ MAC này.
Mỗi chế độ có ứng dụng và tính năng riêng, bạn cần chọn chế độ phù hợp với nhu cầu của mạng và cơ sở hạ tầng của bạn. Để cấu hình bonding trên CentOS 7, bạn cần sử dụng công cụ cấu hình nmcli
hoặc chỉnh sửa file cấu hình của bonding trực tiếp.
2. Cấu hình.
Hãy list tất cả các interfaces hiện có của bạn, chọn 2 port có tốc độ giống nhau để bonding, mình sử dụng 2 port enp98s0f0 và enp98s0f1.
$ tcpdump --list-interfaces
1.eno1
2.eno2
3.enp59s0
4.enp59s0d1
5.enp98s0f0
6.enp98s0f1
7.lo [Loopback]
Mình sẽ down 2 port này trước.
ifdown enp98s0f0
ifdown enp98s0f1
Thư mục lưu file cấu hình network trong Centos /etc/sysconfig/network-scripts. Hãy tạo file cấu hình interface theo định dạng ifcfg-<interface_name>, đầu tiên mình tạo file ifcfg-enp98s0f0.
vi /etc/sysconfig/network-scripts/ifcfg-enp98s0f0
Điền vào nội dung dưới
TYPE=Ethernet
NAME="bond1 link 1"
DEVICE=enp98s0f0
ONBOOT=yes
MASTER=bond1
SLAVE=yes
Tiếp theo mình tạo file ifcfg-enp98s0f1.
vi /etc/sysconfig/network-scripts/ifcfg-enp98s0f1
Điền vào nội dung dưới
TYPE=Ethernet
NAME="bond1 link 1"
DEVICE=enp98s0f1
ONBOOT=yes
MASTER=bond1
SLAVE=yes
Tiếp theo mình tạo file ifcfg-bond1 cho interface bond1
vi /etc/sysconfig/network-scripts/ifcfg-bond1
Điền vào nội dung dưới
BONDING_OPTS="downdelay=300 miimon=300 mode=802.3ad updelay=300 xmit_hash_policy=layer3+4 lacp_rate=30"
TYPE=Bond
BONDING_MASTER=yes
NAME="Bond connection 2"
DEVICE=bond1
ONBOOT=yes
BRIDGE="br1"
Do mình chạy vlan trunking nên mình sẽ tạo 1 interface bond cho vlan 204.
vi /etc/sysconfig/network-scripts/ifcfg-bond1.204
Điền vào nội dung dưới với VLAN_ID chính là vlan bạn đã tạo trên thiết bị network và interface bond1.204 này mình sẽ bridge sang card interface br1 để đặt ip cho nó.
VLAN=yes
TYPE=Vlan
PHYSDEV=bond1
VLAN_ID=204
REORDER_HDR=yes
GVRP=no
MVRP=no
HWADDR=
DEVICE=bond1.204
ONBOOT=yes
BRIDGE="br1"
Tiếp theo mình tạo file ifcfg-br1 cho interface br1.
vi /etc/sysconfig/network-scripts/ifcfg-br1
Hãy gõ vào nội dung dưới.
DEVICE="br1"
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.89.141
PREFIX=25
DEFROUTE=yes
ONBOOT=yes
TYPE="Bridge"
DELAY="2"
STP="off"
Sau khi hoàn thành bạn hãy start toàn bộ các interface liên quan như dưới.
ifup enp98s0f0
ifup enp98s0f1
ifup bond1
ifup bond1.204
ifup br2
List lại các interfaces bạn sẽ thấy đã xuất hiện thêm 3 interface mới bond1, bond1.204 và br1.
$ tcpdump --list-interfaces
1.eno1
2.eno2
3.br1
4.bond1
5.bond1.204
6.enp59s0
7.enp59s0d1
8.enp98s0f0
9.enp98s0f1
10.lo [Loopback]
Kiểm tra trạng thái các interface.
$ nmcli device status
DEVICE TYPE STATE CONNECTION
br1 bridge connected Bridge br1
enp59s0 ethernet connected bond0 slave 1
enp59s0d1 ethernet connected bond0 slave 2
bond1.204 vlan connected Vlan bond1.204
lo loopback unmanaged --
Kiểm tra trạng thái bonding bằng cách xem file bond như dưới.
$ cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer3+4 (1)
MII Status: up
MII Polling Interval (ms): 300
Up Delay (ms): 300
Down Delay (ms): 300
802.3ad info
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
System priority: 65535
System MAC address: ac:1f:6b:eb:1a:e4
Active Aggregator Info:
Aggregator ID: 1
Number of ports: 2
Actor Key: 9
Partner Key: 32769
Partner Mac Address: 00:23:04:ee:be:01
Slave Interface: eno1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: ac:1f:6b:eb:1a:e4
Slave queue ID: 0
Aggregator ID: 1
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0
details actor lacp pdu:
system priority: 65535
system mac address: ac:1f:6b:eb:1a:e4
port key: 9
port priority: 255
port number: 1
port state: 61
details partner lacp pdu:
system priority: 32667
system mac address: 00:23:04:ee:be:01
oper key: 32769
port priority: 32768
port number: 257
port state: 61
Slave Interface: eno2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: ac:1f:6b:eb:1a:e5
Slave queue ID: 0
Aggregator ID: 1
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0
details actor lacp pdu:
system priority: 65535
system mac address: ac:1f:6b:eb:1a:e4
port key: 9
port priority: 255
port number: 2
port state: 61
details partner lacp pdu:
system priority: 32667
system mac address: 00:23:04:ee:be:01
oper key: 32769
port priority: 32768
port number: 16641
port state: 61
Kết quả vPC mình show trên switch.
vPC-NXOS01# show vpc 7
vPC status
----------------------------------------------------------------------------
Id Port Status Consistency Reason Active vlans
-- ------------ ------ ----------- ------ ---------------
7 Po7 up success success 1,204
Và cuối cùng là check kết nối về gateway.
$ ping 192.168.89.129
PING 192.168.89.129 (192.168.89.129) 56(84) bytes of data.
64 bytes from 192.168.89.129: icmp_seq=1 ttl=255 time=1.37 ms
64 bytes from 192.168.89.129: icmp_seq=2 ttl=255 time=1.25 ms
64 bytes from 192.168.89.129: icmp_seq=3 ttl=255 time=1.30 ms
64 bytes from 192.168.89.129: icmp_seq=4 ttl=255 time=1.15 ms
--- 192.168.89.129 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 1.156/1.272/1.374/0.086 ms