Public Folders and the DAG
When realizing a High Available Exchange 2010 environment, you automatically going to use DAG (Database Availabilty Groups). It is a different approach with previous versions of Exchange, who leverage server redundancy. DAG supplies us with mailbox database redundancy.
When using a DAG the single point of entry for your clients and for all protocols (including MAPI RPC), is the Client Access Array (or CAS Array). Essentially a DNS record pointing to a Load Balancer.
A Hardware Load Balancer (HLB) is Microsoft's recommended way to enable redundancy and load balance this entry point (BTW: On TechEd 2010 Europe, the Microsoft Exchange team mentioned that it does not recommend it’s own Windows NLB solution anymore). So, if a database or server fails, a failover occurs and the load balancer(s) redirects the traffic to a remaining Client Access Server.
Wait, what? No Public Folder HA?
This solution gives us MAILBOX database redundancy. If you still need Public Folders (PF), you are in a pickle. Clients do not connect to the Public Folders Database via de CAS Array; they directly connect to the server with a Public Folder Database defined in the Default Public Folder attribute of a Mailbox Database.
You can have duplicate Public Folder Databases via PF Replication, but there is no automatic PF Server failover! This could be catastrophic for your SLA, as Outlook 2003 (supported in combination with Exchange 2010) requires Public Folders to operate correctly or operate at all! Luckily, Outlook 2007 & 2010 do operate, but it is possible that they don’t have Public Folder access during a failover.
So, what options do I have? Upgrading Outlook off course, which has a lot of other benefits. When your clients aren’t the bottleneck, move the Public Folder functionality to other products (SharePoint for instance).
Those pesky legacy apps…..
But what, if you are stuck with Outlook 2003? Or going to discontinue Public Folders, but just not at the moment? Or other reasons I didn’t think of?
You can script some form of HA into it, at least your users don’t have to wait for admin intervention. I have a customer who uses a DAG and has Outlook 2003, which cannot be upgraded quickly. In this case a coworker made a Exchange Management Shell script which checks every x minutes whether the Default Public Folder Attribute of a Mailbox Database is referring to the same server (i.e. the server on which the Active copy reside, is logically not in a failed state). This results that when a failover occurs, within defined minutes the attribute will be changed to a server which is still operational. It’s dirty, but it works.
I’ve added this script to this post for educational purposes, just scroll all the way down. Due to security reasons, the extention is now TXT. Just rename it to PS1. Furthermore this script currently only works with a two server DAG. This is published as is, use with caution and no guarantees are given etc. etc.. Use at your own risk.
But before you get scared using this script, there is good news! During TechEd 2010 Europe Ross Smith (Microsoft Exchange team) announced that in Service Pack 1 Rollup Update 2 this issue will be addressed via an alternate server tag! The finer pointers are not clear yet and they didn’t mention a release date, but: there was much rejoicing.
PS1: Well, I already had prepared a draft blog post but decided to postpone publishing after TechEd…. None the less, this script could still be helpful for the time being.
PS2: thanks FrodoB for the script.
Exchange 2010 SP1 Public Folder High Availability Returns with Roll Up 2
Understanding Database Availability Groups
Exploring Exchange 2010 RPC Client Access service
Common Client Access Considerations for Outlook 2003 and Exchange 2010
Change the Default Public Folder Database for a Mailbox Database