這個系列大致想跟大家分享以下篇章(我會持續更新的↖(^ω^)↗): 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、 簡單介紹區域
區域,簡單來說,就是將一個或幾個分片劃分為一組,也就是一個區域,那麼標記為該區域的數據在平衡的集群中,只會存儲在該區域內的分片中。
舉個例子(借用官網的例子說明):
定義區域前的架構
分片集群部署目前由三個分片組成。
定義區域後的架構
根據需要,定義兩個區域“recent”和“archive”,區域“recent”由shard1和shard2組成,區域“archive”由shard3組成
關於區域和分片鍵的一些說明:
每個區域覆蓋一個或多個分片鍵值範圍。區域覆蓋的每個範圍總是包括其下邊界,而不包括上邊界。
區域不能共用範圍,也不能具有重疊的範圍。
當定義要覆蓋的區域的新範圍時,必須使用分片鍵中包含的欄位。如果使用複合分片鍵,則範圍必須包含分片鍵的首碼。
2、 本篇分片集群的架構
主機 |
分片 |
分片名稱 |
區域 |
192.168.209.155 |
mongo_shard3 |
shard0002 |
notGsxt |
mongo_shard1 |
shard0000 |
isGsxt |
|
mongo_shard2 |
shard0001 |
||
192.168.209.156 |
mongo_shard4 |
shard0003 |
由2個主機構成,其中主機192.168.209.155提供3個分片,分片名稱分別為mongo_shard1,mongo_shard2,mongo_shard3。主機192.168.209.156供1分片,為mongo_shard4。主機192.168.209.155的mongo_shard1,mongo_shard2,和主機192.168.209.156的mongo_shard4構成區域isGsxt,主機192.168.209.155的mongo_shard2構成區域notGsxt。(配置伺服器和路由都在192.168.209.155上)
3、 具體操作步驟
本篇文章是認為已經搭建了哈希分片+安全的,有關如何搭建哈希分片+安全的集群,請參考上一篇文章:mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全
以下步驟,除了第(1)步,其餘的步驟,都在主機192.168.209.155上操作
1) 首先,搭建一個4個哈希分片的集群
有關如何搭建哈希分片+安全的集群,請參考上一篇文章:mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全
2) 禁用平衡器
為了降低性能影響,可以禁用集群上的平衡器。
在主機192.168.209.155上,連接到一個mongos實例
# mongo --port 6666 -u bear -p bear --authenticationDatabase admin
use admin;
sh.stopBalancer();
3) 將每個分片添加到適當的區域
查看集群內分片的名稱
sh.status();
主機192.168.209.155的mongo_shard1,mongo_shard2,和主機192.168.209.156的mongo_shard4構成區域isGsxt。
sh.addShardTag(shard0000,”isGsxt”);
sh.addShardTag(shard0001,”isGsxt”);
sh.addShardTag(shard0003,”isGsxt”);
主機192.168.209.155的mongo_shard2構成區域notGsxt。
sh.addShardTag(shard0002,”notGsxt”);
4) 定義每個區域的範圍
用集合上的分片鍵定義區域範圍,對於每個集合都要執行此操作,此操作是以集合為單位,而不是整個資料庫。集合必須是已分片的集合。
舉個例子,gsxt資料庫的gansu_test1集合,其中分片鍵為Name欄位。將其定義到isGsxt區域中。
sh.addTagRange(
“gsxt.gansu_test1”,
{“Name”:MinKey},
{“Name”:MaxKey},
“isGsxt”
)
5) 啟用平衡器
sh.startBalancer();
6) 確認更改
sh.status();
7) 測試
可以嘗試往gsxt.gansu_test1集合中插入數據,然後在用sh.status(),查看數據的塊分佈情況。
--------------------------------------- over ------------------------------------------------------
以上資料,大部分是參考官網的資料,在此表示感謝。
https://docs.mongodb.com/manual/core/zone-sharding/