MongoDB副本集搭建、连接php
文章目录
- 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相关推荐
- MongoDB副本集搭建及在springboot中使用
MongoDB副本集搭建及在springboot中使用 一.mongoDB副本集的搭建 原则就是一台master(主),一台salve(从),一台arbiter(仲裁) 1.下载mongoDB htt ...
- Linux下MongoDB副本集搭建(主--从--仲裁模式)
1.下载MongoDB安装文件:mongodb-linux-x86_64-3.2.1.tgz(版本随意): 2.解压安装MongoDB:tar -zxvf mongodb-linux-x86_64 ...
- MongoDB副本集搭建(超级详细)
MongoDB 副本集原理 什么是复制 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性 复制还允许从硬件故障和服务中断中恢复数据 为什么要复制 数据 ...
- mongodb副本集搭建
cat >> /etc/sysctl.conf< cat >>/etc/security/limits.conf<<EOF soft nproc 65535 ...
- (2)MongoDB副本集自动故障转移原理(含客户端)
前文我们搭建MongoDB三成员副本集,了解集群基本特性,今天我们围绕下图聊一聊背后的细节. 默认搭建的副本集均在主节点读写,辅助节点冗余部署,形成高可用和备份,具备自动故障转移能力. 集群心跳保活 ...
- 小丸子学MongoDB系列之——部署MongoDB副本集
1.以副本集的方式启动mongodb实例 1.1 创建副本集目录 [mgousr01@vm1 ~]$ mkdir -p mongorep/{mg17/{bin,conf,data,logs,pid}, ...
- Mongodb 副本集+分片集群搭建
环境需求: 在三台机器上搭建副本集,在副本集上做分片 服务器IP: 192.168.1.232/192.168.1.238/192.168.1.241 安装Mongodb all nodes: tar ...
- mongodb的架构 副本集搭建
早期的版本使用master-slave,一主一从和mysql类型,但slave在此架构中为只读,如果主库宕机后,从库不能自动切换为主 需要手动才行 后期mongodb开发了个新的架构方案副本集,所以呢 ...
- MongoDB副本集(Replica Sets)搭建教程
MongoDB副本集(Replica Sets)搭建教程 最近在生产环境下部署公司项目.由于项目中有使用到MongoDB,所以参考网上的博客,在服务器上进行搭建MongoDB副本集.今天打算将其记录成 ...
最新文章
- mysql修改校对集_MySQL 教程之校对集问题
- Android好用的第三方UI库
- normest--2-范数的条件数估计
- 九度oj 题目1374:所有员工年龄排序
- swift添加下拉刷新_React Native自定义下拉刷新组件
- Python notes
- MySQL—表的完整性约束(外键约束)(一)
- ABB RAPID 在 Notepad++ 中语法高亮的实现
- linux中initrd的含义,Linux2.6 内核的 Initrd 机制解析
- python https协议和InsecurePlatformWarning问题
- Redis面试题及分布式集群
- SCPPO(十一):网站发布中的问题锦集—ReportViewer版本问题
- sublime press key “escape” can't type anything
- [渝粤教育] 西南科技大学 西方经济学 在线考试复习资料(3)
- UML入门以及Plant UML工具介绍
- Request header field xxx is not allowed by Access-Control-Allow-Headers in preflight respon
- Gradle打包报错:Failed to calculate the value of task ‘:unityLibrary:compileReleaseJavaWithJavac‘
- Unreal Engin_画廊制作笔记 _008灯光处理,夜晚的画廊灯光设置
- 数据结构头歌实验梳理
- 织梦网站定时审核,定时发布织梦插件
热门文章
- 数值范围_OBV指标上数值的秘密!股票若在数值范围内,出手便是强势股
- Artlantis Studio 7 for Mac v7.0.2.1 中文破解版下载 3D渲染工具
- Python 二维列表
- android application 使用教程,Android application使用总结
- 华为云大数据赋能北港集团发展创新,数字化转型成效显著!
- ubuntu读取can口数据_linux GPRS 音频 串口 can 网络 内存 CPU 存储 测试命令
- 关于Redis密码的基础知识
- ActiveX控件v7.2.0.1,Viscom Scanner ActiveX控件
- Nat. Methods | scBasset:基于DNA序列的单细胞ATAC-seq卷积神经网络建模
- Android添加联系人信息并读取