https://gist.github.com/paulobezerr/98016c2a89126c59bca3260e07bbdc44
Requisitos mínimos:
- Uma máquina para router (mongos)
- Três máquinas para configuração (metadata - mongod)
- Duas máquinas para guardar os dados (mongod) - Essas você pode instalar o mongo, abrir para fora e deixar rodando
O primeiro passo é criar o replicaset de configuração:
- Se em produção, criar três máquinas que receberão uma instância do mongodb, senão, utilizar a mesma máquina, porém mudar as portas das instâncias (por favor, se não souber como funciona, sobe VM e se vira com várias máquinas).
- Configurar três instâncias do mongodb com wiredTiger, setando o nome do replicaSet (igual em todas) e ativando o clusterRule para configsvr.
- Ligar as três instâncias.
O arquivo de configuração modelo é:
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
engine: wiredTiger
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
port: 27019
bindIp: 0.0.0.0
sharding:
clusterRole: configsvr
replication:
replSetName: <replicaSetName>Depois que as três instâncias estiverem levantadas, acessar qualquer uma delas e (depois de alterar o scripts abaixo para seus IP's), executar o comando:
rs.initiate({
_id: "<replicaSetName>",
configsvr: true,
members: [
{ _id: 0, host: "<mongod_instance_1>:27019" },
{ _id: 1, host: "<mongod_instance_2>:27019" },
{ _id: 2, host: "<mongod_instance_3>:27019" }
]
});Com isso, teremos um replicaset de configuração do banco em três instâncias. Funciona como um espelho, porém a leitura é feita nas três instâncias (como em RAID).
Agora, termos que levantar a instância do router (mongos). Antes disso, é importante saber que a responsabilidade desse daemon é de manter as conexões e cursores com o a aplicação, que solicitou a operação. Por isso, não precisamos reservar espaço em disco para o banco, pois tudo é feito em memória.
A configuração do mongos, deve seguir esses parâmetros:
systemLog: destination: file logAppend: true path: /var/log/mongodb/mongos.log net: port: 27017 bindIp: 0.0.0.0 processManagement: fork: true sharding: configDB: "<replicaSetName>/<mongod_instance_1>:<port>,<mongod_instance_2>:<port>,<mongod_instance_3>:<port>"
Coloque essa instância para subir. Agora, você só precisa adicionar todas as instâncias de banco (aquelas que eu disse no iniício que podia configurar a máquina e deixar rodando). Para realizar essa operação, conecte-se no sharding, e execute o comando:
sh.addShard("<mongodb_instance>:<port>");Quem guardará as informações do cluster, serão as instâncias de configuração, ou seja, você pode adicionar quantos mongos quiser sem precisar rodar o comando acima.
Precisamos ativar os bancos de dados que esse sharding irá controlar, para isso, conecte-se no mongos e execute:
sh.enableSharding("<database_name>");Para facilitar a vida de todos, preparei o script para o systemd conseguir gerenciar os processos do mongo. Ele deve ser posto em /lib/systemd/system/mongos.service. Certamente, se você já passou por muitos problemas relacionados, isso vai mudar sua vida. Você pode utilizá-lo para subir processos do mongod, só alterar os nomes e paths.
[Unit]
Description=High-performance, schema-free document-oriented database
After=syslog.target
After=network.target
[Service]
User=mongodb
Group=mongodb
Type=forking
RuntimeDirectory=mongodb
RuntimeDirectoryMode=755
PIDFile=/var/run/mongodb/mongos.pid
ExecStart=/usr/bin/mongos --quiet \
--config /etc/mongos.conf \
--pidfilepath /var/run/mongodb/mongos.pid
LimitFSIZE=infinity
LimitCPU=infinity
LimitAS=infinity
LimitNOFILE=64000
LimitNPROC=64000
[Install]
WantedBy=multi-user.target