Got a bunch of great questions today about Lync server draining. I have added a few extra here to make it more complete but there is very little information available about this feature elsewhere.
What's the expected client behavior?
If you put a FE server in draining mode, all clients will have to reconnect but active calls and conferencing session should remain active until there sessions end. In my lab I only have the one Standard Edition server but below you can see my client has been disconnected but the conferencing session has remained up.
When is the best time to start draining?
During periods where your activity on the Lync environment is tapering off. Not from a registered user perspective but more from active calls and conferencing. As you all know not everyone logs off if you have a standalone device so this may or may not be a good indicator of concurrent users. The least possible interruption to calls in progress is your best plan.
DNS load balancing and Lync client are requirements for server draining. Hardware based load balancing is not application aware so therefore when the server is no longer accepting connections the HLB may be still attempting to send clients to the server that is no longer accepting connections. Also older versions of Communicator do not support server draining.
How do you start server draining?
Two ways. Firstly through the Control Panel you can either select to prevent new sessions for all services or you can do it on a service by service basis. Second way is through PowerShell.
Below: Prevent new sessions for all services.
Below: Prevent new sessions for service. Stopping new sessions on a per service basis.
The full PowerShell syntax is below. This only stops Lync services and not Windows services. The graceful switch parameter must be used to prevent loss of active sessions (not registrations) and initiate server draining.
Stop-CsWindowsService [-Name <String>] [-ComputerName <String>] [-Confirm [<SwitchParameter>]] [-Force <SwitchParameter>] [-Graceful <SwitchParameter>] [-NoWait <SwitchParameter>] [-Report <String>] [-WhatIf [<SwitchParameter>]]
How can I Monitoring Active Connections?
Using PowerShell and the command Get-CsWindowsService gives you a fairly clean looking window of active connections. As you can see in my lab I have one active connection to my SE server. If I run the Get command I can see the active connection. See below:
After the draining has begun you can see the services being stopped as connections are being dropped. I have only one client in my lab connected into the conference but you can see its still connected to the MCU components. See below:
After the Stop-CsWindowsService has been performed all services show as stopped with no active connections. See below:
I hope this has been helpful.