阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

关于 MongoDB的集群模式 – Replica Set

209次阅读
没有评论

共计 4020 个字符,预计需要花费 11 分钟才能阅读完成。

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

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

关于 MongoDB 的集群模式 - Replica Set

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

IP 地址 操作系统版本 MongoDB 版本 端口 功能
10.10.18.10CentOS7.5 4.0 27017 Primary
10.10.18.11Centos7.5 4.0 27017 Secondary
10.10.18.12Centos7.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。

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计4020字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中