1. A method for maintaining data integrity of a plurality of copies of a piece of data, the plurality of copies being stored in a plurality of data servers across multiple data centers, comprising: selecting a primary data server from the plurality of data servers to store the piece of data, and duplicating the piece of data to other data servers in the plurality of data servers; maintaining a cluster of catalog servers, wherein one of the catalog servers is selected as the master catalog server; recording a data state information of the piece of data to the master catalog server, and duplicating the data state information to other catalog servers in the cluster of catalog servers; and responsive to a failure of the primary data server, selecting a new primary server from the plurality of data servers, and updating the cluster of catalog servers.