2018年09月10日 10:51:38 weixin_42190794 閱讀數 4368更多linux
分片則指爲處理大量數據,將數據分開存儲,不一樣服務器保存不一樣的數據,它們的數據總和即爲整個數據集。追求的是高性能。
在生產環境中,一般是這兩種技術結合使用,分片+副本集mongodb
系統系統 centos7.0
三臺服務器:192.168.221.130/131/132
安裝包: mongodb-linux-x86_64-3.6.3.tgz數據庫
服務器130 | 服務器131 | 服務器132 |
---|---|---|
mongos | mongos | mongos |
config server | config server | config server |
shard server1 主節點 | shard server1副節點 | shard server1 仲裁 |
shard server2 仲裁 | shard server2主節點 | shard server2 副節點 |
shard server3 副節點 | shard server3 仲裁 | shard server3 主節點 |
端口分配:mongos:23000 config:24000 shard1:25001 shard2:25002 shard3:25003centos
1.安裝mongodb(見另外一博客:mongodb 3.63(Linux CentOS 7安裝 )服務器
2.分別在每臺機器創建conf、mongos、config、shard一、shard二、shard3六個目錄,由於mongos不存儲數據,只須要創建日誌文件目錄便可。app
mkdir -p /usr/local/mongodb/conf mkdir -p /usr/local/mongodb/mongos/log mkdir -p /usr/local/mongodb/config/data mkdir -p /usr/local/mongodb/config/log mkdir -p /usr/local/mongodb/shard1/data mkdir -p /usr/local/mongodb/shard1/log mkdir -p /usr/local/mongodb/shard2/data mkdir -p /usr/local/mongodb/shard2/log mkdir -p /usr/local/mongodb/shard3/data mkdir -p /usr/local/mongodb/shard3/log
關閉三臺機器的防火牆nosql
systemctl stop firewalld.service
Mongodb3.4之後要求配置服務器也建立副本集,否則集羣搭建不成功。添加配置文件。性能
vi /usr/local/mongodb/conf/config.conf
進入後添加如下配置信息測試
## 配置文件內容 pidfilepath = /usr/local/mongodb/config/log/configsrv.pid dbpath = /usr/local/mongodb/config/data logpath = /usr/local/mongodb/config/log/congigsrv.log logappend = true bind_ip = 0.0.0.0 port = 24000 fork = true #declare this is a config db of a cluster; configsvr = true #副本集名稱 replSet=configs #設置最大鏈接數 maxConns=20000
分別啓動三臺服務器的config server,鏈接:進入/usr/local/mongodb/bin目錄下
./mongod -f /usr/local/mongodb/conf/config.conf
登陸任意一臺配置服務器,初始化配置副本集,登陸:進入/usr/local/mongodb/bin目錄下
./mongo --port 24000
使用admin數據庫
use admin
config變量:
config = { ... _id : "configs", ... members : [ ... {_id : 0, host : "192.168.221.130:24000" }, ... {_id : 1, host : "192.168.221.131:24000" }, ... {_id : 2, host : "192.168.221.132:24000" } ... ] ... }
初始化副本集:
rs.initiate(config)
這一步很是重要,必須初始化成功。不成功的話,路由服務器與配置服務器鏈接不上。
其中,」_id」 : 「configs」應與配置文件中配置的 replicaction.replSetName 一致,」members」 中的 「host」 爲三個節點的 ip 和 port。
配置分片副本集(三臺機器)。
1.設置第一個分片副本集
配置文件:
vi /usr/local/mongodb/conf/shard1.conf
配置:
#配置文件內容 #——————————————– pidfilepath = /usr/local/mongodb/shard1/log/shard1.pid dbpath = /usr/local/mongodb/shard1/data logpath = /usr/local/mongodb/shard1/log/shard1.log logappend = true bind_ip = 0.0.0.0 port = 25001 fork = true #副本集名稱 replSet=shard1 #declare this is a shard db of a cluster; shardsvr = true #設置最大鏈接數 maxConns=20000
啓動三臺服務器的shard1 server,進入/usr/local/mongodb/bin目錄下:
./mongod -f /usr/local/mongodb/conf/shard1.conf
登錄任意一臺服務器,初始化副本集,進入/usr/local/mongodb/bin目錄下:
./mongo --port 25001
使用admin數據庫
use admin
定義副本集配置,第三個節點的 「arbiterOnly」:true 表明其爲仲裁節點。
config = { ... _id : "shard1", ... members : [ ... {_id : 0, host : "192.168.221.130:25001" }, ... {_id : 1, host : "192.168.221.131:25001" }, ... {_id : 2, host : "192.168.221.132:25001」 , arbiterOnly: true } ... ] ... }
初始化副本集配置
rs.initiate(config);
2.設置第二個分片
進入配置文件
vi /usr/local/mongodb/conf/shard2.conf
添加配置:
#配置文件內容 #——————————————– pidfilepath = /usr/local/mongodb/shard2/log/shard2.pid dbpath = /usr/local/mongodb/shard2/data logpath = /usr/local/mongodb/shard2/log/shard2.log logappend = true bind_ip = 0.0.0.0 port = 25002 fork = true #副本集名稱 replSet=shard2 #declare this is a shard db of a cluster; shardsvr = true #設置最大鏈接數 maxConns=20000
啓動三臺服務器的shard2 server,進入/usr/local/mongodb/bin目錄下:
./mongod -f /usr/local/mongodb/conf/shard2.conf
登錄任意一臺服務器,進入/usr/local/mongodb/bin初始化副本集
./mongo --port 25002
使用admin數據庫
use admin
定義副本集配置
config = { ... _id : "shard2", ... members : [ ... {_id : 0, host : "192.168.221.130:25002" , arbiterOnly: true }, ... {_id : 1, host : "192.168.221.131:25002" }, ... {_id : 2, host : "192.168.221.132:25002" } ... ] ... }
初始化副本集配置
rs.initiate(config);
設置第三個分片副本集
配置文件代碼以下:
vi /usr/local/mongodb/conf/shard3.conf
進入配置:
#配置文件內容 #——————————————– pidfilepath = /usr/local/mongodb/shard3/log/shard3.pid dbpath = /usr/local/mongodb/shard3/data logpath = /usr/local/mongodb/shard3/log/shard3.log logappend = true bind_ip = 0.0.0.0 port = 25003 fork = true #副本集名稱 replSet=shard3 #declare this is a shard db of a cluster; shardsvr = true #設置最大鏈接數 maxConns=20000
啓動三臺服務器的shard3 server,進入/usr/local/mongodb/bin目錄下:
./mongod -f /usr/local/mongodb/conf/shard3.conf
登錄任意一臺服務器,初始化副本集
./mongo --port 25003
使用admin數據庫
use admin
定義副本集配置
config = { ... _id : "shard3", ... members : [ ... {_id : 0, host : "192.168.221.130:25003" }, ... {_id : 1, host : "192.168.221.131:25003" , arbiterOnly: true}, ... {_id : 2, host : "192.168.221.132:25003" } ... ] ... }
初始化副本集配置
rs.initiate(config);
先啓動配置服務器和分片服務器,後啓動路由實例啓動路由實例:(三臺機器)
vi /usr/local/mongodb/conf/mongos.conf
配置:
#內容 pidfilepath = /usr/local/mongodb/mongos/log/mongos.pid logpath = /usr/local/mongodb/mongos/log/mongos.log logappend = true bind_ip = 0.0.0.0 port = 23000 fork = true #監聽的配置服務器,只能有1個或者3個 configs爲配置服務器的副本集名字 configdb = configs/192.168.221.130:24000,192.168.221.131:24000,192.168.221.131:24000 #設置最大鏈接數 maxConns=20000
啓動三臺服務器的mongos server,進入/usr/local/mongodb/bin目錄下:
./mongos -f /usr/local/mongodb/conf/mongos.conf
目前搭建了mongodb配置服務器、路由服務器,各個分片服務器,不過應用程序鏈接到mongos路由服務器並不能使用分片機制,還須要在程序裏設置分片配置,讓分片生效。
登錄任意一臺mongos,進入/usr/local/mongodb/bin目錄下
./mongo --port 23000
使用admin數據庫
use admin
串聯路由服務器與分配副本集
sh.addShard("shard1/192.168.221.130:25001,192.168.221.131:25001,192.168.221.132:25001") sh.addShard("shard2/192.168.221.130:25002,192.168.221.131:25002,192.168.221.132:25002") sh.addShard("shard3/192.168.221.130:25003,192.168.221.131:25003,192.168.221.132:25003")
查看集羣狀態
sh.status()
目前配置服務、路由服務、分片服務、副本集服務都已經串聯起來了,但咱們的目的是但願插入數據,數據可以自動分片。鏈接在mongos上,準備讓指定的數據庫、指定的集合分片生效。
指定testdb分片生效
db.runCommand( { enablesharding :"testdb"});
指定數據庫裏須要分片的集合和片鍵
db.runCommand( { shardcollection : "testdb.table1",key : {id: 「hashed」} } )
咱們設置testdb的 table1 表須要分片,根據 id 自動分片到 shard1 ,shard2,shard3 上面去。要這樣設置是由於不是全部mongodb 的數據庫和表 都須要分片!插入100000條數據測試:
查看分配狀態
db.table1.stats();
以下圖所示:shard1總數:33755條
Shard2總數:33143條
Shard3總數:33102條
出現以下問題,說明初始化沒有成功,若是初始化沒有成功會致使後面路由服務器啓動不了
出現以下問題須要關閉進程。重啓服務
上述一臺服務器不能初始化,能夠選擇另外一臺(配置能夠選取任何一臺)
分片則指爲處理大量數據,將數據分開存儲,不一樣服務器保存不一樣的數據,它們的數據總和即爲整個數據集。追求的是高性能。
在生產環境中,一般是這兩種技術結合使用,分片+副本集
系統系統 centos7.0
三臺服務器:192.168.221.130/131/132
安裝包: mongodb-linux-x86_64-3.6.3.tgz
服務器130 | 服務器131 | 服務器132 |
---|---|---|
mongos | mongos | mongos |
config server | config server | config server |
shard server1 主節點 | shard server1副節點 | shard server1 仲裁 |
shard server2 仲裁 | shard server2主節點 | shard server2 副節點 |
shard server3 副節點 | shard server3 仲裁 | shard server3 主節點 |
端口分配:mongos:23000 config:24000 shard1:25001 shard2:25002 shard3:25003
1.安裝mongodb(見另外一博客:mongodb 3.63(Linux CentOS 7安裝 )
2.分別在每臺機器創建conf、mongos、config、shard一、shard二、shard3六個目錄,由於mongos不存儲數據,只須要創建日誌文件目錄便可。
mkdir -p /usr/local/mongodb/conf mkdir -p /usr/local/mongodb/mongos/log mkdir -p /usr/local/mongodb/config/data mkdir -p /usr/local/mongodb/config/log mkdir -p /usr/local/mongodb/shard1/data mkdir -p /usr/local/mongodb/shard1/log mkdir -p /usr/local/mongodb/shard2/data mkdir -p /usr/local/mongodb/shard2/log mkdir -p /usr/local/mongodb/shard3/data mkdir -p /usr/local/mongodb/shard3/log
關閉三臺機器的防火牆
systemctl stop firewalld.service
Mongodb3.4之後要求配置服務器也建立副本集,否則集羣搭建不成功。添加配置文件。
vi /usr/local/mongodb/conf/config.conf
進入後添加如下配置信息
## 配置文件內容 pidfilepath = /usr/local/mongodb/config/log/configsrv.pid dbpath = /usr/local/mongodb/config/data logpath = /usr/local/mongodb/config/log/congigsrv.log logappend = true bind_ip = 0.0.0.0 port = 24000 fork = true #declare this is a config db of a cluster; configsvr = true #副本集名稱 replSet=configs #設置最大鏈接數 maxConns=20000
分別啓動三臺服務器的config server,鏈接:進入/usr/local/mongodb/bin目錄下
./mongod -f /usr/local/mongodb/conf/config.conf
登陸任意一臺配置服務器,初始化配置副本集,登陸:進入/usr/local/mongodb/bin目錄下
./mongo --port 24000
使用admin數據庫
use admin
config變量:
config = { ... _id : "configs", ... members : [ ... {_id : 0, host : "192.168.221.130:24000" }, ... {_id : 1, host : "192.168.221.131:24000" }, ... {_id : 2, host : "192.168.221.132:24000" } ... ] ... }
初始化副本集:
rs.initiate(config)
這一步很是重要,必須初始化成功。不成功的話,路由服務器與配置服務器鏈接不上。
其中,」_id」 : 「configs」應與配置文件中配置的 replicaction.replSetName 一致,」members」 中的 「host」 爲三個節點的 ip 和 port。
配置分片副本集(三臺機器)。
1.設置第一個分片副本集
配置文件:
vi /usr/local/mongodb/conf/shard1.conf
配置:
#配置文件內容 #——————————————– pidfilepath = /usr/local/mongodb/shard1/log/shard1.pid dbpath = /usr/local/mongodb/shard1/data logpath = /usr/local/mongodb/shard1/log/shard1.log logappend = true bind_ip = 0.0.0.0 port = 25001 fork = true #副本集名稱 replSet=shard1 #declare this is a shard db of a cluster; shardsvr = true #設置最大鏈接數 maxConns=20000
啓動三臺服務器的shard1 server,進入/usr/local/mongodb/bin目錄下:
./mongod -f /usr/local/mongodb/conf/shard1.conf
登錄任意一臺服務器,初始化副本集,進入/usr/local/mongodb/bin目錄下:
./mongo --port 25001
使用admin數據庫
use admin
定義副本集配置,第三個節點的 「arbiterOnly」:true 表明其爲仲裁節點。
config = { ... _id : "shard1", ... members : [ ... {_id : 0, host : "192.168.221.130:25001" }, ... {_id : 1, host : "192.168.221.131:25001" }, ... {_id : 2, host : "192.168.221.132:25001」 , arbiterOnly: true } ... ] ... }
初始化副本集配置
rs.initiate(config);
2.設置第二個分片
進入配置文件
vi /usr/local/mongodb/conf/shard2.conf
添加配置:
#配置文件內容 #——————————————– pidfilepath = /usr/local/mongodb/shard2/log/shard2.pid dbpath = /usr/local/mongodb/shard2/data logpath = /usr/local/mongodb/shard2/log/shard2.log logappend = true bind_ip = 0.0.0.0 port = 25002 fork = true #副本集名稱 replSet=shard2 #declare this is a shard db of a cluster; shardsvr = true #設置最大鏈接數 maxConns=20000
啓動三臺服務器的shard2 server,進入/usr/local/mongodb/bin目錄下:
./mongod -f /usr/local/mongodb/conf/shard2.conf
登錄任意一臺服務器,進入/usr/local/mongodb/bin初始化副本集
./mongo --port 25002
使用admin數據庫
use admin
定義副本集配置
config = { ... _id : "shard2", ... members : [ ... {_id : 0, host : "192.168.221.130:25002" , arbiterOnly: true }, ... {_id : 1, host : "192.168.221.131:25002" }, ... {_id : 2, host : "192.168.221.132:25002" } ... ] ... }
初始化副本集配置
rs.initiate(config);
設置第三個分片副本集
配置文件代碼以下:
vi /usr/local/mongodb/conf/shard3.conf
進入配置:
#配置文件內容 #——————————————– pidfilepath = /usr/local/mongodb/shard3/log/shard3.pid dbpath = /usr/local/mongodb/shard3/data logpath = /usr/local/mongodb/shard3/log/shard3.log logappend = true bind_ip = 0.0.0.0 port = 25003 fork = true #副本集名稱 replSet=shard3 #declare this is a shard db of a cluster; shardsvr = true #設置最大鏈接數 maxConns=20000
啓動三臺服務器的shard3 server,進入/usr/local/mongodb/bin目錄下:
./mongod -f /usr/local/mongodb/conf/shard3.conf
登錄任意一臺服務器,初始化副本集
./mongo --port 25003
使用admin數據庫
use admin
定義副本集配置
config = { ... _id : "shard3", ... members : [ ... {_id : 0, host : "192.168.221.130:25003" }, ... {_id : 1, host : "192.168.221.131:25003" , arbiterOnly: true}, ... {_id : 2, host : "192.168.221.132:25003" } ... ] ... }
初始化副本集配置
rs.initiate(config);
先啓動配置服務器和分片服務器,後啓動路由實例啓動路由實例:(三臺機器)
vi /usr/local/mongodb/conf/mongos.conf
配置:
#內容 pidfilepath = /usr/local/mongodb/mongos/log/mongos.pid logpath = /usr/local/mongodb/mongos/log/mongos.log logappend = true bind_ip = 0.0.0.0 port = 23000 fork = true #監聽的配置服務器,只能有1個或者3個 configs爲配置服務器的副本集名字 configdb = configs/192.168.221.130:24000,192.168.221.131:24000,192.168.221.131:24000 #設置最大鏈接數 maxConns=20000
啓動三臺服務器的mongos server,進入/usr/local/mongodb/bin目錄下:
./mongos -f /usr/local/mongodb/conf/mongos.conf
目前搭建了mongodb配置服務器、路由服務器,各個分片服務器,不過應用程序鏈接到mongos路由服務器並不能使用分片機制,還須要在程序裏設置分片配置,讓分片生效。
登錄任意一臺mongos,進入/usr/local/mongodb/bin目錄下
./mongo --port 23000
使用admin數據庫
use admin
串聯路由服務器與分配副本集
sh.addShard("shard1/192.168.221.130:25001,192.168.221.131:25001,192.168.221.132:25001") sh.addShard("shard2/192.168.221.130:25002,192.168.221.131:25002,192.168.221.132:25002") sh.addShard("shard3/192.168.221.130:25003,192.168.221.131:25003,192.168.221.132:25003")
查看集羣狀態
sh.status()
目前配置服務、路由服務、分片服務、副本集服務都已經串聯起來了,但咱們的目的是但願插入數據,數據可以自動分片。鏈接在mongos上,準備讓指定的數據庫、指定的集合分片生效。
指定testdb分片生效
db.runCommand( { enablesharding :"testdb"});
指定數據庫裏須要分片的集合和片鍵
db.runCommand( { shardcollection : "testdb.table1",key : {id: 「hashed」} } )
咱們設置testdb的 table1 表須要分片,根據 id 自動分片到 shard1 ,shard2,shard3 上面去。要這樣設置是由於不是全部mongodb 的數據庫和表 都須要分片!插入100000條數據測試:
查看分配狀態
db.table1.stats();
以下圖所示:shard1總數:33755條
Shard2總數:33143條
Shard3總數:33102條
出現以下問題,說明初始化沒有成功,若是初始化沒有成功會致使後面路由服務器啓動不了
出現以下問題須要關閉進程。重啓服務
上述一臺服務器不能初始化,能夠選擇另外一臺(配置能夠選取任何一臺)