This page provides the best practices when designing your network for using Proxmox with FlashArray as storage over NVMe-TCP.
Network Architecture Principles
| Principle | Reason |
|---|---|
|
Dedicated Storage Network: Always use dedicated physical or VLAN-isolated networks for storage traffic |
Isolates storage I/O from other network traffic; prevents bandwidth contention; enables QoS policies specific to storage; simplifies security and firewall rules |
|
No Single Points of Failure: Redundant switches, NICs, and storage controllers |
Any single component can fail without impacting storage availability; enables zero-downtime maintenance; critical for production environments |
|
Proper Segmentation: Separate storage traffic from management and VM traffic |
Prevents noisy neighbor problems; ensures storage performance is not affected by VM traffic spikes; improves security posture; simplifies network troubleshooting |
|
Optimized MTU: Use jumbo frames (MTU 9000) end-to-end when possible |
Reduces CPU overhead by ~30%; improves throughput by reducing packet count; lowers interrupt rate; essential for high-performance storage |
Network Topology Options
Option 1: Dedicated Physical Networks (Recommended): This is the gold standard for production storage networks because it provides complete isolation and maximum performance.
Advantages:
- Maximum performance and isolation: Storage has dedicated bandwidth with zero contention.
- No contention with other traffic: VM traffic spikes cannot impact storage performance.
- Simplified troubleshooting: Storage network issues are isolated and easier to diagnose.
- Predictable latency: Consistent performance without interference from other workloads.
Requirements:
- Dedicated NICs on each Proxmox node (minimum 2 for redundancy): Provides redundancy; one NIC can fail without storage outage
- Dedicated storage switches (minimum 2 for redundancy): Eliminates switch as single point of failure; allows switch maintenance without downtime
- Direct connections to storage array: Reduces latency; simplifies network path; fewer points of failure
Configuration Example:
# /etc/network/interfaces
# Both NICs on same subnet (10.100.1.0/24)
auto ens1f0
iface ens1f0 inet static
address 10.100.1.101/24
mtu 9000
auto ens1f1
iface ens1f1 inet static
address 10.100.1.102/24
mtu 9000
Option 2: VLAN-Based Segmentation (Shared NICs): Choose this option when you have limited physical NICs or want to consolidate infrastructure. Acceptable for environments where cost/port density is a concern and you can accept some performance trade-offs.
Advantages:
- Efficient use of physical infrastructure: Reduces NIC and switch port requirements
- Flexible network design: Easy to add new VLANs without physical changes
- Single set of NICs handles multiple traffic types: Lower hardware costs; fewer cables
Considerations:
- NICs are shared with management, VM, and container traffic: Storage competes for bandwidth with other traffic; potential performance degradation during high VM traffic.
- Requires proper VLAN configuration and trunking on switches: Mis-configuration can cause traffic leakage or complete storage outage.
- Storage VLANs share bandwidth with other VLANs on same NICs: Maximum storage throughput is limited by total NIC bandwidth minus other traffic.
- Requires QoS/traffic prioritization for storage VLANs: Without QoS, VM traffic can starve storage traffic causing I/O timeouts.
- Proper switch redundancy still required: Even with shared NICs, you still need redundant switches to avoid single point of failure.
Architecture: In this configuration, physical NICs are trunked and carry multiple VLANs:
- VLAN 10: Management traffic (Proxmox web UI, SSH) - uses both NICs via bond, which ensures management access even if one NIC fails.
- VLAN 20: VM/LXC bridge traffic - uses both NICs via bond, which provides redundancy for VM network connectivity.
- VLAN 100: Storage traffic (NVMe-TCP) - each NIC has separate VLAN interface (no bond) as bonding would reduce 8 paths to 1 path, eliminating multipath benefits; separate interfaces preserve all redundant paths for NVMe native multipathing.
Configuration Example:
# /etc/network/interfaces
# Physical NICs configured for trunking (no IP, just up)
auto ens1f0
iface ens1f0 inet manual
bond-master bond0
mtu 9000
auto ens1f1
iface ens1f1 inet manual
bond-master bond0
mtu 9000
# Bond interface for management and VM traffic
auto bond0
iface bond0 inet manual
bond-slaves ens1f0 ens1f1
bond-mode active-backup
bond-miimon 100
bond-primary ens1f0
mtu 9000
# Management VLAN 10 on bond (single management interface)
auto bond0.10
iface bond0.10 inet static
address 192.168.10.101/24
gateway 192.168.10.1
vlan-raw-device bond0
# VM/LXC Bridge on VLAN 20 (single bridge using bond)
auto vmbr0
iface vmbr0 inet manual
bridge-ports bond0.20
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-vids 20-50
# Storage VLAN 100 - NVMe-TCP ONLY (NO BOND - separate paths)
# Each NIC gets its own VLAN interface on same subnet
auto ens1f0.100
iface ens1f0.100 inet static
address 10.100.1.101/24
vlan-raw-device ens1f0
mtu 9000
auto ens1f1.100
iface ens1f1.100 inet static
address 10.100.1.102/24
vlan-raw-device ens1f1
mtu 9000
-
Physical NICs are trunked to carry multiple VLANs: allows a single physical connection to carry multiple isolated networks.
-
Management and VM traffic: Use bond0 (active-backup) for redundancy: provides failover without requiring switch configuration (unlike LACP), making the configuration simple and reliable.
-
Storage traffic: Does NOT use bond - each NIC has separate VLAN interface for multipath: bonding would aggregate paths into one, defeating the purpose of NVMe multipathing. Separate interfaces maintain 8 independent paths (2 NICs × 4 portals).
-
Storage VLAN (100) is isolated from other traffic at Layer 2: prevents accidental routing of storage traffic and enables VLAN-specific QoS and security policies.
-
Both storage VLAN interfaces on same subnet (10.100.1.0/24): simplifies routing; all paths can reach all portals without complex routing; matches storage array configuration.
-
Single management interface (bond0.10) uses both NICs: consolidates management traffic, provides redundancy and simplifies firewall rules.
-
Single VM bridge (vmbr0) uses both NICs: provides redundant network path for VMs and simplifies VM network configuration.
-
QoS should prioritize storage VLAN traffic: ensures storage I/O is not delayed by VM traffic, prevents I/O timeouts and maintains consistent performance
-
Two switches provide redundancy even in converged infrastructure: eliminates switch as single point of failure and allows switch maintenance without downtime
Network Design Best Practices
| Practice | Recommendation | Rationale |
|---|---|---|
| MTU Size | 9000 (Jumbo Frames) | Reduces CPU overhead by ~30%; improves throughput by reducing packet count; lowers interrupt rate; must be configured end-to-end (NICs, switches, storage) |
| Number of NICs | Minimum 2 per node | Provides redundancy (one NIC can fail); enables load distribution across paths; recommended 2-4 NICs depending on performance requirements |
| Switch Redundancy | Minimum 2 switches | Eliminates switch as single point of failure; allows switch firmware updates without downtime; each NIC connects to different switch |
| IP Addressing | Same subnet for all paths | Simplifies routing (no need for static routes); all NICs can reach all portals directly; easier troubleshooting; matches most storage array configurations |
| Link Speed | 10 GbE minimum, 25/100 GbE preferred | 10 GbE provides ~1 GB/s per link; 25/100 GbE needed for high-performance NVMe arrays; must match or exceed storage array capability to avoid bottleneck |
| Flow Control | Enable on storage ports | Prevents packet drops during bursts; essential for lossless storage traffic; configure on both NIC and switch ports |
| QoS | Priority for storage VLANs | Ensures storage traffic is not delayed by other traffic; prevents I/O timeouts; critical when sharing NICs with VM traffic; recommend highest priority for storage VLAN |
Subnet Design Example
-
Storage Network: 10.100.1.0/24 (VLAN 100)
-
Proxmox Nodes:
-
Node 1 NIC 1: 10.100.1.101 (ens1f0 or ens1f0.100)
-
Node 1 NIC 2: 10.100.1.102 (ens1f1 or ens1f1.100)
-
Node 2 NIC 1: 10.100.1.111 (ens1f0 or ens1f0.100)
-
Node 2 NIC 2: 10.100.1.112 (ens1f1 or ens1f1.100)
-
Node 3 NIC 1: 10.100.1.121 (ens1f0 or ens1f0.100)
-
Node 3 NIC 2: 10.100.1.122 (ens1f1 or ens1f1.100)
-
-
Storage Array Portals:
-
Portal 1 (Controller 1): 10.100.1.10
-
Portal 2 (Controller 1): 10.100.1.11
-
Portal 3 (Controller 2): 10.100.1.12
-
Portal 4 (Controller 2): 10.100.1.13
-
-
Result: Each node has 8 paths (2 NICs × 4 portals)
Why use this IP scheme:
- Single /24 subnet: Simplifies routing; all devices can communicate directly without routing
- Storage array uses .10-.19: Reserved range for storage infrastructure; easy to identify in logs
- Nodes use .100+: Clear separation from storage; each node gets 10 IPs (e.g., Node 1: .101-.110)
- Sequential NIC numbering: .101, .102 for Node 1; .111, .112 for Node 2; easy to remember and troubleshoot