We need to decide how to setup mcrouter in production.
The requirements are:
- All memcached traffic must go through mcrouter, and be routed consistently
- All cross-dc traffic (basically, the replication of SET and DELETE commands) must be encrypted
- Mcrouter should ensure row-level redundancy
We're currently testing how mcrouter-mcrouter encrypted connections work, and it seems they only work with IP-based SANs, which are not currently supported by puppet, adding another level of complexity.
Strawman proposal
Install two mcrouter instances per appserver row, giving them proper CNAMEs, and make them communicate with:
- the local memcacheds directly
- the memcacheds in the other datacenter via SSL by means of the mcrouter machines in the other cluster.
I would prefer this to going the same way we went with nutcracker (installing the proxy on all appservers) because of the need for inter-dc connections and of the complexity in managing certificates with IP-based SANs (who don't allow wildcards).