We have a similar situation where all Linux should run only in 2/3 ESXi hosts.
This can be done 2 ways.
Create DRS Rules and Groups. That VMs should run in particular hosts and those VMs(linux VMs) to a particular group and then add them to the hosts(with Host Groups). Set this to automatic and then all VMs will run in those VMs.
Problem? If you have 1000/2000 VMs is not very easy to add them manualy to Groups and to the hosts.
Create a Powershell script, that recognize VMs OS(so all Readhat etc.) will be automatic added to the groups that you should create and then run the DRS again.
Hope this can help.
Best way is to created affinity rules like you mention, one to keep them separated and one to run on a certain amount of hosts. There are some ways to automate it through PowerCli, it should be no problem. If you set up DRS affinity rules where you configure a server to "Must be " in a host/s, it won't vmotion or move to another Host, problem can happen if there are not available resources for a vm to boot/reboot on those hosts then the VM wont start. Another thing is if you set up the rule as " VM should run in this host ", then the VM will try as first choice to run on the configured hosts but if needed will run as well into different hosts.
Sorry dont know about nagios checks but I think with affinity rules you can work it out fine
Hope this helps!