Citrix has made a lot of changes to Presentation Server over the years. Over the past few months, I learned about several changes that I think are interesting and important to know, although they don't really each warrant their own article. So I've collected a few random tidbits that I've compiled here about the Presentation Server farm architecture.
Booting Citrix servers without a data store connection
Of course all Presentation Servers store their configuration information in a central database called the IMA data store. In older versions of Citrix (MetaFrame XP at least, maybe MPS 3 as well?), if a server did not have connectivity to the data store, the IMA service wouldn't start, even though a local host cache containing all the necessary configuration information was stored locally on the server. Back in the day if you wanted to boot a server from the local host cache instead of from the central data store, you had to change a registry key.
This is no longer the case! Now in CPS 4.5 (and maybe 4.0?), the IMA service will automatically start from the local host cache if a connection to the central data store is not available. No additional configuration is needed.
Data collector "change update" size increase
All Citrix server configuration information that's stored in the data store is configured via the MMC-based Access Management Console or the Java-based Presentation Server console. Whenever you "save" any setting in these tools, the setting is written into the local host cache of the server that you're connected to, and then the IMA service on that server updates the central data store.
Most individual Presentation Servers are configured to "check in" with the central data store every so often (used to be 10 minutes, now it's 30 minutes), but Citrix knows that you don't really want to wait around for those minutes for the changes to make it down to the individual servers. Therefore whenever you make a change that's saved in the data store, the server that you're connected to also contacts the data collector for it's zone and sends the change to it via IMA. The data collector can then notify all the servers in its zone of the change, as well as contact data collectors from other zones to have them inform their servers of the change.
In older versions of MetaFrame, if the change was 10k or less, the data collectors just sent the change directly to the member servers. Changes larger than 10k caused the data collector to notify the member servers that a change was available, but each member server had to then contact the central data store to download that change.
Now this is a bit different. In CPS 4.5 (and in 4 or 3? I don't know when this began), the size limit for this change was increased to 64k. In other words, as long as the change is 64k or less, it's sent directly from the data collectors to the member servers. What's cool about this is that practically all changes are under 64k, so in reality, just about all changes are pushed directly to the member servers instead of being pulled from the central data store.
Zone Preference and Failover behavior with session sharing
Most people reading this are probably familiar with the priority list that's used to select which Presentation Server a user connects to when they request an application:
- Reconnect the user to a disconnected session
- Launch the new app within an existing session (session sharing), but only if the zone preference allows it
- Select a new server based on the load balancing and zone preference rules
This process is very straightforward, although you can probably imagine that there are times when it might not behave as you want it to. For example, what happens if a user has an active session in "Zone B," but the zone preference policy in effect dictates that the user should connect to a server in "Zone A?" This can really be a problem if you have applications published across multiple zones, but you need users from certain sites to always connect to specific servers.
Now there's a solution for this. In the registry of the individual Presentation Server, there's a value called "HonorZPFOverSessionSharing" in the \HKLM\SOFTWARE\Citrix\IMA\MFRPC key. Can you guess what that does?
The default value of "1" means that zone preference will take priority. Change this to "0" if you always want users to open new applications within their existing sessions (where possible, of course).