目錄
- 1. 適用場景
- 2. 集群搭建
- 如何搭建
- 搭建實例
- Linux搭建實例(待定)
- Windows搭建實例
- 1.資源規劃
- 2. 配置conf文件
- 3. 按順序啟動不同角色的mongodb實例
- 4. 初始化config、shard集群信息
- 5. 通過router進行分片配置
1. 適用場景
- 數據量大影響性能
數據量大概達到千萬級或億級的時候,數據庫相關的操作效率可能會下降,這時候可以考慮分片,減小壓力
- 部分數據遷移
想要把當前數據庫中某幾個集合的一部分遷移出去時,可以借助分片的效果實現。這個需求一般優先考慮其他方法,因為搭建分片需要一點時間,而且事后需要恢復到原來的模式。所以建議只當成一種可選或備用方案,或者其他方案效率更低或者不可以用時可以考慮使用這個方法。
說明:上面僅為工作中遇到的場景,還有其他場景。
2. 集群搭建
如何搭建
1.資源規劃
1)節點規劃
官網介紹中mongodb分片式集群架構包含了router、config、shard三種不同類型的節點,他們之間的聯系如下圖:
圖片源:https://www.mongodb.com/zh-cn/docs/manual/sharding/
在官方文檔中,給出了不同環境下節點個數的建議。對于正式環境,官方推薦方案如圖,也就是說config、shard都要配置成副本集模式,且節點最好為3個以上,即推薦至少10個節點,其中,config為3個節點以上的副本集群,shard1為3個節點以上的副本集群,shard2為3個節點以上的副本集群,router至少1個。
對于測試的話,至少需要三個節點,即router、config、shards各一個節點。
說明:configs、shards如果只配置一個節點也必須配置成副本集,如果不配置成副本集無法啟動對應實例為configs、shards。
關于配置幾個分片,官方也給了建議:
2)服務器資源規劃
跟副本集一樣,考慮服務器、端口、相關文件位置(一般會需要數據、日志、配置、pid等文件,數據和配置是必須的,其他的根據自己的需求),方便后續操作和運維。
- 服務器:如果是遷移用可以根據實際情況選擇,如果是業務用,一般選擇多個服務器,而不是同一臺服務器
- 端口:一般使用默認端口27017,但有的時候為了安全或者端口已經被占用的情況,就需要根據實際需求和情況另選
- 配置conf文件
- 按順序啟動不同角色的mongodb實例
- 初始化config、shard集群信息
- 通過router進行分片配置
搭建實例
Linux搭建實例(待定)
Windows搭建實例
1.資源規劃
1)節點規劃:一個router、一個config集群(3個節點)、兩個分片集群(每個集群3個節點)
2)服務器資源規劃
以單臺服務器為例進行測試
對應物理文件結構如下面的圖,分別用于對應mongo實例的數據、配置文件、日志文件位置。
因為每個shard和config都使用了3個節點的集群,所以節點數量比較多,配置也相對較多。
2. 配置conf文件
這一步既是區分是否是集群,也是區分是什么集群的關鍵。在分片模式,router、config、shard的配置稍有差別,具體如下:
shard1配置文件
#mongodb端口
port=37027#綁定ip,只有這個ip才可以訪問上mongodb;0.0.0.0表示所有的都可以訪問,如果要做安全管控可以限制ip
bind_ip=0.0.0.0# 日志文件的路徑
logpath=D:\mysoftware\MongoDB\zone\ser1\log\mongodb37027.log# 數據文件的目錄
dbpath=D:\mysoftware\MongoDB\zone\ser1\data0-1#日志以追加的方式存在
logappend=true# fork=true linux以后臺方式啟動,在window上沒有用# 此參數較大比較好,單位是 MB,默認是磁盤可用空間的 5%
oplogSize=1024# 復制集的名稱,同一個復制集的名稱必須要相同
replSet=myreplace1
shard2只需要把replSet=myreplace1中的myreplace1換成對應副本集名稱以及對應實例的端口、文件位置即可。
說明:這里對于充當shard的配置參數可以寫在配置文件中,也可以在啟動時加在啟動命令上。
yml格式的配置:
sharding:
# 指定當前節點在分片集群中的角色(shardsvr代表分片節點)clusterRole: shardsvr
啟動命令指定:
mongod.exe --shardsvr --config "D:\mysoftware\MongoDB\zone\ser1\data0-1\s1config1.conf"
非yml格式如何配置
說明:這個還沒試過,不確定對不對,要驗證一下。
sharding.clusterRole = shardsvr
config集群配置文件:
bind_ip=0.0.0.0
port=27027
dbpath=D:\mysoftware\MongoDB\zone\config\c1
logpath=D:\mysoftware\MongoDB\zone\config\log\config1.log
logappend=true
replSet=config# 這里加入configsvr參數配置,表名用于充當config
configsvr=trueoplogSize=1024
router配置文件:
router的配置中并沒有dbpath,因為它只充當一個轉發角色,并不實際存儲數據,實際數據是來源于分片。
bind_ip=0.0.0.0
port=17017# mongos.log 需要提前在 los 中建好
logpath=D:\mysoftware\MongoDB\zone\router\log\mongos17017.log
logappend=true
#這里使用的是config的ip和端口,所以可以先配置config的,再配router,不容易混亂
configdb=config/localhost:27027,localhost:27028,localhost:27029
3. 按順序啟動不同角色的mongodb實例
啟動順序:config、shard、router
啟動config:
mongod.exe --config "D:\mysoftware\MongoDB\zone\config\c1\config1.conf"
啟動shard:
mongod.exe --shardsvr --config "D:\mysoftware\MongoDB\zone\ser1\data0-1\s1config1.conf"
注意事項:如果配置文件中沒有配置是否充當shard,需要加上–shardsvr參數
啟動router:
mongos.exe --config "D:\mysoftware\MongoDB\zone\router\17017.conf"
注意事項:啟動router的時候使用的是mongos而不是mongod,否則報錯:
Error parsing INI config file: unrecognised option ‘configdb‘
4. 初始化config、shard集群信息
shard1集群
mongosh.exe --port 37027
rs.initiate({_id : "myreplace1",members : [{_id : 0,host : "localhost:37027","priority":10},{_id : 1,host : "localhost7:37028"},{_id : 2,host : "localhost:37029"}]
});
shard2集群
mongosh.exe --port 47027
rs.initiate({_id : "myreplace2",members : [{_id : 0,host : "localhost:47027","priority":10},{_id : 1,host : "localhost:47028"},{_id : 2,host : "localhost7:47029"}]
});
config集群
mongosh.exe --port 27027
rs.initiate({_id : "config",members : [{_id : 0,host : "localhost:27027","priority":10},{_id : 1,host : "localhost:27028"},{_id : 2,host : "localhost:27029"}]
});
5. 通過router進行分片配置
進入router:
mongosh.exe --port 17017
添加分片1:
sh.addShard("myreplace1/localhost:37027,localhost:37028,localhost:37029")
添加分片2:
sh.addShard("myreplace2/localhost:47027,localhost:47028,localhost:47029")
說明:配置到spring boot中的話,直接配置router的信息就行,如果單獨想用某個分片的,也可以配置對應分片的信息,都是連接的。
參考教程:
主要參考:https://www.cnblogs.com/niCong/p/17071290.html
這個主要參考通過conf文件配置實例角色:https://new-coder.com/pc/post/c48555c9362b