ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mongodb 副本集搭建

2021-07-15 12:30:05  阅读:413  来源: 互联网

标签:副本 04 mongodb 192.168 NumberLong 2020 Timestamp 搭建


mongodb是nosql的数据库,与mysql的关系型数据库在底层构造上面有差异。mogodb的的一个collection对于mysql的一个数据表。mongodb的数据表的格式是:_id: uuid,_id就是这条数据的key。 _id对于的数据内容是bson格式。对于代码里面的结构体。
golang代码中,一个结构体对于mongodb的一个collection文档(bson)。 bson编码是二进制编码的json,可以认为是压缩版本的json。

一、搭建mongodb 副本集(Replica Set):

mongodb的集群有3种方式:

  • (1)经典的主从模式 :适合小业务,单站服务
  • (2)副本集模式:适合常规公司的业务
  • (3)分片模式:超大规模的业务,例如互联网三巨头等公司的数据存储和索引。

性能对比:副本集是性能是最高的 > 主从模式 > 分片。

负载量对比:Sharding > 副本集 > 主从模式。

副本集结构图:

PSS
Primary + Secondary + Secondary模式,通过Primary和Secondary搭建的Replica Set
Diagram of a 3 member replica set that consists of a primary and two secondaries.

在这里插入图片描述

该模式下 Replica Set节点数必须为奇数,目的是选主投票的时候要出现大多数才能进行选主决策。

PSA
Primary + Secondary + Arbiter模式,使用Arbiter搭建Replica Set
在这里插入图片描述
偶数个数据节点,加一个Arbiter构成的Replica Set

本文采用PSA模式搭建副本集。

副本集特点:

集群当中包含了多份相同的数据,读可以分散到从节点,通过动态选举,保证主节点挂掉了之后,备节点能继续提供数据服务。

副本集原理:

主节点在日志文件中记录在其上的所有r/w请求的oplog(action and parameter),从节点定期轮询主节点获取这些操作w日志,然后对自己维护的数据副本执行这些操作,从而保证从节点的数据与主节点最终的一致性。

副本集角色:

  • Mongodb(M)表示主节点,

  • Mongodb(S)表示备节点,

  • Mongodb(A)表示仲裁节点。

主备节点存储数据,仲裁节点不存储数据,只作为主从切换的裁判角色。客户端同时连接主节点与备节点,不与仲裁节点发生网络连接。

mongodb 节点ip:

192.168.1.100   # 主节点(Master)
192.168.1.101   # 从节点(Slave)
192.168.1.102   # 仲裁节点(arbitration)

默认设置下,主节点提供所有增删查改服务,备节点不提供任何r/w服务。需要手工通过设置使备节点开启提供查询的服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这个设置叫做Read Preference Modes,配置可以通过客户端的sdk来实现,也可以通过mongodb集群cli实现。

仲裁节点是一种特殊的节点,它本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点,所以客户端不需要连接此节点。这里虽然只有一个备节点,但是仍然需要一个仲裁节点来提升备节点级别。我开始也不相信必须要有仲裁节点,但是自己也试过没仲裁节点的话,主节点挂了备节点还是备节点,所以咱们还是需要它的。

查看mongodb版本:

root@ubuntu:~# mongod --version
db version v3.6.8
git version: 8e540c0b6db93ce994cc548f000900bdc740f80a
OpenSSL version: OpenSSL 1.1.1f  31 Mar 2020
allocator: tcmalloc
modules: none
build environment:
    distarch: x86_64
    target_arch: x86_64
root@ubuntu:~#

在3个节点修改mongodb service配置文件为以下内容:

root@ubuntu:~# cat /lib/systemd/system/mongodb.service 
[Unit]
Description=An object/document-oriented database
Documentation=man:mongod(1)
After=network.target

[Service]
User=root
Group=root
RuntimeDirectory=mongodb
RuntimeDirectoryMode=0755
EnvironmentFile=-/etc/default/mongodb
Environment=CONF=/etc/mongodb.conf
Environment=SOCKETPATH=/run/mongodb
ExecStart=/usr/bin/mongod --unixSocketPrefix=${SOCKETPATH} --config ${CONF} $DAEMON_OPTS
LimitFSIZE=infinity
LimitCPU=infinity
LimitAS=infinity
LimitNOFILE=64000
LimitNPROC=64000

[Install]
WantedBy=multi-user.target
root@ubuntu:~#

在192.168.2.123、192.168.1.101、192.168.2.125节点 vim 编辑/etc/mongodb.conf,添加副本集名称:

# mongodb.conf

# Where to store the data.
dbpath=/var/lib/mongodb

#where to log
logpath=/var/log/mongodb/mongodb.log

logappend=true

#bind_ip = 127.0.0.1
bind_ip = 0.0.0.0
#port = 27017

# Enable journaling, http://www.mongodb.org/display/DOCS/Journaling
journal=true

# 副本集名称
replSet=ReplicaSet_test

#keyFile默认会开启auth=true
#auth=true
#keyFile=/var/lib/mongodb/key/myKey.txt

初始化副本集:

  • 在3个节点,清空一下目录的历史数据,因为可能以前是用的单机节点,集群部署会有不可预知问题,所以先清空历史数据。
rm -rf   /var/lib/mongodb/*
rm -rf   /var/log/mongodb/mongodb.log
  • 在192.168.2.123、192.168.1.101、192.168.2.125节点,重启动mongodb服务
systemctl restart mongodb
  • 创建副本集:

在mongodb主节点(192.168.1.100)执行命令:

root@ubuntu:~# mongo
MongoDB shell version v3.6.8
connecting to: mongodb://127.0.0.1:27017
Implicit session: session { "id" : UUID("e05fdb96-e520-11eb-a4c8-1bb8ded94398") }
MongoDB server version: 3.6.8
Server has startup warnings: 
2020-04-6T20:46:21.572+0800 I STORAGE  [initandlisten] 
2020-04-6T20:46:21.572+0800 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2020-04-6T20:46:21.572+0800 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2020-04-6T20:46:21.843+0800 I CONTROL  [initandlisten] 
2020-04-6T20:46:21.843+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2020-04-6T20:46:21.843+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2020-04-6T20:46:21.843+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2020-04-6T20:46:21.843+0800 I CONTROL  [initandlisten] 
> use admin
switched to db admin
> config = {_id: "ReplicaSet_test", members: [{_id: 0, host:"192.168.1.100:27017",priority:2}, {_id: 1, host:"192.168.1.101:27017",priority:1}, {_id: 2, host:"192.168.1.102:27017", arbiterOnly : true}]}
{
	"_id" : "ReplicaSet_test",
	"members" : [
		{
			"_id" : 0,
			"host" : "192.168.1.100:27017",
			"priority" : 2
		},
		{
			"_id" : 1,
			"host" : "192.168.1.101:27017",
			"priority" : 1
		},
		{
			"_id" : 2,
			"host" : "192.168.1.102:27017",
			"arbiterOnly" : true
		}
	]
}
> rs.initiate(config)
{
	"ok" : 1,
	"operationTime" : Timestamp(1626258006, 1),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1626258006, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}
ReplicaSet_test:SECONDARY> 
ReplicaSet_test:PRIMARY> 
  • 观察副本集配置:
ReplicaSet_test:PRIMARY> rs.conf()
{
	"_id" : "ReplicaSet_test",
	"version" : 1,
	"protocolVersion" : NumberLong(1),
	"members" : [
		{
			"_id" : 0,
			"host" : "192.168.1.100:27017",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 2,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		},
		{
			"_id" : 1,
			"host" : "192.168.1.101:27017",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 1,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		},
		{
			"_id" : 2,
			"host" : "192.168.1.102:27017",
			"arbiterOnly" : true,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 0,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		}
	],
	"settings" : {
		"chainingAllowed" : true,
		"heartbeatIntervalMillis" : 2000,
		"heartbeatTimeoutSecs" : 10,
		"electionTimeoutMillis" : 10000,
		"catchUpTimeoutMillis" : -1,
		"catchUpTakeoverDelayMillis" : 30000,
		"getLastErrorModes" : {
			
		},
		"getLastErrorDefaults" : {
			"w" : 1,
			"wtimeout" : 0
		},
		"replicaSetId" : ObjectId("60eeba56ae31d40af9119e3f")
	}
}
ReplicaSet_test:PRIMARY>
  • 观察副本集状态:
ReplicaSet_test:PRIMARY> rs.status() 
{
	"set" : "ReplicaSet_test",
	"date" : ISODate("2020-04-6T21:21:51.385Z"),
	"myState" : 1,
	"term" : NumberLong(1),
	"syncingTo" : "",
	"syncSourceHost" : "",
	"syncSourceId" : -1,
	"heartbeatIntervalMillis" : NumberLong(2000),
	"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(1626258109, 1),
			"t" : NumberLong(1)
		},
		"readConcernMajorityOpTime" : {
			"ts" : Timestamp(1626258109, 1),
			"t" : NumberLong(1)
		},
		"appliedOpTime" : {
			"ts" : Timestamp(1626258109, 1),
			"t" : NumberLong(1)
		},
		"durableOpTime" : {
			"ts" : Timestamp(1626258109, 1),
			"t" : NumberLong(1)
		}
	},
	"members" : [
		{
			"_id" : 0,
			"name" : "192.168.1.100:27017",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 393,
			"optime" : {
				"ts" : Timestamp(1626258109, 1),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2020-04-6T21:21:49Z"),
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "could not find member to sync from",
			"electionTime" : Timestamp(1626258017, 1),
			"electionDate" : ISODate("2020-04-6T21:20:17Z"),
			"configVersion" : 1,
			"self" : true,
			"lastHeartbeatMessage" : ""
		},
		{
			"_id" : 1,
			"name" : "192.168.1.101:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 105,
			"optime" : {
				"ts" : Timestamp(1626258109, 1),
				"t" : NumberLong(1)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1626258109, 1),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2020-04-6T21:21:49Z"),
			"optimeDurableDate" : ISODate("2020-04-6T21:21:49Z"),
			"lastHeartbeat" : ISODate("2020-04-6T21:21:49.867Z"),
			"lastHeartbeatRecv" : ISODate("2020-04-6T21:21:50.613Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "192.168.1.100:27017",
			"syncSourceHost" : "192.168.1.100:27017",
			"syncSourceId" : 0,
			"infoMessage" : "",
			"configVersion" : 1
		},
		{
			"_id" : 2,
			"name" : "192.168.1.102:27017",
			"health" : 1,
			"state" : 7,
			"stateStr" : "ARBITER",
			"uptime" : 105,
			"lastHeartbeat" : ISODate("2020-04-6T21:21:49.863Z"),
			"lastHeartbeatRecv" : ISODate("2020-04-6T21:21:50.398Z"),
			"pingMs" : NumberLong(1),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"configVersion" : 1
		}
	],
	"ok" : 1,
	"operationTime" : Timestamp(1626258109, 1),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1626258109, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}
ReplicaSet_test:PRIMARY>
  • 在192.168.2.123节点,创建超级管理员账户:
root@ubuntu:~# mongo
MongoDB shell version v3.6.8
connecting to: mongodb://127.0.0.1:27017
Implicit session: session { "id" : UUID("1d3523da-d76f-4c83-af81-36d6128a4eed") }
MongoDB server version: 3.6.8
Server has startup warnings: 
2020-04-6T21:02:04.187+0800 I STORAGE  [initandlisten] 
2020-04-6T21:02:04.187+0800 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2020-04-6T21:02:04.187+0800 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2020-04-6T21:04:01.455+0800 I CONTROL  [initandlisten] 
2020-04-6T21:04:01.455+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2020-04-6T21:04:01.455+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2020-04-6T21:04:01.455+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2020-04-6T21:04:01.455+0800 I CONTROL  [initandlisten] 
ReplicaSet_test:PRIMARY> use admin
switched to db admin
ReplicaSet_test:PRIMARY> db.createUser(
... {
... user: "admin",
... pwd: "123456",
... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
... }
... )
Successfully added user: {
	"user" : "admin",
	"roles" : [
		{
			"role" : "userAdminAnyDatabase",
			"db" : "admin"
		}
	]
}
ReplicaSet_test:PRIMARY> db.auth("admin", "123456")
1
ReplicaSet_test:PRIMARY> 
ReplicaSet_test:PRIMARY> db.createUser(
... {
... user: "test",
... pwd: "123456",
... roles: [ { role: "readWrite", db: "test" } ]
... }
... )
Successfully added user: {
	"user" : "test",
	"roles" : [
		{
			"role" : "readWrite",
			"db" : "test"
		}
	]
}
ReplicaSet_test:PRIMARY> db.auth("test","123456")
1
ReplicaSet_test:PRIMARY>
  • 副本集初始化后,需要给整个副本集创建帐户、密码, 在192.168.2.123、192.168.1.101、192.168.2.125节点执行命令:

(必须修改/var/lib/mongodb/key/myKey.txt文件权限为600权限,否则无法启动(报错信息是文件权限过大:ACCESS [main] permissions on /var/lib/mongodb/key/myKey.txt are too open))。

root@ubuntu:~# mkdir -p /var/lib/mongodb/key
root@ubuntu:~# chmod 600 /var/lib/mongodb/key
root@ubuntu:~# echo "123456" > /var/lib/mongodb/key/myKey.txt
root@ubuntu:~# chmod 600 /var/lib/mongodb/key/myKey.txt                        
root@ubuntu:~# 

在192.168.2.123、192.168.1.101、192.168.2.125节点,vim 编辑/etc/mongodb.conf文件内容如下:

# mongodb.conf

# Where to store the data.
dbpath=/var/lib/mongodb

#where to log
logpath=/var/log/mongodb/mongodb.log

logappend=true

#bind_ip = 127.0.0.1
bind_ip = 0.0.0.0
#port = 27017

# Enable journaling, http://www.mongodb.org/display/DOCS/Journaling
journal=true

# 副本集名称
replSet=ReplicaSet_test

#keyFile默认会开启auth=true
auth=true
keyFile=/var/lib/mongodb/key/myKey.txt

在192.168.2.123、192.168.1.101、192.168.2.125节点执行命令:

root@ubuntu:~# systemctl restart mongodb
  • 使用key文件加载mongodb副本集后,进入mongo cli,查看集群状态:
    注意:要开启权限:db.grantRolesToUser(“admin”, [“clusterAdmin”])
ReplicaSet_test:PRIMARY> db.auth("admin","123456")
1
ReplicaSet_test:PRIMARY> rs.status()
{
	"operationTime" : Timestamp(1626258754, 1),
	"ok" : 0,
	"errmsg" : "not authorized on admin to execute command { replSetGetStatus: 1.0, lsid: { id: UUID(\"b888bb8c-e521-11eb-a50a-8fb2db155462\") }, $clusterTime: { clusterTime: Timestamp(1626258754, 1), signature: { hash: BinData(0, 3A4FB4B97511C70B6A0585762A4E9D060E64766E), keyId: 15472389856/4174109 } }, $db: \"admin\" }",
	"code" : 13,
	"codeName" : "Unauthorized",
	"$clusterTime" : {
		"clusterTime" : Timestamp(1626258754, 1),
		"signature" : {
			"hash" : BinData(0,"Ok+0uXURxwtqBYV2Kk6dBg5kdm4="),
			"keyId" : NumberLong("15472389856/4174109")
		}
	}
}

报错原因分析:

因为admin用户没有执行这个命令的权限,给admin用户赋予集群管理的权限,将admin用户和test用户添加副本集管理员权限:db.grantRolesToUser(“admin”, [“clusterAdmin”])


root@ubuntu:~# mongo
MongoDB shell version v3.6.8
connecting to: mongodb://127.0.0.1:27017
Implicit session: session { "id" : UUID("6b38a8a0-e522-11eb-a163-333897329773") }
MongoDB server version: 3.6.8
ReplicaSet_test:PRIMARY> use admin
switched to db admin
ReplicaSet_test:PRIMARY> db.auth("admin","123456")
1
ReplicaSet_test:PRIMARY> db.grantRolesToUser("admin", ["clusterAdmin"])
ReplicaSet_test:PRIMARY> rs.status()
{
	"set" : "ReplicaSet_test",
	"date" : ISODate("2020-04-6T21:35:05.209Z"),
	"myState" : 1,
	"term" : NumberLong(3),
	"syncingTo" : "",
	"syncSourceHost" : "",
	"syncSourceId" : -1,
	"heartbeatIntervalMillis" : NumberLong(2000),
	"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(1626198192, 1),
			"t" : NumberLong(3)
		},
		"readConcernMajorityOpTime" : {
			"ts" : Timestamp(1626198192, 1),
			"t" : NumberLong(3)
		},
		"appliedOpTime" : {
			"ts" : Timestamp(1626198192, 1),
			"t" : NumberLong(3)
		},
		"durableOpTime" : {
			"ts" : Timestamp(1626198192, 1),
			"t" : NumberLong(3)
		}
	},
	"members" : [
		{
			"_id" : 0,
			"name" : "192.168.1.100:27017",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 279,
			"optime" : {
				"ts" : Timestamp(1626198192, 1),
				"t" : NumberLong(3)
			},
			"optimeDate" : ISODate("2020-04-6T21:34:57Z"),
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"electionTime" : Timestamp(1626198192, 1),
			"electionDate" : ISODate("2020-04-6T21:31:53Z"),
			"configVersion" : 1,
			"self" : true,
			"lastHeartbeatMessage" : ""
		},
		{
			"_id" : 1,
			"name" : "192.168.1.101:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 202,
			"optime" : {
				"ts" : Timestamp(1626198192, 1),
				"t" : NumberLong(3)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1626198192, 1),
				"t" : NumberLong(3)
			},
			"optimeDate" : ISODate("2020-04-6T21:34:57Z"),
			"optimeDurableDate" : ISODate("2020-04-6T21:34:57Z"),
			"lastHeartbeat" : ISODate("2020-04-6T21:35:03.541Z"),
			"lastHeartbeatRecv" : ISODate("2020-04-6T21:35:04.157Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "192.168.1.100:27017",
			"syncSourceHost" : "192.168.1.100:27017",
			"syncSourceId" : 0,
			"infoMessage" : "",
			"configVersion" : 1
		},
		{
			"_id" : 2,
			"name" : "192.168.1.102:27017",
			"health" : 1,
			"state" : 7,
			"stateStr" : "ARBITER",
			"uptime" : 181,
			"lastHeartbeat" : ISODate("2020-04-6T21:35:03.640Z"),
			"lastHeartbeatRecv" : ISODate("2020-04-6T21:35:04.681Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"configVersion" : 1
		}
	],
	"ok" : 1,
	"operationTime" : Timestamp(1626198192, 1),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1626198192, 1),
		"signature" : {
			"hash" : BinData(0,"qP60+nBufcFpMn5bA6hYqFgn4JU="),
			"keyId" : NumberLong("15472389856/4174109")
		}
	}
}
ReplicaSet_test:PRIMARY>

二、测试mongodb副本集

1 查看mongodb副本集角色:

ReplicaSet_test:PRIMARY> rs.status()
{
	"set" : "ReplicaSet_test",
	"date" : ISODate("2020-04-6T21:49:49.750Z"),
	"myState" : 1,
	"term" : NumberLong(3),
	"syncingTo" : "",
	"syncSourceHost" : "",
	"syncSourceId" : -1,
	"heartbeatIntervalMillis" : NumberLong(2000),
	"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(1626259784, 1),
			"t" : NumberLong(3)
		},
		"readConcernMajorityOpTime" : {
			"ts" : Timestamp(1626259784, 1),
			"t" : NumberLong(3)
		},
		"appliedOpTime" : {
			"ts" : Timestamp(1626259784, 1),
			"t" : NumberLong(3)
		},
		"durableOpTime" : {
			"ts" : Timestamp(1626259784, 1),
			"t" : NumberLong(3)
		}
	},
	"members" : [
		{
			"_id" : 0,
			"name" : "192.168.1.100:27017",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 1163,
			"optime" : {
				"ts" : Timestamp(1626259784, 1),
				"t" : NumberLong(3)
			},
			"optimeDate" : ISODate("2020-04-6T21:49:44Z"),
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"electionTime" : Timestamp(1626258713, 1),
			"electionDate" : ISODate("2020-04-6T21:31:53Z"),
			"configVersion" : 1,
			"self" : true,
			"lastHeartbeatMessage" : ""
		},
		{
			"_id" : 1,
			"name" : "192.168.1.101:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 1086,
			"optime" : {
				"ts" : Timestamp(1626259784, 1),
				"t" : NumberLong(3)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1626259784, 1),
				"t" : NumberLong(3)
			},
			"optimeDate" : ISODate("2020-04-6T21:49:44Z"),
			"optimeDurableDate" : ISODate("2020-04-6T21:49:44Z"),
			"lastHeartbeat" : ISODate("2020-04-6T21:49:48.469Z"),
			"lastHeartbeatRecv" : ISODate("2020-04-6T21:49:49.084Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "192.168.1.100:27017",
			"syncSourceHost" : "192.168.1.100:27017",
			"syncSourceId" : 0,
			"infoMessage" : "",
			"configVersion" : 1
		},
		{
			"_id" : 2,
			"name" : "192.168.1.102:27017",
			"health" : 1,
			"state" : 7,
			"stateStr" : "ARBITER",
			"uptime" : 1066,
			"lastHeartbeat" : ISODate("2020-04-6T21:49:48.514Z"),
			"lastHeartbeatRecv" : ISODate("2020-04-6T21:49:49.684Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"configVersion" : 1
		}
	],
	"ok" : 1,
	"operationTime" : Timestamp(1626259784, 1),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1626259784, 1),
		"signature" : {
			"hash" : BinData(0,"zcoriua7yyetYyg3PZCDp6+53sM="),
			"keyId" : NumberLong("15472389856/4174109")
		}
	}
}
ReplicaSet_test:PRIMARY> 
ReplicaSet_test:PRIMARY> quit()
root@ubuntu:~#

2 关闭master节点(192.168.1.100),查看主节点切换:

在192.168.2.123节点执行命令,关掉master的mongodb服务:

root@ubuntu:~# systemctl stop mongodb

在192.168.2.124节点(slave节点)查看副本当前状态,发现master挂掉后,slave成为了副本集的主节点:

root@ubuntu:~# mongo
MongoDB shell version v3.6.8
connecting to: mongodb://127.0.0.1:27017
Implicit session: session { "id" : UUID("d669714a-e522-11eb-bd07-bb29e6d39677") }
MongoDB server version: 3.6.8
ReplicaSet_test:PRIMARY> use admin
switched to db admin
ReplicaSet_test:PRIMARY> db.auth("admin","123456")
1
ReplicaSet_test:PRIMARY> rs.status()
{
	"set" : "ReplicaSet_test",
	"date" : ISODate("2020-04-6T21:53:02.479Z"),
	"myState" : 1,
	"term" : NumberLong(4),
	"syncingTo" : "",
	"syncSourceHost" : "",
	"syncSourceId" : -1,
	"heartbeatIntervalMillis" : NumberLong(2000),
	"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(1626259924, 1),
			"t" : NumberLong(3)
		},
		"readConcernMajorityOpTime" : {
			"ts" : Timestamp(1626259924, 1),
			"t" : NumberLong(3)
		},
		"appliedOpTime" : {
			"ts" : Timestamp(1626259975, 1),
			"t" : NumberLong(4)
		},
		"durableOpTime" : {
			"ts" : Timestamp(1626259975, 1),
			"t" : NumberLong(4)
		}
	},
	"members" : [
		{
			"_id" : 0,
			"name" : "192.168.1.100:27017",
			"health" : 0,
			"state" : 8,
			"stateStr" : "(not reachable/healthy)",
			"uptime" : 0,
			"optime" : {
				"ts" : Timestamp(0, 0),
				"t" : NumberLong(-1)
			},
			"optimeDurable" : {
				"ts" : Timestamp(0, 0),
				"t" : NumberLong(-1)
			},
			"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
			"optimeDurableDate" : ISODate("1970-01-01T00:00:00Z"),
			"lastHeartbeat" : ISODate("2020-04-6T21:53:01.916Z"),
			"lastHeartbeatRecv" : ISODate("2020-04-6T21:52:12.626Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "Connection refused",
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"configVersion" : -1
		},
		{
			"_id" : 1,
			"name" : "192.168.1.101:27017",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 1283,
			"optime" : {
				"ts" : Timestamp(1626259975, 1),
				"t" : NumberLong(4)
			},
			"optimeDate" : ISODate("2020-04-6T21:52:55Z"),
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "could not find member to sync from",
			"electionTime" : Timestamp(1626259943, 1),
			"electionDate" : ISODate("2020-04-6T21:52:23Z"),
			"configVersion" : 1,
			"self" : true,
			"lastHeartbeatMessage" : ""
		},
		{
			"_id" : 2,
			"name" : "192.168.1.102:27017",
			"health" : 1,
			"state" : 7,
			"stateStr" : "ARBITER",
			"uptime" : 1259,
			"lastHeartbeat" : ISODate("2020-04-6T21:53:01.861Z"),
			"lastHeartbeatRecv" : ISODate("2020-04-6T21:53:01.888Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"configVersion" : 1
		}
	],
	"ok" : 1,
	"operationTime" : Timestamp(1626259975, 1),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1626259975, 1),
		"signature" : {
			"hash" : BinData(0,"RznptKOp1H535+y+ki/UZqoOhTY="),
			"keyId" : NumberLong("15472389856/4174109")
		}
	}
}
ReplicaSet_test:PRIMARY> 

3 关闭master节点(192.168.1.100),查看主节点恢复:

打开192.168.2.123节点的mongodb服务:

systemctl start mongodb

查看当前mongodb副集的状态,发现192.168.2.123已经恢复成了主节点的身份:

ReplicaSet_test:SECONDARY> rs.status()
{
	"set" : "ReplicaSet_test",
	"date" : ISODate("2020-04-6T21:55:52.681Z"),
	"myState" : 2,
	"term" : NumberLong(5),
	"syncingTo" : "192.168.1.100:27017",
	"syncSourceHost" : "192.168.1.100:27017",
	"syncSourceId" : 0,
	"heartbeatIntervalMillis" : NumberLong(2000),
	"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(1626260145, 1),
			"t" : NumberLong(5)
		},
		"readConcernMajorityOpTime" : {
			"ts" : Timestamp(1626260145, 1),
			"t" : NumberLong(5)
		},
		"appliedOpTime" : {
			"ts" : Timestamp(1626260145, 1),
			"t" : NumberLong(5)
		},
		"durableOpTime" : {
			"ts" : Timestamp(1626260145, 1),
			"t" : NumberLong(5)
		}
	},
	"members" : [
		{
			"_id" : 0,
			"name" : "192.168.1.100:27017",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 28,
			"optime" : {
				"ts" : Timestamp(1626260145, 1),
				"t" : NumberLong(5)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1626260145, 1),
				"t" : NumberLong(5)
			},
			"optimeDate" : ISODate("2020-04-6T21:55:45Z"),
			"optimeDurableDate" : ISODate("2020-04-6T21:55:45Z"),
			"lastHeartbeat" : ISODate("2020-04-6T21:55:51.380Z"),
			"lastHeartbeatRecv" : ISODate("2020-04-6T21:55:52.438Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"electionTime" : Timestamp(1626260134, 1),
			"electionDate" : ISODate("2020-04-6T21:55:34Z"),
			"configVersion" : 1
		},
		{
			"_id" : 1,
			"name" : "192.168.1.101:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 1453,
			"optime" : {
				"ts" : Timestamp(1626260145, 1),
				"t" : NumberLong(5)
			},
			"optimeDate" : ISODate("2020-04-6T21:55:45Z"),
			"syncingTo" : "192.168.1.100:27017",
			"syncSourceHost" : "192.168.1.100:27017",
			"syncSourceId" : 0,
			"infoMessage" : "",
			"configVersion" : 1,
			"self" : true,
			"lastHeartbeatMessage" : ""
		},
		{
			"_id" : 2,
			"name" : "192.168.1.102:27017",
			"health" : 1,
			"state" : 7,
			"stateStr" : "ARBITER",
			"uptime" : 1429,
			"lastHeartbeat" : ISODate("2020-04-6T21:55:51.541Z"),
			"lastHeartbeatRecv" : ISODate("2020-04-6T21:55:52.046Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"configVersion" : 1
		}
	],
	"ok" : 1,
	"operationTime" : Timestamp(1626260145, 1),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1626260145, 1),
		"signature" : {
			"hash" : BinData(0,"3+5Uill5sMmjXikoz+aZ4Ky4hqY="),
			"keyId" : NumberLong("15472389856/4174109")
		}
	}
}
ReplicaSet_test:SECONDARY> 

标签:副本,04,mongodb,192.168,NumberLong,2020,Timestamp,搭建
来源: https://blog.csdn.net/jacky128256/article/details/118756660

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有