Mongodb 4.2版本副本集配置

常见的复制集

线上环境常见的架构为副本集,可以理解为一主多从。

下图:1主2从

下图:一主一从一仲裁

服务器信息:

三台机器一样配置2核16G内存 存储盘100G

"host" : "10.1.1.159:27020"
"host" : "10.1.1.77:27020"
"host" : "10.1.1.178:27020

1、我们在其中一台机器配置:

[[email protected] ~]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz
[[email protected] ~]# tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgz -C /data/
[[email protected] ~]# mkdir /data/mongodb/{data,logs,pid,conf} -p
配置文件:

[[email protected] ~]# cat /data/mongodb/conf/mongodb.conf
systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb/logs/mongod.log

storage:
  dbPath: /data/mongodb/data
  journal:
    enabled: true
  directoryPerDB: true
  wiredTiger:
     engineConfig:
        cacheSizeGB: 8                    #如果一台机器启动一个实例这个可以注释选择默认,如果一台机器启动多个实例,需要设置内存大小,避免互相抢占内存
        directoryForIndexes: true

processManagement:
  fork: true
  pidFilePath: /data/mongodb/pid/mongod.pid

net:
  port: 27020
  bindIp: 10.1.1.159,localhost      #修改为本机IP地址
  maxIncomingConnections: 5000

#security:
  #keyFile: /data/mongodb/conf/keyfile
  #authorization: enabled
replication:
#   oplogSizeMB: 1024
   replSetName: rs02

2、将配置负复制到其他机器:

[[email protected] ~]# scp -r /data/ [email protected]:/data/
[[email protected] ~]# scp -r /data/
[email protected]:/data/

目录结构:

[[email protected] data]# tree mongodb
mongodb
├── conf
│?? └── mongodb.conf
├── data
├── logs
└── pid

3、三台机器分别执行:

groupadd mongod
useradd -g mongod mongod
yum install -y libcurl openssl glibc
cd /data
ln -s mongodb-linux-x86_64-rhel70-4.2.1 mongodb-4.2
chown -R mongod.mongod /data
sudo -u mongod /data/mongodb4.2.1/bin/mongod -f /data/mongodb/conf/mongodb.conf

配置复制集:
#副本集名称rs02和配置文件中replSetName保持一致

config = { _id:"rs02", members:[
? ? ? ? ? ? ? ? ? ? ?{_id:0,host:"10.1.1.159:27010",priority:90},?
? ? ? ? ? ? ? ? ? ? ?{_id:1,host:"10.1.1.77:27010",priority:90},?
? ? ? ? ? ? ? ? ? ? {_id:2,host:"10.1.1.178:27010",arbiterOnly:true}
? ? ]
}

#初始化

rs.initiate(config);?

4、在其中一台机器执行:

[[email protected] ~]# /data/mongodb3.6.9/bin/mongo  10.1.1.159:27020
> use admin
switched to db admin
> config = { _id:"rs02", members:[
... ? ? ? ? ? ? ? ? ? ? ?{_id:0,host:"10.1.1.159:27020",priority:90},
... ? ? ? ? ? ? ? ? ? ? ?{_id:1,host:"10.1.1.77:27020",priority:90},
...  ? ? ? ? ? ? ? ? ? ? {_id:2,host:"10.1.1.178:27020",arbiterOnly:true}
...           ? ? ]
... }
{
    "_id" : "rs02",
    "members" : [
        {
            "_id" : 0,
            "host" : "10.1.1.159:27020",
            "priority" : 90
        },
        {
            "_id" : 1,
            "host" : "10.1.1.77:27020",
            "priority" : 90
        },
        {
            "_id" : 2,
            "host" : "10.1.1.178:27020",
            "arbiterOnly" : true
        }
    ]
}
>
> rs.initiate(config);        初始化副本集########eeeerrrr
{
    "ok" : 1,
    "operationTime" : Timestamp(1583907929, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1583907929, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}

5、查看节点状态

rs02:PRIMARY> rs.status()
{
    "set" : "rs02",
    "date" : ISODate("2020-03-13T07:11:09.427Z"),
    "myState" : 1,
    "term" : NumberLong(1),
    "syncingTo" : "",
    "syncSourceHost" : "",
    "syncSourceId" : -1,
    "heartbeatIntervalMillis" : NumberLong(2000),
    "optimes" : {
        "lastCommittedOpTime" : {
            "ts" : Timestamp(1584083465, 1),
            "t" : NumberLong(1)
        },
        "readConcernMajorityOpTime" : {
            "ts" : Timestamp(1584083465, 1),
            "t" : NumberLong(1)
        },
        "appliedOpTime" : {
            "ts" : Timestamp(1584083465, 1),
            "t" : NumberLong(1)
        },
        "durableOpTime" : {
            "ts" : Timestamp(1584083465, 1),
            "t" : NumberLong(1)
        }
    },
    "members" : [
        {
            "_id" : 0,
            "name" : "10.1.1.159:27020",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",    #主节点
            "uptime" : 185477,
            "optime" : {
                "ts" : Timestamp(1584083465, 1),
                "t" : NumberLong(1)
            },
            "optimeDate" : ISODate("2020-03-13T07:11:05Z"),
            "syncingTo" : "",
            "syncSourceHost" : "",
            "syncSourceId" : -1,
            "infoMessage" : "",
            "electionTime" : Timestamp(1583907939, 1),
            "electionDate" : ISODate("2020-03-11T06:25:39Z"),
            "configVersion" : 1,
            "self" : true,
            "lastHeartbeatMessage" : ""
        },
        {
            "_id" : 1,
            "name" : "10.1.1.77:27020",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",       #从节点
            "uptime" : 175540,
            "optime" : {
                "ts" : Timestamp(1584083465, 1),
                "t" : NumberLong(1)
            },
            "optimeDurable" : {
                "ts" : Timestamp(1584083465, 1),
                "t" : NumberLong(1)
            },
            "optimeDate" : ISODate("2020-03-13T07:11:05Z"),
            "optimeDurableDate" : ISODate("2020-03-13T07:11:05Z"),
            "lastHeartbeat" : ISODate("2020-03-13T07:11:08.712Z"),
            "lastHeartbeatRecv" : ISODate("2020-03-13T07:11:08.711Z"),
            "pingMs" : NumberLong(0),
            "lastHeartbeatMessage" : "",
            "syncingTo" : "10.1.1.159:27020",
            "syncSourceHost" : "10.1.1.159:27020",
            "syncSourceId" : 0,
            "infoMessage" : "",
            "configVersion" : 1
        },
        {
            "_id" : 2,
            "name" : "10.1.1.178:27020",
            "health" : 1,
            "state" : 7,
            "stateStr" : "ARBITER",     #仲裁节点
            "uptime" : 175540,
            "lastHeartbeat" : ISODate("2020-03-13T07:11:08.712Z"),
            "lastHeartbeatRecv" : ISODate("2020-03-13T07:11:08.711Z"),
            "pingMs" : NumberLong(0),
            "lastHeartbeatMessage" : "",
            "syncingTo" : "",
            "syncSourceHost" : "",
            "syncSourceId" : -1,
            "infoMessage" : "",
            "configVersion" : 1
        }
    ],
    "ok" : 1,
    "operationTime" : Timestamp(1584083465, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1584083465, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}
rs02:PRIMARY>

7、现在副本集状态:

10.1.1.178:27020 ARBITER 仲裁节点
10.1.1.77:27020 SECONDARY 从节点
10.1.1.159:27020 PRIMARY 主节点

我们插入一些数据查,然后将主节点停掉,

仲裁节点的日志
我们可以看到,当节点10.1.1.159宕机以后,重新选举了:Member 10.1.1.77:27010 is now in state PRIMARY

2020-03-18T14:34:53.636+0800 I NETWORK  [conn9] end connection 10.1.1.159:49160 (1 connection now open)
2020-03-18T14:34:54.465+0800 I CONNPOOL [Replication] dropping unhealthy pooled connection to 10.1.1.159:27010
2020-03-18T14:34:54.465+0800 I CONNPOOL [Replication] after drop, pool was empty, going to spawn some connections
2020-03-18T14:34:54.465+0800 I ASIO     [Replication] Connecting to 10.1.1.159:27010
......
2020-03-18T14:35:02.473+0800 I ASIO     [Replication] Failed to connect to 10.1.1.159:27010 - HostUnreachable: Error connecting to 10.1.1.159:27010 :: caused by :: Connection refused
2020-03-18T14:35:02.473+0800 I CONNPOOL [Replication] Dropping all pooled connections to 10.1.1.159:27010 due to HostUnreachable: Error connecting to 10.1.1.159:27010 :: caused by :: Connection refused
2020-03-18T14:35:02.473+0800 I REPL_HB  [replexec-8] Error in heartbeat (requestId: 662) to 10.1.1.159:27010, response status: HostUnreachable: Error connecting to 10.1.1.159:27010 :: caused by :: Connection refused
2020-03-18T14:35:04.463+0800 I REPL     [replexec-5] Member 10.1.1.77:27010 is now in state PRIMARY
2020-03-18T14:35:04.473+0800 I ASIO     [Replication] Connecting to 10.1.1.159:27010
2020-03-18T14:35:04.473+0800 I ASIO     [Replication] Failed to connect to 10.1.1.159:27010 - HostUnreachable: Error connecting to 10.1.1.159:27010 :: caused by :: Connection refused
2020-03-18T14:35:04.473+0800 I CONNPOOL [Replication] Dropping all pooled connections to 10.1.1.159:27010 due to HostUnreachable: Error connecting to 10.1.1.159:27010 :: caused by :: Connection refused

架构也就变成了下图:

目前副本集搭建完成,也测试了当一个节点出现问题以后(至少三个节点),并不会影响服务正常读写。
下一章我们开始添加用户:

原文地址:https://blog.51cto.com/jiachen/2485887

时间: 2024-10-04 18:08:38

Mongodb 4.2版本副本集配置的相关文章

【MongoDB学习笔记32】MongoDB修改副本集配置

一.删除副本集成员 spock:PRIMARY> rs.config()    {             "_id" : "spock",             "version" : 1,             "members" : [                     {                             "_id" : 0,                  

mongodb 副本集配置与说明

1,副本集的原理 副本集的原理与主从很相似,唯一不同的是,在主节点出现故障的时候,主从配置的从服务器不会自动的变为主服务器,而是要通过手动修改配置.但是副表集就不用,它会自动选出一台服务器做为主节点,从而保障系统的稳定性. 2,副本集新的主节点是怎么选举出来的呢 是通过bully算法来的,也就是一致性协议.具体如下 1):当主节点挂了后,副本集会获得其他从节点的最后更新时间与主服务做对比 2):如果所有从节点的最后更新时间都是很旧,那就选举停止 3):如果副本集中的大部分服务器挂了,包含主节点,

MongoDB副本集配置系列三:副本集的认证方式

1:副本集配置参考这篇博客: http://www.cnblogs.com/xiaoit/p/4478951.html 2:副本集的认证 假设有两台机器已经配置好了副本集(副本集罪一般最少3台机器,这里只做演示使用) 192.168.91.132 192.168.91.133 副本集总体思路是用户名.密码和keyfile文件,keyfile需要各个副本集服务启动时加载而且要是同一文件,然后在操作库是需要用户名.密码KeyFile文件必须满足条件:(1)至少6个字符,小于1024字节(2)认证时候

MongoDB 3.2.8 副本集搭建

记录一下,MongoDB的角色创建及配置,以便以后使用 简介 Replica Set,中文翻译叫做副本集,不过我并不喜欢把英文翻译成中文,总是感觉怪怪的.其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据需要和主节点一致 Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点.主备节点存储数据,仲裁节点不存储数据.客户端同时连接主节点与备节点,不连接仲裁节点. 默认设置下,主节点提供所有增删查改服务,备

mongodb3.2副本集配置

网上的资料太乱了,等弄好了再看官网才发现官网写的最清晰和简洁 推荐官网的副本集配置:https://docs.mongodb.com/manual/tutorial/deploy-replica-set/ 引述大神一段总结:http://blog.csdn.net/huwei2003/article/details/40453223 从概念上说一下MongoDB副本集和主从复制的区别.其实副本集(Replica Set)是主从复制的高级形式.高级在哪里呢?主动复制实现了数据备份+读扩展,但是ma

MongoDB副本集配置系列二:配置MongoDB副本集

接上一篇博客: http://www.cnblogs.com/xiaoit/p/4479066.html 1:首先创建3台虚拟机作为配置环境 IP1:192.168.91.128 IP2:192.168.91.129 IP3:192.168.91.130 2:下载MongoDB 2.6版本 https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-2.6.9.zip 3:解压 tar -zxvf mongodb-linux-x8

MongoDB副本集配置

三台机器配置 要求:一主两从一仲裁.异地机房节点不具备选举为Primary资格. 1.MongoDB安装 在官网或者GitHub上下载压缩包,上传到服务器,并解压到/usr/local/下,命名为mongodb 2.在/app目录下创建mongodb目录,并根据安装的节点端口号创建/mongodb+端口号目录,例如创建/mongodb27017目录 3.在/app目录下创建db.conf.log三个目录,并在conf下创建文件mongodb+端口号.conf文件,文件配置如下 port=2701

MongoDB副本集配置系列十一:MongoDB 数据同步原理和自动故障转移的原理

1:数据同步的原理: 当Primary节点完成数据操作后,Secondary会做出一系列的动作保证数据的同步: 1:检查自己local库的oplog.rs集合找出最近的时间戳. 2:检查Primary节点local库oplog.rs集合,找出大于此时间戳的记录. 3:将找到的记录插入到自己的oplog.rs集合中,并执行这些操作. 2:查看副本集的信息 gechongrepl:PRIMARY> rs.status() { "set" : "gechongrepl&quo

MongoDB副本集配置系列一:安装MongoDB

1:下载MongoDB 2.6版本 https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-2.6.9.zip 2:解压 tar -zxvf mongodb-linux-x86_64-2.6.9.zip mv mongodb-linux-x86_64-2.6.9 mongodb 3:在mongodb目录创建 data目录和 log 目录 和conf配置文件 同时保证data和log目录有可读写权限 4:编辑配置文件 vi mo