mongodb之(8)mongodb部署及维护

1、副本集部署教程

1.1、要求

三个成员副本集提供足够的冗余以承受大多数网络分区和其他系统故障。这些副本集也具有足够的容量用于许多分布式读取操作。副本集应始终具有奇数个成员。这可确保选举顺利进行。对于生产部署,应该通过在不同的计算机上托管mongod实例来尽可能多地保持成员之间的分离。当使用虚拟机进行生产部署时,应将每个mongod实例放在由冗余电源电路和冗余网络路径服务的单独host服务器上。

1.2、注意事项

  • 架构体系:在生产环境,将副本集的每个成员部署到自己的机器上,并尽可能绑定到mongod的标准端口27017上。
  • 主机名称:如果可能,在部署副本集或分配集群时,使用逻辑域名代替ip地址。使用域名代替ip可以防止ip改变时配置的更改。
  • ip绑定:使用bind_ip选项来保证mongod监听来自指定ip的应用的连接。默认情况下,绑定的是本地localhost,此时mongod只接受本地的mongo的shell、副本集或分片集群的其他成员的连接。若需要绑定其他ip地址,可以使用net.bindIp配置或使用bind_ip命令行来指定主机名或ip地址列表。

1.3、副本集部署

1.3.1、数据目录创建

创建如下三个目录:用于保存mongod数据及日志等。

"C:\mongo\data27017"
"C:\mongo\data27018"
"C:\mongo\data27019"

1.3.1、启动mongod实例

./mongod.exe --replSet mongoset --dbpath "C:\mongo\data27017" --port 27017 --logpath "C:\mongo\data27017\log.log"
./mongod.exe --replSet mongoset --dbpath "C:\mongo\data27018" --port 27018 --logpath "C:\mongo\data27018\log.log"
./mongod.exe --replSet mongoset --dbpath "C:\mongo\data27019" --port 27019 --logpath "C:\mongo\data27019\log.log"

1.3.2、初始副本集

mongoset:PRIMARY> rsconf = {
... _id: "mongoset",
... members: [{
... _id: 0,
... host: "localhost:27017"
... }, {
... _id: 1,
... host: "localhost:27018"
... }, {
... _id: 2,
... host: "localhost:27019"
... }]
... }
{
        "_id" : "mongoset",
        "members" : [
                {
                        "_id" : 0,
                        "host" : "localhost:27017"
                },
                {
                        "_id" : 1,
                        "host" : "localhost:27018"
                },
                {
                        "_id" : 2,
                        "host" : "localhost:27019"
                }
        ]
}
mongoset:PRIMARY> rs.initiate(rsconf)
{
        "operationTime" : Timestamp(1577706032, 1),
        "ok" : 0,
        "errmsg" : "already initialized",
        "code" : 23,
        "codeName" : "AlreadyInitialized",
        "$clusterTime" : {
                "clusterTime" : Timestamp(1577706032, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
mongoset:PRIMARY>

1.3.3、查看副本集状态

mongoset:PRIMARY> rs.conf()
{
        "_id" : "mongoset",
        "version" : 29603,
        "protocolVersion" : NumberLong(1),
        "writeConcernMajorityJournalDefault" : true,
        "members" : [
                {
                        "_id" : 0,
                        "host" : "localhost:27017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 3,
                        "tags" : {

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

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "localhost:27019",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "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("5e01feb0815cdc9cd73d4fca")
        }
}
mongoset:PRIMARY>

mongoset:PRIMARY> rs.status()
{
        "set" : "mongoset",
        "date" : ISODate("2019-12-30T11:43:31.227Z"),
        "myState" : 1,
        "term" : NumberLong(14),
        "syncingTo" : "",
        "syncSourceHost" : "",
        "syncSourceId" : -1,
        "heartbeatIntervalMillis" : NumberLong(2000),
        "optimes" : {
                "lastCommittedOpTime" : {
                        "ts" : Timestamp(1577706202, 1),
                        "t" : NumberLong(14)
                },
                "lastCommittedWallTime" : ISODate("2019-12-30T11:43:22.516Z"),
                "readConcernMajorityOpTime" : {
                        "ts" : Timestamp(1577706202, 1),
                        "t" : NumberLong(14)
                },
                "readConcernMajorityWallTime" : ISODate("2019-12-30T11:43:22.516Z"),
                "appliedOpTime" : {
                        "ts" : Timestamp(1577706202, 1),
                        "t" : NumberLong(14)
                },
                "durableOpTime" : {
                        "ts" : Timestamp(1577706202, 1),
                        "t" : NumberLong(14)
                },
                "lastAppliedWallTime" : ISODate("2019-12-30T11:43:22.516Z"),
                "lastDurableWallTime" : ISODate("2019-12-30T11:43:22.516Z")
        },
        "lastStableRecoveryTimestamp" : Timestamp(1577706172, 1),
        "lastStableCheckpointTimestamp" : Timestamp(1577706172, 1),
        "members" : [
                {
                        "_id" : 0,
                        "name" : "localhost:27017",
                        "ip" : "127.0.0.1",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 519,
                        "optime" : {
                                "ts" : Timestamp(1577706202, 1),
                                "t" : NumberLong(14)
                        },
                        "optimeDate" : ISODate("2019-12-30T11:43:22Z"),
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "electionTime" : Timestamp(1577705751, 1),
                        "electionDate" : ISODate("2019-12-30T11:35:51Z"),
                        "configVersion" : 29603,
                        "self" : true,
                        "lastHeartbeatMessage" : ""
                },
                {
                        "_id" : 1,
                        "name" : "localhost:27018",
                        "ip" : "127.0.0.1",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 463,
                        "optime" : {
                                "ts" : Timestamp(1577706202, 1),
                                "t" : NumberLong(14)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1577706202, 1),
                                "t" : NumberLong(14)
                        },
                        "optimeDate" : ISODate("2019-12-30T11:43:22Z"),
                        "optimeDurableDate" : ISODate("2019-12-30T11:43:22Z"),
                        "lastHeartbeat" : ISODate("2019-12-30T11:43:31.127Z"),
                        "lastHeartbeatRecv" : ISODate("2019-12-30T11:43:29.872Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "localhost:27017",
                        "syncSourceHost" : "localhost:27017",
                        "syncSourceId" : 0,
                        "infoMessage" : "",
                        "configVersion" : 29603
                },
                {
                        "_id" : 2,
                        "name" : "localhost:27019",
                        "ip" : "127.0.0.1",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 446,
                        "optime" : {
                                "ts" : Timestamp(1577706202, 1),
                                "t" : NumberLong(14)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1577706202, 1),
                                "t" : NumberLong(14)
                        },
                        "optimeDate" : ISODate("2019-12-30T11:43:22Z"),
                        "optimeDurableDate" : ISODate("2019-12-30T11:43:22Z"),
                        "lastHeartbeat" : ISODate("2019-12-30T11:43:31.127Z"),
                        "lastHeartbeatRecv" : ISODate("2019-12-30T11:43:30.220Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "localhost:27018",
                        "syncSourceHost" : "localhost:27018",
                        "syncSourceId" : 1,
                        "infoMessage" : "",
                        "configVersion" : 29603
                }
        ],
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1577706202, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        },
        "operationTime" : Timestamp(1577706202, 1)
}
mongoset:PRIMARY>

2、副本集配置

2.1、调整节点优先级

副本集成员的priority设置会影响主要的选举的时间和结果。高优先级成员更有可能召集选举,更有可能获胜。使用此设置可确保某些成员更有可能成为主要成员,而其他成员永远不会成为主要成员。成员的优先级priority的 value 决定了选举中成员的优先。数字越大,优先级越高。

priority的值可以是0-1000之间的任何浮点数,其默认值为1。若有阻止成员选举为主节点,可将其优先级设置为0。隐藏及延迟成员将优先级设置0。非选举节点优先级必须为0,仲裁者优先级为0。

在计划的维护窗口更改优先级配置,将导致主节点强制断开所有连接,重新开始选举。

2.2、设置隐藏节点

如果settings.chainingAllowed设置允许辅助成员从其他辅助节点同步,则默认情况下 MongoDB 在选择同步目标时更喜欢隐藏成员上的 non-hidden 成员。 MongoDB 只会选择隐藏的成员作为最后的手段。如果希望辅助节点从隐藏成员同步,请使用replSetSyncFrom database 命令覆盖默认同步目标。

隐藏成员配置示例:

{
  "_id" : <num>
  "host" : <hostname:port>,
  "priority" : 0,
  "hidden" : true
}

cfg = rs.conf()
cfg.members[0].priority = 0
cfg.members[0].hidden = true
rs.reconfig(cfg)
还有 65% 的精彩内容
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容