AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 318417
Accepted
padjee
padjee
Asked: 2022-10-20 07:57:20 +0800 CST2022-10-20 07:57:20 +0800 CST 2022-10-20 07:57:20 +0800 CST

cluster de banco de dados postgresql vs um servidor com muitos bancos de dados

  • 772

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

postgresql
  • 1 1 respostas
  • 65 Views

1 respostas

  • Voted
  1. Best Answer
    Vérace
    2022-10-20T09:19:19+08:002022-10-20T09:19:19+08:00

    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 postgresbanco de dados template0e template1por padrão. Você nunca deve tocar template0- 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 (de postgresql.conf) e catálogos do sistema estão lá, mas não tabelas comuns! Se você emitir um \dde 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 :

    Ingres começou como um projeto de pesquisa na UC Berkeley, começando no início dos anos 1970 e terminando em 1985.

    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" e attributeque 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 :

    Um cluster de computadores é um conjunto de computadores que trabalham juntos para que possam ser vistos como um único sistema.

    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 :

    Um cluster de banco de dados é uma coleção de bancos de dados gerenciados por uma única instância de um servidor de banco de dados em execução.

    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):

    Normal definition: Many machines, one system
    PostgreSQL definiton: Many systems, one machine
    

    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:

    Um cluster de banco de dados consiste em N instâncias de banco de dados executadas em N máquinas fisicamente separadas, não compartilhando componentes e conectadas umas às outras por uma rede. Cada instância contém uma cópia completa dos dados e é capaz de iniciar e manter transações de instantâneos point-in-time arbitrárias.

    Então, a definição desses caras é diferente de todas as anteriores...

    • 2

relate perguntas

  • Posso ativar o PITR depois que o banco de dados foi usado

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve