前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于 MongoDB的集群模式 – Replica Set

关于 MongoDB的集群模式 – Replica Set

作者头像
星哥玩云
发布2022-08-18 14:26:04
7970
发布2022-08-18 14:26:04
举报
文章被收录于专栏:开源部署开源部署

一、Replica Set 集群分为两种架构:

  • 奇数个节点构成Replica Set,所有节点拥有数据集。最小架构: 1个Primary节点,2个Secondary节点
  • 偶数个节点 + 一个仲裁节点 构成的Replica Set,节点拥有数据集,仲裁节点仅参与仲裁选举出Primary节点。 最小架构:1个Primary节点,1个Secondary节点,1个Arbiter节点

接下来就以3台服务器为例,部署具有仲裁的框架。

IP地址

操作系统版本

MongoDB版本

端口

功能

10.10.18.10

CentOS7.5

4.0

27017

Primary

10.10.18.11

Centos7.5

4.0

27017

Secondary

10.10.18.12

Centos7.5

4.0

27017

Arbiter

二、MongoDB安装部署

安装环境: CentOS 7.5

安装基础依赖包

yum install cyrus-sasl cyrus-sasl-gssapi cyrus-sasl-plain krb5-libs libcurl libpcap lm_sensors-libs net-snmp net-snmp-agent-libs openldap openssl rpm-libs tcp_wrappers-libs

下载安装包

https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.10.tgz

解析安装包

tar -xzvf mongodb-linux-x86_64-4.0.10.tgz -C /data/ ln -s /data/mongodb-linux-x86_64-4.0.10 /data/mongodb

添加环境变量

echo "export PATH=\$PATH:/data/mongodb/bin" >> ~/.bashrc source ~/.bashrc mongo --version

Primary的配置文件:

systemLog:   destination: file   path: "/data/mongodb/log/mongod.log"   logAppend: true storage:   dbPath: "/data/mongodb/data"   journal:       enabled: true   wiredTiger:       engineConfig:         cacheSizeGB: 2 processManagement:   fork: true   pidFilePath: "/data/mongodb/pid/m.pid" net:   bindIp: 10.10.18.10   port: 27017 replication:   replSetName: "rs0"

Secondary的配置文件

systemLog:   destination: file   path: "/data/mongodb/log/mongod.log"   logAppend: true storage:   dbPath: "/data/mongodb/data"   journal:       enabled: true   wiredTiger:       engineConfig:         cacheSizeGB: 2 processManagement:   fork: true   pidFilePath: "/data/mongodb/pid/m.pid" net:   bindIp: 10.10.18.11   port: 27017 replication:   replSetName: "rs0"

Arbiter的配置文件

systemLog:   destination: file   path: "/data/mongodb/log/mongod.log"   logAppend: true storage:   dbPath: "/data/mongodb/data"   journal:       enabled: true   wiredTiger:       engineConfig:         cacheSizeGB: 2 processManagement:   fork: true   pidFilePath: "/data/mongodb/pid/m.pid" net:   bindIp: 10.10.18.12   port: 27017 replication:   replSetName: "rs0"

启动三台服务器上的mongdb

mongod -f /data/mongodb/mongod.conf

三、配置Replica Set

登录三台服务器中任意一台,登录mongo

mongo --host 10.10.18.10

>cfg={ _id:"rs0",members:[{_id:0,host:'10.10.18.10:27017',priority:1},{_id:1,host:'10.10.18.11:27017',priority:1},{_id:2,host:'10.10.18.12:27017',arbiterOnly:true}] };

>rs.initiate(cfg)

查看Replica Set配置

> rs.conf()

{  "_id" : "rs0",  "version" : 1,  "protocolVersion" : NumberLong(1),  "writeConcernMajorityJournalDefault" : true,  "members" : [  {  "_id" : 0,  "host" : "10.10.18.10:27017",  "arbiterOnly" : false,  "buildIndexes" : true,  "hidden" : false,  "priority" : 1,  "tags" : {

},  "slaveDelay" : NumberLong(0),  "votes" : 1  },  {  "_id" : 1,  "host" : "10.10.18.11:27017",  "arbiterOnly" : false,  "buildIndexes" : true,  "hidden" : false,  "priority" : 1,  "tags" : {

},  "slaveDelay" : NumberLong(0),  "votes" : 1  },  {  "_id" : 2,  "host" : "10.10.18.12:27017",  "arbiterOnly" : true,  "buildIndexes" : true,  "hidden" : false,  "priority" : 0,  "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("5cff76e5e57e23a5bc7054e2")  } }

四、验证Replica Set

在Primary中插入数据

rs0:PRIMARY>  show dbs admin  0.000GB config  0.000GB local  0.000GB rs0:PRIMARY> db.users.insertOne( ... { ... name:"sue", ... age: 26, ... status:"pending" ... }) {         "acknowledged" : true,         "insertedId" : ObjectId("5cff79e8993e70290a081d04") }

rs0:PRIMARY> db.users.find() { "_id" : ObjectId("5cff79e8993e70290a081d04"), "name" : "sue", "age" : 26, "status" : "pending" }

在Secondary中,默认是不允许读

rs0:SECONDARY> db.users.find() Error: error: {         "operationTime" : Timestamp(1560247181, 1),         "ok" : 0,         "errmsg" : "not master and slaveOk=false",         "code" : 13435,         "codeName" : "NotMasterNoSlaveOk",         "$clusterTime" : {                 "clusterTime" : Timestamp(1560247181, 1),                 "signature" : {                         "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),                         "keyId" : NumberLong(0)                 }         } }

五、故障模拟

停止Primary上的mongo进程,在Secondary上登录mongo查看

mongo --host 10.10.18.11

rs0:PRIMARY> db.users.find() { "_id" : ObjectId("5cff79e8993e70290a081d04"), "name" : "sue", "age" : 26, "status" : "pending" }

发现原Secondary变成Primary,并且可以进行查询。

开启原Primary服务器上的mongo进程,该服务器变成了Secondary。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档