Choosing a deployment architecture
==================================

Failover Manager provides various high availability options for EDB
Postgres Advanced Server using the Postgres connection poolers and
connection libraries. These options have implications for a
high-availability architecture.

To ensure the high availability of your database, you can combine core
features of Failover Manager with the Postgres connection libraries
(client connect failover) and connection poolers.

With the capabilities of Failover Manager, EDB has designed four basic
architectures to run a high-availability environment:

1. :ref:`Using Failover Manager with virtual IP addresses <Using Failover Manager with virtual IP addresses>`  : Failover Manager has a key capability to manage VIP
   addresses out of the box. VIP addresses allow applications to connect
   to a single IP address that is being routed to the primary database
   server. This architecture is the most basic solution to run when VIP
   addresses are available in your environment.

2. :ref:`Failover Manager with client connect failover <Failover Manager with client connect failover>`  : PostgreSQL client libraries like libpq and jdbc allow
   for client connection failover. With client connection failover, the
   connection string contains multiple servers (host=srv1,srv2) and the
   client library loops over the available hosts to find a connection
   that is available and capable of read-write operations. This
   capability allows clients to follow the master during a switchover.
   This solution doesn’t rely on virtual IP addresses. You can use it in
   every environment where such client configurations can be set.

3. :ref:`Failover Manager with EDB PgBouncer <Failover Manager with EDB PgBouncer>`  : PgBouncer adds capabilities such as connection
   pooling and the option to halt traffic. You can also use it as a
   proxy between the client and the Postgres database server. By
   leveraging the integration options in Failover Manager to run
   reconfiguration of PgBouncer during a failover, you can use PgBouncer
   to route the traffic to the correct primary database server.

4. :ref:`Failover Manager with EDB Pgpool-II <Failover Manager with EDB Pgpool-II>`  : EDB Pgpool-II is another tool used as a proxy between
   the client and the Postgres database server. EDB Pgpool-II adds
   capabilities such as running in cluster mode with a Watchdog,
   managing VIPs, and read-only scalability. Failover Manager has native
   capabilities to integrate with EDB Pgpool-II to redirect traffic to
   another primary during Database failover operations.

These features are supported in each of the architectures:

**Client connect failover**

.. csv-table::
  :header: Features,Failover Manager with VIP,Failover Manager with client connect failover,Failover Manager with EDB PgBouncer,Failover Manager with EDB Pgpool-II
  :widths: 15,5,5,5,5
  :align: left
  :class: longtable

  Connection pooling,"","",Yes,Yes
  Runs on cloud (no VIP),"",Yes,Yes,Yes
  Halt traffic option,"","",Yes,""
  Read-only scalability,"",Yes (using multiple connection factories),"",Yes
  Clustered proxy,"","","",Yes
  Proxy integration,"","",ssh,PCP
  Minimum servers required,3,3,5,6
  Complexity,Low,Low,Medium,High
  Network hops,1,1,"",""
  Failover duration,Low,Medium,Low,Low

.. toctree::
  :maxdepth: 3

  Planning--efm_deploy_arch--03_efm_vip
  Planning--efm_deploy_arch--04_efm_client_connect_failover
  Planning--efm_deploy_arch--05_efm_pgbouncer
  Planning--efm_deploy_arch--06_efm_pgpool
