博客
关于我
mongodb的HA方案
阅读量:170 次
发布时间:2019-02-26

本文共 2865 字,大约阅读时间需要 9 分钟。

  • 关系型数据库

常见的关系型数据库有:MySQL、Oracle、DB2、SQL Server

非关系型数据库有MongoDB

关系型数据库可以理解为依赖一个模型来创建的数据库,由于是建立在数据模型的基础上,所以我们可以通过SQL语句很方便的在多个表之间做复杂的查询操作

关系型数据库相对安全,因为直接存储在硬盘中所以突然的宕机、停电等意外不会导致数据丢失。

当遇到海量数据或者复杂的查询多表操作非常消耗内存。


  • 非关系型数据库

非关系型数据库部署起来都比较简单,没有关系型数据库那么复杂。Mongo的存储方式为虚拟内存+持久化存储,

Mongo将数据写入内存中,再由虚拟内存管理器将其持久化到硬盘中,因此写操作会比关系型数据库快很多,不能进行联表查询,而且它对海量数据处理能力非常强,内存级数据库,查询速度也非常快。

在这里插入图片描述


这里注意一点,当我们从mongo里取数据时,真正返回的是cusor并不是真实的数据,我们拿cusor做我们想做的事

MongoDB支持不同服务之间的异步的数据复制,来实现failover(故障转移,故障切换,故障恢复) and redundancy(数据冗余)

  • 查询指定参数
db.getCollection('classes').find({teachers:1534}):查找teachers列为1534的数据
  • 排序
# 1代表升序,-1代表降序db.getCollection('classes').find().sort({   name: 1})
  • 分页
# 返回name=1的2条数据db.getCollection('classes').find({   name: 1}).limit(2)# 返回name=1的数据后,返回第3,4,5条记录db.getCollection('classes').find({   name: 1}).limit(2).skip(3)
  • 增加一列/删除一列(根据第一个参数匹配)
db.BATCH_FLOWS_POLICY_TEMPLATE.update({name: "abc"},{$set:{global_name:""}})
  • 批量更新(第一个参数必为{},加上multi:true)
db.BATCH_FLOWS_POLICY_TEMPLATE.update({   },{   $unset:{   global_name:""}},{   multi:true})

PS : 最后一个参数{multi:true}默认时false,默认只更新第一列 ,true则更新所有

  • 统计行数
db.getCollection('classes').find({}).count()

当新加入一条数据在主数据库时,同时异步到备份路由器,用来实现故障切换

  • 无密码连接
import pymongomongo_client = pymongo.MongoClient('127.0.0.1', 27017)
  • 有密码连接
import pymongomongo_client = pymongo.MongoClient('127.0.0.1', 26666)mongo_auth = mongo_client.admin #或 mongo_client['admin'] admin为authenticationDatabasemongo_auth.authenticate('用户名', '密码')
  • 判断是否连接成功
mongo_client.server_info() = true/false

import pymongo:在Mongoutil文件里引入mongo数据库,调用正常的数据路语句,	• get_docs_by_criteria(criteria):就相当于联合查询一条或多条对象	• get_docs_by_ids():支持多个id,会返回多个	• insert_multi_docs(values):支持同时插入多条数据	• get_multi_sort(sort_field):当get方法时直接支持排序,参数是某列内容	• update(doc,key):根据key的列更新表中的一行,也支持插入	• set(value):insert一条对象进入表	• update_by_criter(criter):根据筛选条件更新

MongoConn继承了Mongoutil,仅在原有基础上加上数据库的url,数据库name和表name,HA备份replica设置

HA时:数据库的连接要写2个,MongoDB默认的端口是:27017

CONTROLLER_MONGO_URL:'mongodb://1.1.1.1:27017,2.2.2.2:27017/'

配置文件位置:/etc/mongodb.conf

master配置文件

添加了master = true 这一行即可   多网卡机器bind_ip这一行尽可能写成一个具体地址(最好写内网地址),因为slave上是根据这个同步的

slave配置文件

添加了 slave = truesource = master的ip:27017

Cli 命令查看

show dbs

use snmp
db.snmp.insert({ip:“3.3.3.3”,community:“cisco”})
show collections
db.snmps.find()

环境变量位置:etc/profile

在里面可以添加代理http=""(IP或代理的域名)这样安装时就可以通过代理下载

查看mongodb状态:systemctl status mongod.service

将second路由器变成primary路由器:

(备份路由器上)systemctl restart mongod

因为mongodb默认是从主节点读写数据的,副本节点上不允许读,可以设置副本节点可以读。

myrs:SECONDARY> db.getMongo().setSlaveOk();主备设置完毕后,通过rs.status()查看

2、测试副本集的故障转移功能

将主节点的mongod进程杀死:
myrs:PRIMARY> use admin
myrs:PRIMARY> db.shutdownServer()
此时secodary自动转换为主节点,通过rs.status()查看

MONGO_URL: 'mongodb://1.1.1.1:27017,2.2.2.2:27017/'QA : Failed to start mongo.service: Unit not foundrs.initiate( {   _id : "rs0",   members: [      { _id: 0, host: "1.1.1.1:27017" },      { _id: 1, host: "2.2.2.2:27017" }   ]})

转载地址:http://mnky.baihongyu.com/

你可能感兴趣的文章
Mysql学习总结(7)——MySql索引原理与使用大全
查看>>
Mysql学习总结(80)——统计数据库的总记录数和库中各个表的数据量
查看>>
Mysql学习总结(81)——为什么MySQL不推荐使用uuid或者雪花id作为主键?
查看>>
Mysql学习总结(82)——MySQL逻辑删除与数据库唯一性约束如何解决?
查看>>
Mysql学习总结(83)——常用的几种分布式锁:ZK分布式锁、Redis分布式锁、数据库分布式锁、基于JDK的分布式锁方案对比总结
查看>>
Mysql学习总结(84)—— Mysql的主从复制延迟问题总结
查看>>
Mysql学习总结(85)——开发人员最应该明白的数据库设计原则
查看>>
Mysql学习总结(8)——MySql基本查询、连接查询、子查询、正则表达查询讲解
查看>>
Mysql学习总结(9)——MySql视图原理讲解与使用大全
查看>>
Mysql学习笔记 - 在Centos7环境下离线安装Mysql
查看>>
MySQL学习笔记十七:复制特性
查看>>
Mysql学习第一课-mysql的定义及sql语句
查看>>
mysql安全模式: sql_safe_updates
查看>>
mysql安装,卸载,连接
查看>>
MySQL安装之没有配置向导
查看>>
mysql安装出现 conflicts with mysql*的解决办法
查看>>
mysql安装卡在最后一步解决方案(附带万能安装方案)
查看>>
mysql安装和启动命令小结
查看>>
Mysql安装教程(命令行)
查看>>
mysql安装版安装
查看>>