Designing a High-Availability Storage Infrastructure
Complete guide to designing high availability storage infrastructure including replication, clustering, multipathing, and disaster recovery.
# Designing a High-Availability Storage Infrastructure
Introduction
High-availability (HA) storage ensures data remains accessible despite hardware failures, network issues, or site disasters. HA storage is the foundation of mission-critical applications where downtime translates directly to business loss.
This guide covers HA storage design principles, architectures, implementation, and validation.
You will learn:
- HA storage concepts and terminology
- Storage redundancy levels (component, system, site)
- Synchronous vs asynchronous replication
- Storage clustering and shared nothing architectures
- Multipathing and redundant fabrics
- Design patterns for different availability tiers
- Capacity planning for HA
- Testing and validation procedures
Technical Background
Availability Tiers
| Tier | Description | Downtime per Year | Example | |------|-------------|-------------------|---------| | Basic | Single server, no redundancy | 100+ hours | Single server with local disks | | Enhanced | Redundant components, hot spares | 24-100 hours | Server with RAID, dual PSUs | | High | Redundant systems, automatic failover | 5-24 hours | Storage array with dual controllers | | Continuous | Zero downtime, site redundancy | < 5 minutes | Stretched cluster, active-active across sites |
Availability Calculations
| Availability % | Downtime per Year | |----------------|-------------------| | 99% (2 nines) | 3.65 days | | 99.9% (3 nines) | 8.76 hours | | 99.99% (4 nines) | 52.56 minutes | | 99.999% (5 nines) | 5.26 minutes | | 99.9999% (6 nines) | 31.5 seconds |
RPO and RTO for HA
| Metric | Definition | HA Target | |--------|------------|-----------| | RPO | Maximum acceptable data loss | Near-zero for synchronous, minutes for asynchronous | | RTO | Maximum acceptable downtime | Seconds to minutes for HA |
Failure Domains
**Component Level:**
- Drive failure
- Power supply failure
- Fan failure
- Controller failure
- Network port failure
**System Level:**
- Server failure
- Storage array controller failure
- Entire rack failure
**Site Level:**
- Data center power outage
- Network partition
- Natural disaster
- Fire, flood
HA Storage Components
Redundant Controllers
Storage arrays with dual controllers:
- Active-active or active-passive
- Cache mirroring between controllers
- Automatic failover on controller failure
- No single point of failure
Redundant Power
- Dual power supplies per component
- Each PSU to different PDU
- Different PDUs to different UPS circuits
- Different UPS to different utility feeds
Redundant Network
- Dual HBAs per server
- Dual switches (separate fabrics)
- Multiple paths (multipathing)
- No single switch dependency
Redundant Storage
- RAID for drive failure
- Storage pools for capacity expansion
- Replication for site failure
- Snapshots for data corruption
HA Storage Architectures
Single Array with Dual Controllers
**Configuration:**
- One storage array with dual controllers
- Servers connected via multipathing to both controllers
- Automatic failover if one controller fails
**Availability:** Protects against controller failure, not site failure.
**Pros:**
- Simple architecture
- Lower cost
- Good for single-site deployments
**Cons:**
- Single site = single point of failure
- Array failure = complete outage
Dual Arrays with Replication
**Configuration:**
- Two storage arrays (primary and secondary)
- Synchronous or asynchronous replication
- Servers access primary array
- Failover to secondary on primary failure
**Availability:** Protects against array failure, partial site protection.
**Pros:**
- Array-level redundancy
- Site protection (if secondary at different site)
- Can be used for disaster recovery
**Cons:**
- Higher cost (two arrays)
- Replication complexity
- Potential data loss (asynchronous)
Stretched Cluster (Metro Cluster)
**Configuration:**
- Storage array components across two sites
- Synchronous replication between sites
- Automatic failover between sites
- Zero data loss (synchronous)
**Availability:** Highest, protects against site failure with zero data loss.
**Pros:**
- Zero data loss
- Automatic site failover
- Continuous availability
**Cons:**
- Very high cost
- Distance limitations (typically < 100 km for synchronous)
- Requires low-latency, high-bandwidth inter-site link
- Complex architecture
Storage Clustering (Shared Nothing)
**Configuration:**
- Multiple storage servers (nodes)
- Each node owns specific storage
- Automatic failover of storage ownership
- Examples: Ceph, GlusterFS, Windows Storage Spaces Direct
**Availability:** Protects against node failure.
**Pros:**
- Scalable
- Commodity hardware
- No single point of failure
**Cons:**
- Complex configuration
- Performance depends on network
- Split-brain risk
Replication Types
Synchronous Replication
**How it works:** Write acknowledged only after written to both primary and secondary.
**Characteristics:**
- Zero data loss (RPO = 0)
- Higher latency (wait for remote write)
- Distance limited (typically < 100 km)
- Requires low-latency link
**Use Cases:**
- Mission-critical databases
- Financial transactions
- Stretched clusters
Asynchronous Replication
**How it works:** Write acknowledged locally, replicated to secondary later.
**Characteristics:**
- Potential data loss (RPO > 0)
- No latency impact on local writes
- No distance limitation
- Can replicate over WAN
**Use Cases:**
- Disaster recovery
- Backup target replication
- Geographic distribution
Continuous Data Protection (CDP)
**How it works:** Captures every write, allows recovery to any point in time.
**Characteristics:**
- Near-zero RPO
- Granular recovery (seconds)
- Higher storage overhead
- Performance impact
**Use Cases:**
- Databases requiring point-in-time recovery
- Compliance requirements
Multipathing and Redundant Fabrics
FC SAN Multipathing
**Configuration:**
- Dual HBAs per server
- Dual FC switches (separate fabrics)
- Dual storage array ports
- DM-Multipath (Linux) or MPIO (Windows)
**Path Layout:**
Server HBA 1 -> Switch A -> Storage Port A
Server HBA 2 -> Switch B -> Storage Port B**Benefits:**
- HBA failure: path via HBA 2
- Switch failure: path via Switch B
- Cable failure: alternate path
- Storage port failure: alternate port
iSCSI Multipathing
**Configuration:**
- Dual network interfaces per server
- Dual network switches
- Dual storage array ports
- Multiple target portals
**Path Layout:**
Server NIC 1 (10.0.2.10) -> Switch A -> Target Port 1 (10.0.2.100)
Server NIC 2 (10.0.3.10) -> Switch B -> Target Port 2 (10.0.3.100)**Benefits:**
- NIC failure: path via NIC 2
- Switch failure: path via Switch B
- Network congestion: load balancing
Network Redundancy
- Dual switches (different models if possible)
- Dual uplinks to core
- Spanning Tree or MLAG/VPC
- LACP for link aggregation
Design Patterns
Tier 1: Enhanced Availability (Single Site)
**Components:**
- Server with dual PSUs
- RAID 10 or RAID 6
- Dual NICs (team/bond)
- Single storage array with dual controllers
- Dual FC switches or dual network switches
**Protects Against:**
- Drive failure
- Power supply failure
- Network port failure
- Controller failure
**Not Protects Against:**
- Site failure
- Array enclosure failure
- Human error
**Availability:** 99.9% - 99.99%
Tier 2: High Availability (Single Site)
**Components:**
- Dual servers (cluster)
- Shared storage (SAN)
- Dual HBAs per server
- Dual FC switches
- Dual storage arrays (or dual controllers)
- Multipathing
**Protects Against:**
- All Tier 1 failures
- Server failure
- Array controller failure
**Not Protects Against:**
- Site failure
**Availability:** 99.99% - 99.999%
Tier 3: Continuous Availability (Multi-Site)
**Components:**
- Stretched cluster across sites
- Synchronous replication
- Dual arrays at each site
- Dual fabrics at each site
- Automatic site failover
**Protects Against:**
- All Tier 2 failures
- Site failure
- Complete array failure
**Availability:** 99.999%+
Capacity Planning for HA
Overhead Factors
| Factor | Typical Overhead | |--------|-----------------| | RAID parity (RAID 6) | 25-33% | | Spare drives | 10-20% | | Replication (sync + async) | 100-200% | | Snapshots | 10-30% | | Thin provisioning overcommit | 20-50% | | Performance headroom | 20-30% |
Capacity Formula
Usable Capacity = Raw Capacity × RAID Efficiency × (1 - Spare %) × (1 - Snapshots %)**Example:**
- Raw: 100 TB (20x 5TB drives)
- RAID 6: 80% efficiency = 80 TB
- Spares: 2 drives = 10% = 72 TB
- Snapshots: 20% = 57.6 TB usable
Replication Bandwidth
**Synchronous:**
- Bandwidth = Peak write IOPS × Average write size
- Latency = Round-trip time between sites
- Requires < 5ms round-trip for good performance
**Asynchronous:**
- Bandwidth = Daily changed data / Backup window
- Can tolerate higher latency
- Can use WAN optimization
HA Design Considerations
Split-Brain Prevention
**Risk:** Both sites think they're primary, causing data divergence.
**Prevention:**
- Quorum witness (third site or cloud)
- Storage-based arbitration
- Network partition detection
- Manual intervention required for split-brain resolution
Failover Automation
**Automatic Failover:**
- Storage controller failure
- Path failure
- Server failure
- Site failure (with stretched cluster)
**Manual Failover:**
- Site disaster (verify before failing over)
- Planned maintenance
- Data corruption (verify before failing over)
Testing and Validation
**Regular Tests:**
- Monthly: Controller failover test
- Quarterly: Path failover test
- Semi-annually: Site failover test
- Annually: Full disaster recovery test
**Test Checklist:**
- [ ] Failover completes within RTO
- [ ] Data integrity verified after failover
- [ ] Applications function correctly
- [ ] Failback procedure tested
- [ ] Documentation updated
- [ ] Lessons learned documented
Implementation Checklist
Pre-Implementation
- [ ] Define RPO/RTO requirements
- [ ] Identify failure domains
- [ ] Select availability tier
- [ ] Design architecture
- [ ] Capacity plan (include overhead)
- [ ] Network design (redundant paths)
- [ ] Storage design (RAID, replication)
- [ ] Failure scenario documentation
Implementation
- [ ] Install redundant hardware
- [ ] Configure multipathing
- [ ] Configure replication
- [ ] Configure monitoring
- [ ] Configure alerting
- [ ] Document configuration
Validation
- [ ] Component failure test (drive, PSU, fan)
- [ ] Controller failover test
- [ ] Path failover test
- [ ] Site failover test (if multi-site)
- [ ] Performance test under failure
- [ ] Backup and restore test
Operations
- [ ] Regular failover testing schedule
- [ ] Capacity monitoring
- [ ] Firmware update schedule
- [ ] Documentation maintenance
- [ ] Runbook updates
Troubleshooting
| Scenario | Symptom | Possible Cause | Diagnostic | Corrective Action | Verification | |----------|---------|----------------|------------|-------------------|--------------| | Split-brain | Both sites active | Quorum loss, network partition | Check quorum, network status | Force one site primary, resync | Single primary | | Failover slow | RTO exceeded | Complex dependencies, manual steps | Review failover procedure | Automate steps, simplify dependencies | RTO met | | Replication lag | Secondary behind primary | Network congestion, insufficient bandwidth | Check replication status, network | Increase bandwidth, reduce write load | Lag reduced | | Path not failing over | I/O errors on path failure | Multipathing misconfigured | `multipath -ll`, MPIO status | Fix multipathing config | Failover works | | Performance degraded after failover | Slow performance on secondary | Secondary has fewer resources | Check secondary capacity | Add resources, balance load | Performance restored | | Data inconsistency after failover | Data mismatch | Asynchronous replication gap | Compare checksums | Resync, investigate gap | Data consistent | | Controller failover triggers frequently | Unnecessary failovers | Flaky path, controller issue | Event logs, path status | Replace faulty component | Stable operation |
Best Practices
1. **Design for failure domains** — Protect against component, system, and site failures 2. **Test failover regularly** — Untested failover doesn't work when needed 3. **Document everything** — Runbooks for every failure scenario 4. **Monitor proactively** — Alert before failures impact users 5. **Use synchronous replication for zero RPO** — Only for short distances 6. **Use asynchronous for disaster recovery** — For longer distances 7. **Implement quorum witness** — Prevent split-brain 8. **Plan capacity with overhead** — Include RAID, spares, replication, snapshots 9. **Test restores, not just backups** — HA includes data recoverability 10. **Plan failback** — Returning to primary is as important as failing over
Conclusion
High-availability storage design requires understanding failure domains, selecting appropriate redundancy levels, and implementing comprehensive testing. The right architecture balances availability requirements with cost and complexity.
Key decisions: availability tier, replication type (sync vs async), multipathing configuration, and testing frequency.
References
- SNIA High Availability: https://www.snia.org/
- Uptime Institute Tier Standards: https://uptimeinstitute.com/
- NIST SP 800-34: https://csrc.nist.gov/publications
- VMware High Availability: https://docs.vmware.com/
- Microsoft Storage Spaces Direct: https://docs.microsoft.com/en-us/windows-server/storage/
- Ceph Documentation: https://docs.ceph.com/