NoSQL 데이터베이스 사례 전투 --MongoDB 데이터베이스 고 가용성 솔루션 --MongoDB 복제 세트 (마스터-슬레이브 복제)

머리말

이 환경은 Centos 7.8 시스템을 기반으로 mongodb-enterprise-4.2.8 학습 환경을 구축합니다.
구체적인 구축은 mongodb-enterprise-4.2.8 환경 구축을 참조하십시오.

MongoDB 복제는 데이터를 여러 서버에 동기화하는 프로세스입니다. 복제 세트는 데이터의 중복 백업을 제공하고 데이터 가용성을 향상시켜 일반적으로 데이터 보안을 보장합니다. 복제 세트를 사용하면 기술자가 하드웨어 오류 및 서비스 중단 데이터 복구를 복구 할 수도 있습니다.


1. MongoDB 복제 세트 란 무엇입니까?

복제 세트 란?

  • 데이터 보안 보장
  • 데이터 중복 및 백업
  • 높은 데이터 가용성 (24 * 7)
  • 재해 복구
  • 유지 보수를위한 다운 타임 없음 (예 : 백업, 재 인덱싱, 압축)
  • 분산 읽기 데이터
  • 복제본 세트는 최종 사용자에 비해 애플리케이션 계층에 투명합니다.

MongoDB 복제 세트의 작동 원리

  • 1. mongodb의 복제 세트에는 최소한 두 개의 노드가 필요합니다. 그중 하나는 클라이언트 요청을 처리하는 마스터 노드이고 나머지는 마스터 노드에서 데이터 복사를 담당하는 슬레이브 노드입니다.
  • 2. mongodb의 각 노드의 일반적인 배열 방법은 하나의 마스터와 하나의 슬레이브, 하나의 마스터와 다중 슬레이브입니다.
  • 3. 마스터 노드는 모든 작업 oplog를 기록하고, 슬레이브 노드는 주기적으로 마스터 노드를 폴링하여 이러한 작업을 얻은 다음 자체 데이터 복사본에서 이러한 작업을 수행하여 슬레이브 노드의 데이터가 일관되도록합니다. 마스터 노드와

2. MongoDB 복제 세트 아키텍처 설계

여기에 사진 설명 삽입
MongoDB 복제 세트의 기능

  • N- 노드 클러스터
  • 모든 노드를 마스터 노드로 사용할 수 있습니다.
  • 모든 쓰기 작업은 마스터 노드에 있습니다.
  • 자동 장애 조치
  • 자동 복구

세, MongoDB 복제 세트의 실제 사례

1. MongoDB 복제 세트 배포

환경 준비

역할 주최자 ip mongodb 버전
석사 node01 192.168.5.11 mongodb-enterprise-4.2.8
노예 1 node02 192.168.5.12 mongodb-enterprise-4.2.8
slave2 node03 192.168.5.13 mongodb-enterprise-4.2.8

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

마스터 노드 구성

# 登录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)
}

ReplSet의 상태를 다시 확인하여 마스터에 슬레이브 노드를 추가 하십시오.
여기에 사진 설명 삽입

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)
}

ReplSet 상태보기
여기에 사진 설명 삽입

마스터 노드는 마스터-슬레이브 동기화를 테스트하기 위해 데이터를 삽입합니다.

주요 삽입 데이터

# 插入数据
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 }

slave01보기
여기에 사진 설명 삽입

slave02보기
여기에 사진 설명 삽입
MongoDB 복제 세트 성공!!!

2. 마스터 장애를 시뮬레이션하여 장애 조치 및 장애 복구를 실현합니다.

마스터 노드 종료 시뮬레이션

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 > 

node03보기


여기에 사진 설명 삽입
세 개의 레코드를보고 삽입하려면 node02를 마스터 node02로 전환하십시오.

[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보기
여기에 사진 설명 삽입
시작 마스터

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

node03 마스터-슬레이브 상태보기

node01은 salve 상태로 전환되고
여기에 사진 설명 삽입
node02는 세 가지 데이터를 다시 삽입합니다.

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 데이터보기
여기에 사진 설명 삽입

node03 데이터보기
여기에 사진 설명 삽입

장애 조치, 장애 복구성공적으로 달성되었습니다! ! !

추천

출처blog.csdn.net/XY0918ZWQ/article/details/113831893