這個系列大致想跟大家分享以下篇章(我會持續更新的↖(^ω^)↗): 1、mongo 3.4分片集群系列之一:淺談分片集群 2、mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3、mongo 3.4分片集群系列之三:搭建分片集群 -- 哈希分片 + 安全 4、mongo 3.4分片集群系 ...
這個系列大致想跟大家分享以下篇章(我會持續更新的↖(^ω^)↗):
2、mongo 3.4分片集群系列之二:搭建分片集群--哈希分片
3、mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全
4、mongo 3.4分片集群系列之四:搭建分片集群 -- 哈希分片 + 安全 + 區域
5、mongo 3.4分片集群系列之五:詳解平衡器
6、mongo 3.4分片集群系列之六:詳解配置資料庫
7、mongo 3.4分片集群系列之七:配置資料庫管理
8、mongo 3.4分片集群系列之八:分片管理
這一篇是實踐篇。
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/