一、部署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. python 之 前端开发( JavaScript变量、数据类型、内置对象、运算符、流程控制、函数)

    11.4 JavaScript 11.41 变量 1.声明变量的语法 // 1. 先声明后定义 var name; // 声明变量时无需指定类型,变量name可以接受任意类型 name= " ...

  2. 机器学习-EM算法笔记

    EM算法也称期望最大化(Expectation-Maximum,简称EM)算法,它是一个基础算法,是很多机器学习领域算法的基础,比如隐式马尔科夫算法(HMM), LDA主题模型的变分推断,混合高斯模型 ...

  3. AS3.0 位图(BMP)解析类

    /** * *-----------------------------* * | *** BMP格式解析类 *** | * *-----------------------------* * * 编 ...

  4. ArcGIS JS之 applyEdits之后要素符号更新

    ArcGIS JS版本 ArcGIS JS 4.11 最近做一个地图服务,通过FeatureLayer.applyEdits()方法,更新唯一值的渲染字段,实现地图渲染根据用户的配置实时更新. 由于A ...

  5. 三元组[01 Trie计数]

    也许更好的阅读体验 \(\mathcal{Description}\) \(\mathcal{Solution}\) 有两种方法都可以拿到满分 \(Solution\ 1\) 考虑枚举\(y\) 建两 ...

  6. gulp删除目标文件中所有的console.log()语句——gulp-strip-debug

    1.安装npm包 npm install --save-dev gulp-strip-debug 2.使用 const gulp = require('gulp'); const stripDebug ...

  7. 【转载】使用Class.getResource和ClassLoader.getResource方法获取文件路径

    自从转投Java阵营后,一直发下Java程序的路径读取异常麻烦,因此查阅了比较多的版本内容,整合了一份自己的学习笔记.主要使用Class及通过ClassLoader来动态获取文件路径. 查阅链接如下: ...

  8. C#汉字转换成全拼的拼音

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. NRF52832 Mesh调试,使其同时支持串口打印和RTT打印

    查看开发环境里面,是否有这个文件,如果没有你的话,则添加文件. 然后要在sdk_config.h中添加使能 然后打开刚才添加的文件retarget.c,主意里面这些地方 这里它进行判断,要么使用RTT ...

  10. Ubuntu install android studio

    Ubuntu install android studio 1. 安装 openjdk8,并在配置文件 /etc/profile 中,追加如下内容: sudo aptitude install ope ...