Every software service or component on a server requires configurations. In your desktop applications you set preferences for what your default page will be, how you’d like your margins set, or whether to save and restore cookies each time you restart.
Enterprise applications also require complex configuration settings. Want to monitor a webserver and a database with Nagios, that’s set in the config file. What to start MySQL with 8G of memory for InnoDB, that’s also set in a config file. What’s more config files contain server specific settings, based on IP address, or the servers role, webserver or database for example. The webserver may also have memcache and outbound email services running.
With more traditional deployments, the systems administrator will setup each physical box, and configure those services based on the business needs. As you bring online 10’s or 100’s of servers, however, you can quickly see how labor intensive this process would be, and also how much redundancy there is.
Enter configuration management into the picture. Previously I blogged about tools like Puppet that can bring great new best practices to the table. There is also cfengine, and the newer Chef which incorporates cloud deployments as well into the mix. Configuration management allows you to remotely administer servers, install packages, manage dependencies, install configurations based on a central copy, and even define roles and templates for new servers. This brings a whole new level of professionalism to deployments, and also newfound power and flexibility.
We’ll be writing more about configuration management, especially in the context of cloud deployments such as Amazon EC2 so please stay tuned.