Perdoe minha pergunta idiota.
Eu quero saber quais são as diferenças entre o cluster de banco de dados postgreSQL (1 servidor, N bancos de dados, N portas) e um servidor que hospeda vários bancos de dados (1 servidor, N bancos de dados, 1 porta)?
Eu li o agrupamento aqui e também aqui e isso também. Eu simplesmente não entendo. Ainda mais estranho para mim (devido à minha falta de conhecimento), no OpDash diz que o cluster pode executar diferentes versões do postgres ao mesmo tempo. :(
Algum exemplo de uso de cluster de banco de dados no mundo real? Suponha que eu queira fazer alta disponibilidade com replicação Master - Slave, preciso de clustering de banco de dados para isso?
por favor me esclareça ou me aponte para uma direção/artigo.
obrigada
Um cluster PostgreSQL é uma "instância" na linguagem Oracle, (esta não é a definição "normal" - veja abaixo) trabalhando em uma máquina.
Você pode ter uma instância do PostgreSQL (cluster) com apenas um banco de dados, além dos dois templates (veja abaixo). Para ter um sistema funcional, você terá 3 bancos de dados - dois templates e um banco de dados "funcionando".
Todos os bancos de dados PostgreSQL que você cria (por exemplo, empresa, organização...) podem ter um ou mais esquemas que você também pode criar. Qualquer banco de dados pode ter vários esquemas - separação lógica de funções - RH, contabilidade etc., ou seja, dentro de sua empresa/organização geral.
Você obterá o
postgres
banco de dadostemplate0
etemplate1
por padrão. Você nunca deve tocartemplate0
- isso pode tornar seu sistema inoperante - aqui está o blog sobre como copiar bancos de dados de modelos. Os modelos são "esqueletos" - a partir dos quais você cria bancos de dados - todas as configurações (depostgresql.conf
) e catálogos do sistema estão lá, mas não tabelas comuns! Se você emitir um\d
de dentro do template1, receberá a mensagem:Did not find any relations.
Na mesma máquina, você pode ter muitos clusters (definição do PostgreSQL - veja a discussão sobre clusters abaixo) como quiser (dentro do razoável) usando portas diferentes. Máquinas de produção normalmente usariam 5432 e máquinas dev/UAT podem ter alguns clusters (ou seja, instâncias) usando portas diferentes - executar pequenos bancos de dados de teste não consome muitos recursos!
Todos esses bancos de dados podem ter seu próprio (conjunto de) esquema(s) - então você pode ter (por exemplo) 3 ( definição PostgreSQL de ) clusters rodando nas portas 5432, 5433 e 5434, cada um com um esquema hr, um esquema de contabilidade (quantos esquemas você quiser - dentro do razoável).
Você não é obrigado a criar (um) esquema(s) - pode ser útil para a separação lógica de grandes bancos de dados em suas seções constituintes ( cf hr/accts...)
Reagrupamentos!
Acho que vejo o motivo da confusão re clusters/databases/schemas!
PostgreSQL é muito antigo - deriva de Ingres :
Isso é quase uma década antes do primeiro lançamento da Oracle em 1979. Ele usa um vocabulário mais antigo do que a documentação da maioria dos sistemas.
Observe os termos que usei:
System (em vez das
catalogs
"tabelas" de sistema mais usuais )relations
(novamente, em vez de "tabelas" - o PostgreSQL faz uma distinção entre tabelas de sistema (catálogos) e tabelas comuns (relações)).O pessoal do PostgreSQL gosta de usar outros termos, isto é
tuple
, que foi amplamente substituído por "registro" e/ou "linha" eattribute
que foi substituído por "coluna" em outros sistemas e no uso geral. Essa mudança possivelmente foi impulsionada pela onipresença das planilhas!Esses termos derivam do cálculo relacional que deriva de um artigo escrito por Ted Codd que usa linguagem matemática . O criador do sistema Ingres foi Michael Stonebraker , um acadêmico, daí a retenção de (o que pode ser considerado) termos excessivamente acadêmicos.
Hoje em dia, um "
cluster
" é considerado :Esta não é a definição do PostgreSQL - possivelmente decorrente de um uso mais antigo - não consegui encontrar nenhum link para isso, então é especulação da minha parte!
A melhor definição de um cluster para o PostgreSQL é a própria definição do PostgreSQL :
Observe que não há nada sobre várias máquinas - é uma única instância de um servidor de banco de dados em execução! Pode-se ter muitos clusters (ou seja, instâncias do PostgreSQL) em uma única máquina - a definição do PG é, de certa forma, o inverso do que é mais comumente aceito como a definição de um cluster (parafraseando):
Re HA
Fazer a replicação com Master/Slave terá automaticamente dois clusters PostgreSQL localizados em máquinas diferentes - o que pode envolver mais de um banco de dados, mas como eu disse, no PROD, normalmente ele é dedicado a um banco de dados (junto com seus templates esqueléticos, que você não pode excluir).
Você terá que ter provisionamento de failover e então terá um cluster no sentido moderno - muitas máquinas, um sistema. Uma discussão completa sobre a alta disponibilidade do PostgreSQL seria uma resposta em si e há muitas opções diferentes - eu leria o que o próprio PostgreSQL tem a dizer sobre isso e também este post do PostgresPro (grandes pesos no mundo PostgreSQL) que fornece uma lista de 4 sistemas que podem fazer este trabalho:
Finalmente, há Percona , (e veja aqui ) e VáriosNines (um pouco desatualizado no momento da redação - 20 de outubro de 2022) - ambos grandes no mundo do banco de dados (Open Source).
Você precisa ler todos esses posts, seguir os links e garantir que entende os prós e contras de cada sistema e o que compromete você e seus stakeholders podem/querer fazer (orçamento, RTO/RPO , expertise).
Última palavra em "clusters":
Finalmente, e para adicionar um pouco de complicação à mistura, agora existem sistemas PostgreSQL que são distribuídos "nativamente". Há TimescaleDB e Citusdata - que são "PostgreSQL distribuído". Eles funcionam por fragmentação - ou seja, diferentes blocos de dados em diferentes máquinas, mantendo um nível de redundância (especificado pelo usuário, normalmente número primo).
Suas soluções de alta disponibilidade parecem ser baseadas em nuvem (Citusdata é de propriedade da Microsoft) - veja aqui (Escala de tempo) e aqui Citus. Não vale nada que ambos sejam baseados no incrível sistema de extensões PostgreSQL ! Você pode querer dar uma olhada lá também.
Sistemas semelhantes seriam CockroachDB, Yugabyte e TiDB.
Finalmente, de outro conjunto de pesos pesados vem esta definição (parte superior da página 2) de um cluster:
Então, a definição desses caras é diferente de todas as anteriores...