一、创建3个节点目录

[root@db1 opt]# mkdir -p /opt/mongo_2801{7,8,9}/{conf,log,pid}
[root@db1 opt]# mkdir -p /data/mongo_2801{7,8,9}

二、创建配置文件

[root@db1 opt]# cat >/opt/mongo_28017/conf/mongodb.conf <<EOF
> systemLog:
>  destination: file   
>  logAppend: true  
>  path: /opt/mongo_28017/log/mongodb.log
> 
> storage:
>  journal:
>    enabled: true
>  dbPath: /data/mongo_28017
>  directoryPerDB: true
>  wiredTiger:
>     engineConfig:
>        cacheSizeGB: 0.5 
>        directoryForIndexes: true
>     collectionConfig:
>        blockCompressor: zlib
>     indexConfig:
>        prefixCompression: true
> 
> processManagement:
>  fork: true
>  pidFilePath: /opt/mongo_28017/pid/mongod.pid
> 
> net:
>  port: 28017
>  bindIp: 127.0.0.1,10.0.0.51
> 
> replication:
>    oplogSizeMB: 1024 
>    replSetName: dba
> EOF

三、配置文件拷贝到其他节点

[root@db1 opt]# cp /opt/mongo_28017/conf/mongodb.conf /opt/mongo_28018/conf/
[root@db1 opt]# cp /opt/mongo_28017/conf/mongodb.conf /opt/mongo_28019/conf/

四、替换端口号

[root@db1 opt]# sed -i 's#28017#28018#g' /opt/mongo_28018/conf/mongodb.conf
[root@db1 opt]# sed -i 's#28017#28019#g' /opt/mongo_28019/conf/mongodb.conf

五、启动多实例

[root@db1 conf]# mongod -f /opt/mongo_28017/conf/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 31904
child process started successfully, parent exiting
[root@db1 conf]# mongod -f /opt/mongo_28018/conf/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 31976
child process started successfully, parent exiting
[root@db1 conf]# mongod -f /opt/mongo_28019/conf/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 32022
child process started successfully, parent exiting

六、检查服务是否启动

[root@db1 conf]# ps -ef|grep mongo
mongo     14875      1  0 10:27 ?        00:02:06 /opt/mongodb/bin/mongod -f /opt/mongo_27017/conf/mongodb.conf
root      31904      1  1 16:16 ?        00:00:01 mongod -f /opt/mongo_28017/conf/mongodb.conf
root      31976      1  1 16:17 ?        00:00:01 mongod -f /opt/mongo_28018/conf/mongodb.conf
root      32022      1  1 16:17 ?        00:00:01 mongod -f /opt/mongo_28019/conf/mongodb.conf
root      32108  18801  0 16:18 pts/0    00:00:00 grep mongo
[root@db1 conf]#  netstat -lntup|grep mongo
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      14875/mongod        
tcp        0      0 10.0.0.51:27017         0.0.0.0:*               LISTEN      14875/mongod        
tcp        0      0 127.0.0.1:28017         0.0.0.0:*               LISTEN      31904/mongod        
tcp        0      0 10.0.0.51:28017         0.0.0.0:*               LISTEN      31904/mongod        
tcp        0      0 127.0.0.1:28018         0.0.0.0:*               LISTEN      31976/mongod        
tcp        0      0 10.0.0.51:28018         0.0.0.0:*               LISTEN      31976/mongod        
tcp        0      0 127.0.0.1:28019         0.0.0.0:*               LISTEN      32022/mongod        
tcp        0      0 10.0.0.51:28019         0.0.0.0:*               LISTEN      32022/mongod      

七、初始化集群

> rs.initiate(
... {
... _id: "dba",
...             version: 1,
...             members: [
... { _id: 0, host : "10.0.0.51:28017" }, { _id: 1, host : "10.0.0.51:28018" }, { _id: 2, host : "10.0.0.51:28019" }
... ] }
... )
{
	"ok" : 1,
	"operationTime" : Timestamp(1593418961, 1),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1593418961, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}

八、主库插入测试数据

dba:PRIMARY> db.inventory.insertMany([
... { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
... { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
... { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
... { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
... { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
... ]);
{
	"acknowledged" : true,
	"insertedIds" : [
		ObjectId("5ef9a5cfe4dd2ca3e1daa2f0"),
		ObjectId("5ef9a5cfe4dd2ca3e1daa2f1"),
		ObjectId("5ef9a5cfe4dd2ca3e1daa2f2"),
		ObjectId("5ef9a5cfe4dd2ca3e1daa2f3"),
		ObjectId("5ef9a5cfe4dd2ca3e1daa2f4")
	]
}

九、主库查询插入数据

dba:PRIMARY> db.inventory.find()
{ "_id" : ObjectId("5ef9a5cfe4dd2ca3e1daa2f0"), "item" : "journal", "qty" : 25, "size" : { "h" : 14, "w" : 21, "uom" : "cm" }, "status" : "A" }
{ "_id" : ObjectId("5ef9a5cfe4dd2ca3e1daa2f1"), "item" : "notebook", "qty" : 50, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "A" }
{ "_id" : ObjectId("5ef9a5cfe4dd2ca3e1daa2f2"), "item" : "paper", "qty" : 100, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "D" }
{ "_id" : ObjectId("5ef9a5cfe4dd2ca3e1daa2f3"), "item" : "planner", "qty" : 75, "size" : { "h" : 22.85, "w" : 30, "uom" : "cm" }, "status" : "D" }
{ "_id" : ObjectId("5ef9a5cfe4dd2ca3e1daa2f4"), "item" : "postcard", "qty" : 45, "size" : { "h" : 10, "w" : 15.25, "uom" : "cm" }, "status" : "A" }

十、从库查询(报错)

dba:SECONDARY> db.inventory.find()
Error: error: {
	"operationTime" : Timestamp(1593419343, 1),
	"ok" : 0,
	"errmsg" : "not master and slaveOk=false",
	"code" : 13435,
	"codeName" : "NotMasterNoSlaveOk",
	"$clusterTime" : {
		"clusterTime" : Timestamp(1593419343, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}

十一、临时设置从节点可读

dba:SECONDARY> rs.slaveOk()
dba:SECONDARY> db.inventory.find()
{ "_id" : ObjectId("5ef9a5cfe4dd2ca3e1daa2f2"), "item" : "paper", "qty" : 100, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "D" }
{ "_id" : ObjectId("5ef9a5cfe4dd2ca3e1daa2f1"), "item" : "notebook", "qty" : 50, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "A" }
{ "_id" : ObjectId("5ef9a5cfe4dd2ca3e1daa2f3"), "item" : "planner", "qty" : 75, "size" : { "h" : 22.85, "w" : 30, "uom" : "cm" }, "status" : "D" }
{ "_id" : ObjectId("5ef9a5cfe4dd2ca3e1daa2f4"), "item" : "postcard", "qty" : 45, "size" : { "h" : 10, "w" : 15.25, "uom" : "cm" }, "status" : "A" }
{ "_id" : ObjectId("5ef9a5cfe4dd2ca3e1daa2f0"), "item" : "journal", "qty" : 25, "size" : { "h" : 14, "w" : 21, "uom" : "cm" }, "status" : "A" }

十二、永久设置

[root@db1 ~]# echo "rs.slaveOk()" > ~/.mongorc.js

十三、副本集常用命令

dba:PRIMARY> rs.config()
dba:PRIMARY> rs.status()
dba:PRIMARY> rs.isMaster()
dba:PRIMARY> rs.printReplicationInfo()
configured oplog size:   1024MB
log length start to end: 632secs (0.18hrs)
oplog first event time:  Mon Jun 29 2020 16:22:41 GMT+0800 (CST)
oplog last event time:   Mon Jun 29 2020 16:33:13 GMT+0800 (CST)
now:       
dba:PRIMARY> rs.printSlaveReplicationInfo()
source: 10.0.0.51:28018
	syncedTo: Mon Jun 29 2020 16:33:23 GMT+0800 (CST)
	0 secs (0 hrs) behind the primary 
source: 10.0.0.51:28019
	syncedTo: Mon Jun 29 2020 16:33:23 GMT+0800 (CST)
	0 secs (0 hrs) behind the primary 

Categories: 数据库

0 Comments

发表评论

Avatar placeholder

邮箱地址不会被公开。 必填项已用*标注