A distributed secret sharing system is considered that consists of a dealer, a set of storage nodes, and a set of users. Each user is given access to a certain subset of storage nodes. The dealer wants to securely convey a specific secret to each user via storage nodes. We propose to study protocols where the dealer encodes secrets into several secret shares and load them into the storage nodes. We define two major properties for such distributed systems; communication complexity is defined as the total amount of data downloaded by users; and storage overhead is defined as the total amount of data loaded by the dealer into the storage nodes. We construct distributed secret sharing protocols that are optimal in terms of both the communication complexity and storage overhead.