天天看點

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

目錄

本文唯一缺憾:

1.MongoDB 3.0 更新 4.0後 新特性

2.叢集搭建----Start

      2.1 準備工作

      2.2 MongoDB 安裝

      2.3 MongoDB 叢集安裝

          2.3.1 ConfigServer 安裝

          2.3.2 ShardServer 安裝

                2.3.2.1 Shard1 Server安裝

                2.3.2.2 Shard2 Server安裝

                2.3.2.3 Shard3 Server安裝

         2.3.3 Mongos Server 安裝

         2.3.4 MongoDB 6台伺服器,副本集混合模式叢集搭建完成

    2.4 資料分片操作

         2.4.1.資料分片步驟

         2.4.2 資料分片圖解

              2.4.2.1 集合為空時,分片圖解

              2.4.2.2 集合不為空時,分片圖解(未成功!!!)

    2.5 Primary異常後,Secondary自動切換為 Primary

本文唯一缺憾:(求大佬幫助解決一下哈)

       不解之處:MongoDB現在有3個分片,如果我現在通過 mongos .db.user.insert({name:'xx',age:i}) 存儲了20000條資料有用的資料,我看到都到了shard2上。突然我想起來了我需要對user這個集合分片。在不影響資料的情況下,如何将shard2上的資料分到 shard1和shard3 上面。搭建Mongo叢集卡在這了,死活搞不懂這塊,能給提供意見嗎?  如果實作對user表分片,然後查資料,使用hash分散 ,是能夠正确分片的。就是前面那種情況搞了很長時間沒搞懂。大佬有啥見解能幫助小的我嗎?謝謝  

1.MongoDB 3.0 更新 4.0後 新特性

    1.取消了 M-S 模式叢集,隻支援 M-A-S 模式叢集,但是這種模式也不常用(如下圖所示)

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

2.MongoDB 4.0 重大變動,就是開始支援事務,但是目前不支援跨文檔事務(後續4.x版本有望實作跨文檔事務)   

3.MongoDB叢集開發,常用的模式是 副本集叢集混合模式開發(如下圖所示)

   所有的請求都是先達到 Mongos,通過Mongos排程來擷取想要的資料

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

2.叢集搭建----Start

  2.1 準備工作

    1.MongoDB 4.0.12 下載下傳(請點選:下載下傳)

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

    2.Linux環境:CentOS 6.x

    3.MongoDB安裝路徑:/usr/local/env/mongodb

    4.MongoDB叢集安裝路徑:/usr/local/cluster/mongodb

    5.虛拟機(6台)     

       IP分布:192.168.204.201 ~ 192.168.204.206

       HA 叢集:3台 Mongos Server     

                        3台   Config Server   

                        3個分片 Shar1 Server ~ Shard3 Server。Shard1 ~ Shard3  随機配置設定到6台伺服器上,保證資料的高可用

      伺服器規劃:

192.168.204.201 192.168.204.202 192.168.204.203 192.168.204.204 192.168.204.205 192.168.204.206
Mongos Server Mongos Server Mongos Server Config Server Config Server Config Server
Shard1 Server Shard2 Server Shard3 Server
Shard1 Server Shard2 Server Shard3 Server
Shard1 Server Shard2 Server Shard3 Server

      端口分劃分:     

Mongos Server :27017

Config Server   :27017 (Mongos在201~203伺服器,Config 在204~206伺服器,是以兩個端口号一樣不沖突)

Shard1 Server :27027

Shard2 Server :27037

Shard3 Server :27047

你也可以來更多的分片,這個可以自行決定,如下圖配置設定等(為了保證叢集的高可用,起碼得有3個分片吧)

192.168.204.201 192.168.204.202 192.168.204.203 192.168.204.204 192.168.204.205 192.168.204.206
Mongos Server Mongos Server Mongos Server Config Server Config Server Config Server
Shard1 Server Shard2 Server Shard3 Server Shard4 Server Shard5 Server Shard6 Server
Shard6 Server Shard1 Server Shard2 Server Shard3 Server Shard4 Server Shard5 Server
Shard5 Server Shard6 Server Shard1 Server Shard2 Server Shard3 Server Shard4 Server
你可以繼續添加分片......      也可以繼續添加 Mongos Server......     繼續添加ConfigServer......     起碼保證高可用的奇數台(3台)即可

      端口分劃分: 

       防火牆問題,線上環境處于安全考慮不建議關閉防火牆,建議開放指定端口。如何開放指定端口,請點選連結參考:Linux開放指定端口。如果你是本地測試,也可以關閉防火牆

       叢集之間互相通信,需要六台伺服器同時開放 27017、270027、27037、27047端口。

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

      scp 指令 免密登入,将 修改後的 iptables 檔案發送給叢集中的其他5台伺服器。開放後切記重新開機防火牆使其生效

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

2.2 MongoDB 安裝

       ①解壓縮 tgz 安裝包到指定目錄 /usr/local/env/mongodb

      指令:tar -zxvf mongodb-linux-x86_64-4.0.12.tgz -C /usr/local/env/

       ②重命名解壓縮後的檔案夾

      指令:mv mongodb-linux-x86_64-4.0.12 mongodb

       ③配置環境變量(将MongoDB路徑配置到 PATH路徑 下)

      指令:vi /etc/profile       添加 mongodb/bin 目錄到 PATH 下 (根據自己安裝目錄添加)

      配置完成,使用 指令:source /etc/profile 使配置生效

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

       ④配置完成,檢查是否配置成功

      指令:mongo --version          如下圖,說明配置成功
MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

       ⑤六台伺服器,都需要執行上面 4 步。你可以使用scp 指令來完成。

          scp 指令的使用請參考:Linux指令---scp

          使用 scp 指令,嫌輸密碼麻煩,免密登入的使用,你可以參考:Linux免密登陸設定

 2.3 MongoDB 叢集安裝

建立目錄 /usr/local/cluster/mongodb,将MongoDB叢集統一安裝到該路徑下,每台伺服器都是該目錄。

  2.3.1 ConfigServer 安裝

    ①根據規劃,在204、205、206三台伺服器,開始配置 ConfigServer

在204、205、206 三台伺服器,建立config目錄,在config目錄下建立 data、log檔案夾(分别用于存放資料相關和日志相關内容)

mkdir -p /usr/local/cluster/mongodb/config/data

mkdir -p /usr/local/cluster/mongodb/config/log       此時3台伺服器,均建立 data、log檔案夾成功後,開啟下一步操作

    ②在config目錄下,添加配置檔案 config.conf,内容如下:

       必改内容:path、dbPath、pidFilePath、port、bindIp 這5處。replSetName如果修改,則3台必須一起修改,保證config Server叢集名稱一緻。

  204伺服器:(切記路徑配置一定要準确,如果配置錯誤,則會報 --fork 錯誤,切記,建議 pwd 複制)

## content
systemLog:
  destination: file
  logAppend: true
  path: /usr/local/cluster/mongodb/config/log/config.log

# Where and how to store data.
storage:
  dbPath: /usr/local/cluster/mongodb/config/data
  journal:
    enabled: true
# how the process runs
processManagement:
  fork: true
  pidFilePath: /usr/local/cluster/mongodb/config/log/config.pid

# network interfaces
net:
  port: 27017
  bindIp: 192.168.204.204

#operationProfiling:
replication:
    replSetName: config

sharding:
    clusterRole: configsvr
           

205伺服器:(除bindIp選項外,其他與204伺服器配置,因為每台伺服器路徑一緻,端口使用也一緻)

## content
systemLog:
  destination: file
  logAppend: true
  path: /usr/local/cluster/mongodb/config/log/config.log

# Where and how to store data.
storage:
  dbPath: /usr/local/cluster/mongodb/config/data
  journal:
    enabled: true
# how the process runs
processManagement:
  fork: true
  pidFilePath: /usr/local/cluster/mongodb/config/log/config.pid

# network interfaces
net:
  port: 27017
  bindIp: 192.168.204.205

#operationProfiling:
replication:
    replSetName: config

sharding:
    clusterRole: configsvr
           

206伺服器:(除bindIp選項外,其他與204伺服器配置,因為每台伺服器路徑一緻,端口使用也一緻)  

## content
systemLog:
  destination: file
  logAppend: true
  path: /usr/local/cluster/mongodb/config/log/config.log

# Where and how to store data.
storage:
  dbPath: /usr/local/cluster/mongodb/config/data
  journal:
    enabled: true
# how the process runs
processManagement:
  fork: true
  pidFilePath: /usr/local/cluster/mongodb/config/log/config.pid

# network interfaces
net:
  port: 27017
  bindIp: 192.168.204.206

#operationProfiling:
replication:
    replSetName: config

sharding:
    clusterRole: configsvr
           

③使用如下指令,同時啟動叢集 3 台伺服器節點的 ConfigServer

指令:mongod -f /usr/local/cluster/mongodb/config/config.conf

  如下圖所示,則說明服務啟動成功。

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

④現在三台伺服器之間沒有任何關系,都是彼此單獨運作。怎麼才能将他們聯系起來呢?

1.連上 Config Server叢集 3 台伺服器中的任意一台(本文連接配接 204 伺服器)

   指令:mongo 192.168.204.204:27017    或者    mongo --host 192.168.204.204 --port 27017

2.切換到 admin 表

   指令:use admin

3.執行配置檔案(此處的_id就是config.conf配置檔案中的replSetName,第二個_id為0、1、2,隻要不重複即可,随你定義)

   cfg={

           _id:"config",members:[

               {_id:0,host:'192.168.204.204:27017'},

               {_id:1,host:'192.168.204.205:27017'},

               {_id:2,host:'192.168.204.206:27017'}

           ]

       }

 rs.initiate(cfg)     --此處成功,會提示 "ok":1,如下圖所示

4.此時三台服務便組成了一個叢集,通過如下指令可以檢視目前叢集每個節點的狀态

   指令:rs.status()

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

⑤此時,Config Server叢集配置完成

2.3.2 ShardServer 安裝

  2.3.2.1 Shard1 Server安裝

    ①根據規劃,在201、203、204三台伺服器,分别安裝 Shard1 分片及其副本

在201、203、204 三台伺服器,建立shard1 目錄,然後分别在shard1目錄下建立 data、log檔案夾(分别用于存放資料相關和日志相關内容)

mkdir -p /usr/local/cluster/mongodb/shard1/data

mkdir -p /usr/local/cluster/mongodb/shard1/log       此時3台伺服器,均建立 data、log檔案夾成功後,開啟下一步操作

②在shard1 目錄下,添加配置檔案 shard1.conf,内容如下:

      必改内容:path、dbPath、pidFilePath、port、bindIp 這5處。replSetName如果修改,則3台必須一起修改,保證shard1分片副本之間名稱一緻。根據規劃,shard1Server端口設定為:27027

  201伺服器:(切記路徑配置一定要準确,如果配置錯誤,則會報 --fork 錯誤,切記,建議 pwd 複制)

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /usr/local/cluster/mongodb/shard1/log/shard1.log

# Where and how to store data.
storage:
  dbPath: /usr/local/cluster/mongodb/shard1/data
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
       cacheSizeGB: 20

# how the process runs
processManagement:
  fork: true
  pidFilePath: /usr/local/cluster/mongodb/shard1/log/shard1.pid

# network interfaces
net:
  port: 27027
  bindIp: 192.168.204.201

#operationProfiling:
replication:
    replSetName: shard1
sharding:
    clusterRole: shardsvr
           

203伺服器:(除bindIp選項外,其他與201伺服器配置,因為每台伺服器路徑一緻,端口使用也一緻,均為27027)

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /usr/local/cluster/mongodb/shard1/log/shard1.log

# Where and how to store data.
storage:
  dbPath: /usr/local/cluster/mongodb/shard1/data
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
       cacheSizeGB: 20

# how the process runs
processManagement:
  fork: true
  pidFilePath: /usr/local/cluster/mongodb/shard1/log/shard1.pid

# network interfaces
net:
  port: 27027
  bindIp: 192.168.204.203

#operationProfiling:
replication:
    replSetName: shard1
sharding:
    clusterRole: shardsvr
           

204伺服器:(除bindIp選項外,其他與201伺服器配置,因為每台伺服器路徑一緻,端口使用也一緻,均為27027)

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /usr/local/cluster/mongodb/shard1/log/shard1.log

# Where and how to store data.
storage:
  dbPath: /usr/local/cluster/mongodb/shard1/data
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
       cacheSizeGB: 20

# how the process runs
processManagement:
  fork: true
  pidFilePath: /usr/local/cluster/mongodb/shard1/log/shard1.pid

# network interfaces
net:
  port: 27027
  bindIp: 192.168.204.204

#operationProfiling:
replication:
    replSetName: shard1
sharding:
    clusterRole: shardsvr
           

③使用如下指令,同時啟動叢集 3 台伺服器節點的 ConfigServer

指令:mongod -f /usr/local/cluster/mongodb/shard1/shard1.conf

  如下圖所示,則說明服務啟動成功。

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

④現在三台伺服器之間沒有任何關系,都是彼此單獨運作。怎麼才能将他們聯系起來呢?

1.連上 Shard1 Server分片及副本 3 台伺服器中的任意一台(本文連接配接 201 伺服器)

   指令:mongo 192.168.204.201:27027    或者    mongo --host 192.168.204.201 --port 27027

2.切換到 admin 表

   指令:use admin

3.定義副本集配置,并執行配置檔案(此處的_id就是config.conf配置檔案中的replSetName,第二個_id為0、1、2,隻要不重複即可,随你定義)

   cfg= {

        _id : "shard1",

         members : [

             {_id : 0, host : "192.168.204.201:27027" },

             {_id : 1, host : "192.168.204.203:27027" },

             {_id : 2, host : "192.168.204.204:27027" }

         ]

     }

 rs.initiate(cfg)     --此處成功,會提示 "ok":1,如下圖所示

4.此時三台服務便組成了一個叢集,通過如下指令可以檢視目前叢集每個節點的狀态

   指令:rs.status()

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

⑤此時,Shard1 Server叢集配置完成

  2.3.2.2 Shard2 Server安裝

    ①根據規劃,在202、204、205三台伺服器,分别安裝 Shard2 分片及其副本

在202、204、205 三台伺服器,建立shard2 目錄,然後分别在shard2目錄下建立 data、log檔案夾(分别用于存放資料相關和日志相關内容)

mkdir -p /usr/local/cluster/mongodb/shard2/data

mkdir -p /usr/local/cluster/mongodb/shard2/log       此時3台伺服器,均建立 data、log檔案夾成功後,開啟下一步操作

    其他步驟同 2.3.2.1 Shard1 Server 步驟一模一樣,

    切記以下問題:

         ①路徑問題   

         ②端口問題(Shard2 Server按規定使用 27037)   

         ③conf配置檔案中,replSetName 修改為 shard2

         ④cfg副本集配置内容的修改

2.3.2.3 Shard3 Server安裝

    ①根據規劃,在203、205、206三台伺服器,分别安裝 Shard3 分片及其副本

在203、205、206 三台伺服器,建立shard3 目錄,然後分别在shard3目錄下建立 data、log檔案夾(分别用于存放資料相關和日志相關内容)

mkdir -p /usr/local/cluster/mongodb/shard3/data

mkdir -p /usr/local/cluster/mongodb/shard3/log       此時3台伺服器,均建立 data、log檔案夾成功後,開啟下一步操作

    其他步驟同 2.3.2.1 Shard1 Server 步驟一模一樣,

    切記以下問題:

         ①路徑問題   

         ②端口問題(Shard3 Server按規定使用 27047)   

         ③conf配置檔案中,replSetName 修改為 shard3

         ④cfg副本集配置内容的修改

2.3.3 Mongos Server 安裝

  ①根據規劃,在201、202、203三台伺服器,開始配置 Mongos Server

在201、202、203 三台伺服器,建立mongos目錄,在mongos目錄下建立 data、log檔案夾(分别用于存放資料相關和日志相關内容)

mkdir -p /usr/local/cluster/mongodb/mongos/data

mkdir -p /usr/local/cluster/mongodb/mongos/log       此時3台伺服器,均建立 data、log檔案夾成功後,開啟下一步操作

  ②在mongos目錄下,添加配置檔案 mongos.conf,内容如下:

       必改内容:path、pidFilePath、port、bindIp、configDB 這5處。

       Mongos端口:根據規劃,Mongos端口使用 27017

  201伺服器:(切記路徑配置一定要準确,如果配置錯誤,則會報 --fork 錯誤,切記,建議 pwd 複制)

systemLog:
  destination: file
  logAppend: true
  path:  /usr/local/cluster/mongodb/mongos/log/mongos.log
processManagement:
  fork: true
#  pidFilePath:  /usr/local/cluster/mongodb/mongos/log/mongos.pid

# network interfaces
net:
  port: 27017
  bindIp: 192.168.204.201
#監聽的配置伺服器, configs為配置伺服器的副本集名字
sharding:
   configDB: config/192.168.204.204:27017,192.168.204.205:27017,192.168.204.206:27017
           

  202伺服器:(除bindIp選項外,其他與201伺服器配置,因為每台伺服器路徑一緻,Config Server的位址也一樣)

systemLog:
  destination: file
  logAppend: true
  path:  /usr/local/cluster/mongodb/mongos/log/mongos.log
processManagement:
  fork: true
#  pidFilePath:  /usr/local/cluster/mongodb/mongos/log/mongos.pid

# network interfaces
net:
  port: 27017
  bindIp: 192.168.204.202
#監聽的配置伺服器, configs為配置伺服器的副本集名字
sharding:
   configDB: config/192.168.204.204:27017,192.168.204.205:27017,192.168.204.206:27017
           

  203伺服器:(除bindIp選項外,其他與201伺服器配置,因為每台伺服器路徑一緻,Config Server的位址也一樣)

systemLog:
  destination: file
  logAppend: true
  path:  /usr/local/cluster/mongodb/mongos/log/mongos.log
processManagement:
  fork: true
#  pidFilePath:  /usr/local/cluster/mongodb/mongos/log/mongos.pid

# network interfaces
net:
  port: 27017
  bindIp: 192.168.204.203
#監聽的配置伺服器, configs為配置伺服器的副本集名字
sharding:
   configDB: config/192.168.204.204:27017,192.168.204.205:27017,192.168.204.206:27017
           

③使用如下指令,同時啟動叢集 3 台伺服器節點的 Mongos Server

指令:mongos -f /usr/local/cluster/mongodb/mongos/mongos.conf    (注意此處是mongos,不是mongod)

  如下圖所示,則說明服務啟動成功。

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

  ③連上 Mongos Server 3 台伺服器中的任意一台(本文連接配接 201 伺服器,端口号注意是:27017)

 指令:mongo 192.168.204.201:27017    或者    mongo --host 192.168.204.201 --port 27017

  ④切換到 admin 表

   指令:use admin

  ⑤将副本集/切片加入到 Mongos 路由伺服器

sh.addShard("shard1/192.168.204.201:27027,192.168.204.203:27027,192.168.204.204:27027")

sh.addShard("shard2/192.168.204.202:27037,192.168.204.204:27037,192.168.204.205:27037")

sh.addShard("shard3/192.168.204.203:27047,192.168.204.205:27047,192.168.204.206:27047")

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

  2.3.4 MongoDB 6台伺服器,副本集混合模式叢集搭建完成

            接下來将完成資料的分片操作

2.4 資料分片操作

        現在面對的情形是:上面叢集搭建是完成了,資料部分也配有 Shard1、Shard2、Shard3 三個分片。如果我現在随機模拟寫入一些資料,此時資料隻存儲在目前分片上,而沒有進行分片。

       分片是指将資料拆分,将其分散存在不同機器上的過程,有時也叫分區。将資料分散在不同的機器上,不需要功能強大的大型計算機就可以存儲更多的資料,處理更大的負載。

       MongoDB 預設是不幫我們開啟分片的,需要我們手動操作來完成對某個庫中的指定(表) 資料的分片。

       接下來我們需要完成的就是:叢集資料的分片操作。

       切記一點:所有的請求都是先打到 Mongos,通過Mongos 排程來擷取相關資料内容。我們在 Mongos 路由伺服器完成操作,現在切換到 testdb 資料庫下,建立 user 表,以 user 表為執行個體來介紹MongoDB 的資料分片操作。

  2.4.1.資料分片步驟

 1.連接配接到叢集中的随意一台 Mongos (本文連接配接到201伺服器,端口為27017)

     指令:mongo 192.168.204.201:27017

 2.切換到 testdb 資料庫

     指令:use testdb

 3.開啟一個資料庫的分片功能

     指令:sh.enableSharding("testdb")

4.分片時的索引問題

         # 如果集合中已經存在資料,在標明作為shard key 的鍵列必須建立索引;(如何建立索引,參考 步驟 6)

         # 如果集合為空,mongodb 将在激活集合分片(sh.shardCollection)時建立索引;

 5.開啟一個collection(表)的分片功能  (即:指定資料庫裡需要分片的表)

     指令:sh.shardCollection("庫名.表名",{"字段",1})

      例1:指定 testdb 庫中的 user 表,以 _id 字段為 hash散列 進行分片)

            指令:sh.shardCollection("testdb.user",{"_id":"hashed"})    -------基于 hash散列 分片(能夠實作資料分片)

      例2:指定 testdb 庫中的 user 表,以 name 字段進行分片)

            指令:sh.shardCollection("testdb.user",{"name":1})   ------- 基于 值 分片(不能實作資料的分片)

        # 基于 hashed 散列能保證叢集中資料的均衡。例1中,通過字段 _id 的散列值進行資料配置設定。MongoDB計算 _id 字段的散列值作為散列索引,它将提供叢集中文檔的均勻分布。

        # 基于 值 的分片,不能實作叢集中資料的分片!!!

 6.如何建立索引

         參考:MongoDB 索引   

         例1:為 testdb 庫中的 user 表建立索引,以_id 字段升序建立索引

              指令:db.user.ensureIndex({_id:1})

         例2:也可以建立聯合索引(以_id 字段升序,name字段降序建立索引)

              指令:db.user.ensureIndex({_id:1,name:-1})

 2.4.2 資料分片圖解

   2.4.2.1 集合為空時,分片圖解

       ①進行分片的過程

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

       ②模拟插入資料的過程

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

       ③分别進入 shard1(201伺服器)、shard2(202伺服器)、shard3(203伺服器)檢視資料是否分片成功         

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建
MongoDB筆記(七):MongoDB 4.0.12 叢集搭建
MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

          上圖:6 + 11 + 3 = 20條,

          正好将20條資料分到 3 個 shard 中(這裡 hash 散列 分片,并不是100%平均配置設定,資料量大後會盡量達到平均配置設定)

   2.4.2.2 集合不為空時,分片圖解(未成功!!!)

        不解之處:MongoDB現在有3個分片,如果我現在通過 mongos .db.user.insert({name:'xx',age:i}) 存儲了20000條資料有用的資料,我看到都到了shard2上。突然我想起來了我需要對user這個集合分片。在不影響資料的情況下,如何将shard2上的資料分到 shard1和shard3 上面。搭建Mongo叢集卡在這了,死活搞不懂這塊,能給提供意見嗎?  如果實作對user表分片,然後查資料,使用hash分散 ,是能夠正确分片的。就是前面那種情況搞了很長時間沒搞懂。大佬有啥見解能幫助小的我嗎?謝謝  

        ①mongos操作,使用 testdb 庫,向 grade 表中插入 20 條資料

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

         ②此時,檢視shard1(201伺服器)、shard2(202伺服器)、shard3(203伺服器)分片資料。發現Mongos路由将資料都存儲在了 shard2 上

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建
MongoDB筆記(七):MongoDB 4.0.12 叢集搭建
MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

        ③開始對資料不為空的表 grade ,進行分片(切記:需要建立索引)

           備注:grade 表也在 testdb 庫下,user 表已對 testdb 庫開啟分片功能,此處是以不需要再對 testdb 庫開啟分片功能

            1.不建立索引,直接對資料不為空的表開啟分片功能,會報如下錯誤。

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

            2.開始建立索引,并對 grade 表開啟分片功能(資料不為空的表,使用 hash 散列索引不會成功,需要針對某個鍵值升序或降序分片才能成功)

MongoDB筆記(七):MongoDB 4.0.12 叢集搭建
MongoDB筆記(七):MongoDB 4.0.12 叢集搭建

        ④此時,檢視shard1(201伺服器)、shard2(202伺服器)、shard3(203伺服器)分片資料。發現Mongos路由将資料還是都存儲在了 shard2 上,沒有進行分片(此處失敗!!!求大佬解釋幫助一下)

2.5 Primary異常後,Secondary自動切換為 Primary

       本文:shard1 為 Primary,我們手動将 shard1 關閉後,會将 shard2 Secondary 自動 轉換 為 Primary提供服務,進而實作了主從之間的來回切換,保證高可用。

MongoDB 4.0.12 叢集搭建,至此介紹完畢

如果本文對你有所幫助,那就給我點個贊呗 ^_^ 

End

繼續閱讀