Sou novo no MongoDB e estou procurando por várias horas como promover minha instância autônoma do mongo em um replicaset. Meu ambiente real é um servidor ubuntu
root@UMONGO1:/home/msc# lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 20.04
Codename: focal
executando uma instância autônoma do mongodb localmente na porta 27017:
root@UMONGO1:/var/lib# systemctl status mongod
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2022-01-01 15:46:52 CET; 10min ago
Docs: https://docs.mongodb.org/manual
Main PID: 964 (mongod)
Memory: 222.6M
CGroup: /system.slice/mongod.service
└─964 /usr/bin/mongod --config /etc/mongod.conf
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
# engine:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
#security:
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:
Importei um banco de dados daqui O objetivo é criar mais dois servidores e replicar os dbs neles.
Referindo-se à documentação:
Converter um Standalone em um Conjunto de Réplicas Estou confuso sobre os dois parâmetros --port e --dbpath que preciso usar. Se eu quiser promover minha instância real, devo usar o caminho e a porta do banco de dados existente, certo? Mas o que quer que eu esteja tentando é um fracasso.
Usando outra porta:
mongod --port 27017 --dbpath /var/lib/mongodb/ --replSet rs0
"ctx":"initandlisten","msg":"Error setting up listener","attr":{"error":{"code":9001,"codeName":"SocketException","errmsg":"Address already in use"}}}
mongod --port 27018 --dbpath /var/lib/mongodb/ --replSet rs0
BException in initAndListen, terminating","attr":{"error":"DBPathInUse: Unable to lock the lock file: /var/lib/mongodb/mongod.lock (Resource temporarily unavailable). Another mongod instance is already running on the /var/lib/mongodb/ directory"}}
Usando um novo diretório:
mongod --port 27017 --dbpath /media/msc/MONGO/rs/ --replSet rs0
"replication":{"replSet":"rs0"},"storage":{"dbPath":"/media/msc/MONGO/rs/"}}}}
{"t":{"$date":"2021-12-31T16:55:28.885+01:00"},"s":"E", "c":"CONTROL", "id":20568, "ctx":"initandlisten","msg":"Error setting up listener","attr":{"error":{"code":9001,"codeName":"SocketException","errmsg":"Address already in use"}}}
mongod --port 27018 --dbpath /media/msc/MONGO/rs/ --replSet rs0
{"t":{"$date":"2021-12-31T16:57:11.762+01:00"},"s":"I", "c":"-", "id":4939300, "ctx":"monitoring-keys-for-HMAC","msg":"Failed to refresh key cache","attr":{"error":"NotYetInitialized: Cannot use non-local read concern until replica set is finished initializing.","nextWakeupMillis":2000}}
e esta espera "nextWakeupMillis" nunca para.
Você pode fornecer ajuda sobre qual é a configuração correta e qual é o problema?
****************** EDIT: 01/03/2022 ******************
Agora posso promover minha instância usando:
mongod --port 27017 --dbpath /var/lib/mongodb/ --replSet rs0
e, em seguida, abrir um novo shell e enviar
rs.initiate()
Mas por que o serviço não inicia com essa nova configuração?
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2022-01-03 11:39:51 CET; 1min 12s ago
Docs: https://docs.mongodb.org/manual
Process: 904 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=14)
Main PID: 904 (code=exited, status=14)
janv. 03 11:39:35 UMONGO1 systemd[1]: Started MongoDB Database Server.
janv. 03 11:39:51 UMONGO1 systemd[1]: mongod.service: Main process exited, code=exited, status=14/n/a
janv. 03 11:39:51 UMONGO1 systemd[1]: mongod.service: Failed with result 'exit-code'.
Além disso, se eu reiniciar o servidor, tenho que repetir essas ações. Existe alguma maneira de corrigir a configuração e iniciar o serviço mongod?
Para iniciantes, muitas vezes é confuso quando a documentação do MongoDB não enfatiza claramente as configurações do arquivo de configuração e as opções de linha de comando.
Quando você executa o MongoDB como serviço, deve editar seu arquivo de configuração
/etc/mongod.conf
assimSe você usa o endereço localhost 127.0.0.1 e deseja ter um conjunto de réplicas, todas as réplicas (diferentes) (processos mongoD) devem existir em portas diferentes E ter diretórios de dados diferentes (storage.dbPath), porque estão na mesma máquina. Então, rs0 usa f.ex. 27007, rs1 usa f.ex. 27017, rs2 usa f.ex. 27027 e, em seguida, os diretórios são f.ex. /var/lib/mongodb/rs0, /var/lib/mongodb/rs1...
No entanto, se você criar seu conjunto de réplicas com várias máquinas,
Parece que já existe um mongod em execução.
Veja suas mensagens de erro
então você tem
então
As etapas 1,2 na documentação dizem isso
Verifique se o mongod está sendo executado com isso
Então entre no mongo
e execute isso para desligá-lo
Então, você deve ser capaz de iniciá-lo com
já que a porta 27017 deve ser livre para usar
ATUALIZAÇÃO 2022-01-01 11:54 EST
Acabei de criar uma instância vagrant e tentei
Aqui é Vagrant
Aqui está como eu implantei o mongod
Suspeito que o arquivo mongod.conf esteja interferindo no comando que você está usando na documentação.
SUGESTÃO : Renomeie o arquivo conf
Em seguida, implante o mongod usando meu comando ou o da documentação do MongoDB
Finalmente depois de horas de pesquisa/teste e graças a várias respostas úteis aqui, consegui construir o cluster e estou começando a entender mais claramente como funciona o cluster mongodb. Esqueci totalmente o Ubuntu, o que quer que eu tentei, o serviço não será iniciado.
Eu tenho dois membros, MONGO2 e MONGO3 com o serviço mongo em execução.
MONGO2
MONGO3:
Quando esta mensagem de erro aparecer:
./mongo.exe --port 27017
então
rs.initiate()
Feche tudo e inicie o serviço mongo.
Adicione seu outro servidor ao cluster
rs.add("MONGO3:27017");
Resultado