目录
一、 创建多实例配置文件,并开启服务
[root@localhost ~]# mkdir -p /data/mongodb/mongodb{2,3,4} //创建数据目录
[root@localhost ~]# mkdir -p /data/mongodb/logs
[root@localhost ~]# touch /data/mongodb/logs/mongodb{2,3,4}.log
[root@localhost ~]# chmod 777 /data/mongodb/logs/*.log
[root@localhost ~]# cd /data/mongodb/
[root@localhost mongodb]# ls
[root@localhost mongodb]# cd logs/
[root@localhost logs]# ls -l
[root@localhost logs]# vim /etc/mongod.conf
replication:
replSetName: kgcrs
[root@localhost logs]# cp -p /etc/mongod.conf /etc/mongod2.conf
[root@localhost logs]# vim /etc/mongod2.conf
path: /data/mongodb/mongodb2.log
dbPath: /data/mongodb/mongodb2
port: 27018
[root@localhost logs]# cp -p /etc/mongod2.conf /etc/mongod3.conf
[root@localhost logs]# cp -p /etc/mongod2.conf /etc/mongod4.conf
[root@localhost logs]# vim /etc/mongod3.conf
path: /data/mongodb/mongodb3.log
dbPath: /data/mongodb/mongodb3
port: 27019
[root@localhost logs]# vim /etc/mongod4.conf
path: /data/mongodb/mongodb4.log
dbPath: /data/mongodb/mongodb4
port: 27020
[root@localhost logs]# mongod -f /etc/mongod.conf --shutdown
[root@localhost logs]# mongod -f /etc/mongod.conf
[root@localhost logs]# mongod -f /etc/mongod2.conf
[root@localhost logs]# mongod -f /etc/mongod3.conf
[root@localhost logs]# mongod -f /etc/mongod4.conf
[root@localhost logs]# netstat -anpt
[root@localhost logs]# mongo
[root@localhost logs]# mongo --port 27018
[root@localhost logs]# mongo --port 27019
[root@localhost logs]# mongo --port 27020
二、 常用操作
2.1 选举复制
标准节点:100 2.仲裁节点 :true 3.被动节点:0
> cfg={"_id":“kgcrs”,“members”:
[{"_id":0,“host”:“20.0.0.22:27017”,“priority”:100},
{"_id":1,“host”:“20.0.0.22:27018”,“priority”:100},
{"_id":2,“host”:“20.0.0.22:27019”,“priority”:0},
{"_id":3,“host”:“20.0.0.22:27020”,“arbiterOnly”:true}]}
> rs.initiate(cfg) //初始化启动,cfg:配置
{
"ok" : 1,
"operationTime" : Timestamp(1604718797, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1604718797, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
kgcrs:SECONDARY> //按回车,发现身份变为PRIMARY
kgcrs:PRIMARY> rs.isMaster()
{
“hosts” : [
“20.0.0.22:27017”,
“20.0.0.22:27018”
],
“passives” : [
“20.0.0.22:27019”
],
“arbiters” : [
“20.0.0.22:27020”
],
“setName” : “kgcrs”,
“setVersion” : 1,
“ismaster” : true,
“secondary” : false,
“primary” : “20.0.0.22:27017”,
“me” : “20.0.0.22:27017”,
“electionId” : ObjectId(“7fffffff0000000000000001”),
“lastWrite” : {
“opTime” : {
“ts” : Timestamp(1604718839, 1),
“t” : NumberLong(1)
},
“lastWriteDate” : ISODate(“2020-11-07T03:13:59Z”),
“majorityOpTime” : {
“ts” : Timestamp(1604718839, 1),
“t” : NumberLong(1)
},
“majorityWriteDate” : ISODate(“2020-11-07T03:13:59Z”)
},
“maxBsonObjectSize” : 16777216,
“maxMessageSizeBytes” : 48000000,
“maxWriteBatchSize” : 100000,
“localTime” : ISODate(“2020-11-07T03:14:06.604Z”),
“logicalSessionTimeoutMinutes” : 30,
“minWireVersion” : 0,
“maxWireVersion” : 6,
“readOnly” : false,
“ok” : 1,
“operationTime” : Timestamp(1604718839, 1),
“$clusterTime” : {
“clusterTime” : Timestamp(1604718839, 1),
“signature” : {
“hash” : BinData(0,“AAAAAAAAAAAAAAAAAAAAAAAAAAA=”),
“keyId” : NumberLong(0)
}
}
}
2.2 数据的增加、删除、修改、查看
kgcrs:PRIMARY> use kgc
kgcrs:PRIMARY> db.t1.insert({“id”:1,“name”:“tom”})
kgcrs:PRIMARY> db.t1.insert({“id”:2,“name”:“jerry”})
kgcrs:PRIMARY> db.t1.find()
{ “_id” : ObjectId(“5fa52f92709db0f389d3bc59”), “id” : 1, “name” : “tom” }
{ “_id” : ObjectId(“5fa52f99709db0f389d3bc5a”), “id” : 2, “name” : “jerry” }
kgcrs:PRIMARY> db.t1.update({“id”:2},{$set:{“name”:“jack”}})
kgcrs:PRIMARY> db.t1.find()
{ “_id” : ObjectId(“5fa52f92709db0f389d3bc59”), “id” : 1, “name” : “tom” }
{ “_id” : ObjectId(“5fa52f99709db0f389d3bc5a”), “id” : 2, “name” : “jack” }
kgcrs:PRIMARY> db.t1.remove({“id”:1})
kgcrs:PRIMARY> db.t1.find()
{ “_id” : ObjectId(“5fa52f99709db0f389d3bc5a”), “id” : 2, “name” : “jack” }
kgcrs:PRIMARY> use local
kgcrs:PRIMARY> show collections
me
oplog.rs
replset.election
replset.minvalid
startup_log
system.replset
system.rollback.id
kgcrs:PRIMARY> db.oplog.rs.find()
//查看操作日志,输入"it"查看更多内容
2.3 关闭节点,验证主从抢占
[root@localhost logs]# mongod -f /etc/mongod.conf --shutdown //关闭27017服务,不能登录
[root@localhost logs]# mongo --port 27018 //登录
kgcrs:PRIMARY> rs.status() //27017的health变为0,27018变为PRIMARY
[root@localhost logs]# mongod -f /etc/mongod2.conf --shutdown //关闭27018服务,不能登录
[root@localhost logs]# mongo --port 27019 //登录
kgcrs:SECONDARY> rs.status() //仍为ARBITER,仲裁节点不参与选举PRIMARY
2.4 允许从节点读取数据
默认情况下,主节点上写的数据,在从节点无法查看,就可以提供一下方法查看
[root@localhost logs]# mongod -f /etc/mongod.conf //开启27017节点
[root@localhost logs]# mongod -f /etc/mongod2.conf //开启27018节点
[root@localhost logs]# mongo --port 27018 //登录从节点
kgcrs:SECONDARY> show dbs //不允许查看
kgcrs:SECONDARY> rs.slaveOk() //允许默认从节点读取数据
kgcrs:SECONDARY> show dbs //这时就可以查看同步的 信息
admin 0.000GB
config 0.000GB
kgc 0.000GB
local 0.000GB
2.5 查看复制状态信息
kgcrs:SECONDARY> rs.printReplicationInfo()
configured oplog size: 3373.361083984375MB
log length start to end: 10895secs (3.03hrs)
oplog first event time: Fri Nov 06 2020 22:13:17 GMT-0500 (EST)
oplog last event time: Sat Nov 07 2020 01:14:52 GMT-0500 (EST)
now: Sat Nov 07 2020 01:14:59 GMT-0500 (EST)
kgcrs:SECONDARY> rs.printSlaveReplicationInfo()
source: 20.0.0.22:27018
syncedTo: Sat Nov 07 2020 01:16:02 GMT-0500 (EST)
0 secs (0 hrs) behind the primary
source: 20.0.0.22:27019
syncedTo: Sat Nov 07 2020 01:16:02 GMT-0500 (EST)
0 secs (0 hrs) behind the primary
//仲裁节点并不具备数据复制
2.6 更改oplog大小
kgcrs:SECONDARY> exit //退出从库
[root@localhost logs]# mongo //登录主库
kgcrs:PRIMARY> use local
kgcrs:PRIMARY> db.oplog.rs.stats()
kgcrs:PRIMARY> rs.printReplicationInfo()
configured oplog size: 3373.37109375MB //oplog大小
log length start to end: 11195secs (3.11hrs)
oplog first event time: Fri Nov 06 2020 22:13:17 GMT-0500 (EST)
oplog last event time: Sat Nov 07 2020 01:19:52 GMT-0500 (EST)
now: Sat Nov 07 2020 01:19:52 GMT-0500 (EST)
kgcrs:PRIMARY> exit
[root@localhost logs]# mongo --port 27018
kgcrs:SECONDARY> use admin
kgcrs:SECONDARY> db.shutdownServer() //关闭从节点的服务
kgcrs:SECONDARY> exit
[root@localhost logs]# vim /etc/mongod2.conf //注销Replica set相关启动参数,并修改port端口号
#replication:
# replSetName: kgcrs
port:27028
[root@localhost logs]# mongod -f /etc/mongod2.conf //单实例模式启动
[root@localhost logs]# mongodump --port 27028 --db local --collection ‘oplog.rs’ //完全备份当前节点的所有oplog记录
[root@localhost logs]# mongo --port 27028
> use local
> db.oplog.rs.drop() //删除oplog
> db.runCommand({create:“oplog.rs”,capped:true,size:(210241024*1024)})
> use admin
> db.shutdownServer() //关闭此节点服务
> exit
[root@localhost logs]# vim /etc/mongod2.conf //开启Replica set相关启动参数,并修改port端口号为27018
replication:
replSetName: kgcrs
oplogSizeMB: 2048
port:27018
[root@localhost logs]# mongod -f /etc/mongod2.conf
[root@localhost logs]# mongo --port 27018
kgcrs:SECONDARY> rs.printReplicationInfo()
configured oplog size: 2048MB //大小变为自定义大小
log length start to end: 80secs (0.02hrs)
oplog first event time: Sat Nov 07 2020 01:41:02 GMT-0500 (EST)
oplog last event time: Sat Nov 07 2020 01:42:22 GMT-0500 (EST)
now: Sat Nov 07 2020 01:42:28 GMT-0500 (EST)
kgcrs:SECONDARY> exit
2.7 主从选举验证
[root@localhost logs]# mongo //进入主节点
kgcrs:PRIMARY> rs.stepDown() //有效产生选举,让出主节点身份
kgcrs:SECONDARY> //自己变成了SECONDARY
kgcrs:SECONDARY> exit
[root@localhost logs]# mongo --port 27018
kgcrs:PRIMARY> //变成主节点服务器
2.8 部署认证复制
kgcrs:PRIMARY> use admin
kgcrs:PRIMARY> db.createUser({“user”:“root”,“pwd”:“123”,“roles”:[“root”]})
kgcrs:PRIMARY> exit
[root@localhost logs]# cd /usr/bin
[root@localhost bin]# vim /etc/mongod.conf
security:
keyFile: /usr/bin/kgcrskey1
clusterAuthMode: keyFile
[root@localhost bin]# vim /etc/mongod2.conf
security: //安全功能开启
keyFile: /usr/bin/kgcrskey2
clusterAuthMode: keyFile
[root@localhost bin]# vim /etc/mongod3.conf
security:
keyFile: /usr/bin/kgcrskey3
clusterAuthMode: keyFile
[root@localhost bin]# vim /etc/mongod4.conf
security:
keyFile: /usr/bin/kgcrskey4
clusterAuthMode: keyFile
[root@localhost bin]# echo “kgc key”>kgcrskey1
[root@localhost bin]# echo “kgc key”>kgcrskey2
[root@localhost bin]# echo “kgc key”>kgcrskey3
[root@localhost bin]# echo “kgc key”>kgcrskey4
[root@localhost bin]# chmod 600 kgcrskey{1…4}
[root@localhost bin]# mongod -f /etc/mongod.conf --shutdown
[root@localhost bin]# mongod -f /etc/mongod2.conf --shutdown
[root@localhost bin]# mongod -f /etc/mongod3.conf --shutdown
[root@localhost bin]# mongod -f /etc/mongod4.conf --shutdown
[root@localhost bin]# mongod -f /etc/mongod.conf
[root@localhost bin]# mongod -f /etc/mongod2.conf
[root@localhost bin]# mongod -f /etc/mongod3.conf
[root@localhost bin]# mongod -f /etc/mongod4.conf
2.8.1 进入主节点服务器验证
[root@localhost bin]# mongo --port 27018
kgcrs:PRIMARY> show dbs //无法查看数据库
kgcrs:PRIMARY> rs.status() //无法查看复制集
kgcrs:PRIMARY> use admin //身份登录验证
kgcrs:PRIMARY> db.auth(“root”,“123”)
kgcrs:PRIMARY> show dbs //可以查看数据库
kgcrs:PRIMARY> rs.status() //可以查看复制集
2.8.2 进入从节点服务器验证
[root@localhost bin]# mongo --port 27017
kgcrs:SECONDARY> rs.slaveOk()
kgcrs:SECONDARY> show dbs //无法查看数据库
kgcrs:SECONDARY> rs.status() //无法查看复制集
kgcrs:SECONDARY> use admin //身份登录验证
kgcrs:SECONDARY> db.auth(“root”,“123”)
kgcrs:SECONDARY> show dbs //可以查看数据库
kgcrs:SECONDARY> rs.status() //可以查看复制集
kgcrs:SECONDARY> exit