Replica sets provide high availability: one primary replicates to secondaries with automatic failover. Sharding provides horizontal scaling: data is partitioned across shards by a shard key and routed via mongos. You often use both together.