In a simplified overview, the connection model between the components
that make up a Puppet environment, looks as follows:
A simple extension to this environment is to supply multiple Puppet
masters.
A pre-requisite becomes to either;
Split the Puppet certificate authority,
Share (at least) /var/lib/puppet/ssl/ between Puppet
masters.
Note, however, it is recommended to not only share
/var/lib/puppet/ssl/, but other directories as well. One example
is /var/lib/puppet/environments/, which is were your
environments are served from, and another example is
/var/lib/puppet/files/, the location of your private and/or
sensitive files.
Not sharing /var/lib/puppet/ssl/ requires you to separate the
Puppet certificate authority, for otherwise certificates will fail to
validate and agents have a semi-random chance of hitting the certificate
authority that does trust the agent’s client certificate.
Failing to share the additional directories – in addition to
/var/lib/puppet/ssl/ – creates a scenario in which an agent
hitting one Puppet master then another receives two different catalogs
(and depending on your environment settings may apply changes
effectively going back and forth between two versions of its desired
state).
It is perfectly possible to balance traffic between multiple Puppet
masters without using proper load-balancing techniques; A puppet IN
A DNS RR could hold the IP addresses of the extra Puppet masters in
addition to the original one.
Note
Note however such environment does not introduce high-availability
through load-balancing.
If a Puppet master becomes unavailable, agents will still be
attempting to connect to it.
# host puppet
puppet.example.org has address 172.16.1.10
puppet.example.org has address 172.16.4.26
(...)
The environment would look as follows (new components in green):
For true scalability, each component needs be separated from each other
component, scale up (or down) by itself, and remain available.
Further, it is recommended to back up the Puppet DB with PostgreSQL for
larger environments (>= 100 nodes).