Mirantis OpenStack DVR 철저 해부(제1회)

OpenStack Liberty 기반의 Mirantis OpenStack(이하, MOS) 8.0을 기반으로
DVR의 동작을 확인해 보았습니다.

앞으로 여러 번 나누어 소개하고 싶습니다.

첫번째는 DVR의 설명과 환경에 대한 설명을 합니다.

DVR이란?



우선 DVR이란 무엇인가를 설명해 드리고 싶습니다.

기존 Neutron을 사용하는 네트워크에서 외부 네트워크와 다른 서브넷으로의 통신은
모두 네트워크 노드의 가상 라우터를 통과하는 메커니즘입니다.


그러나, 상기 구성의 경우,
Network Node의 가상 라우터가 SPOF(Single Point of Failure, 단일 장애 지점)로 되어 있으며,
부하의 집중에 의한 응답 저하등도 일어날 수 있는 상태가 되고 있습니다.

그 문제를 해결하기 위해 DVR이 등장했습니다.
DVR을 사용하면,
외부 네트워크에 대한 통신과 다른 서브넷에 대한 통신 모두 자체 호스트의 가상 라우터를 사용하기 때문에,
로드가 분산되어 가상 라우터에 장애가 발생한 경우의 영향 범위를 자체 호스트에만 최소화할 수 있습니다.

참고 : 그러나 North-South 통신에서 플로팅 IP를 사용하지 않고 NAT를 사용하는 경우,
DVR 구성의 경우에도 DVR을 사용하지 않는 것처럼 Network Node 가상 라우터를 사용합니다.



사용환경



우선 검증한 환경을 이하에 나타냅니다.
이번에는 Compute 노드와 Storage 노드를 1대로 집약하고,
OpenStack 로서는, 합계 2대의 구성을 취하고 있습니다.


네트워크



다음은 네트워크에 대한 간단한 설명입니다.


네트워크 이름
설명


공개
외부 네트워크에 연결하는 데 사용

관리
OpenStack 관리 네트워크

Private
OpenStack 내부 통신 네트워크

스토리지
스토리지용 네트워크

Admin (PXE)
Fuel Master(※)와 각 노드와의 통신에 사용


배포 후 설정 확인



전체 구성



위의 환경에서 배포하면 완성된 환경이 여기가 됩니다.


파란색 배경: UP 중인 NIC 및 스위치
회색: DOWN 중인 NIC 및 스위치(br-int 및 br-tun은 포트만 UP 중인 상태)

조금 복잡하기 때문에, 다음 회 이후, 간략화한 이하의 그림을 이용해 설명해 갑니다.



VRRP(L3HA)에 대해서는 이번 생략했습니다.
다른 기사에서 별도로 기재하겠습니다.

상세



Linux 브리지



controller01/compute01




이름
설명


br-fw-admin
Admin (PXE) 네트워크 통신용 브리지

br-mgmt
Management 네트워크 통신용 브리지

br-ex
Public 네트워크 통신용 브리지

br-mesh
Private 네트워크 통신용 브리지

br-storage
Storage 네트워크 통신용 브리지

qbr***
가상 머신과 br-int를 연결하는 브리지


OVS 브리지



controller01/compute01




이름
설명


br-floating
플로팅 IP 사용시 및 외부 통신 시 사용되는 브리지

br-tun
VXLAN 또는 GRE 터널을 사용하여 내부 호스트 간 통신에 사용되는 브리지

br-int
내부 통신에 주로 사용되는 브리지


NameSpace



controller01




이름
설명


snat-***
가상 NAT

qrouter-***
가상 라우터

qdhcp-***
가상 DHCP

haproxy-***
HAProxy


compute01




이름
설명


fip-***
플로팅 IP

qrouter-***
가상 라우터


Neutron 설정



/etc/neutron/neutron.conf(발췌)



controller01
[DEFAULT]
router_distributed = True   # DVRを使用するため 'True' を設定
core_plugin = neutron.plugins.ml2.plugin.Ml2Plugin
service_plugins =neutron.services.l3_router.l3_router_plugin.L3RouterPlugin,neutron.services.metering.metering_plugin.MeteringPlugin
l3_ha = False
# dvr_base_mac = fa:16:3f:00:00:00    # DVRを使用する際、使用する自ホストのMAC(後述)は、デフォルト値を使用

compute01
[DEFAULT]
core_plugin = neutron.plugins.ml2.plugin.Ml2Plugin
service_plugins =neutron.services.l3_router.l3_router_plugin.L3RouterPlugin,neutron.services.metering.metering_plugin.MeteringPlugin
auth_strategy = keystone
# dvr_base_mac = fa:16:3f:00:00:00    # DVRを使用する際、使用する自ホストのMAC(後述)は、デフォルト値を使用

/etc/neutron/l3_agent.ini(발췌)



controller01
[DEFAULT]
agent_mode = dvr_snat    # DVRおよびNAT機能

compute01
[DEFAULT]
agent_mode = dvr    # DVR機能

/etc/neutron/plugins/ml2/ml2_conf.ini(발췌)



controller01
[ml2]
type_drivers = local,flat,vlan,gre,vxlan
tenant_network_types = flat,vxlan
mechanism_drivers =openvswitch,l2population
extension_drivers =port_security
[ml2_type_gre]
tunnel_id_ranges =2:65535
[ml2_type_vxlan]
vni_ranges =2:65535
vxlan_group =224.0.0.1
[securitygroup]
enable_security_group = True
[ovs]
tunnel_bridge=br-tun
enable_tunneling=True
integration_bridge=br-int
bridge_mappings=physnet1:br-floating
[agent]
enable_distributed_routing=True   # DVRを使用するため 'True' を設定
prevent_arp_spoofing=True
arp_responder=True
polling_interval=2
drop_flows_on_start=False
vxlan_udp_port=4789
l2_population=True
tunnel_types=vxlan

compute01
[ovs]
tunnel_bridge=br-tun
enable_tunneling=True
integration_bridge=br-int
bridge_mappings=physnet1:br-floating
[agent]
enable_distributed_routing=True   # DVRを使用するため 'True' を設定
prevent_arp_spoofing=True
arp_responder=True
polling_interval=2
drop_flows_on_start=False
vxlan_udp_port=4789
l2_population=True
tunnel_types=vxlan

주석



※ Fuel Master ... MOS 배포 및 관리 노드

좋은 웹페이지 즐겨찾기