Banco de dados
==============
- A seguir são descritos os bancos de dados suportados pela aplicação.
- Dois cenários serão testados:
- 1) cluster em alta disponibilidade (mínimo 3 nós)
- 2) cluster de replicação Primário/Secundário (mínimo 3 nós)
Versões suportadas
------------------
- **MySQL**: 8.0 / 8.4 ou **MariaDB**: 10.6/ 10.11 (recomendado) / 11.4
- **Oracle Database**: 11g, 18, 21, 23 (somente versão enterprise)
- **PostgreSQL**: 13/14/15/16/17
- Serão utilizados exemplos com MariaDB e Postgres para a criação das réplicas dos bancos de dados.
Criação de réplica do banco de dados
------------------------------------
- Tanto MariaDB quanto Postgres possuem a possiblidade de criar réplicas do banco.
- As réplicas devem ser do tipo Ativo-Ativo, de maneira que todas alterações no Primário reflitam no banco Secundário, que estará em Stand-By caso o Primário venha a falhar.
Réplica Assíncrona
~~~~~~~~~~~~~~~~~~
- Nessa arquitetura, todas modificações realizadas no primário serão refletidas nas réplicas.
- Quando houver uma falha no primário, uma das réplicas deve assumir como primário.
.. code-block:: none
graph LR
Primário --> Réplica1
Primário --> Réplica2
Primário --> Réplica3
Réplica Síncrona
~~~~~~~~~~~~~~~~
- Na réplica síncrona, todas modificações realizadas em um banco de dados são replicadas para outros servidores.
- Sendo assim, teremos uma réplica do mesmo banco de dados em todos os servidores.
- Caso haja alguma inconsistência de dados em algum dos servidores, ele será excluído do `cluster`.
.. code-block:: none
graph LR
Aplicação --> Primário1
Primário1 --> Primário2
Primário1 <--> Primário2
Primário1 --> Primário3
Primário1 <--> Primário3
Primário2 --> Primário3
Primário2 <--> Primário3
MariaDB
-------
- Possiblidade de criar clusters utilizando o Galera MariaDB. Além disso, possui um `gerenciador gráfico `_.
Postgres
--------
- A replicação de bancos Postgres pode ser feita utilizando o `postgresql_cluster v2.0 `_ ou algum dessa `lista `_.
- Será utilizado o Patroni, o qual é um conjunto de scripts em python que automatizam o gerenciamento de falhas em clusters.
- Além disse, um exemplo de replicação nativa será documentado.
Replicação nativa
~~~~~~~~~~~~~~~~~
- Consulte a documentação :doc:`postgres-replica` para fazer a réplica do postgres nativamente.
Replicação com Patroni
~~~~~~~~~~~~~~~~~~~~~~
- Patroni é um template desenvolvido para garantir alta disponibilidade de um cluster postgres.
- Confira :doc:`patroni` a documentação.