1、配置MongoDB复制集
一主从
主:192.168.159.136
从1:192.168.159.140
从2:192.168.159.141
1)、主从安装mongodb(主从均使用yum的安装方式安装)
[root@localhost ~]# vim /etc/yum.repos.d/mongo.repo
[mongodb]
name=mongodb
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mongodb/yum/el7-5.0/
gpgcheck=0
[root@localhost ~]# yum install mongodb-org -y
[root@localhost ~]# systemctl enable mongod --now
?2)三台从设备修改配置文件(三台执行同样操作)
[root@localhost ~]# vim /etc/mongod.conf
net:
port: 27017
bindIp: 0.0.0.0 #监听网卡
#需要增加的内容即复制集设置中的内容
replication:
oplogSizeMB: 1024
replSetName: myRS
参数说明:
replication.oplogSizeMB
数字,复制操作日志的最大大小(
M
)
eplication.replSetName
字符,作为其
mongod
部分副本集的名称,副本集中的所有主机都必须 具有相同的名称
3)、所有机器都进行重启mongodb
[root@localhost ~]# systemctl restart mongod
4)、 主库配置
[root@localhost ~]# mongo admin
#查看当前的ReplSet的状态
> rs.status()
{
"ok" : 0,
"errmsg" : "no replset config has been received",
"code" : 94,
"codeName" : "NotYetInitialized"
}
#初始化ReplSet复制集
> config={_id:'myRS',members:[
... {_id:0,host:'192.168.159.136:27017'},
... {_id:1,host:'192.168.159.140:27017'},
... {_id:2,host:'192.168.159.141:27017'}
... ]}
> rs.initiate(config)
?5)、主库再次查看当前的ReplSet的状态
此时已经选举当前:192.168.159.136为主库
myRS:SECONDARY> rs.status()
"members" : [
{
"_id" : 0,
"name" : "192.168.159.136:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY", #主库
"uptime" : 1567,
"optime" : {
"ts" : Timestamp(1643459673, 1),
"t" : NumberLong(1)
{
"_id" : 1,
"name" : "192.168.159.140:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 41,
"optime" : {
"ts" : Timestamp(1643459673, 1),
"t" : NumberLong(1)
},
{
"_id" : 2,
"name" : "192.168.159.141:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 41,
"optime" : {
"ts" : Timestamp(1643459673, 1),
"t" : NumberLong(1)
},
?状态详解:
- STARTUP
:刚加入到复制集中,配置还未加载
- STARTUP2
:配置已加载完,初始化状态
- RECOVERING
:正在恢复,不适用读
- ARBITER:
仲裁者
- DOWN
:节点不可到达
- UNKNOWN
:未获取其他节点状态而不知是什么状态,一般发生在只有两个成员的架构,脑裂
- REMOVED
:移除复制集
- ROLLBACK
:数据回滚,在回滚结束时,转移到
RECOVERING
或
SECONDARY
状态
- FATAL
:出错。查看日志
grep “replSet FATAL”
找出错原因,重新做同步
- PRIMARY
:主节点
- SECONDARY
:备份节点
?6)、测试
?主节点(192.168.159.136)上插入数据测试
myRS:PRIMARY> use test
myRS:PRIMARY> for(var i =0; i <4; i ++) {db.user.insert({userName:'my'+i,age:i})}
主节点查看数据集,两个数据库都有数据,复制数据功能已经运行成功
myRS:PRIMARY> db.getCollection('user').find({})
{ "_id" : ObjectId("61f536e7b91d1490bfef3fbd"), "userName" : "my0", "age" : 0 }
{ "_id" : ObjectId("61f536e7b91d1490bfef3fbe"), "userName" : "my1", "age" : 1 }
{ "_id" : ObjectId("61f536e7b91d1490bfef3fbf"), "userName" : "my2", "age" : 2 }
{ "_id" : ObjectId("61f536e7b91d1490bfef3fc0"), "userName" : "my3", "age" : 3 }
?7)、测试如果主节点掉线,是否会故障转移
当前:
主:192.168.159.136
从1:192.168.159.140
从2:192.168.159.141
?模拟关闭主节点,在主节点,使用db.shutdownServer()命令
myRS:PRIMARY> use admin
myRS:PRIMARY> db.shutdownServer()
在两个副节点查看现时的状态,192.168.159.140变成了主节点,成功实现了故障转移
[root@localhost ~]# mongo
myRS:PRIMARY> rs.status()
{
"_id" : 1,
"name" : "192.168.159.140:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 2749,
"optime" : {
"ts" : Timestamp(1643460853, 1),
"t" : NumberLong(2)
},
?重新启动192.168.159.136
重启之后也只会变成副节点
[root@localhost ~]# systemctl restart mongod
??复制管理操作:
(1)查看复制集状态:
? ? ? ? ??
? ? ?rs.status(); #
查看整体复制集状态
? ? ?rs.isMaster(); #
查看当前是否是主节点
(2)添加删除节点
? ? rs.add("ip:port"); #
新增从节点
? ? rs.addArb("ip:port"); #
新增仲裁节点
? ? rs.remove("ip:port"); #
删除一个节点
2、创建管理员账号admin,密码为admin@163.com
> use admin
> db.createUser( { user: "admin", pwd: "admin@163.com", roles: [ { role: "root", db: "admin" } ] }
3、素材如下,完成下面备份任务
MongoDB Enterprise > use my_mongodb > db.createCollection("user") 插入数据 db.user.insertMany( [{id:201,name:'张三',sex:'男',age:19}, {id:202,name:'李四',sex:'女',age:22}, {id:203,name:'王五',sex:'男',age:20}, {id:204,name:'赵六',sex:'女',age:21}, {id:205,name:'钱七',sex:'男',age:20}]?)? ? ?
1)、mongoexport备份my_mongodb,格式为csv
[root@localhost ~]# mongoexport -d my_mongodb -c user -o user.dat
2)、使用mongoimport恢复之前备份的my_mongodb
[root@localhost ~]# mongoimport -d my_mongodb -c user --type csv --headerline -- file user_csv.dat
3)、mongodump备份my_mongodb库下的user集合
mongodump -d my_mongodb -c user -o /home/mongod/backup/
4)、使用mongorestore恢复上一步的备份
[root@localhost ~]# mongorestore -d my_mongodb -c user /home/mongod/backup/my_mongodb/user.bson
|