MongoDB3.6集羣搭建(分片+副本集)

MongoDB3.6集羣搭建(分片+副本集)

2018年09月10日 10:51:38 weixin_42190794 閱讀數 4368更多linux

分類專欄: nosql mongo集羣sql

MongoDB3.6集羣搭建(分片+副本集)

分片則指爲處理大量數據,將數據分開存儲,不一樣服務器保存不一樣的數據,它們的數據總和即爲整個數據集。追求的是高性能。
在生產環境中,一般是這兩種技術結合使用,分片+副本集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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

這裏寫圖片描述
關閉三臺機器的防火牆nosql

systemctl stop firewalld.service
  • 1
  • 1

二、 配置服務器搭建副本集

Mongodb3.4之後要求配置服務器也建立副本集,否則集羣搭建不成功。添加配置文件。性能

vi /usr/local/mongodb/conf/config.conf
  • 1
  • 1

進入後添加如下配置信息測試

## 配置文件內容
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

分別啓動三臺服務器的config server,鏈接:進入/usr/local/mongodb/bin目錄下

./mongod -f /usr/local/mongodb/conf/config.conf
  • 1
  • 1

登陸任意一臺配置服務器,初始化配置副本集,登陸:進入/usr/local/mongodb/bin目錄下

./mongo --port 24000
  • 1
  • 1

使用admin數據庫

use admin
  • 1
  • 1

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" }
...     ]
... }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

初始化副本集:

rs.initiate(config)
  • 1
  • 1

這一步很是重要,必須初始化成功。不成功的話,路由服務器與配置服務器鏈接不上。
其中,」_id」 : 「configs」應與配置文件中配置的 replicaction.replSetName 一致,」members」 中的 「host」 爲三個節點的 ip 和 port。

三、 三臺分片服務器搭建副本集

配置分片副本集(三臺機器)。
1.設置第一個分片副本集
配置文件:

vi /usr/local/mongodb/conf/shard1.conf
  • 1
  • 1

配置:

#配置文件內容
#——————————————–
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

啓動三臺服務器的shard1 server,進入/usr/local/mongodb/bin目錄下:

./mongod -f /usr/local/mongodb/conf/shard1.conf
  • 1
  • 1

登錄任意一臺服務器,初始化副本集,進入/usr/local/mongodb/bin目錄下:

./mongo --port 25001
  • 1
  • 1

使用admin數據庫

use admin
  • 1
  • 1

定義副本集配置,第三個節點的 「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 }
...     ]
... }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

初始化副本集配置

rs.initiate(config);
  • 1
  • 1

2.設置第二個分片
進入配置文件

vi /usr/local/mongodb/conf/shard2.conf
  • 1
  • 1

添加配置:

#配置文件內容
#——————————————–
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

啓動三臺服務器的shard2 server,進入/usr/local/mongodb/bin目錄下:

./mongod -f /usr/local/mongodb/conf/shard2.conf
  • 1
  • 1

登錄任意一臺服務器,進入/usr/local/mongodb/bin初始化副本集

./mongo --port 25002
  • 1
  • 1

使用admin數據庫

use admin
  • 1
  • 1

定義副本集配置

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" }
...     ]
... }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

初始化副本集配置

rs.initiate(config);
  • 1
  • 1

設置第三個分片副本集
配置文件代碼以下:

vi /usr/local/mongodb/conf/shard3.conf
  • 1
  • 1

進入配置:

#配置文件內容
#——————————————–
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

啓動三臺服務器的shard3 server,進入/usr/local/mongodb/bin目錄下:

./mongod -f /usr/local/mongodb/conf/shard3.conf
  • 1
  • 1

登錄任意一臺服務器,初始化副本集

./mongo --port 25003
  • 1
  • 1

使用admin數據庫

use admin
  • 1
  • 1

定義副本集配置

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" }
...     ]
... }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

初始化副本集配置

rs.initiate(config);
  • 1
  • 1

四、 配置路由服務器

先啓動配置服務器和分片服務器,後啓動路由實例啓動路由實例:(三臺機器)

vi /usr/local/mongodb/conf/mongos.conf
  • 1
  • 1

配置:

#內容
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

啓動三臺服務器的mongos server,進入/usr/local/mongodb/bin目錄下:

./mongos -f /usr/local/mongodb/conf/mongos.conf
  • 1
  • 1

五、分片

目前搭建了mongodb配置服務器、路由服務器,各個分片服務器,不過應用程序鏈接到mongos路由服務器並不能使用分片機制,還須要在程序裏設置分片配置,讓分片生效。
登錄任意一臺mongos,進入/usr/local/mongodb/bin目錄下

./mongo --port 23000
  • 1
  • 1

使用admin數據庫

use  admin
  • 1
  • 1

串聯路由服務器與分配副本集

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")
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

查看集羣狀態

sh.status()
  • 1
  • 1

六、 測試

目前配置服務、路由服務、分片服務、副本集服務都已經串聯起來了,但咱們的目的是但願插入數據,數據可以自動分片。鏈接在mongos上,準備讓指定的數據庫、指定的集合分片生效。
指定testdb分片生效

db.runCommand( { enablesharding :"testdb"});
  • 1
  • 1

這裏寫圖片描述
指定數據庫裏須要分片的集合和片鍵

db.runCommand( { shardcollection : "testdb.table1",key : {id: 「hashed」} } )
  • 1
  • 1

這裏寫圖片描述
咱們設置testdb的 table1 表須要分片,根據 id 自動分片到 shard1 ,shard2,shard3 上面去。要這樣設置是由於不是全部mongodb 的數據庫和表 都須要分片!插入100000條數據測試:
這裏寫圖片描述
查看分配狀態

db.table1.stats();
  • 1
  • 1

以下圖所示:shard1總數:33755條
這裏寫圖片描述
Shard2總數:33143條
這裏寫圖片描述
Shard3總數:33102條
這裏寫圖片描述

七、注意事項

出現以下問題,說明初始化沒有成功,若是初始化沒有成功會致使後面路由服務器啓動不了
這裏寫圖片描述
出現以下問題須要關閉進程。重啓服務
這裏寫圖片描述
上述一臺服務器不能初始化,能夠選擇另外一臺(配置能夠選取任何一臺)

MongoDB3.6集羣搭建(分片+副本集)

分片則指爲處理大量數據,將數據分開存儲,不一樣服務器保存不一樣的數據,它們的數據總和即爲整個數據集。追求的是高性能。
在生產環境中,一般是這兩種技術結合使用,分片+副本集

  • 環境準備
  • 配置服務器搭建副本集
  • 三臺分片服務器搭建副本集
  • 配置路由服務器
  • 分片
  • 測試
  • 注意事項

一、 環境準備

系統系統 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

這裏寫圖片描述
關閉三臺機器的防火牆

systemctl stop firewalld.service
  • 1
  • 1

二、 配置服務器搭建副本集

Mongodb3.4之後要求配置服務器也建立副本集,否則集羣搭建不成功。添加配置文件。

vi /usr/local/mongodb/conf/config.conf
  • 1
  • 1

進入後添加如下配置信息

## 配置文件內容
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

分別啓動三臺服務器的config server,鏈接:進入/usr/local/mongodb/bin目錄下

./mongod -f /usr/local/mongodb/conf/config.conf
  • 1
  • 1

登陸任意一臺配置服務器,初始化配置副本集,登陸:進入/usr/local/mongodb/bin目錄下

./mongo --port 24000
  • 1
  • 1

使用admin數據庫

use admin
  • 1
  • 1

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" }
...     ]
... }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

初始化副本集:

rs.initiate(config)
  • 1
  • 1

這一步很是重要,必須初始化成功。不成功的話,路由服務器與配置服務器鏈接不上。
其中,」_id」 : 「configs」應與配置文件中配置的 replicaction.replSetName 一致,」members」 中的 「host」 爲三個節點的 ip 和 port。

三、 三臺分片服務器搭建副本集

配置分片副本集(三臺機器)。
1.設置第一個分片副本集
配置文件:

vi /usr/local/mongodb/conf/shard1.conf
  • 1
  • 1

配置:

#配置文件內容
#——————————————–
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

啓動三臺服務器的shard1 server,進入/usr/local/mongodb/bin目錄下:

./mongod -f /usr/local/mongodb/conf/shard1.conf
  • 1
  • 1

登錄任意一臺服務器,初始化副本集,進入/usr/local/mongodb/bin目錄下:

./mongo --port 25001
  • 1
  • 1

使用admin數據庫

use admin
  • 1
  • 1

定義副本集配置,第三個節點的 「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 }
...     ]
... }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

初始化副本集配置

rs.initiate(config);
  • 1
  • 1

2.設置第二個分片
進入配置文件

vi /usr/local/mongodb/conf/shard2.conf
  • 1
  • 1

添加配置:

#配置文件內容
#——————————————–
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

啓動三臺服務器的shard2 server,進入/usr/local/mongodb/bin目錄下:

./mongod -f /usr/local/mongodb/conf/shard2.conf
  • 1
  • 1

登錄任意一臺服務器,進入/usr/local/mongodb/bin初始化副本集

./mongo --port 25002
  • 1
  • 1

使用admin數據庫

use admin
  • 1
  • 1

定義副本集配置

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" }
...     ]
... }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

初始化副本集配置

rs.initiate(config);
  • 1
  • 1

設置第三個分片副本集
配置文件代碼以下:

vi /usr/local/mongodb/conf/shard3.conf
  • 1
  • 1

進入配置:

#配置文件內容
#——————————————–
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

啓動三臺服務器的shard3 server,進入/usr/local/mongodb/bin目錄下:

./mongod -f /usr/local/mongodb/conf/shard3.conf
  • 1
  • 1

登錄任意一臺服務器,初始化副本集

./mongo --port 25003
  • 1
  • 1

使用admin數據庫

use admin
  • 1
  • 1

定義副本集配置

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" }
...     ]
... }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

初始化副本集配置

rs.initiate(config);
  • 1
  • 1

四、 配置路由服務器

先啓動配置服務器和分片服務器,後啓動路由實例啓動路由實例:(三臺機器)

vi /usr/local/mongodb/conf/mongos.conf
  • 1
  • 1

配置:

#內容
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

啓動三臺服務器的mongos server,進入/usr/local/mongodb/bin目錄下:

./mongos -f /usr/local/mongodb/conf/mongos.conf
  • 1
  • 1

五、分片

目前搭建了mongodb配置服務器、路由服務器,各個分片服務器,不過應用程序鏈接到mongos路由服務器並不能使用分片機制,還須要在程序裏設置分片配置,讓分片生效。
登錄任意一臺mongos,進入/usr/local/mongodb/bin目錄下

./mongo --port 23000
  • 1
  • 1

使用admin數據庫

use  admin
  • 1
  • 1

串聯路由服務器與分配副本集

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")
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

查看集羣狀態

sh.status()
  • 1
  • 1

六、 測試

目前配置服務、路由服務、分片服務、副本集服務都已經串聯起來了,但咱們的目的是但願插入數據,數據可以自動分片。鏈接在mongos上,準備讓指定的數據庫、指定的集合分片生效。
指定testdb分片生效

db.runCommand( { enablesharding :"testdb"});
  • 1
  • 1

這裏寫圖片描述
指定數據庫裏須要分片的集合和片鍵

db.runCommand( { shardcollection : "testdb.table1",key : {id: 「hashed」} } )
  • 1
  • 1

這裏寫圖片描述
咱們設置testdb的 table1 表須要分片,根據 id 自動分片到 shard1 ,shard2,shard3 上面去。要這樣設置是由於不是全部mongodb 的數據庫和表 都須要分片!插入100000條數據測試:
這裏寫圖片描述
查看分配狀態

db.table1.stats();
  • 1
  • 1

以下圖所示:shard1總數:33755條
這裏寫圖片描述
Shard2總數:33143條
這裏寫圖片描述
Shard3總數:33102條
這裏寫圖片描述

七、注意事項

出現以下問題,說明初始化沒有成功,若是初始化沒有成功會致使後面路由服務器啓動不了
這裏寫圖片描述
出現以下問題須要關閉進程。重啓服務
這裏寫圖片描述
上述一臺服務器不能初始化,能夠選擇另外一臺(配置能夠選取任何一臺)

相關文章
相關標籤/搜索