问题描述
我想向我的 mongodb 集群添加一个远程分片,但它不起作用。
这是我的 docker-compose.yml 文件:
server1.example.com
int data_socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
server2.example.com
version: '3.7'
networks:
mongo-net:
name: mongo-net
services:
mongoset2:
container_name: mongoset2
image: mongo
entrypoint: ["/usr/bin/mongod","--shardsvr","--keyFile","/data/file.key","--replSet","rs","--journal","--bind_ip_all","--port","27017","--dbpath","/data/db"]
ports:
- "27018:27017"
restart: always
networks:
- mongo-net
volumes:
- "./scripts/file.key:/data/file.key"
- "./volumes/set2:/data/db"
mongoset1:
container_name: mongoset1
image: mongo
entrypoint: ["/usr/bin/mongod","/data/db"]
ports:
- "27019:27017"
restart: always
networks:
- mongo-net
volumes:
- "./scripts/file.key:/data/file.key"
- "./volumes/set1:/data/db"
mongoset0:
container_name: mongoset0
image: mongo
command: bash -c "/usr/bin/mongod --shardsvr --keyFile /data/file.key --replSet rs --journal --bind_ip_all --port 27017 --dbpath /data/db"
ports:
- "27017:27017"
restart: always
networks:
- mongo-net
volumes:
- "./scripts/setup.sh:/scripts/setup.sh"
- "./scripts/file.key:/data/file.key"
- "./dump:/dump"
- "./volumes/set0:/data/db"
configset2:
container_name: configset2
image: mongo
entrypoint: [ "/usr/bin/mongod","--configsvr","configrs","/data/db" ]
ports:
- "27022:27017"
restart: always
networks:
- mongo-net
volumes:
- "./scripts/file.key:/data/file.key"
- "./volumes/config2:/data/db"
configset1:
container_name: configset1
image: mongo
entrypoint: [ "/usr/bin/mongod","/data/db" ]
ports:
- "27021:27017"
restart: always
networks:
- mongo-net
volumes:
- "./scripts/file.key:/data/file.key"
- "./volumes/config1:/data/db"
configset0:
container_name: configset0
image: mongo
command: bash -c "/usr/bin/mongod --configsvr --keyFile /data/file.key --replSet configrs --bind_ip_all --port 27017 --dbpath /data/db"
ports:
- "27020:27017"
restart: always
networks:
- mongo-net
volumes:
- "./scripts/configsetup.sh:/scripts/setup.sh"
- "./scripts/file.key:/data/file.key"
- "./dump:/dump"
- "./volumes/config0:/data/db"
routerset:
container_name: routerset
image: mongo
command: bash -c "/usr/bin/mongos --keyFile /data/file.key --configdb configrs/server1.example.com:27020,server1.example.com:27021,server1.example.com:27022 --bind_ip_all --port 40000"
ports:
- "40000:40000"
restart: always
networks:
- mongo-net
volumes:
- "./scripts/setup.sh:/scripts/setup.sh"
- "./scripts/file.key:/data/file.key"
- "./dump:/dump"
- "./volumes/set0:/data/db"
两台服务器上的所有密钥文件都相同。
在 server1.example.com 上,我有一个名为“rs”的副本集在端口 27017-27019 上运行,一个名为“configrs”的配置副本集在端口 27020-27022 上运行。
在 server2.example.com 上,我有一个名为“rs1”的副本集在端口 27017-27019 上运行。 Mongos 能够连接到两台服务器上的配置。
我还可以从两台服务器连接到各个 mongod 实例。在 server1.example.com 上,我可以添加任何托管在 server1 上的分片,没有任何问题。但是,如果我尝试添加托管在 server2.example.com 上的分片,则会出现此错误:
version: '3.7'
networks:
mongo-net:
name: mongo-net
services:
mongoset2:
container_name: mongoset2
image: mongo
entrypoint: [ "/usr/bin/mongod","rs1","27017" ]
ports:
- "27018:27017"
restart: always
networks:
- mongo-net
volumes:
- "./scripts/file.key:/data/file.key"
- "./volumes/set2:/data/db"
mongoset1:
container_name: mongoset1
image: mongo
entrypoint: [ "/usr/bin/mongod","27017" ]
ports:
- "27019:27017"
restart: always
networks:
- mongo-net
volumes:
- "./scripts/file.key:/data/file.key"
- "./volumes/set1:/data/db"
mongoset0:
container_name: mongoset0
image: mongo
command: bash -c "/usr/bin/mongod --keyFile /data/file.key --replSet rs1 --shardsvr --bind_ip_all --port 27017"
ports:
- "27017:27017"
restart: always
networks:
- mongo-net
volumes:
- "./scripts/setup.sh:/scripts/setup.sh"
- "./scripts/file.key:/data/file.key"
- "./dump:/dump"
- "./volumes/set0:/data/db"
我初始化了所有的副本集,并且每个副本集都选择了一个主副本。所有副本集的辅助节点都运行良好。
我用来初始化副本集的示例:(它与 server1.example.com 和配置服务器相同,除了“host”字段更改为 server1 并且“_id”为“rs”或“configrs” )
{
"ok" : 0,"errmsg" : "Failed to refresh the balancer settings :: caused by :: Could not find host matching read preference { mode: \"nearest\" } for set configrs","code" : 133,"codeName" : "FailedToSatisfyReadPreference","operationTime" : Timestamp(1611315488,1),"$clusterTime" : {
"clusterTime" : Timestamp(1611315489,"signature" : {
"hash" : BinData(0,"+c2FEjazBmDu29xu7uUEBPHNv9U="),"keyId" : NumberLong("6920547010965667861")
}
}
}
这是我用来添加远程分片的命令:
var cfg = {
"_id": "rs1","version": 1,"members": [
{
"_id": 0,"host": "server2.example.com:27017","priority": 2
},{
"_id": 1,"host": "server2.example.com:27018","priority": 1
},{
"_id": 2,"host": "server2.example.com:27019","priority": 1
}
]
};
rs.initiate(cfg,{ force: true });
请帮我解决这个问题我已经被困了太久了
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)