【问题标题】:Remote nodes not reachable in a three-node replica set三节点副本集中的远程节点不可访问
【发布时间】:2016-11-18 12:28:46
【问题描述】:

我有两台电脑,IP 地址分别为 10.1.1.52 和 10.1.1.11。我想配置 mongo 复制(无分片),一个主节点和一个辅助节点在 10.1.1.52 上运行,一个辅助节点在 10.1.1.11 上运行。

我已按照以下步骤操作:

使用以下命令在 10.1.1.11 PC 上运行三个配置服务器::

mongod --configsvr --port 26050 --logpath /data/db/log.cfg0 --logappend --dbpath /data/db/cfg0 –fork
mongod --configsvr --port 26051 --logpath /data/db/log.cfg1 --logappend --dbpath /data/db/cfg1 –fork
mongod --configsvr --port 26052 --logpath /data/db/log.cfg2 --logappend --dbpath /data/db/cfg2 –fork

随后我创建了一个副本集 ('a') 并使用以下命令向其中添加了三个节点(第一个在 10.1.1.11 上,另外两个在 10.1.1.52 上):

mongod  --replSet a --dbpath /data/a/a0 --logpath /data/a/log.a0 --port 27000 --fork --logappend --smallfiles --oplogSize 50
mongod  --replSet a --dbpath /data/a/a1 --logpath /data/a/log.a1 --port 27001 --fork --logappend --smallfiles --oplogSize 50
mongod  --replSet a --dbpath /data/a/a2 --logpath /data/a/log.a2 --port 27002 --fork --logappend --smallfiles --oplogSize 50

我使用以下命令在 10.1.1.11 上设置查询路由器:

mongos --configdb gaugedata-elastic:26050,gaugedata-elastic:26051,gaugedata-elastic:26052 --fork --logappend --logpath /data/db/log.mongos --port 26060

之后我输入以下命令从 mongos 连接并启动副本集:

mongo --port 27000
rs.initiate()

现在面临的问题是添加节点之后:

rs.add("10.1.1.52:27001")
rs.add("10.1.1.52:27002")

在远程 PC 上运行的节点,即 10.1.1.52 不可访问且不健康。但是,在我的 PC 上运行的节点,即 10.1.1.11 会自动声明为 SECONDARY。

【问题讨论】:

  • 防火墙规则是否可能阻止了端口 27001 和 27002 上的通信?

标签: mongodb replication mongodb-replica-set


【解决方案1】:

需要检查接受端口的规则是否被激活。否则,在 ubuntu OS 上使用命令 sudo ufw allow <start port number>:<end port number> 来启用 start port numberend port number 之间的所有端口。

【讨论】:

    【解决方案2】:

    好的..这里几乎没有错误。如果您不需要分片,则不需要 mongoS 或配置服务器... 纯副本集(在这种情况下)只是这两台机器,都只运行 mongod 进程......

    所以,启动 mongod 进程(在两台不同的机器上)

    mongod --replSet=a --dbpath=/data/ --logpath=/data/mongod.log --port=27017 --fork --logappend --smallfiles --oplogSize=50

    然后用mongo连接其中一个节点:

    mongo 10.1.1.11

    然后你用一个命令来初始化副本集:

    rs.initiate( { _id:“一个”, 版本:1, 成员:[ {_id:0,主机:“10.1.1.11:27017”,优先级:2}, { _id:1,主机:“10.1.1.52:27017”,优先级:1 } ] } )

    如果你真的想在一台物理机上拥有两个不同的RS节点,当然可以多加一个不同的端口...

    这是一台机器的工作示例:

    #> mkdir /data 
    #> mkdir /data2
    
    #> mongod --replSet=a --dbpath=/data --logpath=/data/mongod.log --port=27001 --fork --logappend --smallfiles --oplogSize=50
    
    #> mongod --replSet=a --dbpath=/data2 --logpath=/data2/mongod.log --port=27001 --fork --logappend --smallfiles --oplogSize=50
    
    #> mongo --port=27000
    
    MongoDB Enterprise > rs.initiate({_id:"a", version:1, members:[{_id:0,host:"127.0.0.1:27000",priority:2},{_id:1,host:"127.0.0.1:27001",priority:1}]})
    { "ok" : 1 }
    MongoDB Enterprise a:OTHER>
    MongoDB Enterprise a:PRIMARY> rs.status()
    {
            "set" : "a",
            "date" : ISODate("2016-12-04T08:47:33.254Z"),
            "myState" : 1,
            "term" : NumberLong(1),
            "heartbeatIntervalMillis" : NumberLong(2000),
            "members" : [
                    {
                            "_id" : 0,
                            "name" : "127.0.0.1:27000",
                            "health" : 1,
                            "state" : 1,
                            "stateStr" : "PRIMARY",
                            "uptime" : 451,
                            "optime" : {
                                    "ts" : Timestamp(1480841055, 1),
                                    "t" : NumberLong(1)
                            },
                            "optimeDate" : ISODate("2016-12-04T08:44:15Z"),
                            "electionTime" : Timestamp(1480841054, 1),
                            "electionDate" : ISODate("2016-12-04T08:44:14Z"),
                            "configVersion" : 1,
                            "self" : true
                    },
                    {
                            "_id" : 1,
                            "name" : "127.0.0.1:27001",
                            "health" : 1,
                            "state" : 2,
                            "stateStr" : "SECONDARY",
                            "uptime" : 209,
                            "optime" : {
                                    "ts" : Timestamp(1480841055, 1),
                                    "t" : NumberLong(1)
                            },
                            "optimeDate" : ISODate("2016-12-04T08:44:15Z"),
                            "lastHeartbeat" : ISODate("2016-12-04T08:47:32.831Z"),
                            "lastHeartbeatRecv" : ISODate("2016-12-04T08:47:33.128Z"),
                            "pingMs" : NumberLong(0),
                            "syncingTo" : "127.0.0.1:27000",
                            "configVersion" : 1
                    }
            ],
            "ok" : 1
    }
    

    【讨论】:

    • 我完全按照你说的做了。当我使用 mongo 10.1.1.11 连接到其中一个节点时,它会显示 此节点未使用 replSet 选项启动 请告诉我下一步该怎么做。跨度>
    • 好的。我做了 mongo --port 27000 然后使用 rs.initiate( { _id: "a", version: 1, members: [ { _id: 0, host : "10.1.1.11: 27000”,优先级:2 },{_id:1,主机:“10.1.1.52:27001”,优先级:1},{_id:2,主机:“10.1.1.52:27002”,优先级:2}]}) 输出是在 rs.status() 显示 id:1 和 id:2 仍然无法访问之后。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多