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 / 328194
Accepted
Rafael
Rafael
Asked: 2023-06-12 22:03:51 +0800 CST2023-06-12 22:03:51 +0800 CST 2023-06-12 22:03:51 +0800 CST

Mongodb replicaset permite secundário para gravar dados

  • 772

Estou tendo problemas para entender como o replicaSet funciona usando 2 nós e um árbitro, usando a comunidade MongoDB 6 em 3 servidores com ubuntu 22.04.

Meu cenário atual é que tenho 2 servidores em um replicaSet onde o primeiro é primário (prioridade 1) e um secundário com prioridade 0,5 (eu configurei assim, então sempre poderia ter o primário como servidor principal). Um terceiro servidor não armazena nenhum dado funcionando como árbitro.

Testei desligar meu primário, então meu secundário foi eleito como primário sem nenhum problema. Mas se eu tentar gravar qualquer dado nele, ele não salva até que meu primário volte.

A ideia é ter meu secundário como um servidor sobressalente caso meu principal falhe por qualquer motivo, para que meus aplicativos possam continuar salvando e lendo.

Eu sei que poderia usar 3 nós de servidor, então eu teria 2 servidores graváveis ​​para votar, mas considerando que esse banco de dados terá cerca de 1 TB de dados, não posso ter um terceiro servidor salvando a mesma quantidade de dados por enquanto.

Eu tentei alguns comandos sobre a preocupação de gravação, mas tive dois comportamentos diferentes:

1 - Usando este comando, usando mongodb Compass, parece gravar novos dados, mas não é listado até que o primário volte:

db.adminCommand({ "setDefaultRWConcern": 1, "defaultWriteConcern": { "w": 1 } })

2 - Usando mongodb Compass, mostre "Iinserting Document", mas nunca termine, até que o primário volte:

db.adminCommand({ "setDefaultRWConcern": 1, "defaultWriteConcern": { "w": "majority" } })

Atualização de como conectado: Por meio de um aplicativo PHP, usando ssh com mongoshMongoDB Compass com string de conexão (com ajuda de Wernfried): mongodb://rootuser:rootpasswd@primaryip:27017,secondaryip:27017/?replicaSet=myRepl&authSource=admin&readPreference=primaryPreferred

Se eu desligar meu servidor primário, o secundário é eleito como primário, mas não posso escrever até que ambos os nós estejam online.

É assim que meu rs.conf() está agora

{
   _id: 'rspd01',
   version: 13,
   term: 51,
   members: [
     {
        _id: 0,
        host: 'primaryIP:27017',
        arbiterOnly: false,
        buildIndexes: true,
        hidden: false,
        priority: 1,
        tags: {},
        secondaryDelaySecs: Long("0"),
        votes: 1
     },
     {
        _id: 1,
        host: 'secondaryIP:27017',
        arbiterOnly: false,
        buildIndexes: true,
        hidden: false,
        priority: 0.5,
        tags: {},
        secondaryDelaySecs: Long("0"),
        votes: 1
     },
     {
        _id: 2,
        host: 'arbiterIP:27017',
        arbiterOnly: true,
        buildIndexes: true,
        hidden: false,
        priority: 0,
        tags: {},
        secondaryDelaySecs: Long("0"),
        votes: 1
     }
   ],
   protocolVersion: Long("1"),
   writeConcernMajorityJournalDefault: true,
   settings: {
      chainingAllowed: true,
      heartbeatIntervalMillis: 2000,
      heartbeatTimeoutSecs: 10,
      electionTimeoutMillis: 10000,
      catchUpTimeoutMillis: -1,
      catchUpTakeoverDelayMillis: 30000,
      getLastErrorModes: {},
      getLastErrorDefaults: { w: 1, wtimeout: 0 },
      replicaSetId: ObjectId("64863fd09a9b54d4cd0da913")
   }
}

Existe algum comando que eu possa fazer para trabalhar com essa estrutura?

Atenciosamente.

replication
  • 1 1 respostas
  • 31 Views

1 respostas

  • Voted
  1. Best Answer
    Wernfried Domscheit
    2023-06-13T12:50:09+08:002023-06-13T12:50:09+08:00

    Observe que no MongoDB você tem duas maiorias diferentes.

    • Uma maioria se aplica para eleger um PRIMÁRIO, no seu caso todos os três membros são contados, ou seja, se um membro não estiver disponível, você ainda terá a maioria disponível.

    • A outra maioria aplica-se a escrever dados, no seu caso, apenas as duas notas com dados são contadas. Se um deles cair, a maioria não estará mais disponível - apesar do fato de você ter um ÁRBITRO.

    Portanto, para um conjunto de réplicas PSA de 3 membros, a única preocupação RW significativa é

    db.adminCommand({ setDefaultRWConcern: 1, defaultWriteConcern: { w: 1 } }) 
    

    Normalmente, você executa esse comando apenas uma vez ao configurar seu MongoDB.

    Esteja ciente de que alguns comandos (por exemplo, renomear uma coleção) reforçam a preocupação de gravação { w: "majority" }, você não pode alterá-lo. Portanto, a maioria deve estar disponível quando você quiser executar esses comandos. Caso contrário, você precisa rebaixar o membro que não está disponível para um membro sem direito a voto, ou seja, alterar as configurações da réplica para { votes: 0, priority: 0}.

    • 1

relate perguntas

  • Como você pode impedir que o escravo MySQL replique as alterações no banco de dados 'mysql'?

  • É imprudente executar a replicação no mesmo servidor físico?

  • Existe uma maneira de medir o atraso de replicação no MySQL com uma resolução inferior a 1 segundo?

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

  • 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