Cluster tuning cookbook

It’s a preference, but not a requirement. A process with the process class of cluster_controller is viewed as a the best location for a cluster_controller role, but if one isn’t available, then any stateless process will do. If a process with cluster_controller process class joins the cluster, then we’ll notice that there’s a better location, and begin a recovery to re-recruit everything in a better location. (I believe this might not actually be true specifically for cluster_controller, but is true for everything else. You’d be looking for betterMasterExists() in the code.)

Depending on the role… maybe, and it’ll depend heavily by role, and partly on your workload. I think that after #432, it’d be safer to reduce the memory on proxies, as long as you set SERVER_MEM_LIMIT accordingly. I don’t think I have specific advice here, you’d more have to look at usage stats and see.

There’s also knobs to reduce the amount of cache that a storage server holds, if you’d like to try reducing memory on storage servers.

More than one fdbserver process was my intention, yes. If you don’t specify a role, then it gets the “Unset” role, which is viewed as an okay place to put anything.

Upon further thought, I’m actually not sure that everything that has an “Unset” role wouldn’t be picked up by data distribution to be recruited as a storage server. I’ll try to remember to check this later today.

GetReadVersion, which is done by a client at the beginning of every transaction, involves a proxy talking to every other proxy to find the maximum committed version. So there’s definitely a point where adding more proxies slows things down, rather than speeding things up.

In general no, but in that specific case, you can assign the stateless role to a process, which then means we prefer not assigning anything that involves durable storage (logs and storage servers) to that process.

… I had actually thought there was a way to start up fdbserver and not point it at a disk as a data location, which would automatically configure it into a stateless process, but I appear to have been wrong.

3 Likes