Skip to main content
开放网络的先行者与推动者—星融元
加入我们技术支持(Support)  TEL:(+86)4000989811

EVPN Multihoming场景配置

1 目的

本文主要介绍EVPN Multihoming场景在Asterfusion虚拟SONiC交换机(vAsterNOS)上的配置实现。通过阅读本文,用户可以快速理解和掌握EVPN Multihoming在Asterfusion SONiC交换机上的配置方法。

2 简介

2.1 vAsterNOS

vAsterNos是星融元推出的一款sonic交换机的虚拟操作系统,它继承了AsterNOS的所有软件特性,可运行在GNS3、EVE-NG等网络虚拟软件中。用户可以通过使用vAsterNos更好地了解星融元企业级sonic交换机的特性,从而为构建高效网络环境提供有力支撑。

关于设置vAsterNOS的使用环境的信息,请阅读:
Asterfusion虚拟SONiC交换机使用说明

2.2 EVPN Multihoming

EVPN Multihoming是指在使用以太网VPN(Ethernet VPN,EVPN)技术构建的数据中心网络中,使用多个物理链路和IP地址来实现冗余和负载均衡的技术。在EVPN Multihoming中,每个用户可以使用多个物理链路来与数据中心网络进行连接,这些链路可以来自不同的交换机。当一个链路或设备发生故障时,可以自动切换到备用链路或设备,保证数据中心网络的可用性。也可以通过负载均衡的方式,将网络流量分配到多个链路或地址中,提高网络性能和效率。Multihoming技术标准可参照RFC7432 and RFC4116,其具有良好的兼容性。

2.3 ESI

ESl(Ethernet Segmentldentifier,以太网段标识),用于标识 ES(Ethernet Segment),长度为 10 字节。
当前支持两种方式配置 ES1:
(1)配置唯一10 字节的 ESI、格式为 00:AA:BB:CC:DD:EE:FF:GG:HH:II;

(2)配置 es-id 和 es-sys-mac,再与保留位组成唯一 10 字节的 ESI。

使用时,为一组Leaf 设备连接到同一用户侧设备或主机的下行聚合口配置相同的 ESI,则这两个聚合口互为EVPN-Multihoming 对等体,该聚合接口也称为 ES 接口,该 Leaf 交换机也称为 ES 设备。

2.4 DF设备

在一组 ES 设备上,会为每个 ES 选择一个指定转发器,被选中的交换机称为DF(Designated Forwarder)设备,相应的,没有被选举成为DF的则称为 Non-DF设备。只有DF设备才允许将VXLAN 隧道收到的泛洪流量转发到本地配置 ESI的下行口,Non-DF设备则不允许。

3 技术原理

3.1 对等体发现

与 MC-LAG不同,EVPN-Multihoming 对等体之间无需 peer-link 互通,而是通过 EVPNtype-4路由(EthernetSegment Route)和type-1路由(Ethernet Auto-Discovery Route)进行动态发现。

EVPN-Multihoming 对等体节点通过配置相同的 ESI 进行互通、作为独立的 VTEP,具有唯一的 VTEP IP 地址

3.2 DF选举算法

DF 选举算法用于解决远端 BUM 流量复制问题:只有 DF 设备才允许将 VXLAN 隧道收到的泛洪流量转发到本地配置 ESI的下行口,Non-DF 设备则不允许。

在同一个 ES 中,具有最高 DF 偏好的 VTEP节点将成为 DF 设备,若偏好值相同,则选举具有最小 VTEPIP 地址的成为 DF 设备。DF选举动作由 EVPN type-4路由完成。

3.3 水平分割算法

水平分割算法用于防止同一个 ESI的 BUM 流量环路和复制:只有来自远程站点的 BUM 流量才被允许转发到本地站点。

4 EVPN Multihoming典型场景配置

4.1 要求

用户的数据中心拥有一套2+4的spine-leaf网络,现在需要将3台server部署在此网络中,要求使用multihoming部署方式,保障网络的高可靠性。具体组网情况参见4.2章网络拓扑。

4.2 拓扑

网络拓扑

4.3 测试环境

此配置示例采用 Asterfusion 虚拟 SONiC 交换机 (vAsterNOS) 实现,因此需要运行 vAsterNOS 的虚拟环境。具体环境搭建请参考本文2.1节的相关链接。

4.4 设备互联IP

设备名称接口IP地址备注
Spine1Ethernet 0/0 172.16.11.1/24
Spine1Ethernet 0/1172.16.12.1/24
Spine1Ethernet 0/2172.16.13.1/24
Spine1Ethernet 0/3172.16.14.1/24Router-id same as loopback0
Spine1Loopback 0 10.1.0.210/32
Spine2Ethernet 0/0 172.16.15.1/24
Spine2Ethernet 0/1172.16.16.1/24
Spine2Ethernet 0/2172.16.17.1/24
Spine2Ethernet 0/3172.16.18.1/24
Spine2Loopback 0 10.1.0.211/32Router-id same as loopback0
Leaf1Ethernet 0/2172.16.11.2/24
Leaf1Ethernet 0/3172.16.15.2/24
Leaf1Vlan 100100.0.0.1/24
Leaf1Vlan 200110.0.0.1/24
Leaf1Loopback 0 10.1.0.212/32Router-id and vtep ip same as loopback0
Leaf2Ethernet 0/2172.16.12.2/24
Leaf2Ethernet 0/3172.16.16.2/24
Leaf2Vlan 100100.0.0.1/24
Leaf2Vlan 200110.0.0.1/24
Leaf2Loopback 0 10.1.0.213/32Router-id and vtep ip same as loopback0
Leaf3Ethernet 0/1172.16.13.2/24
Leaf3Ethernet 0/2172.16.17.2/24
Leaf3Vlan 300120.0.0.1/24
Leaf3Loopback 0 10.1.0.214/32Router-id and vtep-ip same as loopback0
Leaf4Ethernet 0/1172.16.14.2/24
Leaf4Ethernet 0/2172.16.18.2/24
Leaf4Vlan 300120.0.0.1/24
Leaf4Loopback 0 10.1.0.215/32Router-id and vtep-ip same as loopback0
Server-1bond0100.0.0.12/24

4.5 测试前的准备工作

确保各switch及server设备正确上线,并按照拓扑正确连接。

确保设备正确上线

4.6 配置步骤

第 1 步

修改6台switches设备的mac地址,由于初始mac地址相同,所以在进行业务配置之前,必须先进行mac地址的修改。才能使设备功能正常运行。

sonic# system bash
admin@sonic:~$ sudo vi /etc/sonic/config_db.json

修改如下位置

修改位置

重新加载配置并退出system bash。

admin@sonic:~$ sudo config reload -yf
admin@sonic:~$ exit

第 2 步

配置各交换机设备的互联端口。

Spine1

sonic# configure terminal
sonic(config)# interface ethernet 0/1
sonic(config-if-0/1)# ip address 172.16.11.1/24
sonic(config-if-0/1)# interface ethernet 0/2
sonic(config-if-0/2)# ip address 172.16.12.1/24
sonic(config-if-0/2)# interface ethernet 0/3
sonic(config-if-0/3)# ip address 172.16.13.1/24
sonic(config-if-0/3)# interface ethernet 0/4
sonic(config-if-0/4)# ip address 172.16.14.1/24
sonic(config-if-0/4)# exit
sonic(config)# interface loopback 0
sonic(config-loif-0)# ip address 10.1.0.210/32
sonic(config-loif-0)#exit

Spine2

sonic# configure terminal
sonic(config)# interface ethernet 0/1
sonic(config-if-0/1)# ip address 172.16.15.1/24
sonic(config-if-0/1)# interface ethernet 0/2
sonic(config-if-0/2)# ip address 172.16.16.1/24
sonic(config-if-0/2)# interface ethernet 0/3
sonic(config-if-0/3)# ip address 172.16.17.1/24
sonic(config-if-0/3)# interface ethernet 0/4
sonic(config-if-0/4)# ip address 172.16.18.1/24
sonic(config-if-0/4)# q
sonic(config)# interface loopback 0
sonic(config-loif-0)# ip address 10.1.0.211/32
sonic(config-loif-0)#exit

Leaf1

sonic# configure terminal
sonic(config)# interface ethernet 0/3
sonic(config-if-0/3)# ip address 172.16.11.2/24
sonic(config-if-0/3)# interface ethernet 0/4
sonic(config-if-0/4)# ip address 172.16.15.2/24
sonic(config-if-0/4)# exit
sonic(config)# interface loopback 0
sonic(config-loif-0)# ip address 10.1.0.212/32

Leaf2

sonic# configure terminal
sonic(config)# interface ethernet 0/3
sonic(config-if-0/3)# ip address 172.16.12.2/24
sonic(config-if-0/3)# interface ethernet 0/4
sonic(config-if-0/4)# ip address 172.16.16.2/24
sonic(config-if-0/4)# exit
sonic(config)# interface loopback 0
sonic(config-loif-0)# ip address 10.1.0.213/32

Leaf3

sonic# configure terminal
sonic(config)# interface ethernet 0/2
sonic(config-if-0/2)# ip address 172.16.13.2/24
sonic(config-if-0/2)# interface ethernet 0/3
sonic(config-if-0/3)# ip address 172.16.17.2/24
sonic(config-if-0/3)# exit
sonic(config)# interface loopback 0
sonic(config-loif-0)# ip address 10.1.0.214/32

Leaf4

sonic# configure terminal
sonic(config)# interface ethernet 0/2
sonic(config-if-0/2)# ip address 172.16.14.2/24
sonic(config-if-0/2)# interface ethernet 0/3
sonic(config-if-0/3)# ip address 172.16.18.2/24
sonic(config-if-0/3)# exit
sonic(config)# interface loopback 0
sonic(config-loif-0)# ip address 10.1.0.215/32

第 3 步

配置Leaf设备的聚合口

Leaf1

sonic(config)# interface link-aggregation 5
sonic(config-lagif-5)# exit
sonic(config)# interface ethernet 0/1
sonic(config-if-0/1)# switchport
sonic(config-if-0/1)# link-aggregation-group 5
sonic(config-if-0/1)# exit
sonic(config)# interface link-aggregation 6
sonic(config-lagif-6)# exit
sonic(config)# interface ethernet 0/2
sonic(config-if-0/2)# switchport
sonic(config-if-0/2)# link-aggregation-group 6
sonic(config-if-0/2)# exit
sonic(config)# vlan 100
sonic(config-vlan-100)# vlan 200
sonic(config-vlan-200)# exit
sonic(config)# interface link-aggregation 5
sonic(config-lagif-5)# switchport access vlan 100
sonic(config-lagif-5)# lacp system-id 00:00:01:00:00:01
sonic(config-lagif-5)# exit
sonic(config)# interface link-aggregation 6
sonic(config-lagif-6)# switchport access vlan 200
sonic(config-lagif-6)# lacp system-id 00:00:01:00:00:02
sonic(config-lagif-6)# exit
sonic(config)# vrf 123
sonic(config-vrf)# exit
sonic(config)# interface vlan 100
sonic(config-vlanif-100)# ip address 100.0.0.1/24
sonic(config-vlanif-100)# mac-address 00:11:22:33:44:55
sonic(config-vlanif-100)# vrf 123
sonic(config-vlanif-100)# interface vlan 200
sonic(config-vlanif-200)# ip address 110.0.0.1/24
sonic(config-vlanif-200)# mac-address 00:11:22:33:44:66
sonic(config-vlanif-200)# vrf 123
sonic(config-vlanif-200)# exit

Leaf2

sonic(config)# interface link-aggregation 5
sonic(config-lagif-5)# exit
sonic(config)# interface ethernet 0/1
sonic(config-if-0/1)# switchport
sonic(config-if-0/1)# link-aggregation-group 5
sonic(config-if-0/1)# exit
sonic(config)# interface link-aggregation 6
sonic(config-lagif-6)# exit
sonic(config)# interface ethernet 0/2
sonic(config-if-0/2)# switchport
sonic(config-if-0/2)# link-aggregation-group 6
sonic(config-if-0/2)# exit
sonic(config)# vlan 100
sonic(config-vlan-100)# vlan 200
sonic(config-vlan-200)# exit
sonic(config)# interface link-aggregation 5
sonic(config-lagif-5)# switchport access vlan 100
sonic(config-lagif-5)# lacp system-id 00:00:01:00:00:01
sonic(config-lagif-5)# exit
sonic(config)# interface link-aggregation 6
sonic(config-lagif-6)# switchport access vlan 200
sonic(config-lagif-6)# lacp system-id 00:00:01:00:00:02
sonic(config-lagif-6)# exit
sonic(config)# vrf 123
sonic(config-vrf)# exit
sonic(config)# interface vlan 100
sonic(config-vlanif-100)# ip address 100.0.0.1/24
sonic(config-vlanif-100)# mac-address 00:11:22:33:44:55
sonic(config-vlanif-100)# vrf 123
sonic(config-vlanif-100)# interface vlan 200
sonic(config-vlanif-200)# ip address 110.0.0.1/24
sonic(config-vlanif-200)# mac-address 00:11:22:33:44:66
sonic(config-vlanif-200)# vrf 123
sonic(config-vlanif-200)# exit

Leaf3

sonic(config)# interface link-aggregation 7
sonic(config-lagif-7)# exit
sonic(config)# interface ethernet 0/1
sonic(config-if-0/1)# switchport
sonic(config-if-0/1)# link-aggregation-group 7
sonic(config-if-0/1)# exit
sonic(config)# vlan 300
sonic(config-vlan-300)# exit
sonic(config)# interface link-aggregation 7
sonic(config-lagif-7)# switchport access vlan 300
sonic(config-lagif-7)# lacp system-id 00:00:01:00:00:03
sonic(config-lagif-7)# exit
sonic(config)# vrf 456
sonic(config-vrf)# exit
sonic(config)# interface vlan 300
sonic(config-vlanif-300)# ip address 120.0.0.1/24
sonic(config-vlanif-300)# mac-address 00:11:22:33:44:77
sonic(config-vlanif-300)# vrf 456
sonic(config-vlanif-300)# exit

Leaf4

sonic(config)# interface link-aggregation 7
sonic(config-lagif-7)# exit
sonic(config)# interface ethernet 0/1
sonic(config-if-0/1)# switchport
sonic(config-if-0/1)# link-aggregation-group 7
sonic(config-if-0/1)# exit
sonic(config)# vlan 300
sonic(config-vlan-300)# exit
sonic(config)# interface link-aggregation 7
sonic(config-lagif-7)# switchport access vlan 300
sonic(config-lagif-7)# lacp system-id 00:00:01:00:00:03
sonic(config-lagif-7)# exit
sonic(config)# vrf 456
sonic(config-vrf)# exit
sonic(config)# interface vlan 300
sonic(config-vlanif-300)# ip address 120.0.0.1/24
sonic(config-vlanif-300)# mac-address 00:11:22:33:44:77
sonic(config-vlanif-300)# vrf 456
sonic(config-vlanif-300)# exit

第 4 步

配置 BGP

Spine1

sonic(config)# router bgp 65200
sonic(config-router)# bgp router-id 10.1.0.210
sonic(config-router)# no bgp ebgp-requires-policy
sonic(config-router)# neighbor PEER_V4_EBGP peer-group
sonic(config-router)# neighbor 172.16.11.2 remote-as 65202
sonic(config-router)# neighbor 172.16.11.2 peer-group PEER_V4_EBGP
sonic(config-router)# neighbor 172.16.12.2 remote-as 65203
sonic(config-router)# neighbor 172.16.12.2 peer-group PEER_V4_EBGP
sonic(config-router)# neighbor 172.16.13.2 remote-as 65204
sonic(config-router)# neighbor 172.16.13.2 peer-group PEER_V4_EBGP
sonic(config-router)# neighbor 172.16.14.2 remote-as 65205
sonic(config-router)# neighbor 172.16.14.2 peer-group PEER_V4_EBGP
sonic(config-router)# address-family ipv4 unicast
sonic(config-router-af)# network 10.1.0.210/32
sonic(config-router-af)# neighbor PEER_V4_EBGP activate
sonic(config-router-af)# redistribute connected
sonic(config-router-af)#exit
sonic(config-router)# address-family l2vpn evpn
sonic(config-router-af)# advertise-all-vni
sonic(config-router-af)# neighbor PEER_V4_EBGP activate
sonic(config-router-af)#end
sonic#write
sonic#reload

Spine2

sonic(config)# router bgp 65201
sonic(config-router)# bgp router-id 10.1.0.211
sonic(config-router)# no bgp ebgp-requires-policy
sonic(config-router)# neighbor PEER_V4_EBGP peer-group
sonic(config-router)# neighbor 172.16.15.2 remote-as 65202
sonic(config-router)# neighbor 172.16.15.2 peer-group PEER_V4_EBGP
sonic(config-router)# neighbor 172.16.16.2 remote-as 65203
sonic(config-router)# neighbor 172.16.16.2 peer-group PEER_V4_EBGP
sonic(config-router)# neighbor 172.16.17.2 remote-as 65204
sonic(config-router)# neighbor 172.16.17.2 peer-group PEER_V4_EBGP
sonic(config-router)# neighbor 172.16.18.2 remote-as 65205
sonic(config-router)# neighbor 172.16.18.2 peer-group PEER_V4_EBGP
sonic(config-router)# address-family ipv4 unicast
sonic(config-router-af)# network 10.1.0.211/32
sonic(config-router-af)# neighbor PEER_V4_EBGP activate
sonic(config-router-af)# redistribute connected
sonic(config-router-af)#exit
sonic(config-router)# address-family l2vpn evpn
sonic(config-router-af)# advertise-all-vni
sonic(config-router-af)# neighbor PEER_V4_EBGP activate
sonic(config-router-af)#end
sonic# write
sonic# reload

Leaf1 

sonic(config)# router bgp 65202
sonic(config-router)# bgp router-id 10.1.0.212
sonic(config-router)# no bgp ebgp-requires-policy
sonic(config-router)# neighbor PEER_V4_EBGP peer-group
sonic(config-router)# neighbor 172.16.11.1 remote-as 65200
sonic(config-router)# neighbor 172.16.11.1 peer-group PEER_V4_EBGP
sonic(config-router)# neighbor 172.16.15.1 remote-as 65201
sonic(config-router)# neighbor 172.16.15.1 peer-group PEER_V4_EBGP
sonic(config-router)# address-family ipv4 unicast
sonic(config-router-af)# network 10.1.0.212/32
sonic(config-router-af)# neighbor PEER_V4_EBGP activate
sonic(config-router-af)# redistribute connected
sonic(config-router-af)# exit
sonic(config-router)# address-family l2vpn evpn
sonic(config-router-af)# advertise-all-vni
sonic(config-router-af)# neighbor PEER_V4_EBGP activate
sonic(config-router-af)#exit
sonic(config-router)#exit

Leaf2

sonic(config)# router bgp 65203
sonic(config-router)# bgp router-id 10.1.0.213
sonic(config-router)# no bgp ebgp-requires-policy
sonic(config-router)# neighbor PEER_V4_EBGP peer-group
sonic(config-router)# neighbor 172.16.12.1 remote-as 65200
sonic(config-router)# neighbor 172.16.12.1 peer-group PEER_V4_EBGP
sonic(config-router)# neighbor 172.16.16.1 remote-as 65201
sonic(config-router)# neighbor 172.16.16.1 peer-group PEER_V4_EBGP
sonic(config-router)# address-family ipv4 unicast
sonic(config-router-af)# network 10.1.0.213/32
sonic(config-router-af)# neighbor PEER_V4_EBGP activate
sonic(config-router-af)# redistribute connected
sonic(config-router-af)# exit
sonic(config-router)# address-family l2vpn evpn
sonic(config-router-af)# advertise-all-vni
sonic(config-router-af)# neighbor PEER_V4_EBGP activate
sonic(config-router-af)#exit
sonic(config-router)#exit

Leaf3

sonic(config)# router bgp 65204
sonic(config-router)# bgp router-id 10.1.0.214
sonic(config-router)# no bgp ebgp-requires-policy
sonic(config-router)# neighbor PEER_V4_EBGP peer-group
sonic(config-router)# neighbor 172.16.13.1 remote-as 65200
sonic(config-router)# neighbor 172.16.13.1 peer-group PEER_V4_EBGP
sonic(config-router)# neighbor 172.16.17.1 remote-as 65201
sonic(config-router)# neighbor 172.16.17.1 peer-group PEER_V4_EBGP
sonic(config-router)# address-family ipv4 unicast
sonic(config-router-af)# network 10.1.0.214/32
sonic(config-router-af)# neighbor PEER_V4_EBGP activate
sonic(config-router-af)# redistribute connected
sonic(config-router-af)# exit
sonic(config-router)# address-family l2vpn evpn
sonic(config-router-af)# advertise-all-vni
sonic(config-router-af)# neighbor PEER_V4_EBGP activate
sonic(config-router-af)# exit
sonic(config-router)# exit

Leaf4

sonic(config)# router bgp 65205
sonic(config-router)# bgp router-id 10.1.0.215
sonic(config-router)# no bgp ebgp-requires-policy
sonic(config-router)# neighbor PEER_V4_EBGP peer-group
sonic(config-router)# neighbor 172.16.14.1 remote-as 65200
sonic(config-router)# neighbor 172.16.14.1 peer-group PEER_V4_EBGP
sonic(config-router)# neighbor 172.16.18.1 remote-as 65201
sonic(config-router)# neighbor 172.16.18.1 peer-group PEER_V4_EBGP
sonic(config-router)# address-family ipv4 unicast
sonic(config-router-af)# network 10.1.0.215/32
sonic(config-router-af)# neighbor PEER_V4_EBGP activate
sonic(config-router-af)# redistribute connected
sonic(config-router-af)# exit
sonic(config-router)# address-family l2vpn evpn
sonic(config-router-af)# advertise-all-vni
sonic(config-router-af)# neighbor PEER_V4_EBGP activate
sonic(config-router-af)# exit
sonic(config-router)# exit

第 5 步

配置evpn multihoming

Leaf1

sonic(config)# interface vxlan 0
sonic(config-vxlanif-0)# source 10.1.0.212
sonic(config-vxlanif-0)# exit
sonic(config)# vlan 100
sonic (config-vlan-100)# vni 100
sonic (config-vlan-100)# exit
sonic(config)# vlan 200
sonic (config-vlan-200)# vni 200
sonic (config-vlan-200)# exit
sonic(config)# vrf 123
sonic(config-vrf)# vni 1000
sonic(config-vrf)# exit
sonic(config)# evpn mh redirect-off
sonic(config)# evpn mh mac-holdtime 0
sonic(config)# evpn mh neigh-holdtime 0
sonic(config)# interface ethernet 0/3
sonic(config-if-0/3)# evpn mh uplink
sonic(config-if-0/3)# exit
sonic(config)# interface ethernet 0/4
sonic(config-if-0/4)# evpn mh uplink
sonic(config-if-0/4)# exit
sonic(config)# interface link-aggregation 5
sonic(config-lagif-5)# evpn mh es-id 100
sonic(config-lagif-5)# evpn mh es-sys-mac 00:00:01:00:00:01
sonic(config-lagif-5)# interface link-aggregation 6
sonic(config-lagif-6)# evpn mh es-id 200
sonic(config-lagif-6)# evpn mh es-sys-mac 00:00:01:00:00:02
sonic(config-lagif-6)#end
sonic# write
sonic# reload

Leaf2

sonic(config)# interface vxlan 0
sonic(config-vxlanif-0)# source 10.1.0.213
sonic(config-vxlanif-0)# exit
sonic(config)# vlan 100
sonic (config-vlan-100)# vni 100
sonic (config-vlan-100)# exit
sonic(config)# vlan 200
sonic (config-vlan-200)# vni 200
sonic (config-vlan-200)# exit
sonic(config)# vrf 123
sonic(config-vrf)# vni 1000
sonic(config-vrf)# exit
sonic(config)# evpn mh redirect-off
sonic(config)# evpn mh mac-holdtime 0
sonic(config)# evpn mh neigh-holdtime 0
sonic(config)# interface ethernet 0/3
sonic(config-if-0/3)# evpn mh uplink
sonic(config-if-0/3)# exit
sonic(config)# interface ethernet 0/4
sonic(config-if-0/4)# evpn mh uplink
sonic(config-if-0/4)# exit
sonic(config)# interface link-aggregation 5
sonic(config-lagif-5)# evpn mh es-id 100
sonic(config-lagif-5)# evpn mh es-sys-mac 00:00:01:00:00:01
sonic(config-lagif-5)# interface link-aggregation 6
sonic(config-lagif-6)# evpn mh es-id 200
sonic(config-lagif-6)# evpn mh es-sys-mac 00:00:01:00:00:02
sonic(config-lagif-6)#end
sonic# write
sonic# reload

Leaf3

sonic(config)# interface vxlan 0
sonic(config-vxlanif-0)# source 10.1.0.214
sonic(config-vxlanif-0)# exit
sonic(config)# vlan 300
sonic (config-vlan-300)# vni 300
sonic (config-vlan-300)# exit
sonic(config)# vrf 456
sonic(config-vrf)# vni 1000
sonic(config-vrf)# exit
sonic(config)# evpn mh redirect-off
sonic(config)# evpn mh mac-holdtime 0
sonic(config)# evpn mh neigh-holdtime 0
sonic(config)# interface ethernet 0/2
sonic(config-if-0/2)# evpn mh uplink
sonic(config-if-0/2)# exit
sonic(config)# interface ethernet 0/3
sonic(config-if-0/3)# evpn mh uplink
sonic(config-if-0/3)# exit
sonic(config)# interface link-aggregation 7
sonic(config-lagif-7)# evpn mh es-id 300
sonic(config-lagif-7)# evpn mh es-sys-mac 00:00:01:00:00:03
sonic(config-lagif-7)#end
sonic# write
sonic# reload

Leaf4

sonic(config)# interface vxlan 0
sonic(config-vxlanif-0)# source 10.1.0.215
sonic(config-vxlanif-0)# exit
sonic(config)# vlan 300
sonic (config-vlan-300)# vni 300
sonic (config-vlan-300)# exit
sonic(config)# vrf 456
sonic(config-vrf)# vni 1000
sonic(config-vrf)# exit
sonic(config)# evpn mh redirect-off
sonic(config)# evpn mh mac-holdtime 0
sonic(config)# evpn mh neigh-holdtime 0
sonic(config)# interface ethernet 0/2
sonic(config-if-0/2)# evpn mh uplink
sonic(config-if-0/2)# exit
sonic(config)# interface ethernet 0/3
sonic(config-if-0/3)# evpn mh uplink
sonic(config-if-0/3)# exit
sonic(config)# interface link-aggregation 7
sonic(config-lagif-7)# evpn mh es-id 300
sonic(config-lagif-7)# evpn mh es-sys-mac 00:00:01:00:00:03
sonic(config-lagif-7)#end
sonic# write
sonic# reload

第 6 步

配置 3 台server的bond接口

Server-1

#configure bond0
[root@localhost /]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vi ifcfg-bond0
DEVICE=bond0
BOOTPROTO=static
TYPE=bond
ONBOOT=yes
BONDING_OPTS=”miimon=100 mode=4 lacp_rate=fast xmit_hash_policy=layer3+4 fail_over_mac=1 “
IPADDR=100.0.0.12
NETMASK=255.255.255.0
GATEWAY=100.0.0.1
MASTER=yes

#configure eth0
[root@localhost network-scripts]# vi ifcfg-eth0
DEVICE=”eth0″
BOOTPROTO=none
ONBOOT=”yes”
MASTER=bond0
SLAVE=yes

#configure eth1
[root@localhost network-scripts]# vi ifcfg-eth1
DEVICE=”eth1″
BOOTPROTO=none
ONBOOT=”yes”
MASTER=bond0
SLAVE=yes

Server-2

#configure bond0
[root@localhost /]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vi ifcfg-bond0
DEVICE=bond0
BOOTPROTO=static
TYPE=bond
ONBOOT=yes
BONDING_OPTS=”miimon=100 mode=4 lacp_rate=fast xmit_hash_policy=layer3+4 fail_over_mac=1 “
IPADDR=110.0.0.12
NETMASK=255.255.255.0
GATEWAY=110.0.0.1
MASTER=yes

#configure eth0
[root@localhost network-scripts]# vi ifcfg-eth0
DEVICE=”eth0″
BOOTPROTO=none
ONBOOT=”yes”
MASTER=bond0
SLAVE=yes

#configure eth1
[root@localhost network-scripts]# vi ifcfg-eth1
DEVICE=”eth1″
BOOTPROTO=none
ONBOOT=”yes”
MASTER=bond0
SLAVE=yes

Server-3

#configure bond0
[root@localhost /]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vi ifcfg-bond0
DEVICE=bond0
BOOTPROTO=static
TYPE=bond
ONBOOT=yes
BONDING_OPTS=”miimon=100 mode=4 lacp_rate=fast xmit_hash_policy=layer3+4 fail_over_mac=1 “
IPADDR=120.0.0.12
NETMASK=255.255.255.0
GATEWAY=120.0.0.1
MASTER=yes

#configure eth0
[root@localhost network-scripts]# vi ifcfg-eth0
DEVICE=”eth0″
BOOTPROTO=none
ONBOOT=”yes”
MASTER=bond0
SLAVE=yes

#configure eth1
[root@localhost network-scripts]# vi ifcfg-eth1
DEVICE=”eth1″
BOOTPROTO=none
ONBOOT=”yes”
MASTER=bond0
SLAVE=yes

完成配置后的server接口状态如下:

完成配置后的server接口状态

4.7 验证网络配置

1.各server之间互ping,能够ping通。

2.检查每个交换机的BGP状态。以 Spine1 和 Leaf1 为例:

Spine1

sonic# show bgp summary
Spine1 BGP状态

Leaf1

sonic# show bgp summary

Leaf1 BGP状态

从查询结果可以看出各switch的bgp状态正常。

3.查看各leaf的聚合口状态,以leaf1和leaf3为例:

Leaf1

sonic# show link-aggregation summary
Leaf1聚合口状态

Leaf3

sonic# show link-aggregation summary
Leaf3聚合口状态

从查询结果可以看出各leaf的lag口状态正常。

4.查看各leaf的vxlan隧道,以leaf1和leaf3为例

Leaf1

sonic# show vxlan tunnel
查看Leaf1 vxlan隧道

Leaf3

sonic# show vxlan tunnel
查看Leaf3 vxlan隧道

从查询结果可以看出各leaf vxlan tunnel状态正常。

5.查看各leaf的evpn multihoming 状态

Leaf1

sonic# show evpn es detail
查看leaf1的evpn multihoming 状态

Leaf2

sonic# show evpn es detail
查看leaf2的evpn multihoming 状态

Leaf3

sonic# show evpn es detail
查看leaf3的evpn multihoming 状态

Leaf4

sonic# show evpn es detail
查看各leaf4的evpn multihoming 状态

从查询结果可以看出4台leaf的状态正常,其中leaf1和leaf3分别作为DF设备。

6.用server1 ping server3,将leaf1的ethernet0/1接口down掉,查看lag5的DF设备状态,并查看server1的ping是否中断。

sonic(config-if-0/1)# shutdown
sonic# show evpn es detail
shutdown leaf1的ethernet0/1接口

从结果看,down掉0/1接口后,lag5的leaf1转变为non-df状态,同时leaf2转变为df状态。

并且Server1的ping没有中断。

5 结论

本次测试中,使用vAsterNOS及VM设备组网并配置EVPN Multihoming网络后,各VM之间能互相正常通信,并且leaf之间能正确建立vxlan隧道,相关路由也正常工作。当VM的其中一条接入链路断开后,数据会无缝切换到另一条链路继续传输,DF设备切换正常。当断开的链路重新连接正常后,DF设备也切回原来的设备,数据重新回到原来链路上传输。说明EVPN Multihoming功能工作正常,满足用户的网络高可靠需求。

6 设备升级

6.1 注意事项

以升级 Leaf-1 交换机为例,有以下注意事项:
(1)为减少 Leaf 设备升级期间对业务的影响,应当手动关闭 Leaf-1相应接口,将业务流量全部切换至 Leaf-2后,再对 Leaf-1 进行升级。
(2)如果在 Unique-IP VLAN 下有终端接入,若终端的网关设置为 Leaf-1 的 VLAN,需提前修改终端的网关为Leaf-2、再对 Leaf-1 进行升级。
(3)建议 Leaf 设备升级间隔至少 10 分钟。
下面对具体的操作步骤进行说明。

6.2 操作步骤

  • 登录 Leaf-1 交换机,完成待升级的镜像安装后,执行configure terminal命令,进入系统配置视图;
  • 将下行聚合接口的 LACP 协议状态依次置为 Down(该命令单次有效,重启自动恢复),实现用户侧流量的切换;
evpnmh-leaf-1(config)# interface link-aggregation 100 
evpnmh-leaf-1(config-lagif-100)# lacp graceful-down 
evpnmh-leaf-1(config)# interface link-aggregation 101 
evpnmh-leaf-1(config-lagif-100)# lacp graceful-down 

检查Leaf-1的下行聚合组状态:

evpnmh-leaf-1# show link-aggregation summary 
Flags: A - active, I - inactive, Up - up, Dw - Down, N/A - not available, 
       S - selected, D - deselected, * - not synced 
  No.  Team Dev         Protocol     Ports          Description -----  ---------------  -----------  -------------  ------------- 
 0100  lag 100          LACP(A)(Dw)  0/64      (D)  N/A 
  • 将上行口的物理状态依次置为 Down,实现隧道流量的切换
evpnmh-leaf-1(config)# interface ethernet 0/48 
evpnmh-leaf-1(config-if-0/48)# shutdown 
evpnmh-leaf-1(config-if-0/48)# interface ethernet 0/52 
evpnmh-leaf-1(config-if-0/52)# shutdown 
  • 通过show counters interface命令确定Leaf-1上没有流量经过,已完全切换至Leaf-2。
  • 升级重启Leaf-1;
 evpnmh-leaf-1# reboot 
Do you want to reboot? [y/N]: y 

待升级完成,流量将自动切回 Leaf-1,检査 Leaf-1 的下行聚合组状态、BGP 邻居状态是否正常,确认 Leaf-1 恢复转发流量,再按照同样步骤进行 Leaf-2 设备的升级。

点击了解Asterfusion CX-N数据中心交换机

如有其它问题,请填写右侧需求表单联系我们

Asterfusion SONiC交换机的RoCE方案配置

1 目的

本文主要讲解企业级sonic交换机的RoCE方案及配置。

2 型号和版本

以下产品可以实现本方案:
CX-N系列交换机
AsterNOS系统软件版本:
AsterNOSv3.1

3 RoCE 原理和配置注意事项

3.1 RoCE介绍

在各种HPC高性能计算场景中,对网络的诉求基本上是高吞吐和低时延这两个重要特性,为了实现高吞吐和低时延,业界一般采用 RDMA(Remote Direct Memory Access,远程直接内存访问)替代 TCP 协议。但是RDMA 对于丢包非常敏感,一旦发生丢包重传,性能会急剧下降。因此要使得 RDMA 吞吐不受影响,丢包率必须保证在 1e-05(十万分之一)以下,最好为零丢包。

RoCE (RDMA over Converged Ethernet)网络通过PFC+ECN特性来保障网络传输过程不丢包。

3.2 RoCE 原理和配置注意事项

RoCE网络通过PFC+ECN方式保证网络无损。具体原理如下:

PFC+ECN原理

当serverA与serverB通信时,正常数据流向如绿色实线所示,从A经过交换机S到达B,然后再由B返回到A。

当报文发生拥塞时,需要先使ECN发挥作用,设置交换机的ECN缓存阈值区间为N~M,当缓存超过N时,S开始随机在报文中标记ECN位,当缓存超过M时,S开始在所有报文中标记ECN位。B收到带有ECN标记的报文后,开始向A发送CNP报文,通知A降低发送速率,直到找到最佳速率后,以该速率持续发送数据,从而达到不丢包的目的。

当报文发生拥塞时,PFC也会发挥作用,设置交换机的PFC缓存阈值为Q,当缓存超过Q时,交换机会立即向A持续发送PAUSE数据帧,A收到PAUSE帧后,会立即停止向S的该队列发送报文,这时数据流会中断。当A不再收到pause报文之后,将重新开始向S发送报文。

因此,为了降低数据中断对业务的影响,应尽量避免PFC的触发,使用ECN来保障数据传输,此时就需要交换机的缓存阈值设置Q应该大于M。确保ECN先于PFC触发。

4 Asterfusion Enterprise SONiC 交换机 RoCE 配置

Asterfusion交换机运行企业级SONiC(AsterNOS)系统,采用PFC+ECN的方式保障RoCE网络无损。

有两种配置方式:

4.1 一键自动配置RoCE参数

Example:
sonic# configure terminal
sonic(config)# qos roce lossless
sonic(config)# qos service-policy roce_lossless

它还提供所有与 RoCE 相关配置信息的一键查看功能。命令如下:

sonic# show qos roce

4.2 手动配置RoCE参数

当一键RoCE的配置参数与当前场景并不是很匹配时,也可以手动进行参数配置,以达到最佳效果,相关配置如下:

修改 DSCP 映射

configure termin

diffserv-map type ip-dscp roce_lossless_diffserv_map   #进入DSCP映射配置视图

ip-dscp value cos cos_value  #配置DSCP到COS的映射,value指定DSCP值,范围0-63;cos_value指定COS值,范围0-7

default {cos_value|copy}  #default cos_value表示所有数据包被映射到相应的COS值;default copy表示系统默认的映射

Example:
sonic# configure terminal
sonic(config)# diffserv-map type ip-dscp roce_lossless_diffserv_map
sonic(config-diffservmap-roce_lossless_diffserv_map)# ip-dscp 1 cos 1
sonic(config-diffservmap-roce_lossless_diffserv_map)# default copy

修改队列调度策略

configure terminal

policy-map roce_lossless    #进入相关视图

queue-scheduler priority queue queue-id  #配置SP模式调度,queue-id表示队列,范围0-7

queue-scheduler queue-limit percent queue-weight queue queue-id #配置DWRR模式调度queue-weight表示调度权重百分比,范围0-100;queue-id表示队列,范围0-7

Example:
sonic# configure terminal
sonic(config)# policy-map roce_lossless
sonic(config-pmap-roce-lossless)# queue-scheduler priority queue 3
sonic(config-pmap-roce_lossless)# queue-scheduler queue-limit percent 60 queue 3

调整PFC水线

configure terminal

buffer-profile roce_lossless_profile #进入PFC配置视图

mode lossless dynamic dynamic_th size size xoff xoff xon-offset xon-offset [xon xon]

#修改PFC无损Buffer。

dynamic_th表示动态阈值系数,取值范围为[-4,3];动态阈值= 2dynamic_th×剩余可用buffer。例如,dynamic_th设为1,那么动态阈值为2倍的剩余可用buffer,即实际threshold为2/3的总可用buffer;

size表示保留大小,单位为字节,建议配置值为1518;

xoff表示PFC反压帧触发缓存门限值,建议配置为cell size(224 Bytes)的整数倍,单位为字节。xoff与线缆长度,接口速率等参数有关。xoff值必须大于xon值;

xon-offset表示PFC反压帧停止缓存门限值,建议配置为cell size(224 Bytes)的整数倍,单位为字节。建议配置值为13440;

xon为可选参数一般配置为0。

Example:
sonic# configure terminal
sonic(config)# buffer-profile roce_lossless_profile
sonic(config-buffer-profile-roce_lossless_profile)# mode lossless dynamic 1 size 1518 xoff 896 xon-offset 13440 xon 0

调整ECN水线

configure terminal

wred roce_lossless_ecn  #进入ECN配置视图

mode ecn gmin min_th gmax max_th gprobability probability [ymin min_th ymax max_th yprobability probability|rmin min_th rmax max_th rprobability probability]

#修改ECN参数。

min_th设置显式拥塞通告的下限绝对值,单位为字节。即当队列中的报文长度达到此数值时,接口开始按照概率将报文的ECN字段置为CE。可配置的min threshold最小值为15KB,建议配置值为15360;

max_th设置显式拥塞通告的上限绝对值,单位为字节。即当队列中的报文长度达到此数值时,接口开始将全部报文的ECN字段置为CE;不同速率接口的建议值分别为:100/200G为76800,400G为1536000。

probability设置将报文的ECN字段的设置为CE的最大概率,整数形式,取值范围[1,100]。对于时延敏感型业务,建议最大丢弃概率设置为90%;对于吞吐敏感型业务,建议设置为10%。

Example:
sonic# configure terminal
sonic(config)# wred roce_lossless_ecn
sonic(config-wred-roce_lossless_ecn)# mode ecn gmin 15360 gmax 76800 gprobability 90

5 用户测试案例

5.1 要求

现用三台已安装Mellanox 100G网卡的服务器,测试CX532P-N交换机无损转发数据的特性,如下图所示,用server1发送RDMA流量经过交换机的无损队列转发给server3,同时用server2发送普通TCP流量经交换机转发给server3,查看数据接收情况。

5.2 拓扑图

拓扑图

5.3 测试环境

硬件

名称型号硬件指标数量备注
交换机CX532P-N参见彩页2
服务器X86普通服务器3安装100G IB网卡
光模块100GQSFP286
光纤多模100G适用3
网卡MCX653195A-ECAT100G3

软件

软件版本备注
交换机操作系统AsterNOSv3.1
宿主机操作系统openEuler 22.03
宿主机内核 5.10.0-136.33.0.109
Mellanox网卡驱动5.10.0-60.18.0网卡驱动版本要适配宿主机内核版本
iperf33.9

管理网口IP地址规划

设备名称接口IP地址备注
CX532P-N管理口10.230.1.18
Server-1管理口10.230.1.11
Server-2管理口10.230.1.12
Server-3管理口10.230.1.13

业务网口IP地址规划

设备名称接口IP地址备注
CX532P-NVlan接口100.0.10.200
Server-1业务接口100.0.10.10Mellanox 网卡接口
Server-2业务接口100.0.10.11Mellanox 网卡接口
Server-3业务接口100.0.10.12Mellanox 网卡接口

5.4 测试前的准备工作

根据拓扑图将每台服务器连接到交换机,确保服务器上已正确安装 Mellanox 网卡和驱动程序,并安装 iperf3 测试工按照组网图将各服务器与交换机正确连接,确保服务器上安装好mellanox网卡及驱动,并安装好iperf3测试工具。

5.5 配置步骤

第 1 步

对交换机进行基础配置,确保三个接口在同一二层网络中,数据能正常转发。

sonic# configure terminal
sonic(config)# vlan 101
sonic(config-vlan-101)# interface ethernet 0/0
sonic(config-if-0/0)# switchport access vlan 101
sonic(config-if-0/0)# interface ethernet 0/4
sonic(config-if-0/4)# switchport access vlan 101
sonic(config-if-0/4)# interface ethernet 0/8
sonic(config-if-0/8)# switchport access vlan 101
sonic(config-if-0/8)# exit
sonic(config)# interface vlan 101
sonic(config-vlanif-101)# ip address 100.0.10.200/24

第 2 步

一键配置交换机RoCE参数。

onic# configure terminal
sonic(config)# qos roce lossless
sonic(config)# qos service-policy roce_lossless

查看交换机RoCE配置

sonic# show qos roce
查看RoCE配置

第 3 步

配置三台服务器ip地址,并配置网卡的RoCE参数,本次无损队列使用队列3。

[admin@Server1~]# sudo ifconfig ens1f2 100.0.10.10/24 up
[admin@Server2~]# sudo ifconfig ens1f2 100.0.10.11/24 up
[admin@Server3~]# sudo ifconfig ens1f2 100.0.10.12/24 up
[admin@Server1~]# sudo mlnx_qos -i ens1f2 –trust dscp
[admin@Server1~]# sudo mlnx_qos -i ens1f2 –pfc 0,0,0,1,0,0,0,0
[admin@Server1~]# sudo cma_roce_mode -d mlx5_0 -p 1 -m 2
[admin@Server1~]# sudo echo 96 > /sys/class/infiniband/mlx5_0/tc/1/traffic_class
[admin@Server1~]# sudo cma_roce_tos -d mlx5_0 -t 96
[admin@Server1~]# sudo echo 1 > /sys/class/net/ens1f2/ecn/roce_np/enable/3
[admin@Server1~]# sudo echo 1 > /sys/class/net/ens1f2/ecn/roce_rp/enable/3
[admin@Server1~]# sudo echo 16 > /sys/class/net/ens1f2/ecn/roce_np/cnp_dscp
[admin@Server1~]# sudo sysctl -w net.ipv4.tcp_ecn=1
[admin@Server3~]# sudo mlnx_qos -i ens1f2 –trust dscp
[admin@Server3~]# sudo mlnx_qos -i ens1f2 –pfc 0,0,0,1,0,0,0,0
[admin@Server3~]# sudo cma_roce_mode -d mlx5_0 -p 1 -m 2
[admin@Server3~]# sudo echo 96 > /sys/class/infiniband/mlx5_0/tc/1/traffic_class
[admin@Server3~]# sudo cma_roce_tos -d mlx5_0 -t 96
[admin@Server3~]# sudo echo 1 > /sys/class/net/ens1f2/ecn/roce_np/enable/3
[admin@Server3~]# sudo echo 1 > /sys/class/net/ens1f2/ecn/roce_rp/enable/3
[admin@Server3~]# sudo echo 16 > /sys/class/net/ens1f2/ecn/roce_np/cnp_dscp
[admin@Server3~]# sudo sysctl -w net.ipv4.tcp_ecn=1

第 4 步

使用server1和server2向server3发数据包,其中server1发送RoCE流量,server2发送tcp流量。

[admin@Server3~]# ib_send_lat -R -d mlx5_0 -F –report_gbits -a
[admin@Server1~]# ib_send_lat -a -R -x 3 -d mlx5_0 -F -f 2 100.0.10.12
[admin@Server3~]# iperf3 -s
[admin@Server2~]# iperf3 -c 100.0.10.12 -l 20k -b 100G -M 9000 -t 1000

查看三个接口的各队列数据转发情况。

sonic# show counters queue 0/0
查看0/0接口的队列转发
sonic# show counters queue 0/4
查看0/4接口的队列转发
sonic# show counters queue 0/8
查看0/8接口的队列转发

6 结论

由转发结果可以看出,经过队列3转发的RoCE流量未丢包,经过队列0转发的TCP流量由于带宽不足产生丢包。CX532P-N交换机可以通过RoCE功能实现网络无损传输。

点击了解Asterfusion CX-N数据中心交换机

如有其它问题,请填写右侧需求表单联系我们

Asterfusion 企业级SONiC交换机虚拟环境搭建

1 目的

本文主要介绍Asterfusion企业级SONiC交换机虚拟操作系统(vAsterNOS)环境的搭建。通过阅读本文,用户可以在GNS3虚拟平台上快速部署vAsterNOS镜像,从而使用户更容易学习和理解Asterfusion企业级SONiC交换机的使用。

2 vAsterNos介绍

vAsterNos是星融元推出的一款sonic交换机的虚拟操作系统,它继承了AsterNOS的所有软件特性,可运行在GNS3、EVE-NG等网络虚拟软件中。用户可以通过使用vAsterNos更好地了解星融元企业级sonic交换机的特性,从而为构建高效网络环境提供有力支撑。

3 环境要求

3.1 硬件

名称型号硬件指标数量备注
PCX86普通个人PC1
服务器X86 CPU:Intel Xeon Gold5118 2.30GHZ
内存:512GB
1BIOS开启VT

3.2 软件

软件版本备注
ESXI 镜像ESXI-6.7.0-20191204001VMware 服务器版本
GNS3 VM Server2.2.45GNS3 版本 > 2.2.43
QEMU4.2.1
GNS3 VM Client2.2.45GNS3 Client版本必须与Server版本相同
VM Server0.15.0
vAsterNOS3.1AsterNOS社区版镜像,最低配置2C4G
vAsterNOS.gns34GNS3 registry 版本 > 3
Centos76.qcow2Centos7.6

3.3 获取软件镜像

用户可从网上自行下载GNS3、VM、Centos等相关软件的镜像,也可向我们提出申请来获取vAsterNOS镜像软件。当然,Asterfusion也可提供上述提到的其它所有软件。只需申请通过即可全部下载。

4 vAsterNOS运行环境搭建

vAsterNOS可以在GNS3和EVE-NG等网络虚拟软件中运行。本文主要介绍GNS3网络虚拟化软件中搭建。首先,您需要下载上述软件镜像并将其放在您的电脑上,并将安装有vmware ESXI的服务器开启,使PC与服务器连接,pc端通过web能够访问到服务器。装GNS3、vAsterNOS等软件。

4.1 安装 GNS3 server

通过PC端Web访问ESXI server并登录。单击创建/注册虚拟机,如下所示:

创建/注册虚拟机

选择从 OVF 或 OVA 文件部署虚拟机,然后单击下一步

部署虚拟机

输入虚拟机的名称,然后单击下一步

输入虚拟机的名称

选择 GNS3 VM.ova 并安装

选择 GNS3 VM.ova

4.2 配置 GNS3 VM

完成GNS3 VM的创建后,在管理页面通过Network配置VM管理口IP,并重启虚拟机。

右键单击 GNS3 VM 窗口,选择“控制台”,然后在新窗口中打开控制台,如下所示:

打开控制台

此时出现相关配置界面,选择network进入

相关配置界面

然后出现以下界面:

配置界面

修改IP地址、网关、DNS等相关参数。IP 地址需要与 VMware ESXI 系统同网段。如下:

修改参数

然后保存并退出,完成网络相关配置。

接下来点击编辑,进入虚拟机设置界面,如下图所示:

虚拟机设置

需要将CPU及内存设置为合适的值,例如运行一个2+4的spine-leaf网络,需要运行6个vAsterNos镜像,每个vAsterNos镜像的运行配置不低于2核4G,那么就需要将CPU合数设置为大于12核,将内存设置为大于24G。同时,如果运行虚拟PC作为验证数据使用,也同样需要计算所占用的cpu及内存资源。本文设置为24核130G。

完成设置后的GNS3配置如下图:

GNS3配置

其用户名和密码默认为 gns3/gns3。

4.3 配置vswitch

选择网络-vswitch-vswitch0,如下图所示:

网络-vswitch-vswitch0

单击编辑设置。您需要将安全策略调整为混杂模式,如下所示:

模式调整

完成上述所有设置后,重新启动 GNS3 虚拟机。

4.4 安装GNS3 VM client

GNS3 VM client安装在个人计算机中,直接使用准备的EXE文件安装即可。安装完成之后用于远程连接GNS3 VM Server。完成镜像导入、网络拓扑创建以及基础配置等操作。

打开GNS3 client,点击edit,选择preferences,如下:

选择preferences

选择server,并设置host及user/passward,如下:

设置host及user/passward

4.5 导入vAsterNOS镜像文件

打开GNS3 client,选择file-new blank project,如下

选择file-new blank project

输入项目名称,如下所示:

输入项目名称

然后选择 file-import appliance 并导入 vAsterNos 镜像配置文件,如下所示:

导入镜像配置文件

选择要导入的镜像配置文件,如下所示:

选择镜像文件

然后选择安装到主server,如下所示:

安装到主Server

然后检查镜像文件是否匹配

检查镜像文件

然后点击next,等待导入完成即可。 新导入的vAsterNos系统,默认用户名密码为admin/asteros. 需要说明的是Asterfusion-vAsterNOS.gns3a和vAsterNOS-V3.1.img文件需放在同一路径下。

等待导入

4.6 为vAsterNOS分配资源和导入图标

将准备好的asterfusion-vAsterNOS.svg文件,通过scp等方式上传到GNS3 VM Server相关目录中,文件路径:/home/gns3/GNS3/symbols/asterfusion-vAsterNOS.svg。

然后在GNS3 client端选择使用该图标文件,如下图,在左侧红框内找到vAsterNos设备

选择图标

然后右键,选择configure template

选择configure template

在symbol选择browse,如下

在symbol选择browse

选择 vAsterNOS 图标文件,如下所示:

选择图标文件

同时,在该界面配置cpu核数及内存容量,如下:

配置cpu核数及内存容量

至此,vAsterNOS的导入工作已经完成,用户可以正常使用。

4.7 vAsterNOS的使用

拖出vAsterNOS并右键单击,会出现以下界面,您可以启动或停止设备,并可以通过custom console,调出配置界面,如下:

拖出vAsterNOS并右键单击

输入用户名和密码admin/asteros,开始探索vAsterNOS。

输入用户名和密码

4.8 安装Centos

组网过程中需要用到终端进行数据传输试验,以验证网络配置是否正确,所以需要再GNS3 vm server上安装centos程序,安装过程与vAsterNos类似,只需将centos镜像文件导入即可。需要说明的是,如果使用星融元提供的centos镜像,其默认用户名和密码为:root/ yx979150

5 验证 vAsterNOS 设备运行状态

我们组建了一个简单的网络来验证设备转发数据状态是否正常。网络拓扑如下:

网络拓扑

将一台vAsterNos设备及两台server设备链接,分别配置不同网段的ip地址并配置静态路由,用server-1 ping server-2,能够ping通,说明三台设备运行正常。

点击了解Asterfusion CX-N数据中心交换机

如有其它问题,请填写右侧需求表单联系我们

如何使用Nginx部署YUM源服务器

什么是YUM?

YUM是Yellow dog Updater, Modified的简写,它是由杜克大学团队修改Yellow Dog Linux的Yellow Dog Updater开发而成。

YUM源本质上是一个包含软件包的仓库, 其中包括了软件包的元数据信息,如软件包的版本、依赖关系等等。 管理员可以通过配置服务器上的YUM源来轻松管理服务器上的软件包,并且从中选择需要安装的软件包。本篇文章将提供一个使用Nginx配置自定义YUM源的操作实例。

虽然 YUM 最初是为 Linux 创建的,但它已被移植到许多其他操作系统上。

使用Nginx部署YUM源服务器流程

1 YUM源服务器使用场景

  • 服务器处于无网环境
  • 缓解公司网络带宽压力
  • 加快服务器软件安装部署

2 YUM源服务器必备条件

  • YUM源服务器能够自动定期的更新YUM源
  • 使用CentOS官方标准源保持更新
  • Linux客户端可以直接使用YUM源

3 YUM源服务器配置

主机系统IP地址软件
yum repoCentos7.4192.168.4.188Nginx+createrepo

服务器具体配置要求如下:

  • 至少2G内存
  • 至少2核CPU
  • 至少100G硬盘

4 环境准备

4.1 关闭SELinux

SELinux不关闭的情况下无法实现,会限制客户机和YUM源服务器的通信。

[root@yum~]# setenforce 0
[root@yum ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

4.2 关闭防火墙

防止安装时出现各个组件的端口不能访问的问题。

[root@yum ~]# systemctl stop firewalld && systemctl disable firewalld                          

5 部署YUM源服务器

部署YUM源的必要服务,并且修改相关服务的配置文件。

5.1 部署Nginx服务

我们使用Nginx配置YUM源服务器。

[root@yum ~]# yum -y install nginx
[root@yum ~]# vi /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
    worker_connections 1024;
}
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
        location / {
        }
	    autoindex on;
	autoindex_exact_size on;
 	    autoindex_localtime on;
        error_page 404 /404.html;
        location = /404.html {
        }
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
} 
[root@yum ~]# systemctl start nginx
[root@yum ~]# systemctl enable nginx

5.2 在Nginx建立目录

创建yum源目录。

[root@yum ~]# cd /usr/share/nginx/html
[root@yum html]# mkdir -p centos/asterfusion/7/7.4/x86_64
[root@yum html]# tree
├── html
│   ├── 404.html
│   ├── 50x.html
│   ├── centos
│   │   └── asterfusion
│   │       └── 7
│   │           ├── 7.4
│   │               ├── x86
│   │               └── x86_64

5.3 修改Nginx HTML

自定义yum源页面。本篇使用的是星融元Asterfusion自定义YUM源。

[root@yum ~]# cat /usr/share/nginx/html/index.html
        <h1>Welcome to <strong>Asterfusion</strong> on Internet!</h1>
    <div class="content">
    <a href="http://192.168.4.188/centos/asterfusion">Asterfusion Yum Repo</a><br/>
    <br/>
   </div
[root@yum ~]# systemctl restart nginx

5.4 验证yum源

使用服务器IP访问浏览器。

5.5 同步官方yum源

同步官方CentOS7源到本地,如果出现同步后没有对应的文件和目录的情况,检查本地的repo文件是否有错误。

[root@yum x86_64]# pwd
/usr/share/nginx/html/centos/asterfusion/7/7.4/x86_64
[root@yum x86_64]# yum -y install yum-utils createrepo
[root@yum x86_64]# reposync --repoid base  -p ./
[root@yum x86_64]# reposync --repoid epel  -p ./
[root@yum x86_64]# reposync --repoid extras  -p ./
[root@yum x86_64]# reposync --repoid updates  -p ./
[root@yum x86_64]# createrepo -p /usr/share/nginx/html/centos/asterfusion/7/7.4/x86_64/base
[root@yum x86_64]# createrepo -p /usr/share/nginx/html/centos/asterfusion/7/7.4/x86_64/epel
[root@yum x86_64]# createrepo -p /usr/share/nginx/html/centos/asterfusion/7/7.4/x86_64/extras
[root@yum x86_64]# createrepo -p \
/usr/share/nginx/html/centos/asterfusion/7/7.4/x86_64/updates

5.6 创建yum repo

部署优先级控制工具,可以控制客户端优先使用优先级较高的yum源,创建yum源repo文件。\

[root@yum x86_64]# yum install yum-plugin-priorities -y 
[root@yum x86_64]# cd /etc/yum.repos.d/
[root@yum yum.repos.d]# mkdir bak
[root@yum yum.repos.d]# mv ./* bak
[root@yum yum.repos.d]# vi Asterfusion.repo
[Asterfusion-base]
name=asterfusion-base
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/base
gpgcheck=0
enable=1
priority=1
[Asterfusion-epel]
name=asterfusion-epel
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/epel
gpgcheck=0
enable=1
priority=1
[Asterfusion-extras]
name=asterfusion-extras
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/extras
gpgcheck=0
enable=1
priority=1
[Asterfusion-updates]
name=asterfusion-updates
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/updates
gpgcheck=0
enable=1
priority=1

部署优先级控制工具,可以控制客户端优先使用优先级较高的yum源,创建yum源repo文件。

[root@yum x86_64]# yum install yum-plugin-priorities -y 
[root@yum x86_64]# cd /etc/yum.repos.d/
[root@yum yum.repos.d]# mkdir bak
[root@yum yum.repos.d]# mv ./* bak
[root@yum yum.repos.d]# vi Asterfusion.repo
[Asterfusion-base]
name=asterfusion-base
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/base
gpgcheck=0
enable=1
priority=1
[Asterfusion-epel]
name=asterfusion-epel
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/epel
gpgcheck=0
enable=1
priority=1
[Asterfusion-extras]
name=asterfusion-extras
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/extras
gpgcheck=0
enable=1
priority=1
[Asterfusion-updates]
name=asterfusion-updates
baseurl=http://192.168.4.188/centos/asterfusion/7/7.4/x86_64/updates
gpgcheck=0
enable=1
priority=1

5.7 重新建立缓存

清除本地缓存和重新建立缓存,检查yum源中的软件包。

[root@yum ~]# yum clean all
[root@yum ~]# yum makecache
[root@yum ~]# yum repolist

使用Nginx部署YUM源服务器-截图1

5.8 测试安装速度

使用本地源安装mariadb数据库,安装速度大大加快。

[root@yum ~]# yum install -y mariadb-server
使用Nginx部署YUM源服务器-截图2

5.9 配置yum源自动更新

在计划任务中加入yum源更新脚本,每周六18:30自动更新CentOS7.4 yum源。

[root@yum home]# vi updateyumrepo.sh
#!/bin/bash
reposync -n --repoid=extras --repoid=updates --repoid=base --repoid=epel -p \
/usr/share/nginx/html/centos/asterfusion/7/7.4/x86_64/
[root@yum home]# crontab -e
30 18 * * 6 /bin/bash /home/updateyurepo.sh
[root@yum home]# crontab -l
30 18 * * 6 /bin/bash /home/updateyurepo.sh

更多相关内容,请访问:A-Lab


星融元(Asterfusion)是领先的开放网络解决方案提供商,产品包括网络操作系统、数据中心交换机、智算交换机、园区交换机、NPB、DPU网卡和P4可编程硬件平台等。为行业企业、数据中心和云运营商提供基于通用解耦硬件和SONiC软件框架的全场景交钥匙网络解决方案,帮助用户构建AI时代中立、透明,易于运维、高性价比的基础网络自由选择。 www.asterfusion.com

OpenStack融合OpenDaylight的部署

OpenStack融合OpenDaylight的部署

1 介绍

OpenStack是流行的开源基础架构即服务项目,涵盖计算,存储和网络管理。OpenStack可以通过Modular Layer 2(ML2)北向插件将OpenDaylight用作其网络管理提供程序。OpenDaylight通过OVSDB南向插件管理OpenStack计算节点的网络流。本文分别介绍实验环境构建前准备、ODL安装、OpenStack配置、OpenStack和ODL集成等四个部分。

1.1 OpenDaylight简介

OpenDaylight(ODL)作为软件定义网络(SDN)的控制面,拥有一套模块化、可插拔灵活地控制平台作为核心,这个控制平台基于Java开发,理论上可以运行在任何支持Java的平台上,在一定程度上能够降低北向应用和南向协议的耦合性。相比于传统网络架构来说具有很多优点:

(1)传控分离,网络资源集中控制,统一调度,提高网络运行的效率.

(2)实现于数据面的解耦合,改善了传统网络升级、维护带来的难题。

(3)可以实现大规模路由,提高网络资源的利用率。

1.2 OpenStack集成OpenDaylight架构

图1:ODL与OpenStack架构图

1.3 OpenStack对接OpenDaylight原理

OpenStack是主流的云平台, ODL是主流的SDN Controller。对于这两个开源项目,在其社区中,已经提供了标准的对接接口。厂商的商用云平台一般不会改变对外的接口,所有深度开发主要局限在接口之内,以此保证不同品牌的云平台和控制器之间的兼容性。具体的对接模型如下。

对接关键就是Networking-odl插件,云平台和SDN控制器有一方需要提供这个插件,并安装到OpenStack平台上。Networking-odl包含Open Daylight Mechanism Driver和Open Daylight L3 Router Plugin。

  • Open Daylight Mechanism Driver是OpenDaylight的ML2 Mechanism Driver,通过类似REST proxy的方式实现了ML2 Mechanism Driver功能。它把Mechchanism Driver的所有调用转化成Neutron API传递给OpenDaylight,由OpenDaylight的NB REST Service(Neutron API Service)处理后返回。
  • Open Daylight L3 Router Plugin是OpenDaylight的L3 Router plugin,实现基本router、ext-gw-mode、extraroute、dvr、L3-ha等功能。Open Daylight L3 Router Plugin本身也只是实现了类似REST proxy的功能,它以现有的OpenStack L3 Router plugin为基础,封装了一层L3调用转Neutron API到ODL的功能。

云平台和SDN控制器之间的所有调用信息基本都是通过这个组件。对接完成后,便可以在云平台上依次创建网络、子网、路由、路由和子网绑定、云主机等。

2 目标与物理网络拓扑

环境物理拓扑,如图1所示:

图2:物理网络拓扑

部署过程中所涉及到的服务器管理网口的IP地址如下表所示:

设备名称接口IP地址备注
controller管理口192.168.4.145
compute管理口192.168.4.144
ODL管理口192.168.4.150

表1:服务器理口列表

3 硬件与软件环境

部署环境中涉及到的硬件和软件如表2和表3所示:

名称类型硬件指标数量备注
服务器X861.至少8G内存3
2.磁盘不少于500G
3.Server1和Server3的BIOS开启CPU嵌套虚拟化(INTEL:VT-x,AMD:AMD-V)

表2:硬件环境

软件版本备注
操作系统Centos7.7安装时选择Compute Node 模式,根目录/至少500G
OpenStackstein
ODLkaraf-0.6.4-Carbon

表3:软件环境

4 融合部署

4.1 安装前准备

进入本实验前,确保您以安装好OpenStack环境,并确保实例间可以ping通。

OpenStack环境是基于centos7.7使用stein版,本文档的参考部署是2节点集群:

  • 一个控制节点,一个计算节点。
  • 控制节点(keystone,glance,nova,neutron-server,mysql,dhcp-agent,l3-agent,metadata-agent,neutron-plugin-openvswitch-agent)
  • 计算节点(nova-compute,neutron-plugin-openvswitch-agent,cinder-volume)
  • Neutron将OVS后端和vxlan用于隧道

安装好OpenStack,连接到Horizon执行一些操作来验证它是否正常工作。要检查Neutron的配置,创建两个实例,分配公网浮动IP和私网IP,确认可以连通,并且它们之间可以互通。

4.2 安装OpenDaylight

先决条件:OpenDaylight需要Java 1.8.0和Open vSwitch> = 2.5.0

1) 安装JDK1.8

先通过-version命令查看JDK已安装情况:

[root@localhost ~]# java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)Carbon

如果没有安装或版本较低,则:

[root@localhost ~]# yum install java-11-openjdk-devel.x86_64

进入安装目录确认java的路径:

[root@localhost ~]# cd /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64/

打开配置文件并在最后添加如下几行:

[root@ localhost ~]# vim /etc/profile
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-0.el7_5.x86_64
PATH=$PATH:$JAVA_HOME/bin 
export JAVA_HOME PATH

立即生效:

[root@ localhost ~]# source /etc/profile

2) 安装Opendaylight

下载OpenDaylight Carbon,位于

https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/distribution-karaf/0.6.4-Carbon/distribution-karaf-0.6.4-Carbon.tar.gz

解压:

[root@ localhost ~]# tar -zxvf distribution-karaf-0.6.4-Carbon.tar.gz

进入解压目录并执行:

[root@ localhost ~]# cd distribution-karaf-0.6.4-Carbon/
[root@ localhost distribution-karaf-0.6.4-Carbon]# ./bin/start
[root@ localhost distribution-karaf-0.6.4-Carbon]# ./bin/client
Apache Karaf starting up. Press Enter to open the shell now...
Logging in as karaf
________ ________ .__ .__ .__ __
\_____ \ ______ ____ ____ \______ \ _____ ___.__.| | |__| ____ | |___/ |_
/ | \\____ \_/ __ \ / \ | | \\__ \< | || | | |/ ___\| | \ __\
/ | \ |_> > ___/| | \| ` \/ __ \\___ || |_| / /_/ > Y \ |
\_______ / __/ \___ >___| /_______ (____ / ____||____/__\___ /|___| /__|
\/|__| \/ \/ \/ \/\/ /_____/ \/
Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.
Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown OpenDaylight.
opendaylight-user@root>

安装如下组件:

opendaylight-user@root>feature:install odl-netvirt-openstack odl-dlux-core odl-mdsal-apidocs opendaylight-user@root>feature:install odl-ovsdb-southbound-impl-ui odl-neutron-service odl-restconf-all

3) 配置opendaylight

vim  etc/opendaylight/datastore/initial/config/netvirt-dhcpservice-config.xml
<dhcpservice-config xmlns="urn:opendaylight:params:xml:ns:yang:dhcpservice:config">
<controller-dhcp-enabled>true</controller-dhcp-enabled>
<dhcp-dynamic-allocation-pool-enabled>true</dhcp-dynamic-allocation-pool-enabled>

vim etc/custom.properties
ovsdb.of.version=1.3
ovsdb.l3.fwd.enabled=yes
ovsdb.l3.arp.responder.disabled=yes

</dhcpservice-config>

4) 重新启动opendaylight

[root@ localhost ~]#./bin/stop
[root@ localhost ~]#./bin/start

5) 验证安装

http://192.168.4.150:8181/index.html

用户名密码都是admin

4.3 集成过程

1) 首先要清除原有的实例和neutron网络

控制节点执行:

nova list 
nova delete <instance names> 
neutron subnet-list 
neutron router-list 
neutron router-port-list <router name> 
neutron router-interface-delete <router name> <subnet ID or name> 
neutron subnet-delete <subnet name> 
neutron net-list 
neutron net-delete <net name> 
neutron router-delete <router name> 
neutron port-list

删除所有port、router、subnet后,再用如下命令检查一遍,应该为空

2) 停止Neutron服务

当Neutron在计算和控制节点上管理OVS实例时,OpenDaylight和Neutron可能会发生冲突。为防止出现问题,我们需要关闭控制节点Neutron服务,并在所有节点上关闭Neutron的Open vSwitch agent。

关闭Neutron服务:

控制节点执行

[root@controller ~ (keystone_admin)]# systemctl stop neutron-server
[root@controller ~ (keystone_admin)]# systemctl stop neutron-l3-agent
[root@controller ~ (keystone_admin)]# systemctl disable neutron-l3-agent

关闭并禁用Neutron的代理服务:

控制节点和计算节点执行

systemctl stop neutron-openvswitch-agent
systemctl disable neutron-openvswitch-agent

3) 停止Open vSwitch服务,并清除现有的OVSDB

控制节点和计算节点执行

systemctl stop openvswitch
rm -rf /var/log/openvswitch/*
rm -rf /etc/openvswitch/conf.db
systemctl start openvswitch

查看ovs状态时应该没有任何的网桥

[root@compute ~]# ovs-vsctl show
9f0995a9-5d9e-433b-aae4-0fa447a9e8a6
    ovs_version: "2.11.0"

4) 将其交给ODL管理

控制节点和计算节点执行

ovs-vsctl set-manager tcp:192.168.4.150:6640

(设置所有节点上用于VXLAN连接的IP。该IP必须与每台计算机上的实际linux接口相对应)

控制节点执行

ovs-vsctl set Open_vSwitch . other_config:local_ip=192.168.4.145
ovs-vsctl add-br br-ex
ovs-vsctl add-port br-ex eno2
ovs-vsctl set Open_vSwitch . other_config:provider_mappings=provider:br-ex
ovs-vsctl set Open_vSwitch . external_ids:provider_mappings="{\"provider\": \"br-ex\"}"

计算节点执行

ovs-vsctl set Open_vSwitch . other_config:local_ip=192.168.4.144

ovs-vsctl show命令可以看到OpenDaylight将自动创建一个连接到控制器的br-int网桥

[root@controller ~ (keystone_admin)]# ovs-vsctl show
97391679-66bb-4654-a4bd-ef22b45b9c27
    Manager "tcp:192.168.4.150:6640"
        is_connected: true
    Bridge br-int
        Controller "tcp:192.168.4.150:6653"
            is_connected: true
        fail_mode: secure
        Port br-int
            Interface br-int
                type: internal
    ovs_version: "2.11.0"

如果您没有在上面看到结果,可能存在iptables限制,需要打开相关端口(6640、6653)。
同时要在opendaylight服务器上禁用selinux。

setenforce 0
sed -i -e 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config

5) 配置Neutron中使用OpenDaylight

  • 安装Neutron networking-odl模块

控制节点和计算节点执行

[root@controller ~ (keystone_admin)]# yum install python2-networking-odl
  • 配置Neutron以使用OpenDaylight的ML2驱动程序

控制节点执行

[root@controller ~ (keystone_admin)]# vim /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
mechanism_drivers = opendaylight_v2
tenant_network_types = vxlan
[ml2_odl]
url = http://192.168.4.150:8181/controller/nb/v2/neutron
password = admin
username = admin
port_binding_controller = pseudo-agentdb-binding
enable_dhcp_service = True
  • 配置Neutron以将OpenDaylight的odl-router服务插件用于L3连接:

控制节点执行

[root@controller ~ (keystone_admin)]# vim /etc/neutron/neutron.conf 
[DEFAULT]
service_plugins = odl-router_v2
  • 配置Neutron DHCP代理以提供元数据服务:

控制节点执行

[root@controller ~ (keystone_admin)]# vim /etc/neutron/dhcp_agent.ini
[DEFAULT]
force_metadata = True
[ovs]
ovsdb_interface = vsctl
  • 重置Neutron的数据库 (控制节点)

控制节点执行

[root@controller ~ (keystone_admin)]#mysql  -u root  -p123456  -e "DROP DATABASE IF EXISTS neutron;"
[root@controller ~ (keystone_admin)]#mysql   -u root  -p123456  -e "CREATE DATABASE neutron CHARACTER SET utf8;"
[root@controller ~ (keystone_admin)]#mysql   -u root  -p123456  -e " GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'neutron'; "
[root@controller ~ (keystone_admin)]#neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head
  • 重新启动neutron-server:

控制节点执行

systemctl start neutron-server
  • openstack启用odl控制:

控制节点和计算节点执行

neutron-odl-ovs-hostconfig --datapath_type=system

4.4 可能遇到的问题

  • OVS与OpenDaylight连接之后,不能自动创建br-int

原因:OpenDaylight的组件问题,组件之间可能相互干扰

解决办法:清空组件,安装以下组件(以下组件为最小配置,如需使用OpenDaylight的其他功能请依照需求自行添加)

odl-ovsdb-openstack odl-dlux-core

  • 重启neutron服务失败

原因是虽然指定了mechanism_driver为opendaylight,但是还没有安装此driver的实现。使用以下命令安装之后,就能重启neutron服务了。

yum install python2-pip
pip install networking_odl
  • 实验中,创建的虚拟机启动之后无法获取ip

原因:计算节点与网络节点的隧道没有建立

解决办法:将OVS相关信息告诉OpenDaylight,建立计算节点和网络节点之间的隧道,使得计算节点的虚拟机可以访问网络节点的dhcp服务。

ovs-vsctl set Open_vSwitch uuid other_config={'local_ip'='192.168.4.145'}
ovs-vsctl set Open_vSwitch uuid other_config={'local_ip'='192.168.4.144'}

上述命令中的uuid是OVS的uuid,可通过ovs-vsctl show命令查看,也可以通过ovs-vsctl get Open_vSwitch . _uuid命令查询,local_ip需要指定节点数据口的ip地址。

  • 虚拟机不能访问外网
  1. 需要修改网络节点/etc/neutron/l3_agent.ini文件,增加br-ex的配置,该配置在安装阶段默认留空,需要做如下配置:
[DEFAULT] 
external_network_bridge = br-ex

2. 为br-int和br-ex之间建立patch对,使它们之间可以通信

ovs-vsctl add-port br-ex "ex-patch-int"
ovs-vsctl set interface "ex-patch-int" type=patch
ovs-vsctl set interface "ex-patch-int" options:peer=int-patch-ex
 
ovs-vsctl add-port br-int "int-patch-ex"
ovs-vsctl set interface "int-patch-ex" type=patch
ovs-vsctl set interface "int-patch-ex" options:peer=ex-patch-int

4.5 验证测试

  • 验证OpenDaylight的ML2接口是否正常工作:
curl -u admin:admin http://192.168.4.150:8181/controller/nb/v2/neutron/networks
{
   "networks" : [ ]
}

如果这不起作用或出现错误,请检查中的Neutron日志文件/var/log/neutron/server.log。

这里的错误消息应该提供一些有关与OpenDaylight连接问题的线索。

使用Neutron CLI创建网络,子网,路由器,连接端口并启动实例:

neutron router-create router1
neutron net-create private
neutron subnet-create private --name=private_subnet 10.10.5.0/24
neutron router-interface-add router1 private_subnet
nova boot --flavor <flavor> --image <image id> --nic net-id=<network id> test1
nova boot --flavor <flavor> --image <image id> --nic net-id=<network id> test2

至此,OpenDaylight可以为网络上的实例创建网络端点并管理到它们的流量。

可以使用Horizon控制台访问VM,也可以通过发出 nova get-vnc-console novnc

通过控制台,可以验证虚拟机之间的连接。

添加用于浮动IP连接的外部网络

为了使用浮动IP连接到VM,我们需要通过创建外部网络和子网来配置外部网络连接。该外部网络必须链接到计算机上的物理端口,该端口将提供到外部网关的连接。

sudo ovs-vsctl set Open_vSwitch . other_config:provider_mappings=physnet1:eno2
neutron net-create public-net -- --router:external --is-default --provider:network_type=flat --provider:physical_network=physnet1
neutron subnet-create --allocation-pool start=10.10.10.2,end=10.10.10.254 --gateway 10.10.10.1 --name public-subnet public-net 10.10.0.0/16 -- --enable_dhcp=False
neutron router-gateway-set router1 public-net

neutron floatingip-create public-net
nova floating-ip-associate test1 <floating_ip>

4.6 结论

OpenStack和OpenDaylight可以分开安装,并进行集成,鉴于两者的版本变化很大,且有很多问题,中间集成的过程中可能因为安装环境不同,遇到各种问题。但都可以一一解决。

4.7 参考资料

如有其它问题,请填写右侧需求表单联系我们。

从零开始:搭建PXE远程批量安装服务器


关注星融元


在大规模服务器部署时,面对成百上千台服务器,通过手动插入光盘或者USE驱动器来安装操作系统无比繁琐,让大量工程师在现场挨个安装系统也不切实际,PXE的出现使得网络远程批量自动安装和配置操作系统成为现实。

什么是PXE?

PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel设计的协议,它允许计算机通过网络启动。这个协议工作在Client/Server模式下,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或整个操作系统。

相比其他工具,PXE更好地解决了以下问题:

  • 自动化:PXE允许自动安装和配置操作系统,减少了手动操作的工作量。
  • 远程实现:通过网络远程安装操作系统,无需物理介质,方便管理远程服务器。
  • 规模化:特别适用于大规模服务器部署,可以同时装配多台服务器。。

PXE工作原理和配置

工作原理

  1. PXE启动:当终端进入网卡启动时,会发送一个特殊的PXE启动请求到本地网络上的DHCP服务器。
  2. DHCP服务:DHCP服务器收到PXE启动请求后,会向计算机发送DHCP响应,DHCP响应包含了计算的网络配置信息,以及PXE引导服务器的IP地址——TFTP Server(Trivial File Transfer Protocol)。
  3. TFTP传输:计算机收到DHCP响应后,会使用TFTP从Server下载引导文件——pxelinux.0或者bootx64.efi。
  4. 加载引导文件:计算机加载并执行从TFTP下载的引导文件。引导文件通常是一个小型的Linux内核,能够连接到PXE服务器并获取操作系统镜像。
  5. 获取配置信息:引导文件连接到PXE服务器后,会通过TFTP发送请求以获取更多的配置信息。
  6. 获取操作系统镜像:PXE服务器根据计算机的请求,将系统镜像发送给计算机。
  7. 操作系统加载:一旦操作系统映像文件下载完成,计算机会加载并执行该映像文件。此时,计算机将完全从网络上运行操作系统,而无需本地硬盘上的安装。

PXE启动流程

注意:虽然PXE很好用,但启动时也需要满足以下条件

  1. 网卡支持PXE,目前新出的网卡基本都支持,同时需要完成BIOS的启动项配置。
  2. 传统启动模式(Legacy)下,PXE客户端会请求pxelinux.0;UEFI启动会请求bootx64.efi。
  3. 也可以采用nfsboot方式,该流程采用的是ISO镜像下载再安装的方式。

由于星融元交换机的开放性,PXE Server所需的组件能全部部署在CX-M上,即一台CX-M设备即可满足PXE的需求。

安装配置

安装配置

安装配置

星融元已通过PXE成功实现了大规模服务器的商业部署、自动化操作系统安装,从安装配置TFTP到准备启动文件、安装配置TFTP、配置HTTP Server、配置启动文件、配置DHCP到最后的验证,都可以在PXE配置文档中学会。

在现代IT环境中,通过PXE自动化流程部署系统可以减少人为错误,有助于提高效率、简化管理并确保一致性,亲手配置试试吧~

技术手册-PXE配置指导手册

相关文章

对星融元产品感兴趣?

立即联系!

返回顶部

© 星融元数据技术(苏州)有限公司 苏ICP备17070048号-2