/ nmcli

RHCE : System CFG and MNGT – Use net teaming or bonding to configure aggregated net links between two RHEL.

nmcli Network Manager rhce-new redhat-new nmtui teaming teamd teamctl teamnl
https://4am.kr/rhce-system-cfg-and-mngt-use-net-teaming-or-bonding-to-configure-aggregated-net-links-between-two-rhel/

RHCE : 시스템 구성 및 관리 – 네트워크 teaming 또는 bonding을 활용하여 두 Red Hat Enterprise Linux 시스템 간의 집계 네트워크 링크 구성

(RHCE : System configuration and management – Use network teaming or bonding to configure aggregated network links between two Red Hat Enterprise Linux systems.)

RHCE 주제입니다. 아래 참조된 사이트를 번역 및 내용 추가하였습니다.

시작하기 전에

RHEL 7에서는 네트워크 티밍(network teaming) 또는 본딩(bonding)을 설정할 수 있는 여러가지 방법이 있다.

  • nmtui 커맨드를 사용해 텍스트 사용자 환경(TUI)으로 설정한다.
  • nmcli 커맨드를 사용해 커맨드 라인 환경(CLI)으로 설정한다(추천).
  • 그래픽 사용자 환경(GUI)으로 설정한다.
  • 네트워크 설정 파일을 직접 수정한다.

이 튜토리얼에서는 nmcli 커맨드를 이용한다. 왜냐하면 가장 빠르며 오류가 적을 것이기 때문이다.

사전 준비사항

이 튜토리얼을 시작하기 전에 네트워크 인터페이스(NIC) 2개가 준비되어 있는 머신을 준비하여야 한다. 여기서는 eno16777984eno33554976라는 NIC을 사용한다.

[root@server1 ~]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno16777984: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:8b:8d:34 brd ff:ff:ff:ff:ff:ff
3: eno33554976: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:50:56:2a:70:bd brd ff:ff:ff:ff:ff:ff
[root@server1 ~]# 

nmcli con show 커맨드를 통해 네트워크 인터페이스를 확인한다.

[root@server1 ~]# nmcli con show
NAME                UUID                                  TYPE            DEVICE      
Wired connection 1  f8692c33-efa4-4493-a350-86004b39c332  802-3-ethernet  eno33554976 
eno16777984         f85b0810-e506-4563-a7ae-3462840ac509  802-3-ethernet  eno16777984 
[root@server1 ~]# 

본딩(bonding) 설정 with nmcli

1. teamd 패키지를 설치한다.

[root@server1 ~]# yum install -y teamd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Package teamd-1.9-15.el7.x86_64 already installed and latest version
Nothing to do
[root@server1 ~]# 

2. 만약 네트워크 설정이 되어 있다면, 모두 삭제한다.

[root@server1 ~]# nmcli con del f8692c33-efa4-4493-a350-86004b39c332
[root@server1 ~]# nmcli con del f85b0810-e506-4563-a7ae-3462840ac509
[root@server1 ~]# 

3. 본딩 인터페이스를 생성한다.

[root@server1 ~]# nmcli con add type bond con-name mybond ifname bond0 mode active-backup 
Connection 'mybond' (02565b48-e741-4944-8b66-aa12cd4f0938) successfully added.
[root@server1 ~]# 
  • 노트: 만약 con-name mybond를 명시하지 않을 경우, 티밍 인터페이스는 bond-bond0이라는 이름을 자동으로 부여받게 된다.

4. IPv4 설정을 추가한다.

4-1. RHEL 7.0의 경우에는 다음과 같이 설정한다.
[root@server1 ~]# nmcli con mod mybond ipv4.addresses "10.10.10.138/24 10.10.10.10"
[root@server1 ~]# nmcli con mod mybond ipv4.method manual
[root@server1 ~]# 
4-2. RHEL 7.1부터는 다음과 같이 설정한다.
[root@server1 ~]# nmcli con mod mybond ipv4.addresses "10.10.10.138/24"
[root@server1 ~]# nmcli con mod mybond ipv4.gateway 10.10.10.10
[root@server1 ~]# nmcli con mod mybond ipv4.method manual
  • 노트: 만약 IP 설정이 정의되지 않으면, 시스템은 기본적으로 DHCP를 통해 IP를 얻으려고 할 것이다.

5. eno16777984 인터페이스를 본딩 인터페이스에 추가한다.

[root@server1 ~]# nmcli con add type bond-slave con-name bond0-slave0 ifname eno16777984 master bond0 
Connection 'bond0-slave0' (1d7616f3-5349-4686-814c-cec19ae44a93) successfully added.
[root@server1 ~]#
  • 노트: con-name bond0-slave0을 명시하지 않은 경우, bond-slave-eno16777984라는 이름을 자동으로 가지게 된다.

6. eno33554976 인터페이스를 본딩 인터페이스에 추가한다.

[root@server1 ~]# nmcli con add type bond-slave con-name bond0-slave1 ifname eno33554976 master bond0 
Connection 'bond0-slave1' (2bf1d514-d052-441f-8ecd-c0f2da22bdf3) successfully added.
[root@server1 ~]# 
  • 노트: con-name bond0-slave1을 명시하지 않은 경우, bond-slave-eno33554976라는 이름을 자동으로 가지게 된다.

7. 본딩 인터페이스를 활성화한다.

[root@server1 ~]# nmcli con up mybond 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
[root@server1 ~]# 

8. 설정을 확인한다.

8-1. nmcli con show 커맨드를 통해 확인한다.
[root@server1 ~]# nmcli con show
NAME          UUID                                  TYPE            DEVICE      
mybond        02565b48-e741-4944-8b66-aa12cd4f0938  bond            bond0       
bond0-slave1  2bf1d514-d052-441f-8ecd-c0f2da22bdf3  802-3-ethernet  eno33554976 
bond0-slave0  1d7616f3-5349-4686-814c-cec19ae44a93  802-3-ethernet  eno16777984 
[root@server1 ~]#
[root@server1 ~]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno16777984: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT qlen 1000
    link/ether 00:50:56:2a:70:bd brd ff:ff:ff:ff:ff:ff
3: eno33554976: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT qlen 1000
    link/ether 00:50:56:2a:70:bd brd ff:ff:ff:ff:ff:ff
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT 
    link/ether 00:50:56:2a:70:bd brd ff:ff:ff:ff:ff:ff
[root@server1 ~]#

티밍(teaming) 설정 with nmcli

1. teamd 패키지를 설치한다.

[root@server1 ~]# yum install -y teamd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Package teamd-1.9-15.el7.x86_64 already installed and latest version
Nothing to do
[root@server1 ~]# 

2. 만약 네트워크 설정이 되어 있다면, 모두 삭제한다.

[root@server1 ~]# nmcli con del f8692c33-efa4-4493-a350-86004b39c332
[root@server1 ~]# nmcli con del f85b0810-e506-4563-a7ae-3462840ac509
[root@server1 ~]# 

3. 티밍 인터페이스를 생성한다.

[root@server1 ~]# nmcli con add type team con-name myteam ifname team0 config '{ "runner": {"name": "loadbalance"}}'
Connection 'myteam' (a0133f66-17e1-4101-bb06-996a9509876f) successfully added.
[root@server1 ~]# 
  • 노트1: 만약 con-name myteam을 명시하지 않을 경우, 티밍 인터페이스는 team-team0라는 이름을 자동으로 부여받게 된다.
  • 노트2: /usr/share/doc/teamd-*/example_configs에서 사용가능한 예제 설정을 찾아볼 수 있다. man teamd.conf를 통해서도 예제를 확인해볼 수 있다.

4. 앞에서 설정한 결과를 /etc/sysconfig/network-scripts/ifcfg-myteam파일을 통해서 확인할 수 있다.

[root@server1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-myteam
DEVICE=team0
TEAM_CONFIG="{ \"runner\": {\"name\": \"loadbalance\"}}"
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=myteam
UUID=a0133f66-17e1-4101-bb06-996a9509876f
ONBOOT=yes
...                                                                                  
"/etc/sysconfig/network-scripts/ifcfg-myteam" 17L, 336C              1,1           All
[root@server1 ~]#

5. IPv4 설정을 추가한다.

5-1. RHEL 7.0의 경우에는 다음과 같이 설정한다.
[root@server1 ~]# nmcli con mod myteam ipv4.addresses "10.10.10.138/24 10.10.10.10"
[root@server1 ~]# nmcli con mod myteam ipv4.method manual
[root@server1 ~]#
5-2. RHEL 7.1부터는 다음과 같이 설정한다.
[root@server1 ~]# nmcli con mod myteam ipv4.addresses "10.10.10.138/24"
[root@server1 ~]# nmcli con mod myteam ipv4.gateway 10.10.10.10
[root@server1 ~]# nmcli con mod myteam ipv4.method manual
  • 노트: 만약 IP 설정이 정의되지 않으면, 시스템은 기본적으로 DHCP를 통해 IP를 얻으려고 할 것이다.

6. eno16777984 인터페이스를 티밍 인터페이스로 추가한다

[root@server1 ~]# nmcli con add type team-slave con-name team0-slave0 ifname eno16777984 master team0 
Connection 'team0-slave0' (10a1b0e4-2270-45d6-99ff-d485f164f298) successfully added.
[root@server1 ~]# 
  • 노트: con-name team0-slave0을 명시하지 않은 경우, team-slave-eno16777984라는 이름을 자동으로 가지게 된다.

7. /etc/sysconfig/network-scripts/ifcfg-team0-slave0 파일을 통해 앞의 설정을 확인할 수 있다.

[root@server1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-team0-slave0
...
NAME=team0-slave0
...
DEVICE=eno16777984
ONBOOT=yes
TEAM_MASTER=team0
DEVICETYPE=TeamPort
...                                                                                   
"/etc/sysconfig/network-scripts/ifcfg-team0-slave0" 17L, 313C        1,1           All
[root@server1 ~]#

8. eno33554976 인터페이스를 티밍 인터페이스로 추가한다

[root@server1 ~]# nmcli con add type team-slave con-name team0-slave1 ifname eno33554976 master team0 
Connection 'team0-slave1' (47ce0114-3f6f-424d-8dc4-d900ba660c06) successfully added.
[root@server1 ~]# 
  • 노트: con-name team0-slave0을 명시하지 않은 경우, team-slave-eno33554976라는 이름을 자동으로 가지게 된다.

9. /etc/sysconfig/network-scripts/ifcfg-team0-slave1 파일을 통해 앞의 설정을 확인할 수 있다.

[root@server1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-team0-slave1
...
NAME=team0-slave1
...
DEVICE=eno33554976
ONBOOT=yes
TEAM_MASTER=team0
DEVICETYPE=TeamPort
...                                                                                   
"/etc/sysconfig/network-scripts/ifcfg-team0-slave1" 17L, 313C        1,1           All
[root@server1 ~]#

10. 티밍 인터페이스를 활성화한다.

[root@server1 ~]# nmcli con up myteam 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
[root@server1 ~]#

11. 설정을 확인한다.

11-1. nmcli 커맨드를 통해 설정을 확인한다.
[root@server1 ~]# nmcli con show
NAME          UUID                                  TYPE            DEVICE      
team0-slave1  8f7269d5-a096-46e9-bd3c-18e012e3b704  802-3-ethernet  eno33554976 
team0-slave0  e7d2a78b-6494-49b0-9e1e-ca68b90f3198  802-3-ethernet  eno16777984 
myteam        ffeb7ced-e37b-4ba5-9eb4-cd0168fa7844  team            team0       
[root@server1 ~]# 
11-2. teamdctl 커맨드를 통해 설정을 확인한다.
[root@server1 ~]# teamdctl team0 state
setup:
  runner: loadbalance
ports:
  eno33554976
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
  eno16777984
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
[root@server1 ~]# 
11-3. teamdctl 커맨드를 통해 설정을 덤프하여 확인한다.
[root@server1 ~]# teamdctl team0 config dump
{
    "device": "team0",
    "ports": {
        "eno16777984": {
            "link_watch": {
                "name": "ethtool"
            }
        },
        "eno33554976": {
            "link_watch": {
                "name": "ethtool"
            }
        }
    },
    "runner": {
        "name": "loadbalance",
        "tx_hash": [
            "eth",
            "ipv4",
            "ipv6"
        ]
    }
}
[root@server1 ~]# 

12. teamnl 커맨드를 통해 포트의 상태를 확인할 수 있다.

[root@server1 ~]# teamnl team0 ports
 3: eno33554976: up 1000Mbit FD 
 2: eno16777984: up 10000Mbit FD 
[root@server1 ~]# 

13. 추가로, /etc/sysconfig/network-scripts를 직접 변경하여 사용할 수 있다. 이 경우에 반드시 다음 커맨드를 통해 다시 로드를 해 주어야 한다.

[root@server1 ~]# nmcli con reload 
[root@server1 ~]# 

시험에서의 팁

민약 시험을 보는 도중에 기억이 나지 않으면, nmcli-examplesteamd.conf man 페이지를 참조하거나, /usr/share/doc/teamd-*/example_ifcfgs/usr/share/doc/teamd-*/example_ifcfgs 디렉토리를 참조할 수 있다.

추가 자료