Components provide the content for managing your site. Anything that can be
configured or used on your servers is a candidate for component integration. I
have identified four possible types of components. Each of which exhibit
different characteristics that effect development. Deciding on the constraint
you want depends on the application. Not all constraints are capable of being
implemented for all applications. But it is important to know constraints also
effect the development of the component.
Server only means the application targets clients but does not run on the
client. Client only means the application runs solely on the client.
Client/Server means there are parts that run both on the client and the server.
Interdependent is something I have thought about conceptually. The idea is two
applications are some how interrelated. This relationship requires a specific
sequence of actions take place on two or more clients. The canonical example
is to configure a web server and have the firewall open up the appropriate port.
Provided the web server is set to public. This could be an attribute that a
component has rather than a type. But there isn't a lot of theory available
about the topic to have a formal understanding.
Constraints are really only necessary for groups, unless you want to be able to
duplicate your components. Single Instance is simple, that means there is only
once instance that could be configured for a given host. The Allow Duplication
constraint means a component can exist without conflict more than once on the same
server. This is a harder constraint to achieve and is not always possible. A good
example is implementing Awstats, each virtual host would have a separate component.
The Allow Override constraint is an easy way to implement conflict resolution for
groups. It simply means the component configuration closest to the host is used.
Last is the idea of inheritable configurations. This is the toughest to implement.
It means a component configurations come from both the parent component and the
child component. This ultimately makes managing groups the easiest. I could
define a bunch of stock configurations for a wide range of servers in a few groups.
As I need to make adjustments to those components, I am only required to change
what is different. Rather than having to reconfigure the entire component a second
time. An example is to configure integrit for all a group that contained all your
Solaris 9 servers. This would be a stock config for a base install of the OS. Some
of these servers might have different applications that need different rules for
how integrit should report what is changing. By adding the integrit component to
one of these service based groups it would incorporate all of the rules from the
Solaris 9 group plus the rules you just added.
Points:
- Components are the content that make up your Configuration Management system
- Identifying the type of component makes integration easier
- The four different constraints provide group flexibility
- Constraints are not necessary, but an implied resolution is needed
CM architecture - Components (cont.)
- SysNav Strategy:
- Implements everything but Interdependent types and the Inherit constraint
- Restriction by OS
- Leverages interface for Applications and configuration screens
- Provides scheduled events that are cfrunable
The SysNav component provides the ability to extend the core framework. It
provides hooks at every level. There a component can have applications,
pidgets, configuration templates parsed by the Middle Layer, CMDB APIs,
Configurations screens in the Client Manager, scheduled events and Cfengine
code executed on clients. This provides an implementor with a with a complete
array of options when integration an application.
Components sidebar
- What components should you implement first?
- Monitoring
- Auditing
- Security Hardening
- SOE policies
- Low hanging fruit
It is easy to forget why we need a CM system in the first place. First and
foremost we need to automate everything to provide a consistent and known state
of all our servers. This allows us to manage our servers proactively rather
than reactively. There are a lot of components that need to be deployed to
manage your servers effectively. There are plenty of books and practices for
managing your servers. The CM system is just one part. Implementing
monitoring, auditing, security hardening, and any SOE policies is a great place
to start. Also it helps to implement anything that is easy, typically what is
referred to as the low hanging fruit.
Points:
- "The Practice of System and Network Administration" is a good source for where to begin
CM architecture - Proxy Nodes
- Proxy nodes act as a substitute for the portal
- Provide the following benefits:
- Traverse firewalls
- Scalability
- Redundancy
- Effects component development for scale and delivery
- SysNav Strategy:
- Managed by parent
- Do not need to talk to parent (firewalls)
- Handle all cfengine and rsync requests for children
- Scaling inherent in design
Proxy nodes provide a lot of value depending on the size and type of
organization. A proxy node is capable of handling all the requests given to
the portal at the backend. Essentially it should be able to anything the
portal can do minus the interface, APIs and CMDB. It the context of SysNav it
will traverse firewalls, and provide scalability. Redunancy is planned into a
future version of the product.
Points:
- Proxy nodes help in a bunch of ways
- Proxy nodes performs base server activity
CM architecture - Autonomous Agent
- Running scripts
- File delivery
- Perform mundane tasks based on a compoents configuration
- SysNav Strategy:
- Write configs that target Cfengine
- Configs are dynamically produced via templates
- Templates are built from the CMDB
- Configs handle all component activity
- Build scripts that are idempotent and self healing
The autonomous agent we use is Cfengine. This tool is designed to perform configuration tasks
on servers automatically. It is a higher level declarative language that allows you
to express more in a tighter syntax. With SysNav and the structure we put around Cfengine,
you can automate the delivery and execution of scripts, install and upgrade packages,
managing configuration files, start and stop processes, and copy files back to the portal
for viewing in the interface.
Points:
- This is where the rubber meets the road for the CM system
- The autonomous agent handles automating all the configured components
CM architecture - Models for automating
- Incremental
- Proscriptive
- Mixing should be considered
- Not all your servers will be managed by CM. Odd ball stuff prob is cheaper
to do Ad hoc.
- Transitioning work
Points:
- Use these models when planning the Lifecycle of a service
- Odd ball servers are a trap don't fall in it. (AIX story)
- SysNav has a model for migrating tasks to a CM system
CM architecture - Models for automating (cont.)
- The role of a junior adminstrator
Points:
- The junior is not given root access
- But has more power to manage servers through a controlled interface
- Attempts to diagnose problems with the tool
- If possible he tries to fix them
- Unresolved problems are escalated
CM architecture - Models for automating (cont.)
- The role of a senior adminstrator
Points:
- The senior has root access
- He has the power to implement components juniors can use in the interface
- Ideally he delegates tasks that often need repeating to juniors with the interface
- Only problems that cannot be resolved with the interface are kicked up to him
SysNav - Architecture
SysNav - Demo
- Client Manager
- Bootstrapping
- Solaris Patch Manager
- cf.local
Conclusion
- The field of System Configuration is young but advancing daily
- Attempt to understand how the costs are involved for the different models
- There are a lot of moving parts to a quality CM system
- There are a lot of ways to implement give careful consideration to your needs
- Get involved in the communities, read papers about CM
- SysNav is a CM tool for System Administrators
- I will put this presentation online
- Please provide feedback
Resources
- SysNav - http://www.sysnav.com/
- Cfengine - http://www.cfengine.org/
- cfwiki.org - http://www.cfwiki.org/
- [1] lssconf - http://homepages.informatics.ed.ac.uk/group/lssconf/ (theory)
- [2] config-mgmt - http://config.sage.org/ (practice)
- [3] config-mgmt FAQ - http://config.sage.org/faq.html
- [4] Why people don't adopt configuration management tools - http://homepages.informatics.ed.ac.uk/group/lssconf/config2004/slides/alva/workshop.pdf
Christian Pearce <pearcec@perfectorder.com>