使用三臺物理機作數據庫集羣 任意一臺宕機以後不會影響線上的業務運轉 不會有任何的數據丟失 複製代碼
採用的是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 排版