1.分片的原理概述
分片就是把數據分成塊,再把塊存儲到不同的服務器上,mongodb的分片是自動分片的,當用戶發送讀寫數據請求的時候,先經過mongos這個路由層,mongos路由層去配置服務器請求分片的信息,再來判斷這個請求應該去那一台服務器上讀寫數據。
2.分片的條件
1):服務器磁盤不夠的時候
2):服務器出現寫瓶頸的時候
3):想將大量數據放在內存中提高性能
3.分片中的角色,有三種:
1):配置服務器:存放分片信息,分片的數據與片的關系
2):mongos路由:是一個路由進程,把所有對mongodb的數據讀寫請求根據配置服務器的配置信息分配到不同的分片服務器上去。本身不存儲數據與配置信息,但會緩存配置信息,
3):片:指一個分片,這個分片可以是一台服務器,也可以是多台服務器組成的一個集群。對應的多台服務器中只能有一台主服務器
4.分片是以什么來分的
1)以數據庫來分,那就是把數據庫里的多個集合分到不同的分片上,同一個集合的數據只能在同一分片上
2)以某個集合中的某個鍵來分,這個鍵稱為片鍵,根據設置的片鍵把一個集合的數據分到不同的片上,這個分片鍵可以是多個鍵的組合鍵
5.實際的生產環境
在一個實際的生產環境中會同時存在多個配置服務器,多個mongos路由進程,多個分片,每一個分片會是一個副本集。
因為配置服務器與mongos路由進程占用的資源非常少,所以有些人會通過不同的端口,把他們配置到同一台服務器上,但是不要把多個配置服務器與多個mongos路由進程配置在同一台服務器,最好是一台服務器一個配置服務器,一個路由進程就夠,如果是多個在同一台服務器,當這個服務器掛掉了,那你的整個分片的架構可能就跟着掛了,不能提供服務了,下面給出一個參考的架構圖。
6.搭建分片服務器架構的流程
1):創建配置服務器的數據與日志目錄,並配置和啟動配置服務器,主要參數:mongod --configsvr ..............
2):創建mongos的日志目錄,因為mongos本身不存儲數據,所以不用數據目錄。接着配置和啟動mongos路由進程,啟動的時候是以mongos,來啟動的。主要參數:mongos --configdb 配置服務器的ip:端口 ............
3) : 創建分片副本集的數據與日志目錄,配置和啟動副本集,主要參數:mongod --shardsvr --replSet 副本集名 .........
4):對分片副本集進行初始化,設置仲裁節點,把初始化信息寫在config變量中,接着用rs.initiate(config)進行初始化
5):登錄mongos,把副本集增加到切片中,必須在admin數據中運行命令:db.runCommand({"addshard":"副本集名稱/ip:port,ip:port......","name":"分片名"})
6):打開數據庫和集合的分片功能db.runCommand({"enableSharding":"數據庫"}),db.runCommand({"shardcollection":"數據庫.集合名","key":{"鍵名":1}})