文章目录

  • PHP连接MongoDB
  • MongoDB副本集介绍
  • MongoDB副本集搭建
  • MongoDB副本集测试

PHP连接MongoDB

php连接MongoDB需要安装拓展包有两种,分别是mongo.so和mongodb.so,mongo.so比较老(最新版本是2017.9.5的,目前已停止更新),主要用于php5.x版本,两个拓展包都可以在pecl网站(https://pecl.php.net)下载

下载mongodb拓展包:

[root@linux ~]# cd /usr/local/src/
[root@linux src]# wget https://pecl.php.net/get/mongodb-1.6.1.tgz

解压:

[root@linux src]# tar -zxvf mongodb-1.6.1.tgz

生成configure文件:

[root@linux src]# cd mongodb-1.6.1/
[root@linux mongodb-1.6.1]# /usr/local/php-fpm/bin/phpize

配置编译参数:

[root@linux mongodb-1.6.1]# ./configure --with-php-config=/usr/local/php-fpm/bin/php-config

编译安装:

[root@linux mongodb-1.6.1]# make && make install

修改php配置文件:

[root@linux mongodb-1.6.1]# vim /usr/local/php-fpm/etc/php.ini

添加以下内容:

extension=mongodb.so

检查拓展模块是否被加载:

[root@linux mongodb-1.6.1]# /usr/local/php-fpm/bin/php -m|grep mongodb
mongodb

重启php-fpm:

[root@linux mongodb-1.6.1]# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done

#如果web服务器用的是Apache,需要重启httpd

创建php测试脚本:

[root@linux ~]# vim mongodb.php

添加以下内容:

<?php
$bulk = new MongoDB\Driver\BulkWrite;
$document = ['_id' => new MongoDB\BSON\ObjectID, 'name' => 'mongodb_test'];$_id= $bulk->insert($document);var_dump($_id);$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
$result = $manager->executeBulkWrite('test.mongodbtest', $bulk, $writeConcern);
?>

将脚本放到网站目录下请求:

[root@linux ~]# curl localhost/mongodb.php

登录MongoDB查看:

root@linux ~]# mongo -uuser1 -puser1
> use test
switched to db test
> show tables
mongodbtest
> db.mongodbtest.find()
{ "_id" : ObjectId("5dfa1feb915600294542e6e3"), "name" : "mongodb_test" }

#测试成功,数据已存储到MongoDB中

注意:如果MongoDB启动脚本配置了- - auth密码验证,该测试可能导致数据数据不能存储到MongoDB中

MongoDB副本集介绍

MongoDB主从也叫副本集,早期版本使用master-slave,一主一从和MySQL主从类似,但slave在此架构中为只读,当主宕机后,从不能自动切换为主,目前已经淘汰master-slave模式,改为副本集,这种模式下有一个主(primary),和多个从(secondary),从也是只读,支持给它们设置权重,当主宕掉后,权重值最高的从自动切换为主,在此架构中还可以建立一个仲裁(arbiter)的角色,它只负责裁决,而不存储数据

MongoDB副本集搭建

A机器(primary):192.168.234.128
B机器(secondary):192.168.234.130

编辑两台机器的MongoDB配置文件:

[root@linux ~]# vi /etc/mongod.conf

bindip需要指定本机地址:

将replication的注释去掉,并添加以下两行内容:

replication:oplogSizeMB: 20replSetName: mongodb_test

#oplog类似MySQL主从中的binlog,replSetName指定副本集名称

两台机器都修改完后重启MongoDB服务:

[root@linux ~]# systemctl restart mongod

在A机器连接MongoDB:

[root@linux ~]# mongo
> use admin

创建副本集的集合:

> config={_id:"mongodb_test",members:[{_id:0,host:"192.168.234.128:27017"},{_id:1,host:"192.168.234.130:27017"}]}

初始化:

> rs.initiate(config)
{"ok" : 1,"$clusterTime" : {"clusterTime" : Timestamp(1576679573, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}},"operationTime" : Timestamp(1576679573, 1)
}
mongodb_test:SECONDARY>

#初始化完成后,命令行前缀变成了mongodb_test:SECONDARY,此时主从两台机器前缀都相同,过一会儿再按回车键,A机器的命令行前缀就会变为mongodb_test:PRIMARY>,当两台机器权重值相同时,在哪台机器上创建配置副本集的集合,哪台机器就优先变为主

查看状态:

mongodb_test:PRIMARY> rs.status()

如果从机器的stateStr项对应的值为STARTUP,则需进行如下操作:

>var config={_id:"mongodb_test",members:[{_id:0,host:"192.168.234.128:27017"},{_id:1,host:"192.168.234.130:27017"}]}
>rs.reconfig(config)

#此时再次查看rs.status()会发现从的状态变为SECONDARY

MongoDB副本集测试

在主(A机器)上创建库与集合:

mongodb_test:PRIMARY> use mytest
switched to db mytest
mongodb_test:PRIMARY> db.acc.insert({accID:1,UserName:"123",password:"123456"})
WriteResult({ "nInserted" : 1 })

在从(B机器)上查看:

mongodb_test:SECONDARY> show dbs

出现以下报错:

需要执行以下命令:

mongodb_test:SECONDARY> rs.slaveOk()

即可查看:

mongodb_test:SECONDARY> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
mytest  0.000GB
test    0.000GB
mongodb_test:SECONDARY> use mytest
switched to db mytest
mongodb_test:SECONDARY> show tables
acc
mongodb_test:SECONDARY> db.acc.find()
{ "_id" : ObjectId("5dfa3afa91ec600ff57a3b57"), "accID" : 1, "UserName" : "123", "password" : "123456" }

#在主上创建的库与集合已成功同步到从上

查看权重值 rs.config():

mongodb_test:PRIMARY> rs.config()
{"_id" : "mongodb_test","version" : 1,"protocolVersion" : NumberLong(1),"writeConcernMajorityJournalDefault" : true,"members" : [{"_id" : 0,"host" : "192.168.234.128:27017","arbiterOnly" : false,"buildIndexes" : true,"hidden" : false,"priority" : 1,"tags" : {},"slaveDelay" : NumberLong(0),"votes" : 1},{"_id" : 1,"host" : "192.168.234.130:27017","arbiterOnly" : false,"buildIndexes" : true,"hidden" : false,"priority" : 1,"tags" : {},"slaveDelay" : NumberLong(0),"votes" : 1}],"settings" : {"chainingAllowed" : true,"heartbeatIntervalMillis" : 2000,"heartbeatTimeoutSecs" : 10,"electionTimeoutMillis" : 10000,"catchUpTimeoutMillis" : -1,"catchUpTakeoverDelayMillis" : 30000,"getLastErrorModes" : {},"getLastErrorDefaults" : {"w" : 1,"wtimeout" : 0},"replicaSetId" : ObjectId("5dfa38954a1d61732c89ae6a")}
}

#priority对应的值就是权重值,当前两台机器权重值都为1,当A机器宕机时,B机器会自动切换为主,当A机器恢复时,A机器会变为从,B机器依然是主,因为两台机器权重值相同

设置权重值:

在当前的主上执行以下命令:

mongodb_test:PRIMARY> cfg=rs.config()
mongodb_test:PRIMARY> cfg.members[0].priority=2
mongodb_test:PRIMARY> rs.reconfig(cfg)

members:配置副本集的集合
0:主机器的id

再次查看主机器的权重值已改变:

#这种情况下,A机器宕机后,B机器自动切换为主,当A机器恢复后,B机器会自动变为从,因为A机器的权重值大于B机器

补充: 需要配置一主多从的副本集同样按此步骤操作即可,当有多台从时,可以给每台设置不一样的权重值,这样当主宕机后,将由权重值最大的从优先切换为主

MongoDB副本集搭建、连接php相关推荐

  1. MongoDB副本集搭建及在springboot中使用

    MongoDB副本集搭建及在springboot中使用 一.mongoDB副本集的搭建 原则就是一台master(主),一台salve(从),一台arbiter(仲裁) 1.下载mongoDB htt ...

  2. Linux下MongoDB副本集搭建(主--从--仲裁模式)

    1.下载MongoDB安装文件:mongodb-linux-x86_64-3.2.1.tgz(版本随意): 2.解压安装MongoDB:tar  -zxvf  mongodb-linux-x86_64 ...

  3. MongoDB副本集搭建(超级详细)

    MongoDB 副本集原理 什么是复制 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性 复制还允许从硬件故障和服务中断中恢复数据 为什么要复制 数据 ...

  4. mongodb副本集搭建

    cat >> /etc/sysctl.conf< cat >>/etc/security/limits.conf<<EOF soft nproc 65535 ...

  5. (2)MongoDB副本集自动故障转移原理(含客户端)

    前文我们搭建MongoDB三成员副本集,了解集群基本特性,今天我们围绕下图聊一聊背后的细节. 默认搭建的副本集均在主节点读写,辅助节点冗余部署,形成高可用和备份,具备自动故障转移能力. 集群心跳保活 ...

  6. 小丸子学MongoDB系列之——部署MongoDB副本集

    1.以副本集的方式启动mongodb实例 1.1 创建副本集目录 [mgousr01@vm1 ~]$ mkdir -p mongorep/{mg17/{bin,conf,data,logs,pid}, ...

  7. Mongodb 副本集+分片集群搭建

    环境需求: 在三台机器上搭建副本集,在副本集上做分片 服务器IP: 192.168.1.232/192.168.1.238/192.168.1.241 安装Mongodb all nodes: tar ...

  8. mongodb的架构 副本集搭建

    早期的版本使用master-slave,一主一从和mysql类型,但slave在此架构中为只读,如果主库宕机后,从库不能自动切换为主 需要手动才行 后期mongodb开发了个新的架构方案副本集,所以呢 ...

  9. MongoDB副本集(Replica Sets)搭建教程

    MongoDB副本集(Replica Sets)搭建教程 最近在生产环境下部署公司项目.由于项目中有使用到MongoDB,所以参考网上的博客,在服务器上进行搭建MongoDB副本集.今天打算将其记录成 ...

最新文章

  1. mysql修改校对集_MySQL 教程之校对集问题
  2. Android好用的第三方UI库
  3. normest--2-范数的条件数估计
  4. 九度oj 题目1374:所有员工年龄排序
  5. swift添加下拉刷新_React Native自定义下拉刷新组件
  6. Python notes
  7. MySQL—表的完整性约束(外键约束)(一)
  8. ABB RAPID 在 Notepad++ 中语法高亮的实现
  9. linux中initrd的含义,Linux2.6 内核的 Initrd 机制解析
  10. python https协议和InsecurePlatformWarning问题
  11. Redis面试题及分布式集群
  12. SCPPO(十一):网站发布中的问题锦集—ReportViewer版本问题
  13. sublime press key “escape” can't type anything
  14. [渝粤教育] 西南科技大学 西方经济学 在线考试复习资料(3)
  15. UML入门以及Plant UML工具介绍
  16. Request header field xxx is not allowed by Access-Control-Allow-Headers in preflight respon
  17. Gradle打包报错:Failed to calculate the value of task ‘:unityLibrary:compileReleaseJavaWithJavac‘
  18. Unreal Engin_画廊制作笔记 _008灯光处理,夜晚的画廊灯光设置
  19. 数据结构头歌实验梳理
  20. 织梦网站定时审核,定时发布织梦插件

热门文章

  1. 数值范围_OBV指标上数值的秘密!股票若在数值范围内,出手便是强势股
  2. Artlantis Studio 7 for Mac v7.0.2.1 中文破解版下载 3D渲染工具
  3. Python 二维列表
  4. android application 使用教程,Android application使用总结
  5. 华为云大数据赋能北港集团发展创新,数字化转型成效显著!
  6. ubuntu读取can口数据_linux GPRS 音频 串口 can 网络 内存 CPU 存储 测试命令
  7. 关于Redis密码的基础知识
  8. ActiveX控件v7.2.0.1,Viscom Scanner ActiveX控件
  9. Nat. Methods | scBasset:基于DNA序列的单细胞ATAC-seq卷积神经网络建模
  10. Android添加联系人信息并读取