Centos7 deploy mongoDB Replica set

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
 
 
概述:
主节点(Primary)
在复制集中,主节点是唯一能够接收写请求的节点。MongoDB在主节点进行写操作,并将这些操作记录到主节点的oplog中。而从节点将会从oplog复制到其本机,并将这些操作应用到自己的数据集上。(复制集最多只能拥有一个主节点)
从节点(Secondaries)
与主节点保持同样的数据集。当主节点挂掉的时候,参与选主。
仲裁节点(Arbiter)
仲裁节点即投票节点,其本身并不包含数据集,且也无法晋升为主节点。
 
 
Replica set有两种架构模式:
1、PSS
Primary + Secondary + Secondary模式,通过Primary和Secondary搭建的Replica Set
该模式下 Replica Set节点数必须为奇数,目的是选主投票的时候要出现大多数才能进行选主决策
在这里插入图片描述
2、PSA
Primary + Secondary + Arbiter模式,使用Arbiter搭建Replica Set
偶数个数据节点,加一个Arbiter构成的Replica Set
(关闭顺序PAS)
在这里插入图片描述
注意:

在副本集的环境中,要是所有的Secondary都宕机了,只剩下Primary。最后Primary会变成Secondary,不能提供服务。

由于生产环境需求,只有三台服务器,安全起见,这里采用PSS架构部署

 
架构图:
在这里插入图片描述

System EditionHostnameIP
Centos7primary192.168.16.140
Centos7secondary-node01192.168.16.141
Centos7secondary-node02192.168.16.142

 

一、准备工作

以下配置所有机器相同
 
1、关闭selinux和配置repo
SELINUX=disabled

# vim mongodb-org-3.6.repo		# configure mongoDB repo
[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
#
# yum clean all
# yum makecache

2、设置主机名

hostnamectl set-hostname xxxx

二、安装配置mongodb

1、设置mongoDB data directory

以下操作所有server相同

[root@primary ~]# mkdir -p /data/mongodb
[root@secondary-node01 ~]# mkdir -p /data/mongodb
[root@secondary-node02 ~]# mkdir -p /data/mongodb

2、安装mongoDB

以下操作所有server相同

# yum install -y mongodb-org	  #安装最新的稳定版
# rpm -qa |grep mongodb*
mongodb-org-tools-3.6.16-1.el7.x86_64
mongodb-org-server-3.6.16-1.el7.x86_64		# 主服务
mongodb-org-shell-3.6.16-1.el7.x86_64
mongodb-org-mongos-3.6.16-1.el7.x86_64
mongodb-org-3.6.16-1.el7.x86_64
#
# vim /etc/yum.conf			  #防止mongodb版本意外升级,固定版本
exclude=mongodb-org,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools

3、mongodb集群配置
 
3.1、配置mongodb

以下操作所有server相同

# rpm -qc mongodb-org-server |egrep *.conf
/etc/mongod.conf
# cp /etc/mongod.conf /etc/mongod.conf.bak
# vim /etc/mongod.conf

在这里插入图片描述
在这里插入图片描述
replication:
   replSetName: replica # 设置复制集名称

在这里插入图片描述

启动服务

# mkdir /data/mongodb
# chown -R mongod: /data/mongodb/
# firewall-cmd --permanent --add-port=27017/tcp
# firewall-cmd --reload
# systemctl start mongod   # 会自动加入开机自启,无需enable
# ss -nltup |grep 27017
tcp    LISTEN     0      128    192.168.16.140:27017                 *:*                   users:(("mongod",pid=2147,fd=11))

测试登录mongodb

# mongo 192.168.16.140:27017		# 登录格式 IP:PORT
MongoDB shell version v3.6.16
connecting to: mongodb://192.168.16.140:27017/test?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("a2633188-014d-479b-8d05-96a9095ff6da") }
MongoDB server version: 3.6.16
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
	http://docs.mongodb.org/
Questions? Try the support group
	http://groups.google.com/group/mongodb-user
Server has startup warnings:
2020-01-04T04:10:55.758-0500 I CONTROL  [initandlisten]
2020-01-04T04:10:55.758-0500 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2020-01-04T04:10:55.758-0500 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2020-01-04T04:10:55.758-0500 I CONTROL  [initandlisten]
2020-01-04T04:10:55.759-0500 I CONTROL  [initandlisten]
2020-01-04T04:10:55.759-0500 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2020-01-04T04:10:55.759-0500 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2020-01-04T04:10:55.759-0500 I CONTROL  [initandlisten]
2020-01-04T04:10:55.759-0500 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2020-01-04T04:10:55.759-0500 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2020-01-04T04:10:55.759-0500 I CONTROL  [initandlisten]
>

3.2、初始化复制集
 
找一台节点,这里就在16.140操作

> cfg={_id:"replica",members:[{_id:0,host:"192.168.16.140:27017",priority:3},
... {_id:1,host:"192.168.16.141:27017",priority:2},
... {_id:2,host:"192.168.16.142:27017",priority:1}]}
{
	"_id" : "replica",
	"members" : [
		{
			"_id" : 0,
			"host" : "192.168.16.140:27017",
			"priority" : 3
		},
		{
			"_id" : 1,
			"host" : "192.168.16.141:27017",
			"priority" : 2
		},
		{
			"_id" : 2,
			"host" : "192.168.16.142:27017",
			"priority" : 1
		}
	]
}

PS:第一个_id为/etc/mongod.conf replSetName: replica名字,第二个_id为服务器成员编号0-2,priority设置优先级,值是0到100之间的数字,数字越大优先级越高,priority=0,则此节点永远不能成为主节点primay

> rs.initiate(cfg)	#使配置生效
{
	"ok" : 1,	# 正常状态
	"operationTime" : Timestamp(1578134906, 1),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1578134906, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}
replica:SECONDARY>

PS:执行“rs.initiate(cfg)“后16.140显示为“replica:SECONDARY”,直接回车后交互界面就会变为“replica:PRIMARY”

replica:SECONDARY>
replica:PRIMARY> rs.status()	#查看状态
{
	"set" : "replica",
	"date" : ISODate("2020-01-04T10:53:16.337Z"),
	"myState" : 1,
	"term" : NumberLong(1),
	"syncingTo" : "",
	"syncSourceHost" : "",
	"syncSourceId" : -1,
	"heartbeatIntervalMillis" : NumberLong(2000),
	"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(1578135188, 1),
			"t" : NumberLong(1)
		},
		"readConcernMajorityOpTime" : {
			"ts" : Timestamp(1578135188, 1),
			"t" : NumberLong(1)
		},
		"appliedOpTime" : {
			"ts" : Timestamp(1578135188, 1),
			"t" : NumberLong(1)
		},
		"durableOpTime" : {
			"ts" : Timestamp(1578135188, 1),
			"t" : NumberLong(1)
		}
	},
	"members" : [
		{
			"_id" : 0,
			"name" : "192.168.16.140:27017",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 6142,
			"optime" : {
				"ts" : Timestamp(1578135188, 1),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2020-01-04T10:53:08Z"),
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"electionTime" : Timestamp(1578134917, 1),
			"electionDate" : ISODate("2020-01-04T10:48:37Z"),
			"configVersion" : 1,
			"self" : true,
			"lastHeartbeatMessage" : ""
		},
		{
			"_id" : 1,
			"name" : "192.168.16.141:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 290,
			"optime" : {
				"ts" : Timestamp(1578135188, 1),
				"t" : NumberLong(1)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1578135188, 1),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2020-01-04T10:53:08Z"),
			"optimeDurableDate" : ISODate("2020-01-04T10:53:08Z"),
			"lastHeartbeat" : ISODate("2020-01-04T10:53:15.736Z"),
			"lastHeartbeatRecv" : ISODate("2020-01-04T10:53:15.734Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "192.168.16.140:27017",
			"syncSourceHost" : "192.168.16.140:27017",
			"syncSourceId" : 0,
			"infoMessage" : "",
			"configVersion" : 1
		},
		{
			"_id" : 2,
			"name" : "192.168.16.142:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 290,
			"optime" : {
				"ts" : Timestamp(1578135188, 1),
				"t" : NumberLong(1)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1578135188, 1),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2020-01-04T10:53:08Z"),
			"optimeDurableDate" : ISODate("2020-01-04T10:53:08Z"),
			"lastHeartbeat" : ISODate("2020-01-04T10:53:15.736Z"),
			"lastHeartbeatRecv" : ISODate("2020-01-04T10:53:15.878Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "192.168.16.140:27017",
			"syncSourceHost" : "192.168.16.140:27017",
			"syncSourceId" : 0,
			"infoMessage" : "",
			"configVersion" : 1
		}
	],
	"ok" : 1,		#这是正常状态
	"operationTime" : Timestamp(1578135188, 1),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1578135188, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}
replica:PRIMARY>

 
详细说明如下:
“_id” : #集群中节点编号
“name” : #成员服务器名称及端口
“health” : #表示成员中的健康状态(0:down;1:up)
“state” : # ”1”为master,”2”为slave
“stateStr” : #描述该成员是主库(PRIMARY)还是备库(SECONDARY)
“uptime” : #该成员在线时间(秒)
“optime” : #成员最后一次应用日志(oplog)的信息
“optimeDate” : #成员最后一次应用日志(oplog)的时间
“electionTime” : #当前primary从操作日志中选举信息
“electionDate” : #当前primary被选定为primary的日期
“configVersion” : #mongodb版本
“self” : #为true 表示当前节点
 
4、分别对(secondary-node01/02)两台从节点配置
 
副本集实现读写分离从库永久设置rs.slaveOk()

[root@secondary-node01 ~]# find / -name .mongorc.js
/root/.mongorc.js
# vim /root/.mongorc.js
rs.slaveOk();			#加入此行

[root@secondary-node01 ~]# mongo 192.168.16.141:27017
replica:SECONDARY> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
[root@secondary-node02 ~]# mongo 192.168.16.142:27017
replica:SECONDARY> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

 
5、开启用户登录认证
 
角色说明:
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
 
PS:如果开启登录认证不设置key authentication,replica set会出现异常
在这里插入图片描述
5.1、添加系统管理员
 
用来管理用户,此为超级用户,超级权限

replica:PRIMARY> use admin 	#一定要进入此库
replica:PRIMARY> db.createUser({user:"root",pwd:"123456",roles:['root']})
Successfully added user: { "user" : "root", "roles" : [ "root" ] }
replica:PRIMARY>
replica:PRIMARY> show users
{
	"_id" : "admin.root",	# 登录验证的库及用户
	"userId" : UUID("df3f67e0-486f-49d3-b3be-576ccdf0e9a4"),
	"user" : "root",
	"db" : "admin",
	"roles" : [
		{
			"role" : "root",	# 权限
			"db" : "admin"
		}
	]
}
replica:PRIMARY>

 
5.2、添加数据库管理员
 
用来管理所有数据库

replica:PRIMARY> db
admin
replica:PRIMARY> db.createUser({user:"admin",pwd:"123456",roles:['userAdminAnyDatabase']})
Successfully added user: { "user" : "admin", "roles" : [ "userAdminAnyDatabase" ] }
replica:PRIMARY>
replica:PRIMARY> show users
{
	"_id" : "admin.admin",
	"userId" : UUID("3ceee471-6551-4ca8-9700-68962c1dd84b"),
	"user" : "admin",
	"db" : "admin",
	"roles" : [
		{
			"role" : "userAdminAnyDatabase",
			"db" : "admin"
		}
	]
}
{
	"_id" : "admin.root",
	"userId" : UUID("df3f67e0-486f-49d3-b3be-576ccdf0e9a4"),
	"user" : "root",
	"db" : "admin",
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}
replica:PRIMARY>

 
5.3、配置文件开启安全认证
 
所有Server都要开启security

# vim /etc/mongod.conf
security:
  authorization: enabled
  keyFile: /data/mongodb/mongodb_keyfile

在一台机器上产生mongodb keyfile

[root@primary ~]# openssl rand -base64 741 > /data/mongodb/mongodb_keyfile

PS: 数字741 ,最好是 3 的倍数,否则生成的字符串可能含有非法字符,认证失败

[root@primary ~]# chmod 600 /data/mongodb/mongodb_keyfile
[root@primary ~]# chown mongod: /data/mongodb/mongodb_keyfile

将mongodb keyfile拷贝到各个节点上

[root@secondary-node01 ~]# scp @192.168.16.140:/data/mongodb/mongodb_keyfile /data/mongodb/
[root@secondary-node01 ~]# chown mongod: /data/mongodb/mongodb_keyfile
[root@secondary-node02 ~]# scp @192.168.16.140:/data/mongodb/mongodb_keyfile /data/mongodb/
[root@secondary-node02 ~]# chown mongod: /data/mongodb/mongodb_keyfile

重启mongod服务

[root@primary ~]# systemctl restart mongod
[root@secondary-node01 ~]# systemctl restart mongod
[root@secondary-node02 ~]# systemctl restart mongod

5.4、登录验证
 
方式一

[root@primary ~]# mongo 192.168.16.140:27017 -u admin -p 123456 --authenticationDatabase admin
MongoDB shell version v3.6.16
connecting to: mongodb://192.168.16.140:27017/test?authSource=admin&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("f2737c88-fc7f-4d67-b372-9eb14ca96bb6") }
MongoDB server version: 3.6.16
replica:PRIMARY>
replica:PRIMARY> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
replica:PRIMARY>

方式二

[root@primary ~]# mongo 192.168.16.140:27017
MongoDB shell version v3.6.16
connecting to: mongodb://192.168.16.140:27017/test?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("fd581025-9d0a-4a1c-80ad-a58a2780c447") }
MongoDB server version: 3.6.16
replica:PRIMARY>
replica:PRIMARY> use admin
switched to db admin
replica:PRIMARY>
replica:PRIMARY> db.auth('admin','123456')	# 认证
1
replica:PRIMARY> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
replica:PRIMARY>

方式三
在这里插入图片描述

三、DB验证

1、验证主从切换

[root@primary ~]# hostname
primary
[root@primary ~]# mongo 192.168.16.140:27017 -u admin -p 123456 --authenticationDatabase admin
MongoDB shell version v3.6.16
connecting to: mongodb://192.168.16.140:27017/test?authSource=admin&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("0456c9bd-cfe9-47ae-9b42-d18436199924") }
MongoDB server version: 3.6.16
replica:PRIMARY>		# 当前16.140是master
replica:PRIMARY>

关闭主16.140 mongod服务

[root@primary ~]# mongo 192.168.16.140:27017 -u root -p 123456 --authenticationDatabase admin
replica:PRIMARY> use admin
switched to db admin
replica:PRIMARY> db.shutdownServer() # 关闭16.140 DB
server should be down...
2020-01-05T20:28:59.853-0500 I NETWORK  [thread1] trying reconnect to 192.168.16.140:27017 (192.168.16.140) failed
2020-01-05T20:29:00.803-0500 I NETWORK  [thread1] Socket recv() Connection reset by peer 192.168.16.140:27017
2020-01-05T20:29:00.803-0500 I NETWORK  [thread1] SocketException: remote: (NONE):0 error: SocketException socket exception [RECV_ERROR] server [192.168.16.140:27017]
2020-01-05T20:29:00.803-0500 I NETWORK  [thread1] reconnect 192.168.16.140:27017 (192.168.16.140) failed failed
2020-01-05T20:29:00.807-0500 I NETWORK  [thread1] trying reconnect to 192.168.16.140:27017 (192.168.16.140) failed
2020-01-05T20:29:00.807-0500 W NETWORK  [thread1] Failed to connect to 192.168.16.140:27017, in(checking socket for error after poll), reason: Connection refused
2020-01-05T20:29:00.807-0500 I NETWORK  [thread1] reconnect 192.168.16.140:27017 (192.168.16.140) failed failed
>

PS:必须使用超级管理员“root”登录才能使用“rs.status()”

[root@secondary-node01 ~]# hostname
secondary-node01
[root@secondary-node01 ~]#
[root@secondary-node01 ~]# mongo 192.168.16.141:27017 -u root -p 123456 --authenticationDatabase admin
MongoDB shell version v3.6.16
connecting to: mongodb://192.168.16.141:27017/test?authSource=admin&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("d06ba117-f82f-4446-8be5-d248722ae5cf") }
MongoDB server version: 3.6.16
Server has startup warnings:
2020-01-05T00:57:08.623-0500 I CONTROL  [initandlisten]
2020-01-05T00:57:08.624-0500 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2020-01-05T00:57:08.624-0500 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2020-01-05T00:57:08.624-0500 I CONTROL  [initandlisten]
2020-01-05T00:57:08.624-0500 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2020-01-05T00:57:08.624-0500 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2020-01-05T00:57:08.624-0500 I CONTROL  [initandlisten]
replica:PRIMARY>	# 16.141已经成为master
replica:PRIMARY>
replica:PRIMARY> rs.status()
{
	"set" : "replica",
	"date" : ISODate("2020-01-05T06:11:40.248Z"),
	"myState" : 1,
	"term" : NumberLong(31),
	"syncingTo" : "",
	"syncSourceHost" : "",
	"syncSourceId" : -1,
	"heartbeatIntervalMillis" : NumberLong(2000),
	"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(1578204698, 1),
			"t" : NumberLong(31)
		},
		"readConcernMajorityOpTime" : {
			"ts" : Timestamp(1578204698, 1),
			"t" : NumberLong(31)
		},
		"appliedOpTime" : {
			"ts" : Timestamp(1578204698, 1),
			"t" : NumberLong(31)
		},
		"durableOpTime" : {
			"ts" : Timestamp(1578204698, 1),
			"t" : NumberLong(31)
		}
	},
	"members" : [
		{
			"_id" : 0,
			"name" : "192.168.16.140:27017",
			"health" : 0,		# 16.140异常
			"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-01-05T06:11:40.196Z"),
			"lastHeartbeatRecv" : ISODate("2020-01-05T06:08:06.574Z"),
			"pingMs" : NumberLong(1),
			"lastHeartbeatMessage" : "Connection refused",
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"configVersion" : -1
		},
		{
			"_id" : 1,
			"name" : "192.168.16.141:27017",
			"health" : 1,
			"state" : 1,	# 16.141成为primary
			"stateStr" : "PRIMARY",			# 16.141成为primary
			"uptime" : 873,
			"optime" : {
				"ts" : Timestamp(1578204698, 1),
				"t" : NumberLong(31)
			},
			"optimeDate" : ISODate("2020-01-05T06:11:38Z"),
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"electionTime" : Timestamp(1578204496, 2),
			"electionDate" : ISODate("2020-01-05T06:08:16Z"),
			"configVersion" : 1,
			"self" : true,
			"lastHeartbeatMessage" : ""
		},
		{
			"_id" : 2,
			"name" : "192.168.16.142:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 822,
			"optime" : {
				"ts" : Timestamp(1578204698, 1),
				"t" : NumberLong(31)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1578204698, 1),
				"t" : NumberLong(31)
			},
			"optimeDate" : ISODate("2020-01-05T06:11:38Z"),
			"optimeDurableDate" : ISODate("2020-01-05T06:11:38Z"),
			"lastHeartbeat" : ISODate("2020-01-05T06:11:39.582Z"),
			"lastHeartbeatRecv" : ISODate("2020-01-05T06:11:39.327Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "192.168.16.141:27017",
			"syncSourceHost" : "192.168.16.141:27017",
			"syncSourceId" : 1,
			"infoMessage" : "",
			"configVersion" : 1
		}
	],
	"ok" : 1,
	"operationTime" : Timestamp(1578204698, 1),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1578204698, 1),
		"signature" : {
			"hash" : BinData(0,"XXhef/vh418fjTkBUBir455MfpI="),
			"keyId" : NumberLong("6778037861485641729")
		}
	}
}
replica:PRIMARY>

再次开启主16.140 mongod服务

[root@primary ~]# systemctl start mongod
[root@primary ~]#
[root@primary ~]# mongo 192.168.16.140:27017 -u root -p 123456 --authenticationDatabase admin
MongoDB shell version v3.6.16
connecting to: mongodb://192.168.16.140:27017/test?authSource=admin&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("baecda92-20ca-4f8b-99aa-2e193d203485") }
MongoDB server version: 3.6.16
Server has startup warnings:
2020-01-05T01:25:26.787-0500 I CONTROL  [initandlisten]
2020-01-05T01:25:26.787-0500 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2020-01-05T01:25:26.787-0500 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2020-01-05T01:25:26.787-0500 I CONTROL  [initandlisten]
2020-01-05T01:25:26.787-0500 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2020-01-05T01:25:26.787-0500 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2020-01-05T01:25:26.787-0500 I CONTROL  [initandlisten]
replica:PRIMARY>		# 16.140自动变回master
replica:PRIMARY>
replica:PRIMARY> rs.status()
{
	"set" : "replica",
	"date" : ISODate("2020-01-05T06:30:14.711Z"),
	"myState" : 1,
	"term" : NumberLong(32),
	"syncingTo" : "",
	"syncSourceHost" : "",
	"syncSourceId" : -1,
	"heartbeatIntervalMillis" : NumberLong(2000),
	"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(1578205808, 1),
			"t" : NumberLong(32)
		},
		"readConcernMajorityOpTime" : {
			"ts" : Timestamp(1578205808, 1),
			"t" : NumberLong(32)
		},
		"appliedOpTime" : {
			"ts" : Timestamp(1578205808, 1),
			"t" : NumberLong(32)
		},
		"durableOpTime" : {
			"ts" : Timestamp(1578205808, 1),
			"t" : NumberLong(32)
		}
	},
	"members" : [
		{
			"_id" : 0,
			"name" : "192.168.16.140:27017",
			"health" : 1,	# 16.140在线状态
			"state" : 1,
			"stateStr" : "PRIMARY",		# 16.140自动变回primary
			"uptime" : 289,
			"optime" : {
				"ts" : Timestamp(1578205808, 1),
				"t" : NumberLong(32)
			},
			"optimeDate" : ISODate("2020-01-05T06:30:08Z"),
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"electionTime" : Timestamp(1578205537, 1),
			"electionDate" : ISODate("2020-01-05T06:25:37Z"),
			"configVersion" : 1,
			"self" : true,
			"lastHeartbeatMessage" : ""
		},
		{
			"_id" : 1,
			"name" : "192.168.16.141:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 287,
			"optime" : {
				"ts" : Timestamp(1578205808, 1),
				"t" : NumberLong(32)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1578205808, 1),
				"t" : NumberLong(32)
			},
			"optimeDate" : ISODate("2020-01-05T06:30:08Z"),
			"optimeDurableDate" : ISODate("2020-01-05T06:30:08Z"),
			"lastHeartbeat" : ISODate("2020-01-05T06:30:14.340Z"),
			"lastHeartbeatRecv" : ISODate("2020-01-05T06:30:12.884Z"),
			"pingMs" : NumberLong(1),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "192.168.16.140:27017",
			"syncSourceHost" : "192.168.16.140:27017",
			"syncSourceId" : 0,
			"infoMessage" : "",
			"configVersion" : 1
		},
		{
			"_id" : 2,
			"name" : "192.168.16.142:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 287,
			"optime" : {
				"ts" : Timestamp(1578205808, 1),
				"t" : NumberLong(32)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1578205808, 1),
				"t" : NumberLong(32)
			},
			"optimeDate" : ISODate("2020-01-05T06:30:08Z"),
			"optimeDurableDate" : ISODate("2020-01-05T06:30:08Z"),
			"lastHeartbeat" : ISODate("2020-01-05T06:30:14.340Z"),
			"lastHeartbeatRecv" : ISODate("2020-01-05T06:30:14.531Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "192.168.16.140:27017",
			"syncSourceHost" : "192.168.16.140:27017",
			"syncSourceId" : 0,
			"infoMessage" : "",
			"configVersion" : 1
		}
	],
	"ok" : 1,
	"operationTime" : Timestamp(1578205808, 1),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1578205808, 1),
		"signature" : {
			"hash" : BinData(0,"wsUy7l3Hu3vunY9w2CmkfoJ+B4I="),
			"keyId" : NumberLong("6778037861485641729")
		}
	}
}
replica:PRIMARY>

2、数据同步
 
在16.140建库、建表、插入数据

replica:PRIMARY> use test1		# 创建test1 DB,有此库则进入,没有则创建并进入DB
switched to db test1
replica:PRIMARY> show dbs	# 并没有test1 DB,因为库中没有数据
admin   0.000GB
config  0.000GB
local   0.000GB
replica:PRIMARY> db.test1.insert({"name":"helloworld"})		# 插入数据
replica:PRIMARY> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
test1   0.000GB			# 有此库了
replica:PRIMARY> db.test1.find()				# 查询数据
{ "_id" : ObjectId("5e118886b4128d7bf6dfa02c"), "name" : "helloworld" }

在16.141/142上查看

replica:SECONDARY> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
test1   0.000GB
replica:SECONDARY> use test1
switched to db test1
replica:SECONDARY>
replica:SECONDARY> db.test1.find()
{ "_id" : ObjectId("5e118886b4128d7bf6dfa02c"), "name" : "helloworld" }
replica:SECONDARY>

 
 
Completion !

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值