PHP连接MongoDB – mongodb.so, 副本集介绍, 搭建与测试

PHP连接MongoDB – mongodb.so

https://docs.mongodb.com/ecosystem/drivers/php/

  • 大家还可以到pecl官网上下载mongodb的扩展源码包
  • cd /usr/local/src/
  • wget https://pecl.php.net/get/mongodb-1.3.0.tgz
  • tar zxvf mongodb-1.3.0.tgz
  • cd mongodb-1.3.0
  • /usr/local/php/bin/phpize
  • ./configure --with-php-config=/usr/local/php-fpm/bin/php-config
  • make && make install
  • vi /usr/local/php-fpm/etc/php.ini //增加 extension = mongodb.so
  • /usr/local/php/bin/php -m

测试mongo扩展

  • https://www.runoob.com/mongodb/php7-mongdb-tutorial.html
  • 插入数据php
<?php
$bulk = new MongoDB\Driver\BulkWrite;
$document = ['_id' => new MongoDB\BSON\ObjectID, 'name' => '菜鸟教程'];

$_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.runoob', $bulk, $writeConcern);
?>

副本集介绍

  • 早期版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主
  • 目前已经淘汰master-slave模式,改为副本集,这种模式下有一个主(primary),和多个从(secondary),只读。支持给它们设置权重,当主宕掉后,权重最高的从切换为主
  • 在此架构中还可以建立一个仲裁(arbiter)的角色,它只负责裁决,而不存储数据
  • 在此架构中读写数据都是在主上,要想实现负载均衡的目的需要手动指定读库的目标server
    在这里插入图片描述

副本集搭建

  • 三台机器: 192.168.133.130(primary) 192.168.133.132(secondary) 192.168.133.133(secondary)
  • 编辑三台机器的配置文件,更改或增加:
  • bind添加本机内网IP
  • replication://把此行前面的#删除
  • ##oplog大小
    oplogSizeMB: 20//前面有两个空格
  • ##复制集名称
    replSetName: aminglinux//前面有两个空格
  • 分别重启三台机器
  • 连接主,在主上运行命令mongo
  • use admin

  • config={_id:“aminglinux”,members:[{_id:0,host:“192.168.133.130:27017”},{_id:1,host:“192.168.133.132:27017”},{_id:2,host:“192.168.133.133:27017”}]}

  • rs.initiate(config)

  • rs.status() //查看状态
  • 如果两个从上的状态为"stateStr" : “STARTUP”, 则需要进行如下操作

var config={_id:“aminglinux”,members:[{_id:0,host:“192.168.133.130:27017”},{_id:1,host:“192.168.133.132:27017”},{_id:2,host:“192.168.133.133:27017”}]}
rs.reconfig(config)

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

MongoDB副本集测试

  • 主上建库,建集合
  • use mydb >db.acc.insert({AccountID:1,UserName:“123”,password:“123456”}) >show dbs

  • 从上查看 >show dbs
  • 若出现错误Error: listDatabases failed:{ “note” : “from execCommand”, “ok” : 0, “errmsg” : “not master” },需要执行

rs.slaveok()

副本集更改权重模拟主宕机

  • 默认三台机器权重都为1,如果任何一个权重设置为比其他的高,则该台机器马上切换为primary角色,所以我们预设三台机器的权重分别为:130:3,132:2,133:1

  • 在主上执行
    cfg = rs.conf()
    cfg.members[0].priority = 3
    cfg.members[1].priority = 2
    cfg.members[2].priority = 1
    rs.reconfig(cfg)

  • 这样的话,第二个节点将会成为候选主节点。

  • 主上执行 iptables -I INPUT -p tcp --dport 27017 -j DROP (模拟宕机)

发布了125 篇原创文章 · 获赞 5 · 访问量 4614

猜你喜欢

转载自blog.csdn.net/tanyyinyu/article/details/103600636