Although this post was asked a year ago, I guess it's still worth to comment as every project has it's own flavor of deployment.
This is what we do in our latest project whenever we want to deployment the hotfixes/change requests to Content Deliveries (CD) without downtime, as follow in order.
Environments:
PROD - Production Environment (Active) : 2 CD servers
DR - Disaster Recovery Environment (Inactive) : 2 CD servers
.
Deployment Tools:
Code Repository: Bitbucket/Github/TFS
TFS Online: Build
Octopus Deploy: Manual/CI deployment
- Conduct Octopus Deploy to DR environment, test and confirm if as expected.
- As of this step, the DR CM/CD servers are accessible internal only. There's no downtime as the active servers are the PROD servers.
- Once the test are all confirmed passed, from A10 (Load Balancer), enable the 2 DR CD servers
- All 4 PROD and DR servers are up and serving the end users.
- Drain stop the 2 PROD CD servers, wait for the concurrent users to shift the their session to the 2 DR CD servers.
- As of this step, the active servers are the DR CD servers with the latest hotfix/change requests, and the PROD servers are accessible internal only.
- Conduct another Octopus deploy to the PROD environment, test and confirm if as expected.
- Once the test are all confirmed passed, switch back the PROD as the active servers via A10 Load balanacer control panel.
With regards to the connectionstrings, our datasources are pointing to the Alias of the Database servers instead of using the master/slave DB servers hence the change to the connectionstring is a one time change only.