An example of crushmap for 2 Datacenter replication :
rule replicated_ruleset {
ruleset X
type replicated
min_size 2
max_size 3
step take default
step choose firstn 2 type datacenter
step chooseleaf firstn -1 type host
step emit
}
This working well with pool size=2 (not recommended!) or 3. If you set pool size more than 3 (and increase the max_size in crush), be careful : you will have n-1 replica on one side and only one on the other datacenter.
If you want to be able to write data even when one of the datacenters is inaccessible, pool min_size should be set at 1 even if size is set to 3. In this case, pay attention to the monitors location.
Other posts about crushmap : http://cephnotes.ksperis.com/blog/categories/crushmap/