返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >MongoDB主从+php实现
  • 734
分享到

MongoDB主从+php实现

2024-04-02 19:04:59 734人浏览 薄情痞子
摘要

环境172.16.115.202   primary172.16.111.171   secondary172.16.115.157   secondary一、mongoDB安

环境

172.16.115.202   primary

172.16.111.171   secondary

172.16.115.157   secondary


一、mongoDB安装

1. yum下载安装monGodb

     扩展源Http://repo.mongodb.org/yum/redhat/mongodb-org-3.0.repo

     mongodb-org-3.0.7-1.el6.x86_64.rpm #元数据包,它可以实现自动安装下面的4个组件包

     mongodb-org-mongos-3.0.7-1.el6.x86_64.rpm # mongod守护程序,以及相关的配置和初始化脚本

     mongodb-org-server-3.0.7-1.el6.x86_64.rpm # mongos守护程序

     mongodb-org-shell-3.0.7-1.el6.x86_64.rpm # ongo shell环境

     mongodb-org-tools-3.0.7-1.el6.x86_64.rpm # MongoDB工具


2. 编辑配置文件vim  /etc/mongod.conf

    1)去掉以下两行以#开头的注释,以防重启报错

         fork:true

         pidFilePath:/var/mongodb/mongod.pid


    2)bind_ip绑定多个IP,用逗号隔开,如监听全部,留空即可


3. 修改配置参数,启动mongd

    echo never > /sys/kernel/mm/transparent_hugepage/enabled

    echo never > /sys/kernel/mm/transparent_hugepage/defrag


    编辑vim /etc/security/limits.conf,加入内容:

    mongod soft nofile 64000

    mongod hard nofile 64000

    mongod soft nproc 32000

    mongod hard nproc 32000

    service mongd start

    注:启动过程较慢,这是它在写数据/var/lib/mongo,如果启动不了,mongod -f /etc/mongod.conf方式,可以看到报错



4. 编辑三台机器的MongoDB配置文件vim /etc/mongod.conf,重启

    内容:

    ##1)去掉replication的注释

    ##2)加入下面参数(注意首行留空2个空格,固定格式):

    ## 类似于二进制日志

       oplogSizeMB: 20

    ## 副本集名字

       replSetName: huangzhenping


5. 查看日志文件tail /var/log/mongodb/mongod.log

 MongoDB主从+php实现


6. 主上配置,搭建副本集   

    use admin # 主上进入admin库

    config={_id:"huangzhenping",members:[{_id:0,host:"172.16.115.202:27017"},{_id:1,host:"172.16.115.157:27017"},{_id:2,host:"172.16.111.171:27017"}]}  #配置机器

    rs.initiate(config)  #刷新

    rs.status()   #查看状态


 如下结果:出现三台机器的信息,主的状态已变为PRIMARY

> rs.initiate(config)
{ "ok" : 1 }
huangzhenping:OTHER> rs.status()
{
        "set" : "huangzhenping",
        "date" : ISODate("2017-01-14T20:24:59.490Z"),
        "myState" : 1,
        "members" : [
                {
                        "_id" : 0,
                        "name" : "172.16.115.202:27017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 297,
                        "optime" : Timestamp(1484425453, 1),
                        "optimeDate" : ISODate("2017-01-14T20:24:13Z"),
                        "electionTime" : Timestamp(1484425455, 1),
                        "electionDate" : ISODate("2017-01-14T20:24:15Z"),
                        "configVersion" : 1,
                        "self" : true
                },
                {
                        "_id" : 1,
                        "name" : "172.16.115.157:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 45,
                        "optime" : Timestamp(1484425453, 1),
                        "optimeDate" : ISODate("2017-01-14T20:24:13Z"),
                        "lastHeartbeat" : ISODate("2017-01-14T20:24:57.851Z"),
                        "lastHeartbeatRecv" : ISODate("2017-01-14T20:24:58.343Z")                  ,
                        "pingMs" : 0,
                        "configVersion" : 1
                },
                {
                        "_id" : 2,
                        "name" : "172.16.111.171:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 45,
                        "optime" : Timestamp(1484425453, 1),
                        "optimeDate" : ISODate("2017-01-14T20:24:13Z"),
                        "lastHeartbeat" : ISODate("2017-01-14T20:24:57.863Z"),
                        "lastHeartbeatRecv" : ISODate("2017-01-14T20:24:58.262Z")                  ,
                        "pingMs" : 1,
                        "configVersion" : 1
                }
        ],
        "ok" : 1
}
huangzhenping:PRIMARY>


    注:

       1)如执行rs.status()命令,没有发现三台机器,需手动执行添加

            rs.add("172.16.115.157")

            rs.add("172.16.111.171")


       2)如从机的状态为"stateStr":"STARTUP",则需执行:

            var config={_id:"huangzhenping",members:[{_id:0,host:"172.16.115.202:27017"},{_id:1,host:"172.16.115.157:27017"},{_id:2,host:"172.16.111.171:27017"}]}

            rs.initiate(config)


7. 从上登录,状态已变为:SECONDARY

 MongoDB主从+php实现



二、MongoDB主从测试

1. mongodb副本集测试

    1)主上建库,建集合

     use mydb

     db.createCollection('testA')

     show dbs

     show tables

 MongoDB主从+php实现


    2)从上查看,已成功同步库和集合

     rs.slaveOk()

     show dbs

 MongoDB主从+php实现



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

   1)主上设置不同的权重,并查看

       cfg = rs.conf()

       cfg.members[0].priority = 3

       cfg.members[1].priority = 2

       cfg.members[2].priority = 1

       rs.reconfig(cfg)

       rs.config()


       查看生效的权重:

huangzhenping:PRIMARY> rs.config()
{
        "_id" : "huangzhenping",
        "version" : 2,
        "members" : [
                {
                        "_id" : 0,
                        "host" : "172.16.115.202:27017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 3,
                        "tags" : {
                        },
                        "slaveDelay" : 0,
                        "votes" : 1
                },
                {
                        "_id" : 1,
                        "host" : "172.16.115.157:27017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 2,
                        "tags" : {
                        },
                        "slaveDelay" : 0,
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "172.16.111.171:27017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {
                        },
                        "slaveDelay" : 0,
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatTimeoutSecs" : 10,
                "getLastErrORModes" : {
                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                }
        }
}


2) 主上禁用27017端口,模拟主宕机

        iptables -I INPUT -p tcp --dport 27017 -j DROP

        原主上:已连接失败

  MongoDB主从+php实现


       原一台从机:状态已变为PRIMARY

  MongoDB主从+php实现  


       rs.status()查看状态:

huangzhenping:PRIMARY> rs.status()
{
        "set" : "huangzhenping",
        "date" : ISODate("2017-01-22T15:48:15.453Z"),
        "myState" : 1,
        "members" : [
                {
                        "_id" : 0,
                        "name" : "172.16.115.202:27017",
                        "health" : 0,
                        "state" : 8,
                        "stateStr" : "(not reachable/healthy)",
                        "uptime" : 0,
                        "optime" : Timestamp(0, 0),
                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
                        "lastHeartbeat" : ISODate("2017-01-22T15:48:14.551Z"),
                        "lastHeartbeatRecv" : ISODate("2017-01-22T15:48:14.632Z"),
                        "pingMs" : 0,
                        "lastHeartbeatMessage" : "Failed attempt to connect to 172.16.115.202:27017; couldn't connect to server 172.16.115.202:27017 (172.16.115.202), connection attempt failed",
                        "configVersion" : -1
                },
                {
                        "_id" : 1,
                        "name" : "172.16.115.157:27017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 16333,
                        "optime" : Timestamp(1484429320, 1),
                        "optimeDate" : ISODate("2017-01-14T21:28:40Z"),
                        "electionTime" : Timestamp(1485100022, 1),
                        "electionDate" : ISODate("2017-01-22T15:47:02Z"),
                        "configVersion" : 2,
                        "self" : true
                },
                {
                        "_id" : 2,
                        "name" : "172.16.111.171:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 5989,
                        "optime" : Timestamp(1484429320, 1),
                        "optimeDate" : ISODate("2017-01-14T21:28:40Z"),
                        "lastHeartbeat" : ISODate("2017-01-22T15:48:14.751Z"),
                        "lastHeartbeatRecv" : ISODate("2017-01-22T15:48:14.749Z"),
                        "pingMs" : 0,
                        "lastHeartbeatMessage" : "could not find member to sync from",
                        "configVersion" : 2
                }
        ],
        "ok" : 1
}



3)新主上,创建一个库和集合

     use mydb2

     db.createCollection('testB')

 MongoDB主从+php实现

 


4)恢复旧主,则自动切换为MASTER状态,并同步自己离线时新主上创建的库

      iptables -D INPUT -p tcp --dport 27017 -j DROP

 MongoDB主从+php实现




三、MongoDB结合php

1. 下载安装mongo扩展模块

     wget https://GitHub.com/mongodb/mongo-PHP-driver-legacy/arcHive/master.zip

     unzip mongo-php-driver-legacy-master.zip

     cd mongo-php-driver-legacy-master

     /usr/bin/phpize

     ./configure --with-php-config=/usr/bin/php-config

     make;make install 

     MongoDB主从+php实现


2. 编辑php配置文件vim /etc/php.ini,加载扩展模块

 MongoDB主从+php实现 


 MongoDB主从+php实现



3. 编辑测试文件 vim /usr/local/apache2/htdocs/1.php

    内容:

<?php
// 连接到mongodb
$m = new MongoClient();
echo "Connection to database successfully";
// 选择一个数据库
$db = $m->mydb;
echo "Database mydb selected";
?>


4. 测试 curl localhost/1.php

 MongoDB主从+php实现





--结束END--

本文标题: MongoDB主从+php实现

本文链接: https://lsjlt.com/news/35770.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MongoDB主从+php实现
    环境172.16.115.202   primary172.16.111.171   secondary172.16.115.157   secondary一、MongoDB安...
    99+
    2024-04-02
  • MongoDB主从的实现方式
    这篇文章主要介绍“MongoDB主从的实现方式”,在日常操作中,相信很多人在MongoDB主从的实现方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MongoDB主从的实现...
    99+
    2024-04-02
  • PHP实现MongoDB数据库主从复制的方法
    在现代的网络应用程序中,数据处理和管理是至关重要的任务。随着Web应用程序变得越来越复杂,需要处理海量数据,存储和处理这些数据的数据库也越来越多了。MongoDB是一种NoSQL数据库,在Web应用程序中被广泛使用。与MySQL等关系型数据...
    99+
    2023-05-16
    PHP MongoDB 主从复制
  • 怎么使用PHP实现MongoDB数据库主从复制
    这篇文章主要介绍“怎么使用PHP实现MongoDB数据库主从复制”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用PHP实现MongoDB数据库主从复制”文章能帮助大家解决问题。MongoDB主...
    99+
    2023-07-06
  • mongodb 主从 双主
    主从模式   master ./mongod --dbpath /mongodb/masterdb/ --port 10000 --master  --logpath /tmp/mong...
    99+
    2024-04-02
  • mongodb主从配置
    1、mongodb主从配置主从都在同一台服务器上,主起的是默认的端口,从起的是99991)master/usr/local/mongodb/bin/mongod --master --dbpath /usr...
    99+
    2024-04-02
  • mongodb主从复制
    服务器架构: 角色 ip地址 端口 主服务器 192.168.8.81 27017 从服务器 192.1...
    99+
    2024-04-02
  • MongoDB 主从配置 [二]
    MongoDB 主从配置1.实验环境主:192.168.3.206从:192.168.3.2102.安装方法(分别在主、从执行下面命令) groupadd mongodb useradd...
    99+
    2024-04-02
  • Mongodb主从模式篇
    主从模式架构图:主从配置安装:10.10.20.160(master)-->10.10.20.161(slave)Master:tar zxvf mongodb-linux-x86_64-2.2.2....
    99+
    2024-04-02
  • MongoDB数据库中怎么实现M-S主从复制
    本篇文章为大家展示了MongoDB数据库中怎么实现M-S主从复制,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。[root@localhost ~]#&nb...
    99+
    2024-04-02
  • mongodb主从复制配置
    主从复制是mongodb最常用的复制方式,这种方式很灵活.可用于备份,故障恢复,读扩展等.最基本的设置方式就是建立一个主节点和一个或多个从节点,每个从节点要知道主节点的地址. 我们用两种方式来实现主从.这里...
    99+
    2024-04-02
  • mongodb主从配置记录
    mongodb版本2.0.8主库/usr/local/mongodb/bin/mongod --port 27017 --dbpath=/data/db --logpath=/data/db_log/log...
    99+
    2024-04-02
  • MongoDB 主从复制集搭建
    一、Mongodb复制集简介什么是复制集?复制集(Replica Sets)是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复。...
    99+
    2024-04-02
  • redis 主从哨兵模式实现一主二从
    目录一、环境二、安装三、配置3.1、配置Redis.config文件3.2、配置sentinel.config文件一、环境 操作系统:Centos7.6/MAC OSredis版本:6.2.5以上版本ssh工具:xshe...
    99+
    2022-07-11
    redis 主从哨兵 redis  一主二从
  • redis 主从哨兵模式实现一主二从
    目录一、环境二、安装三、配置3.1、配置redis.config文件3.2、配置sentinel.config文件一、环境 操作系统:centos7.6/Mac OSredis版本:...
    99+
    2024-04-02
  • PHP实现数据库主从复制的方法
    随着业务的不断发展和业务量的不断增加,单个数据库的性能往往难以满足需求,因此数据库集群成为了一个非常重要的方向。在数据库集群中,主从复制是一个非常常见且重要的技术,通过主从复制可以将主数据库中的数据实时同步到从数据库中,保证数据的安全性和可...
    99+
    2023-05-17
    数据库 PHP 主从复制
  • mysql实现主从复制
    Mysql的 Replication 是一个异步的复制过程(mysql5.1.7以上版本分为异步复制和半同步两种模式),从一个 Mysql instace(我们称之为 Master)复制到另一个 ...
    99+
    2024-04-02
  • mongodb 主从配置(master slave)记录
    mongodb 主从配置(master slave)记录官方已不建议采取master slave方式,仅作记录: master启动脚本:more start...
    99+
    2024-04-02
  • mongodb主从复制安装文档
    环境说明IPRole10.240.216.151master10.240.216.152slave(standby master)10.240.216.153slavemongodb下载与安装在10.240...
    99+
    2024-04-02
  • mongodb做有验证(auth)的主从
    前言:我的版本是2.6.9,有auth的主从,在网上找了好久都没有找到,最后在官网上找到做主从的方法,其实很简单如果是做有验证的主从,那么需要用到keyFile的验证,官方是这样说的When running...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作