這個系列大體想跟你們分享如下篇章:html
一、mongo 3.4分片集羣系列之一:淺談分片集羣mongodb
二、mongo 3.4分片集羣系列之二:搭建分片集羣--哈希分片數據庫
三、mongo 3.4分片集羣系列之三:搭建分片集羣--哈希分片 + 安全vim
四、mongo 3.4分片集羣系列之四:搭建分片集羣--哈希分片 + 安全 + 區域數組
六、mongo 3.4分片集羣系列之六:詳解配置數據庫服務器
八、mongo 3.4分片集羣系列之八:分片管理post
這一篇是實踐篇。ui
1、說說分片集羣的架構
這裏要搭建的分片集羣架構以下:
2個mongos,1個三個成員的副本集配置服務器,2個單實例的分片。圖示以下:
簡單介紹一下MongoDB分片集羣由如下組件組成:
2、分片前注意事項
關於分片集羣的一些注意點,請參閱:mongo 3.4分片集羣系列之一:淺談分片集羣 ,其中第4點,分片前考慮事項。
好啦。慎重考慮完分片前考慮事項的話,接下來就進入實踐吧~~~
3、搭建哈希分片集羣
下面是參照官網的 https://docs.mongodb.com/manual/tutorial/deploy-sharded-cluster-ranged-sharding/
3.1、搭建前準備:
物理環境:
我這邊是用兩個虛擬機模仿兩臺服務器的(真實服務器也按照這個方法實踐,能夠行得通)。
IP分別爲192.168.209.155和192.168.209.156。其中,這兩個IP之間必須互通。即192.168.209.155能夠ping通192.168.209.156,192.168.209.156也能夠ping通192.168.209.155。
配置大體以下:(此操做是創建在mongo3.4版本)
名稱 | 主機 | 端口 | 副本集 | Data路徑 | Log路徑 | 配置文件路徑 |
router1 | 192.168.209.155 | 6666 | 無 | 無 | 無 | /etc/mongo_router1.conf |
router2 | 192.168.209.156 | 6666 | 無 | 無 | 無 | /etc/mongo_router2.conf |
config1 | 192.168.209.155 | 6000 | mongo_config | /mongo_config1/data | /mongo_config1/log | /mongo_config1/mongo_config1.conf |
config2 | 6001 | /mongo_config2/data | /mongo_config2/log | /mongo_config2/mongo_config2.conf | ||
config3 | 6002 | /mongo_config3/data | /mongo_config3/log | /mongo_config3/mongo_config3.conf | ||
shard1 | 192.168.209.155 | 6100 | 無 | /mongo_shard1/data | /mongo_shard1/log | /mongo_shard1/mongo_shard1.conf |
shard2 | 192.168.209.156 | 6100 | 無 | /mongo_shard2/data | /mongo_shard2/log | /mongo_shard2/mongo_shard2.conf |
接下來就來搭建哈希分片集羣咯~~~
3.2、建立配置服務器副本集
部署具備三個成員的配置服務器副本集。
(1) mongo_config1 (在192.168.209.155上操做)
1) 建立數據路徑文件夾和日誌路徑文件夾
# sudo mkdir –p /mongo_config1/data
# sudo mkdir –p /mongo_config1/log
2) 建立配置文件
# sudo vim /mongo_config1/mongo_config1.conf
文件中的配置以下:(全部空位都是空格,不是TAB鍵哦,大小寫是嚴格區分的)
storage:
dbPath: 「/mongo_config1/data」
indexBuildRetry: false
systemLog:
destination: file
path: 「/mongo_config1/log/mongo_config1.log
net:
port: 6000
sharding:
clusterRole: configsvr
replication:
replSetName: mongo_config
以下圖:
關於mongo3.4的配置文件YAML格式,也能夠參閱個人另外一篇文章mongo3.4 配置文件 注意事項
3) 啓動mongod實例
# mongod --fork --config /mongo_config1/mongo_config1.conf
--fork 是以線程方式啓動mongod服務
--config 指定配置文件路徑
(2) mongo_config2(在192.168.209.155上操做)
1) 建立數據路徑文件夾和日誌路徑文件夾
# sudo mkdir –p /mongo_config2/data
# sudo mkdir –p /mongo_config2/log
2) 建立配置文件
# sudo vim /mongo_config2/mongo_config2.conf
文件中的配置以下:(全部空位都是空格,不是TAB鍵哦,大小寫是嚴格區分的)
storage:
dbPath: 「/mongo_config2/data」
indexBuildRetry: false
systemLog:
destination: file
path: 「/mongo_config2/log/mongo_config2.log
net:
port: 6001
sharding:
clusterRole: configsvr
replication:
replSetName: mongo_config
以下圖:
3) 啓動mongod實例
# mongod --fork --config /mongo_config2/mongo_config2.conf
--fork 是以線程方式啓動mongod服務
--config 指定配置文件路徑
(3) mongo_config3 (在192.168.209.155上操做)
1) 建立數據路徑文件夾和日誌路徑文件夾
# sudo mkdir –p /mongo_config3/data
# sudo mkdir –p /mongo_config3/log
2) 建立配置文件
# sudo vim /mongo_config3/mongo_config3.conf
文件中的配置以下:(全部空位都是空格,不是TAB鍵哦,大小寫是嚴格區分的)
storage:
dbPath: 「/mongo_config3/data」
indexBuildRetry: false
systemLog:
destination: file
path: 「/mongo_config3/log/mongo_config3.log
net:
port: 6002
sharding:
clusterRole: configsvr
replication:
replSetName: mongo_config
以下圖:
3) 啓動mongod實例
# mongod --fork --config /mongo_config3/mongo_config3.conf
--fork 是以線程方式啓動mongod服務
--config 指定配置文件路徑
(4) 初始化副本集mongo_config(在192.168.209.155上操做)
1) 鏈接任意一個mongod實例
# sudo mongod --port 6000
2) 初始化副本集
輸入如下命令:(這裏只是爲了方便理解,其實命令行打成一行便可)
rs.initiate(
{
_id: "mongo_config",
configsvr: true,
members: [
{ _id : 0, host : "192.168.209.155:6000" },
{ _id : 1, host : "192.168.209.155:6001" },
{ _id : 2, host : "192.168.209.155:6002" }
]
}
)
_id:必須匹配傳遞給mongod 的--replSet參數。
members:是一個數組,每一個副本集成員都須要一個文檔。
configsvr:必須設置true。
3.3、建立分片
(1) mongo_shard1 (在192.168.209.155上操做)
1) 爲mongo_shard1建立配置文件
# sudo vim /mongo_shard1/mongo_shard1.conf
文件中的配置以下:(全部空位都是空格,不是TAB鍵哦,大小寫是嚴格區分的)
storage:
dbPath: 「/mongo_shard1/data」
indexBuildRetry: false
systemLog:
destination: file
path: 「/mongo_shard1/log/mongo_shard1.log
net:
port: 6100
sharding:
clusterRole: shardsvr
以下圖:
2) 啓動mongod實例
# mongod --fork --config /mongo_shard1/mongo_shard1.conf
(2) mongo_shard2(在192.168.209.156上操做)
1) 爲mongo_shard2建立配置文件
# sudo vim /mongo_shard2/mongo_shard2.conf
文件中的配置以下:(全部空位都是空格,不是TAB鍵哦,大小寫是嚴格區分的)
storage:
dbPath: 「/mongo_shard2/data」
indexBuildRetry: false
systemLog:
destination: file
path: 「/mongo_shard2/log/mongo_shard2.log
net:
port: 6101
sharding:
clusterRole: shardsvr
以下圖:
2) 啓動mongod實例
# mongod --fork --config /mongo_shard2/mongo_shard2.conf
3.3、建立路由
(1) mongo_router1(在192.168.209.155上操做)
1) 爲mongo_router1建立配置文件
# sudo vim /etc/mongo_router1.conf
文件中的配置以下:(全部空位都是空格,不是TAB鍵哦,大小寫是嚴格區分的)
net:
port: 6666
sharding:
configDB: mongo_config/192.168.209.155:6000,192.168.209.155:6001,192.168.209.155:6002
以下圖:
2) 啓動mongos實例
# mongos --config /etc/mongo_router1.conf
(2) mongo_router2(在192.168.209.156上操做)
1) 爲mongo_router2建立配置文件
# sudo vim /etc/mongo_router2.conf
文件中的配置以下:(全部空位都是空格,不是TAB鍵哦,大小寫是嚴格區分的)
net:
port: 6666
sharding:
configDB: mongo_config/192.168.209.155:6000,192.168.209.155:6001,192.168.209.155:6002
以下圖:
2) 啓動mongos實例
# mongos --config /etc/mongo_router2.conf
3.4、添加分片到集羣
(1) 鏈接任意一個mongos,這裏鏈接mongo_router1(在192.168.209.155上操做)
# mongo --port 6666
(2) 添加分片
1) 添加第一個分片mongo_shard1
sh.addShard(「192.168.209.155:6100」);
2) 添加第二個分片mongo_shard2
sh.addShard(「192.168.209.156:6100」);
3.5、爲數據庫啓用分片(直接在3.4的窗口中運行便可)
sh.enableSharding(「databaseName」);
其中databaseName,爲要分片的數據庫。
3.6、使用哈希分片分片集合(直接在3.5的窗口中運行便可)
這裏有兩種狀況,一種是空集合,另外一種是有數據的集合,但對於這兩種狀況都建議用如下方法。
(1) 對於肯定做爲分片鍵的字段,創建哈希索引
use databaseName;
db.collectionName.createIndex(Name:」hashed」);
其中,databaseName是3.5啓用的分片數據庫名稱;collectionName是要分片的集合;Name是做爲分片鍵的字段。
(2) 哈希分片
sh.shardCollection(「databaseName.collectionName」,{Name:」hashed」})
其中,databaseName是3.5啓用的分片數據庫名稱;collectionName是要分片的集合;Name是做爲分片鍵的字段。
--------------------------------------- over ------------------------------------------------------
以上資料,大部分是參考官網的資料,在此表示感謝。
https://docs.mongodb.com/manual/tutorial/deploy-sharded-cluster-ranged-sharding/