Introdução | MongoDB | Banco de dados
- Introdução | MongoDB | Banco de dados
Dataset mongodb (DATABASE): 🔗 Clique aqui
Transação
Transação é aceita apenas para o ambiente de ReplicaSet, ambientes standalone não é possível ter transação
ReplicaSet
docker network create mongoClusterdocker run -d --rm -p 27017:27017 --name mongo1 --network mongoCluster mongo:5 mongod --replSet myReplicaSet --bind_ip localhost,mongo1docker run -d --rm -p 27018:27017 --name mongo2 --network mongoCluster mongo:5 mongod --replSet myReplicaSet --bind_ip localhost,mongo2docker run -d --rm -p 27019:27017 --name mongo3 --network mongoCluster mongo:5 mongod --replSet myReplicaSet --bind_ip localhost,mongo3
Initiate the Replica Set
docker exec -it mongo1 mongosh --eval "rs.initiate({
_id: \"myReplicaSet\",
members: [
{_id: 0, host: \"mongo1\", priority: 1},
{_id: 1, host: \"mongo2\", priority: 0.5},
{_id: 2, host: \"mongo3\", priority: 0.5}
]
})"
Test and Verify the Replica Set
docker exec -it mongo1 mongosh --eval "rs.status()"
Artigo
Connection String
mongodb://rs-mongo1:27021,rs-mongo2:27022,rs-mongo3:27023/dbname?replicaSet=rs_mongodb
No MongoDB, que é um banco de dados NoSQL orientado a documentos, dois conceitos importantes para garantir escalabilidade e alta disponibilidade são Sharding e Replica Sets. Esses mecanismos são fundamentais para sistemas que precisam lidar com grandes volumes de dados e um alto número de operações por segundo. Vamos explorar cada um deles em detalhes.
Sharding e Replicaset
Sharding
Sharding é o processo de distribuição de dados através de múltiplos servidores ou instâncias de banco de dados. Em MongoDB, sharding é usado para suportar implantações com grandes conjuntos de dados e operações de alta taxa de transferência. Ao dividir o conjunto de dados e distribuí-lo entre vários servidores, um único banco de dados pode crescer além dos limites de um único servidor físico, evitando problemas de gargalo de E/S e utilização excessiva da CPU ou memória.
Como Funciona o Sharding?
-
Shards: Cada shard é uma instância MongoDB que armazena uma parte dos dados. Em um ambiente sharded, você terá vários shards, e cada shard pode ser um Replica Set (discutiremos Replica Sets em detalhes a seguir).
-
Mongos: O processo
mongosatua como um query router, fornecendo uma interface unificada para o cliente se conectar ao cluster sharded. Omongosdireciona as operações para o shard correto usando o metadata mantido em config servers. -
Config Servers: Normalmente três servidores de configuração armazenam metadata sobre o cluster. Este metadata inclui informações sobre a configuração do cluster, bem como o mapeamento de intervalos de chaves shard (chamado de chunk) para os shards.
-
Chunks: Os dados em cada coleção são particionados em chunks. Um chunk é um intervalo de valores de chave de shard. O MongoDB divide os dados automaticamente em chunks baseados no shard key.
-
Shard Key: Uma chave de sharding (shard key) é um campo ou conjunto de campos escolhidos na coleção que o MongoDB usa para distribuir os dados entre shards. A escolha da shard key é crítica para o desempenho e balanceamento do cluster.
Benefícios do Sharding
- Escalabilidade Horizontal: Permite que o banco de dados cresça horizontalmente adicionando mais servidores.
- Distribuição de Carga: Distribui a carga de dados e tráfego por vários servidores, melhorando o desempenho.
- Failover: Usando shards que são Replica Sets, o MongoDB pode fornecer alta disponibilidade.
Desafios do Sharding
- Escolha da Shard Key: Uma shard key mal escolhida pode resultar em distribuição de carga desequilibrada (sharding não uniforme).
- Complexidade de Manutenção: O gerenciamento de um cluster sharded é mais complexo do que lidar com um MongoDB não sharded.
Replica Sets
Um Replica Set é um grupo de processos mongod que mantêm o mesmo conjunto de dados replicados de forma redundante. Replica Sets são a base da alta disponibilidade no MongoDB. Eles proporcionam redundância e aumentam a disponibilidade de dados através de replicação automática e failover.
Como Funciona um Replica Set?
-
Primário (Primary): O nó primário recebe todas as operações de escrita. O estado atual de um Replica Set tem exatamente um nó primário.
-
Secundários (Secondaries): Estes nós replicam o nó primário. Em um Replica Set, pode haver um ou mais nós secundários que mantêm cópias dos dados do nó primário.
-
Arbiter: Em alguns casos, um Replica Set pode incluir um arbiter. O arbiter não mantém uma cópia dos dados, mas pode participar na eleição de um novo primário se o atual falhar.
-
Eleição: Se o primário ficar indisponível, os secundários podem eleger um novo primário. O processo de eleição escolhe o secundário que está mais atualizado para se tornar o novo primário.
-
Oplog: Cada membro do Replica Set mantém um oplog (operation log), que é um log especial de todas as operações que modificam os dados. Os secundários usam o oplog do primário para replicar os dados.
Benefícios dos Replica Sets
- Alta Disponibilidade: Com Replica Sets, o MongoDB pode fornecer failover automático e recuperação de dados.
- Recuperação de Desastres: Se um servidor falhar, outros podem tomar o seu lugar sem perda de dados.
- Balanceamento de Leitura: Você pode distribuir as operações de leitura entre o primário e os secundários.
Desafios dos Replica Sets
- Latência de Replicação: Em redes com alta latência, a replicação pode atrasar.
- Design e Configuração: A configuração e manutenção de Replica Sets podem ser complexas, especialmente em grandes clusters.
Conclusão
Sharding e Replica Sets são fundamentais para escalar o MongoDB para grandes conjuntos de dados e muitas operações por segundo, mantendo a alta disponibilidade e a robustez. Sharding permite a escalabilidade horizontal distribuindo os dados, enquanto Replica Sets fornecem alta disponibilidade através da replicação de dados.
Para ambientes de produção que exigem alta performance e disponibilidade, usar ambos os mecanismos em conjunto é frequentemente a melhor prática. Assim, enquanto o sharding ajuda a gerenciar e escalar grandes volumes de dados, os Replica Sets garantem que esses dados estejam sempre disponíveis, mesmo em caso de falhas de hardware ou de rede.