返回顶部
首页 > 资讯 > 数据库 >MongoDB Replica Set 副本集
  • 136
分享到

MongoDB Replica Set 副本集

2024-04-02 19:04:59 136人浏览 独家记忆
摘要

1、简介mongoDB复制是将数据同步在多个服务器的过程,类似Mysql Replication是一种异步复制;复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的

1、简介

mongoDB复制是将数据同步在多个服务器的过程,类似Mysql Replication是一种异步复制;

复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。


2、MonGoDB复制特点

(1) mongodb的节点有三种角色:primary,seconfary,arbiter, 

primary负责处理客户端请求,读写数据;

secondary通过oplog复制主节点上的数据,也可读数据; 

arbiter节点不存储数据,仅投票功能,所以不需要单独的硬件配置;

(2)如果primary不可以用,secondary会提升为新的primary; 由参数electionTimeoutMillis=10s控制


3、实验环境

MongoDB-3.0.6版本

一台物理机器上三个MongoDB实例,分别占用三个节点

172.16.101.54  27017

172.16.101.54  27018

172.16.101.54  27019


4、创建数据和日志目录

[root@sht-sgmhadoopcm-01 mongodb]# mkdir -p /usr/local/mongodb/data/{db27017,db27018,db27019}

[root@sht-sgmhadoopcm-01 mongodb]# mkdir -p /usr/local/mongodb/log


5、配置文件/etc/mongod.conf

三个节点分别创建配置文件,文件内容区别是节点不同,其他都相同,参数replSetname用来指定副本集名称为rs0

[root@sht-sgmhadoopcm-01 mongodb]# ll /etc/mongod2701*.conf

-rw-r--r-- 1 root root 405 Nov  2 20:21 /etc/mongod27017.conf

-rw-r--r-- 1 root root 405 Nov  2 20:13 /etc/mongod27018.conf

-rw-r--r-- 1 root root 405 Nov  2 20:13 /etc/mongod27019.conf

mongodb配置文件每个冒号后面要有一个空格,否则会报错

[root@sht-sgmhadoopcm-01 mongodb]# cat /etc/mongod27017.conf
systemLog:
   destination: file
   path: "/usr/local/mongodb/log/mongod27017.log"
   logAppend: true
storage:
   dbPath: /usr/local/mongodb/data/db27017
   journal:
      enabled: true
proceSSManagement:
   fork: true
   pidFilePath: /usr/local/mongodb/data/db27017/mongod27017.pid
net:
   port: 27017
   bindIp: 0.0.0.0
setParameter:
   enableLocalhostAuthBypass: false
replication:
  replSetName: rs0


6、启动MongoDB

分别启动三个节点的MongoDB服务,并指定配置文件

[root@sht-sgmhadoopcm-01 mongodb]# bin/mongod --config /etc/mongod27017.conf

[root@sht-sgmhadoopcm-01 mongodb]# bin/mongod --config /etc/mongod27018.conf 

[root@sht-sgmhadoopcm-01 mongodb]# bin/mongod --config /etc/mongod27019.conf 


7、初始化副本集

登录27017节点

[root@sht-sgmhadoopcm-01 mongodb]# bin/mongo  172.16.101.54:27017/admin

> rs.initiate()

{

    "info2" : "no configuration explicitly specified -- making one",

    "me" : "sht-sgmhadoopcm-01:27017",

    "ok" : 1

}


添加成员到副本集,priority大的节点提成为主的可能性就大

rs0:PRIMARY> rs.add('172.16.101.54:27018')

{ "ok" : 1 }

rs0:PRIMARY> rs.add('172.16.101.54:27019',priority:5)

{ "ok" : 1 }


查看副本集配置

rs0:PRIMARY> rs.conf()
{
    "_id" : "rs0",
    "version" : 3,
    "members" : [
        {
            "_id" : 0,
            "host" : "sht-sgmhadoopcm-01:27017",
            "arbiterOnly" : false,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 1,
            "tags" : {
                
            },
            "slaveDelay" : 0,
            "votes" : 1
        },
        {
            "_id" : 1,
            "host" : "172.16.101.54:27018",
            "arbiterOnly" : false,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 1,
            "tags" : {
                
            },
            "slaveDelay" : 0,
            "votes" : 1
        },
        {
            "_id" : 2,
            "host" : "172.16.101.54:27019",
            "arbiterOnly" : false,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 1,
            "tags" : {
                
            },
            "slaveDelay" : 0,
            "votes" : 1
        }
    ],
    "settings" : {
        "chainingAllowed" : true,
        "heartbeatTimeoutSecs" : 10,
        "getLastErrORModes" : {
            
        },
        "getLastErrorDefaults" : {
            "w" : 1,
            "wtimeout" : 0
        }
    }
}


查看各个角色状态

rs0:PRIMARY> rs.status()
{
    "set" : "rs0",
    "date" : ISODate("2018-11-02T12:27:44.570Z"),
    "myState" : 1,
    "members" : [
        {
            "_id" : 0,
            "name" : "sht-sgmhadoopcm-01:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 626,
            "optime" : Timestamp(1541161589, 1),
            "optimeDate" : ISODate("2018-11-02T12:26:29Z"),
            "electionTime" : Timestamp(1541161465, 2),
            "electionDate" : ISODate("2018-11-02T12:24:25Z"),
            "configVersion" : 3,
            "self" : true
        },
        {
            "_id" : 1,
            "name" : "172.16.101.54:27018",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 161,
            "optime" : Timestamp(1541161589, 1),
            "optimeDate" : ISODate("2018-11-02T12:26:29Z"),
            "lastHeartbeat" : ISODate("2018-11-02T12:27:43.430Z"),
            "lastHeartbeatRecv" : ISODate("2018-11-02T12:27:43.311Z"),
            "pingMs" : 0,
            "syncingTo" : "sht-sgmhadoopcm-01:27017",
            "configVersion" : 3
        },
        {
            "_id" : 2,
            "name" : "172.16.101.54:27019",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 75,
            "optime" : Timestamp(1541161589, 1),
            "optimeDate" : ISODate("2018-11-02T12:26:29Z"),
            "lastHeartbeat" : ISODate("2018-11-02T12:27:43.430Z"),
            "lastHeartbeatRecv" : ISODate("2018-11-02T12:27:43.430Z"),
            "pingMs" : 0,
            "lastHeartbeatMessage" : "could not find member to sync from",
            "configVersion" : 3
        }
    ],
    "ok" : 1
}


8、数据同步测试

向27017节点插入数据

[root@sht-sgmhadoopcm-01 mongodb]# bin/mongo 172.16.101.54:27017/admin

rs0:PRIMARY> db.user.insert({"username":"test","age":12,"sex":"m"})

WriteResult({ "nInserted" : 1 })

rs0:PRIMARY> db.user.find()

{ "_id" : ObjectId("5bdc65ff048de313Da6c425a"), "username" : "test", "age" : 12, "sex" : "m" }


数据成功的同步到27018和27019节点

[root@sht-sgmhadoopcm-01 mongodb]# bin/mongo  172.16.101.54:27018/admin

rs0:SECONDARY> db.getMongo().setReadPref('secondaryPreferred')

rs0:SECONDARY> db.user.find()

{ "_id" : ObjectId("5bdc65ff048de313da6c425a"), "username" : "test", "age" : 12, "sex" : "m" }


[root@sht-sgmhadoopcm-01 mongodb]# bin/mongo  172.16.101.54:27019/admin

rs0:SECONDARY> db.getMongo().setReadPref('secondaryPreferred')

rs0:SECONDARY> db.user.find()

{ "_id" : ObjectId("5bdc65ff048de313da6c425a"), "username" : "test", "age" : 12, "sex" : "m" }


9、AutoFailover测试

kill当前的primary27017节点

[root@sht-sgmhadoopcm-01 mongodb]# ps -ef|grep mongod

root      5703     1  0 20:17 ?        00:00:52 bin/mongod --config /etc/mongod27017.conf

root      5747     1  0 20:17 ?        00:00:51 bin/mongod --config /etc/mongod27018.conf

root      5979     1  0 20:20 ?        00:00:52 bin/mongod --config /etc/mongod27019.conf


[root@sht-sgmhadoopcm-01 mongodb]# kill -9 5703

可以看到27019变成primary,此时27017不可用

[root@sht-sgmhadoopcm-01 mongodb]# bin/mongo  172.16.101.54:27018/admin

rs0:SECONDARY> rs.status()
{
    "set" : "rs0",
    "date" : ISODate("2018-11-02T15:10:18.746Z"),
    "myState" : 2,
    "members" : [
        {
            "_id" : 0,
            "name" : "sht-sgmhadoopcm-01:27017",
            "health" : 0,
            "state" : 8,
            "stateStr" : "(not reachable/healthy)",
            "uptime" : 0,
            "optime" : Timestamp(0, 0),
            "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
            "lastHeartbeat" : ISODate("2018-11-02T15:10:18.631Z"),
            "lastHeartbeatRecv" : ISODate("2018-11-02T15:09:28.583Z"),
            "pingMs" : 0,
            "lastHeartbeatMessage" : "Failed attempt to connect to sht-sgmhadoopcm-01:27017; couldn't connect to server sht-sgmhadoopcm-01:27017 (172.16.101.54), connection attempt failed",
            "configVersion" : -1
        },
        {
            "_id" : 1,
            "name" : "172.16.101.54:27018",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 10349,
            "optime" : Timestamp(1541170688, 2),
            "optimeDate" : ISODate("2018-11-02T14:58:08Z"),
            "configVersion" : 3,
            "self" : true
        },
        {
            "_id" : 2,
            "name" : "172.16.101.54:27019",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 9827,
            "optime" : Timestamp(1541170688, 2),
            "optimeDate" : ISODate("2018-11-02T14:58:08Z"),
            "lastHeartbeat" : ISODate("2018-11-02T15:10:18.611Z"),
            "lastHeartbeatRecv" : ISODate("2018-11-02T15:10:18.592Z"),
            "pingMs" : 0,
            "electionTime" : Timestamp(1541171370, 1),
            "electionDate" : ISODate("2018-11-02T15:09:30Z"),
            "configVersion" : 3
        }
    ],
    "ok" : 1
}


重新启动27017节点,会自动变成了27019的备库,说明auto failover成功了

[root@sht-sgmhadoopcm-01 mongodb]# bin/mongod --config /etc/mongod27017.conf

rs0:PRIMARY> rs.status()
{
    "set" : "rs0",
    "date" : ISODate("2018-11-02T15:13:27.035Z"),
    "myState" : 1,
    "members" : [
        {
            "_id" : 0,
            "name" : "sht-sgmhadoopcm-01:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 42,
            "optime" : Timestamp(1541170688, 2),
            "optimeDate" : ISODate("2018-11-02T14:58:08Z"),
            "lastHeartbeat" : ISODate("2018-11-02T15:13:26.764Z"),
            "lastHeartbeatRecv" : ISODate("2018-11-02T15:13:25.055Z"),
            "pingMs" : 0,
            "configVersion" : 3
        },
        {
            "_id" : 1,
            "name" : "172.16.101.54:27018",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 10017,
            "optime" : Timestamp(1541170688, 2),
            "optimeDate" : ISODate("2018-11-02T14:58:08Z"),
            "lastHeartbeat" : ISODate("2018-11-02T15:13:26.662Z"),
            "lastHeartbeatRecv" : ISODate("2018-11-02T15:13:26.678Z"),
            "pingMs" : 0,
            "lastHeartbeatMessage" : "could not find member to sync from",
            "configVersion" : 3
        },
        {
            "_id" : 2,
            "name" : "172.16.101.54:27019",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 10349,
            "optime" : Timestamp(1541170688, 2),
            "optimeDate" : ISODate("2018-11-02T14:58:08Z"),
            "electionTime" : Timestamp(1541171370, 1),
            "electionDate" : ISODate("2018-11-02T15:09:30Z"),
            "configVersion" : 3,
            "self" : true
        }
    ],
    "ok" : 1
}


FAQ

[root@sht-sgmhadoopcm-01 mongodb]# bin/mongod --config /etc/mongod27017.conf &

[1] 4885

[root@sht-sgmhadoopcm-01 mongodb]# Error parsing YAML config file: yaml-cpp: error at line 8, column 11: illegal map value

try 'bin/mongod --help' for more information

[1]+  Exit 2                  bin/mongod --config /etc/mongod27017.conf


原因是配置文件/etc/mongod.conf冒号后面没有跟空格。


参考链接

MongoDB Replication

您可能感兴趣的文档:

--结束END--

本文标题: MongoDB Replica Set 副本集

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

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

猜你喜欢
  • MongoDB Replica Set 副本集
    1、简介MongoDB复制是将数据同步在多个服务器的过程,类似MySQL Replication是一种异步复制;复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的...
    99+
    2024-04-02
  • [MongoDB] 复制策略 - Replica Set 副本集
    ...
    99+
    2024-04-02
  • mongodb replica set 副本集 安装部署(三)
    1.节点类型         简单的说副本集(replica set)就是有自动故障恢复功能的主从集群,主从集群和副本集最为明...
    99+
    2024-04-02
  • MongoDB实战(9)Replica Sets 副本集(上)
    MongoDB 支持在多个机器中通过异步复制达到故障转移和实现冗余。多机器中同一时刻只有一台是用于写操作。正是由于这个情况,为 MongoDB 提供了数据一致性的保障。担当Pr...
    99+
    2024-04-02
  • MongoDB搭建Replica Set复制集
      1、在MongoDB的同级安装目录下创建数据目录,目录结构如下:        /data/rs0...
    99+
    2024-04-02
  • mongodb副本集
           其实mongodb也可以做主从机制,mongodb一主一从类似mysql,但是slave在架构中为只读,并且主机宕机后从不...
    99+
    2024-04-02
  • mongodb 副本集
    系统:centos6.5IP:10.19.21.244 主节点 10.19.21.245 备节点 10.19.21.248 仲裁点不只是主节点、副本节点、仲裁节点,还有Secondary-Only、Hidd...
    99+
    2024-04-02
  • MongoDB Replica Set排错
    1.检查Replica Set的状态使用db.runCommand({"replSetGetStatus" : 1});或者rs.status();2.检查复制延迟时间source:  ...
    99+
    2024-04-02
  • MongoDB Replica Set 部署
    在生产中使用MongoDB, 为了数据安全性和访问稳定性. 副本集是经常被使用到的.书接上回, 话说MongoDB副本集已经安装过很多次了.但是每次都要去 百度 具体命令细节.只好自己整理笔记,记录下来,以...
    99+
    2024-04-02
  • MongoDB Replica Set搭建
    第0部分 业务信息业务名称: xyz端口号: 28017第1部分 准备环境创建mongodb用户# useradd mongodb创建数据目录# mkdir -pv /data1/mongodb/28017...
    99+
    2024-04-02
  • mongodb集群-副本集(CSRS)
    一、概述(1)MongoDB复制是将数据同步在多个服务器的过程。(2)复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。(3)复制还允许您从硬件故障和服务...
    99+
    2024-04-02
  • Mongodb replica set模式篇
    复制集架构图:三节点replicaset配置安装(无仲裁节点):Replica set 【10.10.20.161-10.10.20.163】10.10.20.161-10.10.20.163这三台按下面的...
    99+
    2024-04-02
  • 配置mongodb副本集
    主机信息:[root@my2 db]# cat /etc/hosts127.0.0.1   localhost localhost.localdomain localhost4 loca...
    99+
    2024-04-02
  • mongodb 副本集搭建
    mongodb的副本集模式较早前的master-slave模式有了很大的改进,由于之前的master-slave模式不支持主机宕机之后切换到从机,已经逐渐被淘汰。而现在官方推荐的副本集模式,支持多个节点并存...
    99+
    2024-04-02
  • mongodb 副本集创建
    vi install_mongo.shtar -zxvf mongodb-linux-x86_64-rhel62-3.2.9.tgzmv mongodb-linux-x86_64-rhel62-3.2.9 ...
    99+
    2024-04-02
  • mongodb副本集维护
    一、概述mongodb副本集维护主要工作:1、查看副本集状态(集群状态、同步延迟、单个库的运行状态mongostate)2、增删节点、停节点shutdownmongodb副本集集群同步机制数据复制的目的是使...
    99+
    2024-04-02
  • Mongodb Replica Set 读写分离
    环境:mongodb版本:2.4.6,Replica Set需求:primary压力过大,期望secondary分担读压力前言    从应用程序角度来看,使用Replica Set 和使...
    99+
    2024-04-02
  • 实战MongoDB-Replication之Replica Set
    实战MongoDB Master-Slave   MongoDB支持不同服务之间的异步的数据复制,来实现failover(故障转移,故障切换,故障恢复) and redundancy(数据冗余)。...
    99+
    2024-04-02
  • 【Mongodb】如何创建mongodb的replica set
    Replica sets 在主从复制上做的扩展,增加了故障自动切换和自动修复成员节点。下面从技术上介绍如何搭建mongodb的replica set (个人觉得,搭建mongodb本身没有多少干货,重要是如...
    99+
    2024-04-02
  • 3.5-MongoDB副本集测试
    *MongoDB副本集测试主上建库,建集合>use mydb   #建库>db.acc.insert({AccountID:1,UserName:"123",password:"123...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作