How to create a active/active load balancing in Windows 2003 server

I have a custom php based web application created, which I need to run from a cluster of servers i.e. all the servers are running the same web application and the load on to them is controlled by a load balancer. But the actual thing that I want to configure is that all the servers are running the same code of the application. I need not go on to each server and make the changes in the application everytime.

Kindly let me know if anything else is required.

Thanks in advance.

You can do it in a number of ways:1. Put the to-be-shared-code on a shared NAS. This, however, could create a resource bottleneck that partially defeats the purpose of load-balancing.

2. Use an automatic file-sharing-updating mechanism like OneDrive/SkyDrive (whatever it's called these days), so when you make changes to the code base, it gets automatically pushed to the other servers. The caveat here is that the application isn't very I/O friendly. So you'll have an application that is hitting the filesystem a fair amount throughout the day and it can be performance-degrading. (It hooks into explorer.exe, so that's where you'll start seeing I/O spikes if you're watching the resource usage through something like Process Explorer).

3. Don't change code directly on the servers - use a deployment tool to push the code directly to all servers at the same time. For example, have a development box that has the master code. When it's ready to be pushed, have the tool send the changed files to all the servers via SFTP or something like that (not regular FTP - NEVER regular FTP).

4. Similar to #3, but use a version control system like Git. Once you reach a point where the new code is tested and ready to go, commit that code to the repository and tag it as the next version. Then send some kind of signal (a dozen ways to do this part) to all of the production servers and tell them to do a git checkout of that new tagged commit. They should get all of the new code and be in perfect sync. This approach also lets you rollback to previous code easily in case the new code has an unexpected disastrous effect. Just send the same kind of signal but send the previous tag version and they'll all check out the previous code and be instantly rolled back.

#4 takes a little bit of setup time, but it's worth the trouble.

You can do it in a number of ways:1. Put the to-be-shared-code on a shared NAS. This, however, could create a resource bottleneck that partially defeats the purpose of load-balancing.

2. Use an automatic file-sharing-updating mechanism like OneDrive/SkyDrive (whatever it's called these days), so when you make changes to the code base, it gets automatically pushed to the other servers. The caveat here is that the application isn't very I/O friendly. So you'll have an application that is hitting the filesystem a fair amount throughout the day and it can be performance-degrading. (It hooks into explorer.exe, so that's where you'll start seeing I/O spikes if you're watching the resource usage through something like Process Explorer).

3. Don't change code directly on the servers - use a deployment tool to push the code directly to all servers at the same time. For example, have a development box that has the master code. When it's ready to be pushed, have the tool send the changed files to all the servers via SFTP or something like that (not regular FTP - NEVER regular FTP).

4. Similar to #3, but use a version control system like Git. Once you reach a point where the new code is tested and ready to go, commit that code to the repository and tag it as the next version. Then send some kind of signal (a dozen ways to do this part) to all of the production servers and tell them to do a git checkout of that new tagged commit. They should get all of the new code and be in perfect sync. This approach also lets you rollback to previous code easily in case the new code has an unexpected disastrous effect. Just send the same kind of signal but send the previous tag version and they'll all check out the previous code and be instantly rolled back.

#4 takes a little bit of setup time, but it's worth the trouble.

Is there no way that I can implement it locally, as the servers donot have internet access. Kindly share the implementation steps for the local method as well as the Git setup method as well.

Okay, so a lack of internet access eliminates option #2.

I would not recommend #1 - I only mentioned it because some people suggest it without realizing that it can be a bottleneck in a load-balanced situation.

Option 3 and option 4 don't need internet access - they only require that the servers are all networked together. A Git code repository can be set up on a local server and all of the other servers can communicate with it. Here is an article on Git if you are unfamiliar with it:http://www.experts-exchange.com/Programming/Project_Management/Version_Control_CVS/A_12235-Git-101.html