IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> NoSQL之MongoDB复制集配置、数据导出导入 -> 正文阅读

[大数据]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

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-01-30 18:59:54  更:2022-01-30 19:01:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:05:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码