Distributed data center architectures have been recently developed for a more efficient and economical storage of data. In many models of distributed storage, the aim is to store the data in such a way so that the storage costs are minimized and increased redundancy requirements are maintained. However, many approaches do not fully consider issues relating to delivering the data to the end user and the associated costs that this creates. We present an integer programming optimization model for determining the optimal allocation of data components among a network of Cloud data servers in such a way that the total costs of additional storage, estimated data retrieval costs and network delay penalties is minimized. The method is suitable for periodic dynamic reconfiguration of the Cloud data servers, so that the when localized data request spikes occur the data can be moved to a closer or cheaper data server for cost reduction and increased efficiency.