I have just finished working out how to set up a distributed icinga2 environment with 2 zones. Zone1 is on the public internet, and Zone2 is behind a firewall, so Zone2 can connect to Zone1, but there is no connectivity the other way around. The setup steps for me were:
The things I would like to note are:
- I did not set up a HA cluster for any zone, so I do not have instructions on setting this up
 - You only need to set up a single CA, which will need to be accessible on the API port (5665 by default) from all slave zones and endpoints that will get an agent
 - You need to manually define the local and parent zone on each node
 
-  Install on the central server.  
- Add the icinga2 config to the package manager (see below for different distro options)
 - Install the check plugins (see below for distro options)
 - Edit /etc/icinga2/icinga2.conf and include the api-users.conf file:
//include_recursive "conf.d"
include "conf.d/api-users.conf" -  Edit /etc/icinga2/constants.conf and put a random string into the TicketSalt constant (use the shell command below to generate a random 32 character string)
< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo; - Using the command-line, run "icinga2 node wizard" on the master node and select "no" for the satellite setup, then run through the wizard.
 -  Create a "director-global" zone manually in /etc/icinga2/zones.conf as follows
object Zone "director-global" {
global = true
} - Use the command-line "icinga2 feature list" and "icinga2 feature enable", make sure the features "api checker command compatlog ido-mysql mainlog notification statusdata" are enabled on the master
 
 - Install icingaweb2 (apt-get install icingaweb2)
 -  Install the icinga director, plus a couple of patches
- mkdir -p /usr/local/share/icingaweb2
 - cd /usr/local/share/icingaweb2
 - git clone https://github.com/eskyuu/icingaweb2-module-director director
 - ln -s /usr/local/share/icingaweb2/director/ /usr/share/icingaweb2/modules/director
 
 -  Run through the icingaweb2 setup:
- On the command line run:
- icingacli setup config directory --group icingaweb2
 - icingacli setup token create
 - ICINGAWEB2PASS=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};`
 - mysql -u root -p -e "create database icingaweb2 ; grant all on icingaweb2.* to 'icingaweb2'@'localhost' identified by '$ICINGAWEB2PASS'"
 - DIRPASS=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};`
 - mysql -u root -p -e "create database icinga2_director DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; grant all on icinga2_director.* to 'icinga2_director'@'localhost' identified by '$DIRPASS'"
 - echo "icinga2_director $DIRPASS"
 
 - Visit http://_servername_/icingaweb2/setup
- Enter the security token
 - Fix and PHP config settings
 - Enter the database details for the icingaweb2 user that you created above using the database icingaweb2 when prompted
 - Look in /etc/icinga2/features-available/ido-mysql.conf for the IDO config when prompted
 - Log into the web interface
 - Go to Configuration->Application->Resources->Create a New Resource
 - Create a SQL Database resource with the following settings:
- Resource Name: director_db
 - Database Name: icinga2_director
 - Username: icinga2_director
 - Password: _Copied from command output_
 
 - Go to Configuration->Modules->director->Configuration
 - Select the director_db resource
 - Enter the endpoint name (configured during the icinga2 node wizard step - usually the machines FQDN, which can be found by running "hostname --fqdn")
 - Get the API user and password from /etc/icinga2/conf.d/api-users.conf
 
 
 - On the command line run:
 - Run through the director setup
 -  Add a child icinga zone
- Install icinga on the server that will run the checks
 -  On the command line of the new server, run "icinga2 node wizard", and run through the wizard. When prompted, select:
- "Yes" for the satellite setup
 - The parent server's hostname for the parent server's CN
 - "Yes" to connect to the master from this node
 - The master server's hostname or IP address for the master endpoint host
 - The first master server's hostname or IP address for the CSR auto-signing host
 - Yes to both accept config and accept commands
 
 - Reload icinga2 to apply the updates
 - In Director, add a new zone with the same zone name as the new child node, "no" for global zone and the correct parent as the parent zone
 - In Director, add a new endpoint template with the port set to 5665, and the API user selected
 - In Director, add a new endpoint to the new zone with the same hostname as the new server, and the endpoint address set to the IP or hostname of the endpoint
 - Deploy the director config
 
 -  Adding a host to run local commands (icinga2 agent)
- In Director, add a new zone for all the agents to belong to if needed (e.g. zone2-agents) with the parent zone set to the local icinga2 zone (e.g. zone2) and "no" for global zone
 - In Director, add a new endpoint to the correct "agents" zone, making sure the endpoint name matches the hostname for the host object
 - In Director, create a new host object in the parent zone (e.g. zone2), and set the appropriate variables to have the correct services applied
 - Deploy the director config
 - Install icinga2 he new host that is being monitored along with ant plugins that are required to run locally
 -  Run "icinga2 node wizard" and select
- "Yes" for the satellite setup
 - The parent server's hostname for the parent server's CN
 - "Yes" to connect to the master from this node
 - The parent server's hostname or IP address for the master endpoint host
 - The first master server's hostname or IP address for the CSR auto-signing host
 - Yes to both accept config and accept commands
 -  Create a "director-global" zone manually in /etc/icinga2/zones.conf as follows
object Zone "director-global" {
global = true
} 
 - Reload icinga2 to apply the updates
 
 
Windows Client:
- Download and install icinga 2 MSI
 - Run setup wizard
 - Make sure Instance Name matches the hostname and endpoint name in the icing2 config (including capitalisation)
 - On the master instance, run "icinga2 pki ticket --cn _instance_name_" to generate a ticket, and copy to the setup ticket field
 - Add the master instance name (must match the common name used when setting up the PKI), tick "Connect to this endpoint", and type in the hostname/IP address to connect to
 - Tick "Accept commands" and "Accept config updates" from master.
 - Edit c:\programdata\icinga2\etc\icinga2\icinga2.conf and comment out "include_recursive conf.d"
 - Edit c:\programdata\icinga2\etc\icinga2\zones.conf and add the following:
object Zone "director-global" {
global = true
} - Re-start the icinga2 service
 
Distribution setup
Debian:
Add the following to /etc/apt/sources.list.d/icinga.list
deb http://packages.icinga.org/debian icinga-jessie main
apt-get install icinga2 monitoring-plugins-basic monitoring-plugins-common monitoring-plugins-standard
Edit /etc/icinga2/icinga2.conf and comment out (// at the beginning of the line):
include_recursive "conf.d"
Run:
systemctl enable icinga2.service
/etc/init.d/icinga2 restart
CentOS/RHEL:
yum install https://packages.icinga.org/epel/6/release/noarch/icinga-rpm-release-6-…
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.no…
yum install icinga2 nagios-plugins-all
(or run "yum search nagios-plugins" and install only the required plugins)