使用三台物理机作数据库集群 任意一台宕机以后不会影响线上的业务运转 不会有任何的数据丢失 复制代码
采用的是Replica Sets+Sharded Cluster的集群 具备高可用,故障转移,分布式存储等特性 复制代码
依上图所示咱们这次集群配置以下: 三台物理机,每台物理机拥有完整的分片集群配置,均可独立运行 配置服务器:使用使用3个配置服务器确保元数据完整性。 路由(mongos)进程:使用3个路由进程实现平衡,提升客户端接入性能 3 个分片进程:Shard11,Shard12,Shard13 组成一个副本集,提供Sharding 中 Shard1 的功能。 3 个分片进程:Shard21,Shard22,Shard23 组成一个副本集,提供Sharding 中 Shard2 的功能。 复制代码
构建一个 mongoDB Sharding Cluster 须要三种角色:shard 服务器(ShardServer)、配置服务器(config Server)、路由进程(Route Process)前端
shard 服务器即存储实际数据的分片, 每一个 shard 能够是一个 mongod 实例, 也能够是一组 mongod 实例构成的 Replica Sets. 为了实现每一个 Shard 内部的故障 自动转换, MongoDB 官方建议每一个 shard 为一组 Replica Sets. 复制代码
为了将一个特定的 collection 存储在多个 shard 中, 须要为该 collection 指定 一个 shard key, 决定该条记录属于哪一个 chunk, 配置服务器能够存储如下信息, 每一个shard节点的配置信息, 每一个chunk的shard key范围, chunk在各shard 的分布状况, 集群中全部 DB 和 collection 的 sharding 配置信息。 复制代码
它是一个前端路由,客户端由此接入, 首先询问配置服务器须要到哪一个 shard 上查询或保存记录, 而后链接相应的 shard 执行操做,最后将结果返回给客户端, 客户端只须要将本来发给 mongod 的查询或更新请求原封不动地发给路由进程, 而没必要关心所操做的记录存储在哪一个shard 上。 复制代码
目前我在本身电脑上搭建该环境即就一台物理机node
mongos1 | mongos2 | mongos3 |
---|---|---|
10011 | 10012 | 10013 |
config1 | config2 | config3 |
---|---|---|
10021 | 10022 | 10023 |
share11 | share12 | share13 |
---|---|---|
10031 | 10032 | 10033 |
share21 | share22 | share23 |
---|---|---|
10041 | 10042 | 10043 |
先建立一个以下的目录结果 mengfaniaodeMBP:third_software mengfanxiao$ tree mongodb/ mongodb/ ├── node1 │ ├── config-server1 │ │ ├── backup │ │ ├── config │ │ │ └── config.conf │ │ └── db │ ├── mongos1 │ │ ├── backup │ │ ├── config │ │ │ └── config.conf │ │ └── db │ ├── shard11 │ │ ├── backup │ │ ├── config │ │ │ └── config.conf │ │ └── db │ └── shard21 │ ├── backup │ ├── config │ │ └── config.conf │ └── db ├── node2 │ ├── config-server2 │ │ ├── backup │ │ ├── config │ │ │ └── config.conf │ │ └── db │ ├── mongos2 │ │ ├── backup │ │ ├── config │ │ │ └── config.conf │ │ └── db │ ├── shard12 │ │ ├── backup │ │ ├── config │ │ │ └── config.conf │ │ └── db │ └── shard22 │ ├── backup │ ├── config │ │ └── config.conf │ └── db └── node3 ├── config ├── config-server3 │ ├── backup │ ├── config │ │ └── config.conf │ └── db ├── db ├── mongos3 │ ├── backup │ ├── config │ │ └── config.conf │ └── db ├── shard13 │ ├── backup │ ├── config │ │ └── config.conf │ └── db └── shard23 ├── backup ├── config │ └── config.conf └── db 若是3台物理机的话 把对应的node1 node2 node3复制过去便可 复制代码
node1/config-server1
docker run --restart=always --privileged=true -p 10021:27019 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --name pro-file-server-config1 mongo:4.0.0 -f /etc/mongod/config.conf --configsvr --replSet "rs-file-server-config-server" --bind_ip_all 复制代码
node2/config-server2
docker run --restart=always --privileged=true -p 10022:27019 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --name pro-file-server-config2 mongo:4.0.0 -f /etc/mongod/config.conf --configsvr --replSet "rs-file-server-config-server" --bind_ip_all 复制代码
node3/config-server3
docker run --restart=always --privileged=true -p 10023:27019 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --name pro-file-server-config3 mongo:4.0.0 -f /etc/mongod/config.conf --configsvr --replSet "rs-file-server-config-server" --bind_ip_all 复制代码
mongo 192.168.50.100:10021
复制代码
这里的客户端是我在本地另外又安装了一个mongodb 我这里是mac安装mongod方式 非mac 请跳过web
a、切换brew安装库spring
brew tap mongodb/brew
复制代码
b、安装mongodb社区版mongodb
brew install mongodb-community
复制代码
c、启动、中止docker
brew services start mongodb-community brew services stop mongodb-community 复制代码
rs.initiate({
_id: "rs-file-server-config-server", configsvr: true, members: [ { _id : 0,host : "192.168.50.100:10021" }, { _id : 1,host : "192.168.50.100:10022" }, { _id : 2, host : "192.168.50.100:10023" } ] }); 注意这里必定要用服务器ip 不要用127.0.0.1 复制代码
rs.status()
复制代码
cd node1/shard11
docker run --restart=always --privileged=true -p 10031:27018 -v $PWD/config:/etc/mongod -v $PWD/backup:/data/backup -v $PWD/db:/data/db -d --name pro-file-server-shard11 mongo:4.0.0 -f /etc/mongod/config.conf --shardsvr --replSet "rs-file-server-shard1-server" --bind_ip_all 复制代码
cd node2/shard12
docker run --restart=always --privileged=true -p 10032:27018 -v $PWD/config:/etc/mongod -v $PWD/backup:/data/backup -v $PWD/db:/data/db -d --name pro-file-server-shard12 mongo:4.0.0 -f /etc/mongod/config.conf --shardsvr --replSet "rs-file-server-shard1-server" --bind_ip_all 复制代码
cd node1/shard13
docker run --restart=always --privileged=true -p 10033:27018 -v $PWD/config:/etc/mongod -v $PWD/backup:/data/backup -v $PWD/db:/data/db -d --name pro-file-server-shard13 mongo:4.0.0 -f /etc/mongod/config.conf --shardsvr --replSet "rs-file-server-shard1-server" --bind_ip_all 复制代码
mongo 127.0.0.1:10031
复制代码
rs.initiate({
_id: "rs-file-server-shard1-server", members: [ { _id : 0, host : "192.168.50.100:10031" }, { _id : 1, host : "192.168.50.100:10032" }, { _id : 2, host : "192.168.50.100:10033" } ] }); 复制代码
cd node1/shard21
docker run --restart=always --privileged=true -p 10041:27018 -v $PWD/config:/etc/mongod -v $PWD/backup:/data/backup -v $PWD/db:/data/db -d --name pro-file-server-shard21 mongo:4.0.0 -f /etc/mongod/config.conf --shardsvr --replSet "rs-file-server-shard2-server" --bind_ip_all 复制代码
node2/shard22
docker run --restart=always --privileged=true -p 10042:27018 -v $PWD/config:/etc/mongod -v $PWD/backup:/data/backup -v $PWD/db:/data/db -d --name pro-file-server-shard22 mongo:4.0.0 -f /etc/mongod/config.conf --shardsvr --replSet "rs-file-server-shard2-server" --bind_ip_all 复制代码
cd node3/shard23
docker run --restart=always --privileged=true -p 10043:27018 -v $PWD/config:/etc/mongod -v $PWD/backup:/data/backup -v $PWD/db:/data/db -d --name pro-file-server-shard23 mongo:4.0.0 -f /etc/mongod/config.conf --shardsvr --replSet "rs-file-server-shard2-server" --bind_ip_all 复制代码
mongo 127.0.0.1:10041
复制代码
rs.initiate({
_id: "rs-file-server-shard2-server", members: [ { _id : 0, host : "192.168.50.100:10041" }, { _id : 1, host : "192.168.50.100:10042" }, { _id : 2, host : "192.168.50.100:10043" } ] }); 复制代码
docker run --restart=always --privileged=true -p 10011:27017 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --entrypoint mongos --name pro-file-server-mongos1 mongo:4.0.0 -f /etc/mongod/config.conf --configdb rs-file-server-config-server/192.168.50.100:10021,192.168.50.100:10022,192.168.50.100:10023 --bind_ip_all
复制代码
docker run --restart=always --privileged=true -p 10012:27017 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --entrypoint mongos --name pro-file-server-mongos2 mongo:4.0.0 -f /etc/mongod/config.conf --configdb rs-file-server-config-server/192.168.50.100:10021,192.168.50.100:10022,192.168.50.100:10023 --bind_ip_all
复制代码
docker run --restart=always --privileged=true -p 10013:27017 -v $PWD/config:/etc/mongod -v $PWD/db:/data/db -d --entrypoint mongos --name pro-file-server-mongos3 mongo:4.0.0 -f /etc/mongod/config.conf --configdb rs-file-server-config-server/192.168.50.100:10021,192.168.50.100:10022,192.168.50.100:10023 --bind_ip_all
复制代码
mongo 127.0.0.1:10011
复制代码
sh.addShard("rs-file-server-shard1-server/192.168.50.100:10031,192.168.50.100:10032,192.168.50.100:10033")
sh.addShard("rs-file-server-shard2-server/192.168.50.100:10041,192.168.50.100:10042,192.168.50.100:10043") 复制代码
mongo 127.0.0.1:10011
复制代码
sh.enableSharding("test")
复制代码
sh.shardCollection("test.user", {"_id": "hashed" })
复制代码
a、切换分片库数据库
use test
复制代码
b、循环插入springboot
for (i = 1; i <= 1000; i=i+1){db.user.insert({'userIndex': 1})}
复制代码
a、查看备份库 每一个备份库都是1000服务器
插入完成以后能够在
127.0.0.1:10011,127.0.0.1:10012,127.0.0.1:10013 三台数据库下分别看到test数据库中名为user的Collection拥有一千条数据, 使用如下代码查询记录数 db.getCollection('user').find({}).count() 结果为1000 复制代码
b、查看分片库 每一个分片库之和为1000app
如今能够链接到 127.0.0.1:10031,127.0.0.1:10041上使用以上命令查询记录数, 会发现两个数据库的记录数只和正好是1000 复制代码
在application.yml配置便可访问mogos数据库:
spring: data : mongodb : uri: mongodb://127.0.0.1:10011,127.0.0.1:10012,127.0.0.1:10013/test 复制代码
https://blog.csdn.net/quanmaoluo5461/article/details/85164588
复制代码
本文使用 mdnice 排版