Cách cấu hình nhóm mạng trong Linux

Tác giả sysadmin, T.M.Hai 30, 2022, 09:53:14 SÁNG

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách cấu hình nhóm mạng trong Linux


Trong Linux, có thể tổng hợp nhiều liên kết mạng lại với nhau thành một liên kết logic duy nhất có thể tăng thông lượng mạng hoặc dự phòng. Ví dụ: chúng tôi có thể chỉ định địa chỉ IP cho một nhóm gồm hai giao diện mạng để tăng gấp đôi thông lượng của mình hoặc dành một giao diện cho mục đích dự phòng để nếu giao diện đầu tiên bị lỗi, chúng tôi có thể chuyển đổi dự phòng.

Ở đây chúng ta sẽ giới thiệu cách tạo và định cấu hình nhóm mạng với hai giao diện mạng khác nhau.

Trước đây, tổng hợp liên kết đã được thực hiện với liên kết mạng, tuy nhiên kể từ RHEL 7, việc lập nhóm hiện là phương pháp được ưa thích hơn, mặc dù bạn có thể sử dụng một trong hai tùy chọn. Làm việc theo nhóm hiệu quả hơn và hầu như có thể làm được những gì liên kết có thể làm nhưng với các tính năng bổ sung, hãy xem tại đây để biết danh sách đầy đủ về sự khác biệt.

1. Cài đặt Teaming Daemon

Để sử dụng nhóm mạng, trước tiên bạn phải cài đặt gói nhóm, gói này thường không được cài đặt theo mặc định.

Mã nguồn [Chọn]
yum install teamd -y
2. Định cấu hình Teaming với nmcli

Công cụ nmcli là một công cụ dòng lệnh để làm việc với Trình quản lý mạng.

Đầu tiên chúng ta có thể hiển thị các thiết bị hiện đang có.

Mã nguồn [Chọn]
[root@ ~]# nmcli con show
NAME                UUID                                  TYPE            DEVICE
Wired connection 2  03973d6f-ae98-4d0b-8780-90572571713d  802-3-ethernet  eno50332208
Wired connection 1  497fe8ae-5217-4e2e-bf55-151b2ce61b50  802-3-ethernet  eno33554984
eno16777736         0dbee9e5-1e7e-4c88-822b-869cfc9e2d13  802-3-ethernet  eno16777736

Trong máy ảo mà tôi đang thử nghiệm, tôi có 3 giao diện mạng trong đó eno16777736 là giao diện chính mà tôi đang quản lý VM thông qua SSH, giao diện này sẽ không được sử dụng trong nhóm. Kết nối có dây1/2 tương ứng với các thiết bị lần lượt là eno33554984 và eno50332208 sẽ được sử dụng trong nhóm.

Tiếp theo, chúng tôi tạo một nhóm gọi là 'team0'.

Mã nguồn [Chọn]
[root@ ~]# nmcli con add type team con-name team0
Connection 'team0' (e6118c6d-3d63-449d-b6b6-5e61a44e5e44) successfully added.

Bây giờ nếu chúng tôi hiển thị lại các kết nối, chúng tôi sẽ thấy nhóm0 được liệt kê dưới dạng thiết bị 'nm-team'.

Mã nguồn [Chọn]
[root@ ~]# nmcli con show
NAME                UUID                                  TYPE            DEVICE
Wired connection 2  03973d6f-ae98-4d0b-8780-90572571713d  802-3-ethernet  eno50332208
Wired connection 1  497fe8ae-5217-4e2e-bf55-151b2ce61b50  802-3-ethernet  eno33554984
eno16777736         0dbee9e5-1e7e-4c88-822b-869cfc9e2d13  802-3-ethernet  eno16777736
team0               e6118c6d-3d63-449d-b6b6-5e61a44e5e44  team            nm-team

Nhóm này vẫn chưa làm bất cứ điều gì, vì vậy tiếp theo chúng tôi sẽ thêm vào hai giao diện của chúng tôi.

Mã nguồn [Chọn]
[root@ ~]# nmcli con add type team-slave ifname eno33554984 master team0
Connection 'team-slave-eno33554984' (d72bbe43-eaa9-4220-ba58-cd322f74653e) successfully added.

[root@ ~]# nmcli con add type team-slave ifname eno50332208 master team0
Connection 'team-slave-eno50332208' (898ef4eb-65cd-45b1-be93-3afe600547e2) successfully added.

Bây giờ nếu chúng tôi hiển thị lại các kết nối, chúng tôi sẽ thấy hai nô lệ nhóm được liệt kê.

Mã nguồn [Chọn]
[root@ ~]# nmcli con show
NAME                    UUID                                  TYPE            DEVICE
Wired connection 2      03973d6f-ae98-4d0b-8780-90572571713d  802-3-ethernet  eno50332208
Wired connection 1      497fe8ae-5217-4e2e-bf55-151b2ce61b50  802-3-ethernet  eno33554984
eno16777736             0dbee9e5-1e7e-4c88-822b-869cfc9e2d13  802-3-ethernet  eno16777736
team-slave-eno50332208  898ef4eb-65cd-45b1-be93-3afe600547e2  802-3-ethernet  --
team-slave-eno33554984  d72bbe43-eaa9-4220-ba58-cd322f74653e  802-3-ethernet  --
team0                   e6118c6d-3d63-449d-b6b6-5e61a44e5e44  team            nm-team

Thao tác này sẽ tự động tạo các tệp cấu hình sau cho nhóm:

Mã nguồn [Chọn]
[root@ ~]# cat /etc/sysconfig/network-scripts/ifcfg-team0
DEVICE=nm-team
DEVICETYPE=Team
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=team0
UUID=c794ce57-2879-4426-9632-50cf05f8d5b5
ONBOOT=yes

[root@ ~]# cat /etc/sysconfig/network-scripts/ifcfg-team-slave-eno33554984
NAME=team-slave-eno33554984
UUID=9b5d1511-43ee-4184-b20d-540c2820bb6a
DEVICE=eno33554984
ONBOOT=yes
TEAM_MASTER=c794ce57-2879-4426-9632-50cf05f8d5b5
DEVICETYPE=TeamPort

[root@ ~]# cat /etc/sysconfig/network-scripts/ifcfg-team-slave-eno50332208
NAME=team-slave-eno50332208
UUID=9f441c0f-07fc-430b-8bb1-9e913c05d7b3
DEVICE=eno50332208
ONBOOT=yes
TEAM_MASTER=c794ce57-2879-4426-9632-50cf05f8d5b5
DEVICETYPE=TeamPort

Lưu ý: Nếu bạn chỉnh sửa bất kỳ tệp nào trong số này theo cách thủ công, bạn sẽ cần chạy lệnh 'nmcli con reload' để trình quản lý mạng đọc các thay đổi cấu hình.

Nhóm hiện đã được đặt với cấu hình mặc định, nó sẽ sử dụng DHCP theo mặc định, tuy nhiên chúng ta có thể chỉ định cấu hình địa chỉ IP theo cách thủ công nếu được yêu cầu bằng các lệnh bên dưới.

Mã nguồn [Chọn]
nmcli con mod team0 ipv4.method manual
nmcli con mod team0 ipv4.addresses 192.168.1.50/24
nmcli con mod team0 ipv4.gateway 192.168.1.254

3. Kích hoạt Teaming

Tại thời điểm này, tài liệu thường nói rằng bạn có thể chạy 'nmcli con up team0' để khởi động nhóm, tuy nhiên điều này sẽ không hiệu quả vì trước tiên chúng tôi cần khởi chạy các cổng – đó là giao diện của chúng tôi trong nhóm.

Mã nguồn [Chọn]
[root@ ~]# nmcli connection up team-slave-eno50332208
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

[root@ ~]# nmcli connection up team-slave-eno33554984
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)

Sau khi đưa một cổng lên, nhóm sẽ hoạt động, trong thử nghiệm của tôi, nhóm đang sử dụng DHCP để có thể lấy thành công địa chỉ IP như hình bên dưới sau khi lệnh đầu tiên ở trên được đưa ra. Điều quan trọng cần lưu ý là giao diện nhóm chỉ được bắt đầu khi một trong các giao diện cổng của nó được khởi động, tuy nhiên, điều này không tự động khởi động tất cả các giao diện cổng khác trong nhóm. Chỉ khởi động giao diện nhóm không tự động khởi động tất cả các giao diện cổng. Nếu bạn làm hỏng thứ tự, bạn có thể chạy 'mạng khởi động lại systemctl' và nó sẽ hiển thị chính xác các cổng và nhóm và cho kết quả tương tự như bên dưới.

Mã nguồn [Chọn]
[root@ ~]# ip a
...
3: eno33554984:  mtu 1500 qdisc pfifo_fast master nm-team state UP qlen 1000
    link/ether 00:0c:29:ac:13:21 brd ff:ff:ff:ff:ff:ff
4: eno50332208:  mtu 1500 qdisc pfifo_fast master nm-team state UP qlen 1000
    link/ether 00:0c:29:ac:13:21 brd ff:ff:ff:ff:ff:ff
8: nm-team:  mtu 1500 qdisc noqueue state UP
    link/ether 00:0c:29:ac:13:21 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.50/24 brd 192.168.1.255 scope global dynamic nm-team
       valid_lft 86310sec preferred_lft 86310sec
    inet6 fe80::20c:29ff:feac:1321/64 scope link
       valid_lft forever preferred_lft forever

Nhóm hiện đang hoạt động! Tôi đã thực hiện một số thử nghiệm cơ bản bằng cách chạy lệnh ping liên tục tới nhóm tại 192.168.1.50, tốc độ phản hồi <1ms, sau khi vô hiệu hóa một trong các giao diện mạng trên máy ảo thuộc nhóm, phản hồi ngay lập tức tăng lên 13ms rồi quay trở lại quay lại <1ms. Điều này cho thấy kết nối vẫn hoạt động như mong đợi khi chỉ có một trong hai giao diện trong nhóm khả dụng.

4. Sửa đổi Teaming

Theo mặc định, nhóm của chúng tôi đang sử dụng người chạy vòng tròn, như hình bên dưới.

Mã nguồn [Chọn]
[root@ ~]# teamdctl nm-team state
setup:
  runner: roundrobin
ports:
  eno33554984
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
  eno50332208
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up

Điều này cho thấy hai cổng của chúng tôi là giao diện mà chúng tôi đã thêm vào nhóm, người chạy là vòng tròn theo mặc định. Người chạy về cơ bản là một phương pháp khác mà nhóm có thể sử dụng để xử lý lưu lượng truy cập, những người chạy khác có sẵn được liệt kê bên dưới.

  • roundrobin: Đây là mặc định mà chúng tôi đang sử dụng, nó chỉ đơn giản là gửi các gói đến tất cả các giao diện trong nhóm theo cách vòng tròn, tức là từng gói một theo sau giao diện tiếp theo.
  • broadcast: Tất cả lưu lượng được gửi qua tất cả các cổng.
  • activebackup: Một giao diện đang được sử dụng trong khi giao diện kia được dành làm dự phòng, liên kết được theo dõi các thay đổi và sẽ sử dụng liên kết chuyển đổi dự phòng nếu cần.
  • loadbalance: Lưu lượng được cân bằng trên tất cả các giao diện dựa trên lưu lượng Tx, nên chia sẻ tải bằng nhau trên các giao diện có sẵn.

Bạn có thể chỉ định người chạy mà bạn muốn sử dụng cho nhóm khi tạo nhóm bằng lệnh bên dưới, lệnh này tương tự như lệnh chúng tôi đã sử dụng để tạo nhóm ban đầu ngoại trừ phần cấu hình được thêm vào cuối.

Mã nguồn [Chọn]
nmcli con add type team con-name team0 config '{ "runner": {"name":
"broadcast"}}'

Ngoài ra, bạn có thể sửa đổi nhóm hiện tại bằng cách chỉ cần chỉnh sửa tệp cấu hình đã được tạo trong /etc/sysconfig/network-scripts/ifcfg-team0 và thêm một dòng như dòng bên dưới.

Mã nguồn [Chọn]
TEAM_CONFIG='{"runner": {"name": "activebackup"}, "link_watch": {"name": "ethtool"}}'
Bạn không cần phải ghi nhớ cú pháp được sử dụng cho trình chạy, chỉ cần kiểm tra thư mục /usr/share/doc/teamd-X.XX/example_configs/ để biết các cấu hình ví dụ. Bạn có thể sao chép và dán các trình chạy được sử dụng vào lệnh nmcli của mình.

Sau đó, tôi đã chạy 'mạng khởi động lại systemctl' để áp dụng thay đổi, sau đó bạn có thể xác nhận rằng đây là trình chạy mà nhóm đang sử dụng:

Mã nguồn [Chọn]
[root@ ~]# teamdctl nm-team state
setup:
  runner: broadcast

5. Thêm tài liệu và trợ giúp

Nếu bạn gặp bất kỳ sự cố nào, hãy chạy lệnh bên dưới để truy cập trang thủ công có chứa các ví dụ nmcli khác nhau, sau đó thực hiện tìm kiếm 'nhóm' để biết thêm thông tin.

Mã nguồn [Chọn]
man 5 nmcli-examples
Lệnh dưới đây cũng có thể hữu ích để lấy một số thông tin gỡ lỗi hữu ích từ một nhóm.

Mã nguồn [Chọn]
teamnl nm-team options
6. Các cách khác để định cấu hình Teaming

Lệnh nmcli không phải là cách duy nhất để định cấu hình nhóm mạng, tuy nhiên, lệnh này giúp hiểu rõ nhất về cách thức hoạt động của tất cả các thành phần khác nhau.

Nhóm cũng có thể được thiết lập không liên tục với nhóm hoặc cũng có thể được thiết lập với giao diện người dùng văn bản thông qua 'nmtui' hoặc thông qua cài đặt mạng giao diện người dùng đồ họa.
Tóm lược

Chúng tôi đã tổng hợp thành công nhiều liên kết mạng thành một liên kết nhóm hợp lý, cho phép chúng tôi tăng hiệu suất hoặc dự phòng cho kết nối mạng của mình.