一、部署MongoDB副本集
1.1 启用副本集配置并指定集群名称 rs1
1.2 定义集群成员列表
部署好机器51,52,53:51上配置
bind_ip=192.168.4.51(要改)
port=27051(要改)
logpath=/usr/local/mongodb/log/mongodb.log
logappend=true
dbpath=/usr/local/mongodb/data/db
fork=true
replSet=rs1(51 52 53都一样)
 
]#/usr/local/mongodb/bin/mongo --host 192.168.4.51 --port 27051 
> config={ 
_id:"rs1", 
members:[ 
{_id:0,host:"192.168.4.51:27051"}, 
{_id:1,host:"192.168.4.52:27052"}, 
{_id:2,host:"192.168.4.53:27053"} 
}
 
{
"_id" : "rs1",
"members" : [
{
"_id" : 0,
"host" : "192.168.4.51:27051"
},
{
"_id" : 1,
"host" : "192.168.4.52:27052"
},
{
"_id" : 2,
"host" : "192.168.4.53:27053"
}
]
}
 
1.3 创建集群
> rs.help()
> rs.initiate(config)
{
"ok" : 1,
"operationTime" : Timestamp(1550480025, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1550480025, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
rs1:SECONDARY> 
rs1:PRIMARY>
 
1.4 查看集群信息
> rs.status()
> rs.isMaster()
 
1.5 客户端50 访问集群存取数据
]#/usr/local/mongodb/bin/mongo  --host 192.168.4.51 --port 27051
>show dbs
> use db15
> show  tables
> db.a.save({name:"bob"})
> db.a.find()
 
在从库自己连接自己 查看是否有主库的数据(52为例)
允许对数据做操作  >db.getMongo( ).setSlaveOk( ) //从库要
]# /usr/local/mongodb/bin/mongo --host 192.168.4.52 --port 27052
rs1:SECONDARY> db.getMongo( ).setSlaveOk( )
rs1:SECONDARY> show dbs;
admin   0.000GB
config  0.000GB
db15    0.000GB
local   0.000GB
rs1:SECONDARY> use db15
switched to db db15
rs1:SECONDARY> show tables
a
rs1:SECONDARY> db.a.find()
{ "_id" : ObjectId("5c6a736ab913a8c67af617d3"), "name" : "bob" }
 
1.6 测试集群功能(高可用功能测试)
停止当前主库的mongodb服务,
在2个副本主机查看集群状态信息(两个副本机会随机选举一个作为主库)
把坏掉的主库修复后会自动配置位当前主库的副本主机并自动同步宕机期间的数据
 
1.7 集群的工作过程 ?
 
二、文档管理 192.168.4.50
把/etc/passwd 文件的内容存储到bbsdb库下的user6集合里
(使用备份文件恢复 或 数据导入 都可以 完成)
 
插入文档 save()  insert()  insertMany()
> db.a.save({_id:1,name:"bob"})
> db.a.save({_id:2,name:"jerry"})
> db.a.find()
 
> db.a.insert({_id:1,name:"lucy"})
> db.a.insert({_id:2,name:"lucy"})
 
> db.a.insertMany([ {_id:4,name:"lucyA"} , {name:"liliBB"} ,{age:1} ])
 
> db.a.find()
 
查询文档 
find() findOne() limit() skip() sort()  count()
db.集合名.find({条件},{字段列表})
> use bbsdb
 
> db.user6.find({},{_id:0, name:1})
> db.user6.find({name:"root"})
> db.user6.find({name:"root"},{uid:1,name:1,_id:0})
 
> db.user6.find({},{_id:0, name:1}).limit(3)
> db.user6.find({},{_id:0, name:1}).limit(10)
 
> db.user6.find({},{_id:0, name:1}).skip(2)
 
> db.user6.find({},{_id:0, name:1,uid:1}).sort({uid:1})
> db.user6.find({},{_id:0, name:1,uid:1}).sort({uid:-1})
 
查询/更新/删除文档的匹配条件
 
相等比较  
> db.集合名.find({字段名:值},{字段值列表})
 
> db.user6.find({uid:1},{_id:0})
> db.user6.find({name:"root"},{_id:0})
 
逻辑与比较
> db.集合名.find({字段名:值,字段名:值},{字段值列表})
 
> db.user6.find({name:"root",shell:"abc"},{_id:0})
> db.user6.find({name:"root",shell:"/bin/bash"},{_id:0})
 
逻辑或比较 $or
> db.集合名.find({$or:[{条件1},{条件2},{条件3}]},{字段值列表})
 
> db.user6.find({ $or:[{uid:1},{uid:3},{uid:9}]  },{_id:0,name:1,uid:1})
> db.user6.find({ $or:[{uid:1},{name:"bin"},{name:"rsync"}]  },{_id:0,name:1,uid:1})
 
范围比较 $in  $nin
> db.集合名.find({字段名:{比较命令:[值列表]}},{字段值列表}) 
 
> db.user6.find({shell:{$nin:["/bin/bash","/sbin/nologin"]}},{_id:0,name:1,shell:1})
 
> db.user6.find({uid:{$in:[8,4,7]}},{_id:0,name:1,uid:1})
 
正则匹配
> db.user6.find({name:/a/},{_id:0,name:1})
> db.user6.find({name:/^[ac]/},{_id:0,name:1})
> db.user6.find({name:/d$/},{_id:0,name:1})
 
数值比较
$gt $gte  $lt $lte  $ne  
>   >=      <   <=     !=
 
> db.user6.find({uid:{$gt:100} },{_id:0,name:1,uid:1} )
> db.user6.find({uid:{$gt:100} },{_id:0,name:1,uid:1} ).count()
> db.user6.find({uid:{$gt:100} },{_id:0,name:1,uid:1} ).sort({uid:1})
> db.user6.find({uid:{$gt:100} },{_id:0,name:1,uid:1} ).sort({uid:1}).limit(1)
 
> db.user6.find({uid:{$gte:10,$lte:20} },{_id:0,name:1,uid:1} )
 
空 null
> db.user6.save({name:null,uid:999})
> db.user6.find({name:null},{_id:0,name:1,uid:1})
 
更新文档 update()
 
db.集合名.update({条件},{字段列表})
把文档的其他字段都删除了,只留下了修改的字段,且只修改与条件匹配的第1行!!!
 
 
> db.user6.find({uid:{$lte:5}},{_id:0}).count()
> db.user6.find({uid:{$lte:5}},{_id:0})
 
> db.user6.update({uid:{$lte:5}},{password:"AAA"})
 
> db.user6.find({uid:{$lte:5}},{_id:0}).count()
> db.user6.find({uid:{$lte:5}},{_id:0})
 
> db.user6.find({password:"AAA"})
 
db.集合名.update({条件},{$set:{字段列表}},false,true)
 
 
$set 条件匹配时,修改指定字段的值
 
> db.user6.update({uid:{$lte:5}},{ $set:{password:"FFF",gid:2000}},false,true)
 
 
$unset 删除与条件匹配文档的字段
 
> db.user6.find({name:"adm"},{_id:0})
> db.user6.update({name:"adm"},{$unset:{password:"FFF"}})
> db.user6.find({name:"adm"},{_id:0})
 
$inc  条件匹配时,字段值自加或自减
 
> db.user6.find({name:"adm"},{_id:0,uid:1})
> db.user6.update({name:"adm"},{$inc:{uid:11}}) 正数自加
> db.user6.update({name:"adm"},{$inc:{uid:-1}}) 负数自减
 
数组类型的操作命令
$push $addToSet $pop $pull
 
> db.ta.save({name:"bob", like:["a","b","c","d","e"] })
 
> db.ta.update({name:"bob"},{$push:{like:"A"}})
> db.ta.update({name:"bob"},{$push:{like:"A"}})
 
> db.ta.find({name:"bob"},{_id:0})
 
> db.ta.update({name:"bob"},{$addToSet:{like:"A"}})
> db.ta.find({name:"bob"},{_id:0})
> db.ta.update({name:"bob"},{$addToSet:{like:"G"}})
 
> db.ta.update({name:"bob"},{$pop:{like:1}})
> db.ta.update({name:"bob"},{$pop:{like::-1}})
 
> db.ta.update({name:"bob"},{$pull:{like:"A"}})
 
删除文档
> db.user6.remove({uid:{$lte:10}})
> db.user6.remove();
> show  tables
> db.user6.drop()
 
+++++++++++++++++++++++++++++++++++++++
三.部署LNMP+MongoDB  192.168.4.50  (mongo-1.6.16.tgz)
1 安装提供mongo模块软件软件包
  188  tar -zxvf mongo-1.6.16.tgz 
  190  cd mongo-1.6.16/
  192  phpize 
  197  ./configure --with-php-config=/usr/bin/php-config
  198  make
  199  make install
  200  ls /usr/lib64/php/modules/mongo.so
1.6.16]# ls /usr/lib64/php/modules/
curl.so      json.so      mongo.so   mysql.so      pdo.so         phar.so   sqlite3.so
fileinfo.so  mbstring.so  mysqli.so  pdo_mysql.so  pdo_sqlite.so  redis.so  zip.so
 
2 配置php程序运行时加载模块
]# vim /etc/php.ini
 728 extension_dir = "/usr/lib64/php/modules/"
 729 ; On windows:
 730 extension = "redis.so"
 731 extension = "mongo.so"
:wq
 
]# systemctl restart php-fpm
 
]# php -m | grep -i mongo
mongo
 
]# php -m | grep -i redis
redis
 
3 编写连接mongodb服务的php脚本
]# cp linkmongodb.php  /usr/local/nginx/html/mdb1.php
]# vim  /usr/local/nginx/html/mdb1.php
<?php
$m = new Mongo("mongodb://192.168.4.50:27050");
$db = $m->buysite;
$c = $db->usera;
$data=array("name"=>"bob","age"=>19);
$c->insert($data);
echo  "data ok";
?>
:wq
 
]# cp linkmongodb.php  /usr/local/nginx/html/mdb2.php
]# vim /usr/local/nginx/html/mdb2.php 
<?php(直接把源link的php文件集群那行删掉)
$m = new MongoClient("mongodb://192.168.4.53:27053,192.168.4.52:27052,192.168.4.51:27051");
$db = $m->db1;
$c = $db->t15;
$data=array("name"=>"bob","age"=>19);
$c->insert($data);
echo  "data ok";
?>
:wq
 
4 在客户端访问网站的php脚本
 
5 在mongodb服务器本机查看是否存储数据了
]# /usr/local/mongodb/bin/mongo --host 192.168.4.50 --port 27050
> show dbs
> use buysite
> db.usera.find()
 
]# /usr/local/mongodb/bin/mongo --host 192.168.4.53 --port 27053
> show dbs
> use db1
> db.t15.find()

四十三.MongoDB副本集 MongoDB文档管理的更多相关文章

  1. Elastic Stack 笔记(四)Elasticsearch5.6 索引及文档管理

    博客地址:http://www.moonxy.com 一.前言 在 Elasticsearch 中,对文档进行索引等操作时,既可以通过 RESTful 接口进行操作,也可以通过 Java 也可以通过 ...

  2. mongodb复制集部署文档

    一.安装SNMP(新版mongodb需要此依赖安装) 安装snmp服务需要的rpm包: perl-Data-Dumper-2.145-3.el7.x86_64.rpm net-snmp-5.7.2-2 ...

  3. MongoDB 副本集的用户和权限一般操作步骤

    步骤总结: 在主节点上添加超管用户,副本集会自动同步 按照仲裁者.副本节点.主节点的先后顺序关闭所有节点服务 创建副本集认证的key文件,复制到每个服务所在目录 修改每个服务的配置文件,增加参数 启动 ...

  4. 分布式文档存储数据库之MongoDB副本集

    前文我们聊到了mongodb的索引的相关作用和介绍以及索引的管理,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13950287.html:今天我们来聊下mon ...

  5. MongoDB副本集学习(三):性能和优化相关

    Read Preferences/读写分离 有时候为了考虑应用程序的性能或响应性,为了提高读取操作的吞吐率,一个常见的措施就是进行读写分离,MongoDB副本集对读写分离的支持是通过Read Pref ...

  6. mongodb副本集原理及部署记录

    工作原理 1.副本集之间的复制是通过oplog日志现实的.备份节点通过查询这个集合就可以知道需要进行复制的操作 2.oplog是节点中local库中的一个固定的集合,在默认情况下oplog初始化大小为 ...

  7. mongodb副本集高可用架构

    一.简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点. Mongodb Driver(客户端)的所有数据都写入Primary,Sec ...

  8. NoSQL数据库Mongodb副本集架构(Replica Set)高可用部署

    NoSQL数据库Mongodb副本集架构(Replica Set)高可用部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. MongoDB 是一个基于分布式文件存储的数据库.由 C ...

  9. MongoDB副本集学习(一):概述和环境搭建

    MongoDB副本集概述 以下图片摘自MongoDB官方文档:http://docs.mongodb.org/manual/core/replication-introduction/ Primary ...

随机推荐

  1. Go语言学习笔记(10)——错误处理示例

    // 定义一个 DivideError 结构 type DivideError struct { dividee int divider int } // 实现 `error` 接口 func (de ...

  2. Docker 学习笔记(一):基础命令

    仅为个人查阅使用,要学习 Docker 的话,推荐看这份文档:<Docker - 从入门到实践> P.S. 大多数的 docker container xxx/docker image x ...

  3. hoj 棋盘问题 状压入个门

    大概题意是:有一个n*m的棋盘,在这个棋盘里边放k个旗子,要求每一行每一列都不能存在一对旗子相邻,问最后总共的方案数. 我们先来考虑个简单的,假如说只有一行,要求在这一行里边填充k个旗子,要求任意两个 ...

  4. Python之算法模型-5.1

    一.这里学习的算法模型包含监督学习和非监督学习两个方式的算法. 其中监督学习的主要算法分为(分类算法,回归算法),无监督学习(聚类算法),这里的几种算法,主要是学习他们用来做预测的效果和具体的使用方式 ...

  5. 读取经纬度坐标并存储为字典格式,即key为ID,value为轨迹点

    示例数据: #格式为txt文本 ID,L,B 001,116.5154,45.1154 001,116.5160,45.1153 ... 002,xxx,xxx ... 目标:建立轨迹数据结构,即di ...

  6. 编写Postgres扩展之一:基础

    原文:http://big-elephants.com/2015-10/writing-postgres-extensions-part-i/ 编译:Tacey Wong Postgres提供了广泛的 ...

  7. SqlServer2008 / SqlServer2012 禁用windows登录,sa忘记密码或密码过期如何登陆

    以管理员身份运行cmd 1.cmd 下  停止SqlServer服务,net stop mssqlserver: 2.新建windows账号test,加入administrators组里,授予管理员权 ...

  8. 基于【 责任链模式】二 || 网关zuul过滤器封装

    一.基于责任链模式封装网关拦截 上一篇文章中已经使用建造者模式对网关拦截进行封装,存在一个问题,在连接器build中,每一个拦截都要进行true判断,代码看起来冗余,下面使用责任链模式封装 1.基于责 ...

  9. BeautifulSoup库的安装与使用

    BeautifulSoup库的安装 Win平台:“以管理员身份运行” cmd 执行 pip install beautifulsoup4 演示HTML页面地址:http://python123.io/ ...

  10. iptables的nat规则骚操作

    水一枪 我对防火墙这块的认知是比较低的, 之前一直没怎么去用 最多的要么就是 iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A OUT ...