Design a scalable and fault-tolerant distributed storage system that supports high availability and data replication. Consider factors like load balancing, data consistency, partitioning, and failure recovery. Explain your design choices and how you ensure system performance and reliability.