Combate de casos de bases de datos NoSQL - Solución de alta disponibilidad de bases de datos MongoDB - Conjunto de replicación MongoDB (replicación maestro-esclavo)

Prefacio

Este entorno se basa en el sistema Centos 7.8 para crear un entorno de aprendizaje mongodb-enterprise-4.2.8. Para
una construcción específica, consulte la construcción del entorno mongodb-enterprise-4.2.8.

La replicación de MongoDB es el proceso de sincronizar datos en varios servidores; el conjunto de replicación proporciona una copia de seguridad redundante de los datos y mejora la disponibilidad de los datos, generalmente garantizando la seguridad de los datos; el conjunto de replicación también permite a los técnicos recuperarse de fallas de hardware e interrupciones del servicio Recuperación de datos.


1. ¿Qué es un conjunto de réplicas de MongoDB?

¿Qué es un conjunto de réplicas?

  • Garantizar la seguridad de los datos
  • Respaldo y redundancia de datos
  • Alta disponibilidad de datos (24 * 7)
  • Recuperación de desastres
  • Sin tiempo de inactividad por mantenimiento (como respaldo, reindexación, compresión)
  • Datos de lectura distribuidos
  • El conjunto de réplicas es transparente para la capa de la aplicación (en relación con el usuario final)

El principio de funcionamiento del conjunto de réplicas de MongoDB

  • 1. El conjunto de replicación de mongodb requiere al menos dos nodos. Uno de ellos es el nodo maestro, que se encarga de procesar las solicitudes de los clientes, y el resto son nodos esclavos, que se encargan de copiar los datos en el nodo maestro.
  • 2. El método de colocación común de cada nodo de mongodb es: un maestro y un esclavo, un maestro y varios esclavos.
  • 3. El nodo maestro registra todos los registros de operación en él, y el nodo esclavo sondea periódicamente al nodo maestro para obtener estas operaciones, y luego realiza estas operaciones en su propia copia de datos, a fin de garantizar que los datos del nodo esclavo sean consistentes con el nodo maestro

2. Diseño de la arquitectura del conjunto de réplicas de MongoDB

Inserte la descripción de la imagen aquí
Características del conjunto de réplicas de MongoDB

  • Clúster de n nodos
  • Cualquier nodo puede usarse como nodo maestro
  • Todas las operaciones de escritura están en el nodo maestro.
  • Conmutación por error automática
  • Recuperación automática

Tres, el caso real del conjunto de replicación de MongoDB

1. Implementación del conjunto de réplicas de MongoDB

Preparación ambiental

papel anfitrión ip versión mongodb
Maestro node01 192.168.5.11 mongodb-empresa-4.2.8
esclavo1 node02 192.168.5.12 mongodb-empresa-4.2.8
esclavo2 node03 192.168.5.13 mongodb-empresa-4.2.8

Modificar el archivo de configuración de MongoDB

# 所有节点修改
--- node01
[root@node01 ~]# vim /etc/mongod.conf
net:
  port: 27017
  bindIp: 127.0.0.1,192.168.5.11
replication:
  oplogSizeMB: 1024
  replSetName: myRs
[root@node01 ~]# systemctl restart mongod

--- node02
[root@node02 ~]# vim /etc/mongod.conf
net:
  port: 27017
  bindIp: 127.0.0.1,192.168.5.12
replication:
  oplogSizeMB: 1024
  replSetName: myRs
[root@node02 ~]# systemctl restart mongod
  
--- node03
[root@node03 ~]# vim /etc/mongod.conf
net:
  port: 27017
  bindIp: 127.0.0.1,192.168.5.13
replication:
  oplogSizeMB: 1024
  replSetName: myRs
[root@node03 ~]# systemctl restart mongod

Configurar el nodo maestro

# 登录MongoDB
[root@node01 ~]# mongo
MongoDB shell version v4.2.8

# 查看ReplSet状态
MongoDB Enterprise > rs.status()
{
    
    
	"operationTime" : Timestamp(0, 0),
	"ok" : 0,
	"errmsg" : "no replset config has been received",
	"code" : 94,
	"codeName" : "NotYetInitialized",
	"$clusterTime" : {
    
    
		"clusterTime" : Timestamp(0, 0),
		"signature" : {
    
    
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}

# 初始化ReplSet复制集
MongoDB Enterprise > rs.initiate({
    
    _id:'myRS',members:[{
    
    _id:1,host:'192.168.5.11:27017'}]})
{
    
    
	"ok" : 1,
	"$clusterTime" : {
    
    
		"clusterTime" : Timestamp(1613533287, 1),
		"signature" : {
    
    
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1613533287, 1)
}

Verifique el estado de ReplSet nuevamente
Inserte la descripción de la imagen aquí
para agregar nodos esclavos en el maestro

MongoDB Enterprise myRS:PRIMARY> rs.add('192.168.5.12:27017','192.168.5.13:27017')
{
    
    
	"ok" : 1,
	"$clusterTime" : {
    
    
		"clusterTime" : Timestamp(1613534429, 1),
		"signature" : {
    
    
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1613534429, 1)
}

Ver estado de ReplSet
Inserte la descripción de la imagen aquí

El nodo maestro inserta datos para probar la sincronización maestro-esclavo

Datos de inserción principal

# 插入数据
MongoDB Enterprise myRS:PRIMARY> use test
switched to db test

MongoDB Enterprise myRS:PRIMARY> for(var i =0; i <4; i ++){
    
    db.user.insert({
    
    userName:'my'+i,age:i})}
WriteResult({
    
     "nInserted" : 1 })

# 查看数据
MongoDB Enterprise myRS:PRIMARY> db.user.find()
{
    
     "_id" : ObjectId("602c98c21b314e8e6e90e15a"), "userName" : "my0", "age" : 0 }
{
    
     "_id" : ObjectId("602c98c21b314e8e6e90e15b"), "userName" : "my1", "age" : 1 }
{
    
     "_id" : ObjectId("602c98c21b314e8e6e90e15c"), "userName" : "my2", "age" : 2 }
{
    
     "_id" : ObjectId("602c98c21b314e8e6e90e15d"), "userName" : "my3", "age" : 3 }

esclavo01 vista
Inserte la descripción de la imagen aquí

esclavo02 vista
Inserte la descripción de la imagen aquí
El conjunto de replicación de MongoDB se realizó correctamente!!!

2. Simule la falla del maestro para realizar la conmutación por error y la recuperación de fallas.

Simular el cierre del nodo maestro

MongoDB Enterprise myRS:PRIMARY> use admin
switched to db admin
MongoDB Enterprise myRS:PRIMARY> db.shutdownServer()
2021-02-17T12:30:51.021+0800 I  NETWORK  [js] DBClientConnection failed to receive message from 127.0.0.1:27017 - HostUnreachable: Connection closed by peer
server should be down...
2021-02-17T12:30:51.038+0800 I  NETWORK  [js] trying reconnect to 127.0.0.1:27017 failed
2021-02-17T12:30:51.038+0800 I  NETWORK  [js] reconnect 127.0.0.1:27017 failed failed 
2021-02-17T12:30:51.042+0800 I  NETWORK  [js] trying reconnect to 127.0.0.1:27017 failed
2021-02-17T12:30:51.042+0800 I  NETWORK  [js] reconnect 127.0.0.1:27017 failed failed 
MongoDB Enterprise > 

vista node03

Cambie node02 a master
Inserte la descripción de la imagen aquí
node02 para ver e insertar tres registros

[root@node02 ~]# mongo
MongoDB shell version v4.2.8
MongoDB Enterprise myRS:PRIMARY> use test
switched to db test
MongoDB Enterprise myRS:PRIMARY> for(var i =4; i <7; i ++){
    
    db.user.insert({
    
    userName:'my'+i,age:i})}
WriteResult({
    
     "nInserted" : 1 })
MongoDB Enterprise myRS:PRIMARY> db.user.find()
{
    
     "_id" : ObjectId("602c98c21b314e8e6e90e15a"), "userName" : "my0", "age" : 0 }
{
    
     "_id" : ObjectId("602c98c21b314e8e6e90e15b"), "userName" : "my1", "age" : 1 }
{
    
     "_id" : ObjectId("602c98c21b314e8e6e90e15c"), "userName" : "my2", "age" : 2 }
{
    
     "_id" : ObjectId("602c98c21b314e8e6e90e15d"), "userName" : "my3", "age" : 3 }
{
    
     "_id" : ObjectId("602c9d4a2db6914f63068e15"), "userName" : "my4", "age" : 4 }
{
    
     "_id" : ObjectId("602c9d4a2db6914f63068e16"), "userName" : "my5", "age" : 5 }
{
    
     "_id" : ObjectId("602c9d4a2db6914f63068e17"), "userName" : "my6", "age" : 6 }

node03 view
Inserte la descripción de la imagen aquí
start master

[root@node01 ~]# systemctl start mongod
[root@node01 ~]# systemctl is-active mongod
active

node03 ver el estado maestro-esclavo

node01 ha cambiado al estado salve y
Inserte la descripción de la imagen aquí
node02 inserta tres datos nuevamente

MongoDB Enterprise myRS:PRIMARY> use test
switched to db test
MongoDB Enterprise myRS:PRIMARY> for(var i =7; i <10; i ++){
    
    db.user.insert({
    
    userName:'my'+i,age:i})}
WriteResult({
    
     "nInserted" : 1 })
MongoDB Enterprise myRS:PRIMARY> db.user.find()
{
    
     "_id" : ObjectId("602c98c21b314e8e6e90e15a"), "userName" : "my0", "age" : 0 }
{
    
     "_id" : ObjectId("602c98c21b314e8e6e90e15b"), "userName" : "my1", "age" : 1 }
{
    
     "_id" : ObjectId("602c98c21b314e8e6e90e15c"), "userName" : "my2", "age" : 2 }
{
    
     "_id" : ObjectId("602c98c21b314e8e6e90e15d"), "userName" : "my3", "age" : 3 }
{
    
     "_id" : ObjectId("602c9d4a2db6914f63068e15"), "userName" : "my4", "age" : 4 }
{
    
     "_id" : ObjectId("602c9d4a2db6914f63068e16"), "userName" : "my5", "age" : 5 }
{
    
     "_id" : ObjectId("602c9d4a2db6914f63068e17"), "userName" : "my6", "age" : 6 }
{
    
     "_id" : ObjectId("602c9f71912509e6bd44076c"), "userName" : "my7", "age" : 7 }
{
    
     "_id" : ObjectId("602c9f71912509e6bd44076d"), "userName" : "my8", "age" : 8 }
{
    
     "_id" : ObjectId("602c9f71912509e6bd44076e"), "userName" : "my9", "age" : 9 }

node01 ver datos
Inserte la descripción de la imagen aquí

node03 ver datos
Inserte la descripción de la imagen aquí

Conmutación por error, recuperación de fallas¡Logrado con éxito! ! !

Supongo que te gusta

Origin blog.csdn.net/XY0918ZWQ/article/details/113831893
Recomendado
Clasificación