mongo集群
MongoDB集群笔记
MongoDB是分布式文件存储数据库,非关系型数据库的一种。
一. 下载MongoDB3.6
mkdir /data/mongodb/{data,log} -p && cd /data/mongodb
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.17.tgz
二. 解压到安装目录
tar xf mongodb-linux-x86_64-3.6.17.tgz
三. 编写启动配置文件
[root@expelm ~]# cat /data/mongodb/mongod.conf
# 指定数据库路径
dbpath=/data/mongodb/data
# 指定日志文件,不是路径
logpath=/data/mongodb/log/master.log
# 指定PID文件,不指定没有PID文件
pidfilepath=/data/mongodb/mongod.pid
# 设置每个数据库单独存放
directoryperdb=true
# 设置日志追加
logappend=true
# 设置副本集名称(副本集名称要和console中设置的_id名称一致)
#replSet=rs
#keyFile=/data/mongodb/data/mongod.keyfile
# 设置端口
port=27017
# 设置绑定IP
bind_ip=172.17.51.173
# 设置oplog的大小(MB)
oplogSize=10000
# 以守护方式运行
fork=true
# 设置最大连接数
maxConns=10000
# 开启认证
#auth=true
四. 配置命令路径
ln -s /data/mongodb/mongodb-linux-x86_64-3.6.17/bin/mongod /usr/bin/
ln -s /data/mongodb/mongodb-linux-x86_64-3.6.17/bin/mongo /usr/bin/
五. 设置开机自启及启动服务
mongod -f /data/mongodb/mongodb-linux-x86_64-3.6.17/mongod.conf
echo "/usr/bin/mongod -f /data/mongodb/mongodb-linux-x86_64-3.6.17/mongod.conf" >> /etc/rc.d/rc.local
六. 配置集群
1、三台服务都启动后,在任意一台主机上登陆
mongo --host 192.168.187.141
2、进入到admin库
use admin
3、初始化集群
rs.initiate( {
_id : "rs", #名称要和配置文件中副本集名称一致
members: [
{ _id: 0, host: "192.168.187.141:27017" },
{ _id: 1, host: "192.168.187.141:27018" },
{ _id: 2, host: "192.168.187.141:27019" }
]
});
4、检查配置情况
rs:PRIMARY> rs.conf()
{
"_id" : "rs",
"version" : 1,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "192.168.187.141:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "192.168.187.141:27018",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "192.168.187.141:27019",
"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("5ea14c3b733074604803901b")
}
}
5、查看集群状态
rs:PRIMARY> rs.status()
{
"set" : "rs",
"date" : ISODate("2020-04-23T08:33:22.404Z"),
"myState" : 1,
"term" : NumberLong(1),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1587630798, 1),
"t" : NumberLong(1)
},
"readConcernMajorityOpTime" : {
"ts" : Timestamp(1587630798, 1),
"t" : NumberLong(1)
},
"appliedOpTime" : {
"ts" : Timestamp(1587630798, 1),
"t" : NumberLong(1)
},
"durableOpTime" : {
"ts" : Timestamp(1587630798, 1),
"t" : NumberLong(1)
}
},
"members" : [
{
"_id" : 0,
"name" : "192.168.187.141:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY", # 主节点
"uptime" : 3077,
"optime" : {
"ts" : Timestamp(1587630798, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2020-04-23T08:33:18Z"),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"electionTime" : Timestamp(1587629127, 1),
"electionDate" : ISODate("2020-04-23T08:05:27Z"),
"configVersion" : 1,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : 1,
"name" : "192.168.187.141:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY", # 次节点
"uptime" : 1686,
"optime" : {
"ts" : Timestamp(1587630798, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1587630798, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2020-04-23T08:33:18Z"),
"optimeDurableDate" : ISODate("2020-04-23T08:33:18Z"),
"lastHeartbeat" : ISODate("2020-04-23T08:33:21.723Z"),
"lastHeartbeatRecv" : ISODate("2020-04-23T08:33:22.334Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncingTo" : "192.168.187.141:27017",
"syncSourceHost" : "192.168.187.141:27017",
"syncSourceId" : 0,
"infoMessage" : "",
"configVersion" : 1
},
{
"_id" : 2,
"name" : "192.168.187.141:27019",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 1686,
"lastHeartbeat" : ISODate("2020-04-23T08:33:21.672Z"),
"lastHeartbeatRecv" : ISODate("2020-04-23T08:33:22.185Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"configVersion" : 1
}
],
"ok" : 1,
"operationTime" : Timestamp(1587630798, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1587630798, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
集群配置完成,可以测试在主节点写入数据,看从节点是否同步成功。
七. 配置集群认证
1、首先开启数据库认证,创建超级用户,权限为root即超级用户
use admin
db.createUser({user: "admin", pwd: "microger2019", roles: ["root" ]})
use miot
db.createUser({user: "microger",pwd: "microger",roles: [{role: "readWrite", db: "miot" }]})
2、keyfile的创建
三台要一样,而且文件权限为X00,创建完成后同步到其他服务器
openssl rand -base64 100 > /data/mongodb/data/mongod.keyfile
chmod 600 /data/mongodb/data/mongod.keyfile
开启配置文件中集群认证配置的相关选项
keyFile=/data/mongodb/data/mongod.keyfile
auth=true
重启所有MongoDB服务
3、登陆验证
mongo -u microger -p microger --authenticationDatabase miot
八. MongoDB的相关操作
1、MongoDB的备份
./mongodb-linux-x86_64-3.6.17/bin/mongodump -d miot --host 172.17.42.118 --port 10805 -u microger -p microger --authenticationDatabase=miot -o ./dump/
2、MongoDB的恢复
./mongodb-linux-x86_64-3.6.17/bin/mongorestore -d miot --dir miot --host 192.168.187.141 --port 27019 -u admin -p microger2019
3、MongoDB开启从库查询
rs.slaveOk();
4、添加节点
rs.add( { host: "192.168.187.141:27020", priority: 0, votes: 0 } )
5、移除节点
rs.remove("192.168.187.141:27020")
6、帮助
Tab键可以命令补全,help可以查看帮助