Base de datos no relacional MongoDB: (2) instrucciones de implementación del conjunto de réplicas, migración de datos, límite de memoria y autenticación mongo habilitada

Tabla de contenido

Uno: instrucciones de implementación del conjunto de réplicas de mongo

1.1 Implementación de un solo nodo

1.2 Implementación de varios nodos

Dos: migración de datos mongoDB (modo mongodump)

2.1 Exportación de datos

2.2 Transmisión de datos

2.3 Importación de datos

Tres: limitar el uso de la memoria de MongoDB (RHEL7)

3.1 Modificar el archivo de configuración de mongoDB

3.2 Configurar MongoDB para comenzar a usar systemctl

3.3 Limite el uso de la memoria MongoDB

3.4 Iniciar MongoDB

Cuatro: habilitar la autenticación mongo

4.1 Inicie sesión en mongDB y cree una cuenta de administrador en la biblioteca de administración

4.2 Modifique el archivo de configuración de MongoDB, habilite la autenticación de usuario (agregue las dos últimas líneas) y reinicie MongoDB

4.3 Inicie sesión en la cuenta de administrador y cree un usuario comercial

Prefacio: primero familiarícese con las características, ventajas, implementación y comandos básicos de la base de datos mongoDB. Mire la base de datos no relacional MongoDB: (1) Comprensión, ventajas, construcción y comandos básicos
 


Uno: instrucciones de implementación del conjunto de réplicas de mongo

1.1 Implementación de un solo nodo

La premisa de esta parte es que ha descargado e instalado MongoDB, y puede ejecutarse normalmente. La ejecución de un conjunto de réplicas en un solo nodo solo se puede usar para desarrollo y pruebas, no como un entorno de producción.

A continuación, creamos un conjunto de réplicas llamado rs0. El entorno de configuración es ubuntu 12.10 y MongoDB 2.4.

paso:

1. Crea tres carpetas con los siguientes comandos

mkdir -p /srv/mongodb/rs0-0 /srv/mongodb/rs0-1 /srv/mongodb/rs0-2

2. Inicie tres procesos mongod Tenga en cuenta que los números de puerto no pueden ser iguales y no están ocupados. Puede usar tres terminales para conectarse al mismo Linux y luego ejecutar un comando en cada terminal para simular el uso de tres servidores a la vez.

Aquí están los comandos para iniciar los tres procesos mongod:

mongod --port 27017 --dbpath /srv/mongodb/rs0-0 --replSet rs0 --smallfiles --oplogSize 128 --logpath /var/log/mongod1.log --fork
mongod --port 27018 --dbpath /srv/mongodb/rs0-1 --replSet rs0 --smallfiles --oplogSize 128--logpath /var/log/mongod2.log --fork
mongod --port 27019 --dbpath /srv/mongodb/rs0-2 --replSet rs0 --smallfiles --oplogSize 128--logpath /var/log/mongod3.log --fork

El parámetro replSet va seguido del nombre del conjunto de réplicas;

smallfiles y oplogSize se usan para reducir el uso del disco y solo se usan para realizar pruebas aquí, no se recomiendan para entornos de producción;

El parámetro logpath especifica la ruta donde se guarda el registro;

--fork significa ejecutar este proceso como un proceso en segundo plano.

3. Ahora inicie un proceso mongo y conéctese a uno de los tres procesos recién iniciados:

mongo --port 27017

4. Cree un objeto de configuración de conjunto de réplicas para inicializar el conjunto de réplicas. El contenido del objeto es el siguiente:

rsconf = {
_id: "rs0",
members: [
{
_id: 0,
host: "<hostname>:27017"
}
]
}

Donde hostname se refiere al nombre de su servidor o dirección IP. Debido a que es local, puede usar localhost.

5. Utilice el método rs.initiate() para inicializar el conjunto de réplicas:

rs.initiate( rsconf )

6. Después de ejecutar el último comando, se le pedirá que espere un momento antes de poder ver el resultado. Ahora use rs.conf() para ver la información del clúster de réplica:

rs.conf()

Encontrará que solo hay un miembro de nodo, que es el nodo en el que está operando actualmente.

7. Ahora use el comando rs.add() para agregar los dos procesos mongod restantes al conjunto de réplicas:

rs.add("<hostname>:27018")
rs.add("<hostname>:27019")

Tenga cuidado de reemplazar el nombre de host con el nombre de su servidor. Espera un momento.

Luego, use rs.status() para ver la información del clúster de réplicas actual y encontrará que ahora hay tres miembros del conjunto de réplicas. En este punto, la implementación del conjunto de réplicas de un solo nodo está completa.

Puede intentar insertar algunos datos de prueba primero y luego cerrar uno de los procesos mongod para simular una falla de nodo. Luego use mongo para conectarse al nuevo nodo maestro y luego intente insertar o leer información en la base de datos para ver si puede leer y escribir normalmente.

1.2 Implementación de varios nodos

El entorno de producción de múltiples nodos no es muy diferente de la implementación del entorno de desarrollo de prueba de un solo nodo, excepto que mongod se ejecuta en diferentes servidores, pero es necesario asegurarse de que cada nodo se pueda resolver por nombre. Para evitar agregar muchos parámetros cada vez que ejecuta mongod, puede guardar los parámetros en un archivo y usar --config para especificar el archivo de configuración al inicio .

paso

1. Primero especifique los nombres de los tres servidores y agréguelos al archivo de nombre de host. La dirección IP y el nombre del servidor se pueden modificar de acuerdo con su entorno real.

Servidor 1: mdb1, 10.6.12.79

Servidor 2: mdb2, 10.6.12.80

Servidor 3: mdb3, 10.6.12.81

Servidor 4: mdb4, 10.6.12.82

Después de la configuración, utilice el comando ping para comprobar si pueden resolver el nombre del servidor.

2. Edite el archivo de prueba y personalice el nombre del archivo, aquí se llama config.conf. El contenido es el siguiente:

port = 27017
#需要监听的客户端IP地址,即只接受来自这部分的IP连接,提高了安全性。(默认为接受所有的IP请求)
bind_ip = 10.6.12.79
dbpath = /srv/mongodb
fork = true
replSet = rs0

3. Use el comando scp para copiar el archivo de configuración a los otros dos servidores y use el siguiente comando para iniciar el proceso mongod:

mongod --config /src/config.conf 

Donde /src/config.conf es la ruta del archivo de configuración.

4. Use mongo para conectarse a uno de los procesos mongod y use rs.initiate() para inicializar el conjunto de réplicas:

> rs.initiate()
{
	"info2" : "no configuration explicitly specified -- making one",
	"me" : "mdb2:27017",
	"info" : "Config now saved locally.  Should come online in about a minute.",
	"ok" : 1
}

5. Use rs.conf() para ver el estado actual:

> rs.conf()
{
	"_id" : "rs0",
	"version" : 1,
	"members" : [
		{
			"_id" : 0,
			"host" : "mdb2:27017"
		}
	]
}

6. Use rs.add() para agregar los otros tres nodos al conjunto de réplicas:

> rs.add("mdb1:27017")
{ "ok" : 1 }
rs0:PRIMARY> rs.add("mdb3:27017")
{ "ok" : 1 }

Al mismo tiempo, agregue otro nodo de arbitraje:

rs0:PRIMARY> rs.addArb("mdb4:27017")
{ "ok" : 1 }

Del contenido anterior, podemos ver que rs0:PRIMARY no apareció al principio. Cuando se agrega un miembro, el nodo se convierte en el nodo principal. Esto significa que el nodo que agregó se agregó correctamente al conjunto de réplicas.

En este punto, la implementación del nodo del clúster está completa. Pero en aplicaciones prácticas, debido a la necesidad de operar de un lado a otro en diferentes servidores, se recomienda usar scripts para iniciar automáticamente el proceso de implementación.


Dos: migración de datos mongoDB (modo mongodump)

Inicie sesión en la máquina mapeada por lx-mgodb en el entorno de clúster original. 
Este ejemplo toma el proyecto ZJJQ como ejemplo. El proceso de operación en otros entornos es el mismo, preste atención al reemplazo de parámetros.

2.1 Exportación de datos

Verifique la lista de db para exportar

/opt/lxxn/services/mongodb/bin/mongo --port 27017
show dbs;

Sustituya los otros nombres de base de datos en la lista mostrada excepto local en el parámetro después de -d en el siguiente comando de exportación, y puede definir el valor del parámetro de -o usted mismo.Este valor de parámetro es el directorio /tmp/dumpfiles donde está el archivo exportado Este directorio debe existir,

Ejemplo:

sudo /opt/lxxn/services/mongodb/bin/mongodump --host=localhost --port=27017 -d orgcontact -o='/tmp/dumpfiles/'

Explicación de parámetros:
–host: nombre del servidor o IP:PORT
-u: nombre de usuario
-p: contraseña
-d: base de datos dbname
-o: ruta de almacenamiento del archivo exportado

–authenticationDatabase admin: agregue el parámetro –authenticationDatabase admin para formular la base de datos de autenticación

Si hay varios dbs, modifique los parámetros después de -d y luego ejecútelos varias veces, como:

sudo /opt/xxin/services/mongodb/bin/mongodump --host=localhost --port=27017 -d orgcontact -o='/tmp/dumpfiles/'
sudo /opt/lxxn/services/mongodb/bin/mongodump --host=localhost --port=27017 -d zjjq-lanxin -o='/tmp/dumpfiles/'
sudo /opt/laxx/services/mongodb/bin/mongodump --host=localhost --port=27017 -d logdb -o='/tmp/dumpfiles/'

2.2 Transmisión de datos

Empaque y transfiera /tmp/dumpfiles (según el valor del parámetro de exportación definido por usted mismo)
al servidor designado para realizar la importación (la herramienta cliente de mongodb debe estar instalada en el servidor)

2.3 Importación de datos

Para importar datos en el nuevo entorno, reemplace el valor del parámetro después de -d y la ruta absoluta descrita por el último valor del parámetro por usted mismo. Al mismo tiempo, –host apunta a la ip del servidor mongodb importado. El servidor que ejecuta el la importación requiere la instalación de la herramienta de cliente mongodb.

sudo /opt/xxx/mongo/bin/mongorestore --host=localhost --port=27017 -d orgcontact --drop /tmp/dumpfiles/orgcontact
sudo /opt/xxxx/mongo/bin/mongorestore --host=localhost --port=27017 -d xxx --drop /tmp/dumpfiles/zjjq-lanxin
sudo /opt/xx/mxxongo/bin/mongorestore --host=localhost --port=27017 -d logdb --drop /tmp/dumpfiles/logdb

Recuperación de datos (base de datos)

Comando: mongorestore -h localhost -u root -p root123 --db admin dump/test_jia/ --authenticationDatabase admin
-h: nombre del servidor o IP:PORT
-u: nombre de usuario
-p: contraseña
–db: base de datos dbname, debe ser restaurado El nombre de la base de datos
dump/test_jia/: la ruta de almacenamiento del archivo restaurado
–authenticationDatabase admin: Agregue el parámetro –authenticationDatabase admin para formular la base de datos de autenticación


Tres: limitar el uso de la memoria de MongoDB (RHEL7)

3.1 Modificar el archivo de configuración de mongoDB

vim /opt/xx/conf/mongo/mongo_standalone.conf

Agregue el parámetro MongoDB: storage.wiredTiger.engineConfig.cacheSizeGB

systemLog:
   destination: file
   path: "/opt/logs/mongo/mongo_standalone.log"
   logAppend: true
storage:
   dbPath: "/opt/db/mongo/mongo_standalone"
   journal:
      enabled: true
   engine: wiredTiger
   wiredTiger:
      engineConfig:
         cacheSizeGB: 14
processManagement:
   fork: true
   pidFilePath: "/opt/run/mongo/mongo_standalone.pid"
net:
   bindIp: 0.0.0.0
   port: 27017

3.2 Configurar MongoDB para comenzar a usar systemctl

Agregue el archivo mongodb.service:

vim /etc/systemd/system/mongodb.service 
[Unit]
Description=MongoDB_standalone
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/opt/xxxx/run/mongo/mongo_standalone.pid
ExecStart=/opt/xxxx/init.d/mongo start
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/opt/xxxx/init.d/mongo stop
#ExecStop=/bin/kill -s QUIT $MAINPID
#ExecStop=/opt/bxixxx/mongodb/bin/mongod --shutdown --config /opt/bxxxix/conf/mongo/mongo_standalone.conf 
PrivateTmp=true

[Install]
WantedBy=multi-user.target

3.3 Limite el uso de la memoria MongoDB

En el archivo /etc/systemd/system/mongodb.service, sección [Service], agregue MemoryLimit (sección azul)

cat /etc/systemd/system/mongodb.service 
[Unit]
Description=MongoDB_standalone
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/opt/xxx/run/mongo/mongo_standalone.pid
ExecStart=/opt/bxxxxix/init.d/mongo start
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/opt/xxxx/init.d/mongo stop
PrivateTmp=true
MemoryLimit=20G

[Install]
WantedBy=multi-user.target

3.4 Iniciar MongoDB

Vuelva a cargar systemctl e inicie MongoDB con systemctl:

# systemctl daemon-reload 

# systemctl start mongodb.service

# systemctl status mongodb
● mongodb.service - MongoDB_standalone
Loaded: loaded (/etc/systemd/system/mongodb.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2019-04-01 10:00:54 CST; 3 days ago
Process: 29132 ExecStart=/opt/xxxeix/init.d/mongo start (code=exited, status=0/SUCCESS)
Main PID: 29139 (mongod)
Memory: 18.0G (limit: 20.0G)
CGroup: /system.slice/mongodb.service
└─29139 /opt/bxxxx/mongo/bin/mongod --config /opt/xxxix/conf/mongo/mongo_standalone.conf

Apr 01 10:00:53 shcp-bdu04 systemd[1]: Starting MongoDB_standalone...
Apr 01 10:00:53 shcp-bdu04 runuser[29135]: pam_unix(runuser:session): session opened for user xxxeset by (uid=0)
Apr 01 10:00:53 shcp-bdu04 mongo[29132]: about to fork child process, waiting until server is ready for connections.
Apr 01 10:00:53 shcp-bdu04 mongo[29132]: forked process: 29139
Apr 01 10:00:54 shcp-bdu04 mongo[29132]: child process started successfully, parent exiting
Apr 01 10:00:54 shcp-bdu04 runuser[29135]: pam_unix(runuser:session): session closed for user bxxxeset
Apr 01 10:00:54 shcp-bdu04 mongo[29132]: [45B blob data]
Apr 01 10:00:54 shcp-bdu04 systemd[1]: Started MongoDB_standalone.

Cuatro: habilitar la autenticación mongo

4.1 Inicie sesión en mongDB y cree una cuenta de administrador en la biblioteca de administración

use admin
db.createUser(
{
    user: "xxxadmin",
    pwd: "xxx",
    roles: [ { role: "root", db: "admin" } ]
}
) 

4.2 Modifique el archivo de configuración de MongoDB, habilite la autenticación de usuario (agregue las dos últimas líneas) y reinicie MongoDB

# cat /opt/xxix/conf/mongo/mongo_standalone.conf
systemLog:
   destination: file
   path: "/opt/xeixx/logs/mongo/mongo_standalone.log"
   logAppend: true
storage:
   dbPath: "/opt/xxix/db/mongo/mongo_standalone"
   journal:
      enabled: true
processManagement:
   fork: true
   pidFilePath: "/opt/xix/run/mongo/mongo_standalone.pid"
net:
   bindIp: 0.0.0.0
   port: 27017
security:
   authorization: enabled 

4.3 Inicie sesión en la cuenta de administrador y cree un usuario comercial

Dos formas de iniciar sesión, verificar al iniciar sesión o verificar después de iniciar sesión sin autenticación:

mongo --port 27017 -u "xxx_admin" -p "xxx" --authenticationDatabase "admin"

或

use admin
db.auth("xxx_admin", "xxx" ) 

Cree una cuenta de base de datos comercial. La situación actual es que los nombres de usuario y las contraseñas de las tres bases de datos son los mismos, y en realidad hay tres usuarios (la configuración de permisos de MongoDB se basa en la base de datos, y la base de datos debe seleccionarse primero):

use dbdb
db.createUser(
{
    user: "xxx",
    pwd: "xxx",
    roles: [ { role: "readWrite", db: "dbdb" },
               { role: "dbAdmin", db: "dbdbv" } ]
}
) 

use logdb
db.createUser(
{
    user: "xxxn",
    pwd: "xxxLlnxxf",
    roles: [ { role: "readWrite", db: "logdb" },
               { role: "dbAdmin", db: "logdb" } ]
}
) 

use ondtact
db.createUser(
{
    user: "xxxxn",
    pwd: "xxxxnfxx",
    roles: [ { role: "readWrite", db: "ondtact" },
               { role: "dbAdmin", db: "ondtact" } ]

Supongo que te gusta

Origin blog.csdn.net/ver_mouth__/article/details/126226028
Recomendado
Clasificación