一、部署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 的django项目复制方法

    python 的django项目复制方法 django_pyecharts_1修改为django_pyecharts_1_cs1.拷贝项目(确保原有项目是关闭状态下)2.粘贴项目并删除idea文件夹和 ...

  2. 从零开始学Flask框架-003

    index.py from flask import Flask,render_template from flask_bootstrap import Bootstrap #初始化 app = Fl ...

  3. Android--图片剪裁

    调用系统Intent剪裁图片 /** * 调用系统Intent剪裁图片 * @param context * @param uri * @param w * @param h */ public st ...

  4. Java架构笔记:用JWT对SpringCloud进行认证和鉴权

    写在前面 喜欢的朋友可以关注下专栏:Java架构技术进阶.里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦. image.png JWT(JSON WEB TOKEN)是基于RF ...

  5. Python 练习汇总

    1. Python练习_Python初识_day1 2. Python练习_Python初识_day2 3. Python练习_初识数据类型_day3 4. Python练习_数据类型_day4 5. ...

  6. 关于下载gitbash客户端

    gitbash的安装包找不到了,最近又在准备新机器的环境,需要安装git客户端. https://www.git-scm.com/,网址找到了,但是下载非常缓慢.搜了一下,都是改host,但是改了也没 ...

  7. Pycharm和Android工具之github使用

    请查看以下链接https://blog.csdn.net/m0_37306360/article/details/79322947 基本操作步骤 打开setting->version contr ...

  8. SPI简述

    SPI是器件的比较常用的通信协议. SPI总共有四根线: SS:片选线,每个设备都和主机MCU有一条单独片选线相连,片选线拉低意味主机输出,也就是说一个主机可以和多个从机相连,只需要有足够多的片选线. ...

  9. Devices Tree加载流程

    DT.IMG布局 hdr zImage Ramdisk.img DT.img 其中DT.img由DTBTOOL打包所有编译生成的dtb生成:布局如下: DT header dt_entry_0 dt_ ...

  10. 记录java+testng运行selenium(四)--- 运行代码

    涉及的文件有: .\medical\BusinessFile.java :实例化excel及xml文件操作对象以及将list变成Map .\medical\manual\business\LoginB ...