环境准备
hostname | IP | 角色 |
---|---|---|
mongodb-cluster-1 | 10.200.112.104 | primary |
mongodb-cluster-2 | 10.200.112.64 | secondary |
mongodb-cluster-3 | 10.200.112.96 | secondary |
单机环境部署
安装
1 | wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.18.tgz |
配置
1 | mkdir /usr/local/mongodb/{conf,data} |
启动服务
1 | mongod -f /usr/local/mongodb/conf/mongo.conf |
管理mongodb
创建管理员用户
1 | mongo |
创建数据库
创建数据库使用
use DATABASE_NAME
(需要插入数据才会显示出来)。如果数据库不存在,则创建数据库,否则切换到指定数据库。
1 | > use vnimos |
集群环境部署
其他两台需要先部署完成单机环境
配置[所有节点执行]
1 | vi /usr/local/mongodb/conf/mongo.conf |
初始化副本集[primary节点执行]
初始化副本集之前必须确保其他节点上的数据是空的,否则会报
CannotInitializeNodeWithData
的错误
1 | mongo --port 27017 -u admin -p Boliv1a --authenticationDatabase admin |
连接MongoDB副本集
MongoDB副本集里Primary节点是不固定的,当遇到副本集轮转升级、Primary宕机、网络分区等场景时,副本集可能会选举出一个新的Primary,而原来的Primary则会降级为Secondary,即发生主备切换。
通过以下方式将自动连接到Primary1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31# /usr/local/mongodb/bin/mongo mongodb://"10.200.112.104:27017,10.200.112.64:27017,10.200.112.96:27017"/?replicaSet=vnimos -u admin -p Boliv1a --authenticationDatabase admin
vnimos:PRIMARY> rs.isMaster()
{
"hosts" : [
"10.200.112.104:27017",
"10.200.112.64:27017",
"10.200.112.96:27017"
],
"setName" : "vnimos",
"setVersion" : 1,
"ismaster" : true,
"secondary" : false,
"primary" : "10.200.112.104:27017",
"me" : "10.200.112.104:27017",
"electionId" : ObjectId("7fffffff0000000000000004"),
"lastWrite" : {
"opTime" : {
"ts" : Timestamp(1545900033, 1),
"t" : NumberLong(4)
},
"lastWriteDate" : ISODate("2018-12-27T08:40:33Z")
},
"maxBsonObjectSize" : 16777216,
"maxMessageSizeBytes" : 48000000,
"maxWriteBatchSize" : 1000,
"localTime" : ISODate("2018-12-27T08:40:34.252Z"),
"maxWireVersion" : 5,
"minWireVersion" : 0,
"readOnly" : false,
"ok" : 1
}
副本集相关参数
- arbiterOnly
Arbiter节点只参与投票(仲裁),不能被选为Primary,并且不从Primary同步数据 - hidden
Hidden节点不能被选为主(Priority为0),并且对Driver不可见。 - priority
Primary选择的优先级。Priority为0节点不会被选举为Primary - votes
Mongodb 3.0之后,复本集成员最多50个,参与Primary选举投票的成员最多7个,其他成员的vote属性必须设置为0,即不参与投票。
1 | vnimos:PRIMARY> rs.config() |
默认情况下,Secondary是不提供服务的,即不能读写,会提示:
NotMasterNoSlaveOk
。
如果需要读的话则要执行rs.slaveOk()
,只对当前连接有效。
1 | vnimos:SECONDARY> show dbs |
备份
备份所有数据库
1 | mongodump -h "vnimos/10.200.112.104:27017,10.200.112.64:27017,10.200.112.96:2701" -u admin -p Boliv1a --authenticationDatabase admin -o /root/backup |
备份指定数据库
1 | mongodump -h "vnimos/10.200.112.104:27017,10.200.112.64:27017,10.200.112.96:2701" -u admin -p Boliv1a --authenticationDatabase admin -d vnimos -o /root/backup |
恢复
恢复所有数据库
1 | mongorestore -h "vnimos/10.200.112.104:27017,10.200.112.64:27017,10.200.112.96:2701" -u admin -p Boliv1a --authenticationDatabase admin /root/backup |
恢复指定数据库
1 | mongorestore -h "vnimos/10.200.112.104:27017,10.200.112.64:27017,10.200.112.96:2701" -u admin -p Boliv1a --authenticationDatabase admin -d vnimos /root/backup/vnimos/ |