mongodb的HA方案

  • 关系型数据库

常见的关系型数据库有: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 pymongo
mongo_client = pymongo.MongoClient('127.0.0.1', 27017)
  • 有密码连接
import pymongo
mongo_client = pymongo.MongoClient('127.0.0.1', 26666)
mongo_auth = mongo_client.admin #或 mongo_client['admin'] admin为authenticationDatabase
mongo_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 = true
source = 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 found

rs.initiate( {
   _id : "rs0",
   members: [
      { _id: 0, host: "1.1.1.1:27017" },
      { _id: 1, host: "2.2.2.2:27017" }
   ]})


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值