文章目录

  • 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. 使用Docker-Docker for Web Developers(2)
  2. Linux内存手动释放方法
  3. 《0day安全:软件漏洞分析技术》的一点总结
  4. jq实现点击导航栏中的任意一个跳转后被点击的定位到第一个
  5. Android java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity
  6. MySql,Sql Server分区技术浅析
  7. 汇总区间Python解法
  8. 怎样修改iis 服务器日期,怎么在IIS里设置服务器端缓存时间?
  9. PHP采集程序中的常用函数
  10. Dockerfile文件详解
  11. 《西瓜书》第六章 公式6.6 凸二次规划问题
  12. 计算机键盘快速指南,MagicBook热键/功能键切换指南,快捷键介绍
  13. 这3种管理者是“企业毒瘤”,须根除
  14. Excel_利用公式提取工作表的名称
  15. 苹果mac电脑如何卸载软件?及清理垃圾缓存详细教程
  16. Kubernetes Pod Evicted
  17. Spark 基础教程
  18. 计算机文件路径的表示
  19. 在BIOS中设置U盘启动
  20. php怎么建留言本,php实现留言板功能的详细代码

热门文章

  1. smalldatetime mysql_「smalldatetime」datetime与smalldatetime之间的区别小结 - seo实验室
  2. 计算机如何快速关闭网络页面,关闭浏览器快捷键是什么_电脑浏览器快捷键怎么关闭-win7之家...
  3. 恢复视力的辅助训练方法
  4. 卫星工具包在分布式仿真中的实时控制研究
  5. postgresql基本介绍以及部署使用
  6. Java知识体系最详细总结(2020版)
  7. 计算机游戏41,电脑经常在玩大型游戏时突然自动断电重启 日志显示 关键kernel power41 - Microsoft Community...
  8. 克隆节点cloneNode括号里面的值的问题
  9. 远程医疗信息系统技术规范
  10. 朋友入职字节跳动,测开岗,分享面试经验,大厂版测试笔记分享