NoSQL之MongoDB复制集配置、数据导出导入

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个F啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值