MongoDB 分片集群

每日一句

Medalist don't grow on trees, you have to nurture them with love, with hard work, with dedication.
金牌選手不會從天而降,你必須用熱愛、刻苦和投入來澆灌他們。

概述

分片(sharding)是一種垮多臺機(jī)器分布數(shù)據(jù)的方法,MongoDB使用分片來支持具有非常大的數(shù)據(jù)集和高吞吐量操作的部署。

分片(sharding)是指將數(shù)據(jù)拆分,將其分散存在不同的機(jī)器上的過程。有時也用分區(qū)(partitioning)來表示這個概念。將數(shù)據(jù)分散到不同的機(jī)器上,不需要功能強(qiáng)大的大型計算機(jī)就可以儲存更多的數(shù)據(jù),處理更多的負(fù)載。

具有大型數(shù)據(jù)集或高吞吐量應(yīng)用程序的數(shù)據(jù)庫系統(tǒng)可以會挑戰(zhàn)單個服務(wù)器的容量。例如,高查詢率會耗盡服務(wù)器的CPU容量。工作集大小大于系統(tǒng)的RAM會強(qiáng)調(diào)磁盤驅(qū)動器的I / O容量。

有兩種解決系統(tǒng)增長的方法:垂直擴(kuò)展和水平擴(kuò)展。

  • 垂直擴(kuò)展意味著增加單個服務(wù)器的容量,例如使用更強(qiáng)大的CPU,添加更多RAM或增加存儲空間量??捎眉夹g(shù)的局限性可能會限制單個機(jī)器對于給定工作負(fù)載而言足夠強(qiáng)大。此外,基于云的提供商基于可用的硬件配置具有硬性上限。結(jié)果,垂直縮放有實際的最大值。
  • 水平擴(kuò)展意味著劃分系統(tǒng)數(shù)據(jù)集并加載多個服務(wù)器,添加其他服務(wù)器以根據(jù)需要增加容量。雖然單個機(jī)器的總體速度或容量可能不高,但每臺機(jī)器處理整個工作負(fù)載的子集,可能提供比單個高速大容量服務(wù)器更高的效率。擴(kuò)展部署容量只需要根據(jù)需要添加額外的服務(wù)器,這可能比單個機(jī)器的高端硬件的總體成本更低。MongoDB支持通過分片進(jìn)行水平擴(kuò)展。

組件

MongoDB分片群集包含以下組件:

  • 分片(存儲):每個分片包含分片數(shù)據(jù)的子集。每個分片都可以部署為副本集。
  • Mongos(路由):mongos充當(dāng)查詢路由器,在客戶端應(yīng)用程序和分片集群之間提供接口。
  • config servers:配置服務(wù)器存儲集群的元數(shù)據(jù)和配置設(shè)置。從MongoDB3.4開始,必須將配置服務(wù)器部署為副本集(CSRS)

下圖描述了分片集群中組件的交互:

MongoDB在集合級別對數(shù)據(jù)進(jìn)行分片,將集合數(shù)據(jù)分布在集群中的分片上。

實例

兩個分片節(jié)點副本集(3+3)+一個配置節(jié)點副本集(3)+兩個路由節(jié)點(2),共11個服務(wù)節(jié)點。

分片節(jié)點副本集的創(chuàng)建

所有的的配置文件都直接放到 sharded_cluster 的相應(yīng)的子目錄下面,默認(rèn)配置文件名字:mongod.conf

第一套副本集

1 準(zhǔn)備存放數(shù)據(jù)和日志的目錄

#-----------myshardrs01 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27018/log \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27018/data/db \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27118/log \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27118/data/db \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27218/log \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27218/data/db

2 新建或修改配置文件:vim /mongodb/sharded_cluster/myshardrs01_27018/mongod.conf

systemLog: 
  #MongoDB發(fā)送所有日志輸出的目標(biāo)指定為文件 
  destination: file
  #mongod或mongos應(yīng)向其發(fā)送所有診斷日志記錄信息的日志文件的路徑 
  path: "/mongodb/sharded_cluster/myshardrs01_27018/log/mongod.log" 
  #當(dāng)mongos或mongod實例重新啟動時,mongos或mongod會將新條目附加到現(xiàn)有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod實例存儲其數(shù)據(jù)的目錄。storage.dbPath設(shè)置僅適用于mongod。 
  dbPath: "/mongodb/sharded_cluster/myshardrs01_27018/data/db" 
  journal: 
    #啟用或禁用持久性日志以確保數(shù)據(jù)文件保持有效和可恢復(fù)。 
    enabled: true 
processManagement: 
  #啟用在后臺運行mongos或mongod進(jìn)程的守護(hù)進(jìn)程模式。 
  fork: true 
  #指定用于保存mongos或mongod進(jìn)程的進(jìn)程ID的文件位置,其中mongos或mongod將寫入其PID 
  pidFilePath: "/mongodb/sharded_cluster/myshardrs01_27018/log/mongod.pid" 
net:
  #服務(wù)實例綁定所有IP,有副作用,副本集初始化的時候,節(jié)點名字會自動設(shè)置為本地域名,而不是ip 
  #bindIpAll: true 
  #服務(wù)實例綁定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #綁定的端口 
  port: 27018 
replication: 
  #副本集的名稱 
  replSetName: myshardrs01 
sharding: 
  #分片角色 
  clusterRole: shardsvr

sharding.clusterRole:

Value Description
configsvr Start this instance as a config server. The instance starts on port 27019 by default.
shardsvr Start this instance as a shard. The instance starts on port 27018 by default.

注意:

設(shè)置sharding.clusterRole需要mongod實例運行復(fù)制。 要將實例部署為副本集成員,請使用

replSetName設(shè)置并指定副本集的名稱。

3 新建或修改配置文件: vim /mongodb/sharded_cluster/myshardrs01_27118/mongod.conf

systemLog: 
  #MongoDB發(fā)送所有日志輸出的目標(biāo)指定為文件 
  destination: file
  #mongod或mongos應(yīng)向其發(fā)送所有診斷日志記錄信息的日志文件的路徑 
  path: "/mongodb/sharded_cluster/myshardrs01_27118/log/mongod.log" 
  #當(dāng)mongos或mongod實例重新啟動時,mongos或mongod會將新條目附加到現(xiàn)有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod實例存儲其數(shù)據(jù)的目錄。storage.dbPath設(shè)置僅適用于mongod。 
  dbPath: "/mongodb/sharded_cluster/myshardrs01_27118/data/db" 
  journal: 
    #啟用或禁用持久性日志以確保數(shù)據(jù)文件保持有效和可恢復(fù)。 
    enabled: true 
processManagement: 
  #啟用在后臺運行mongos或mongod進(jìn)程的守護(hù)進(jìn)程模式。 
  fork: true 
  #指定用于保存mongos或mongod進(jìn)程的進(jìn)程ID的文件位置,其中mongos或mongod將寫入其PID 
  pidFilePath: "/mongodb/sharded_cluster/myshardrs01_27118/log/mongod.pid" 
net:
  #服務(wù)實例綁定所有IP,有副作用,副本集初始化的時候,節(jié)點名字會自動設(shè)置為本地域名,而不是ip 
  #bindIpAll: true 
  #服務(wù)實例綁定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #綁定的端口 
  port: 27118 
replication: 
  #副本集的名稱 
  replSetName: myshardrs01 
sharding: 
  #分片角色 
  clusterRole: shardsvr

4 新建或修改配置文件: vim /mongodb/sharded_cluster/myshardrs01_27218/mongod.conf

systemLog: 
  #MongoDB發(fā)送所有日志輸出的目標(biāo)指定為文件 
  destination: file
  #mongod或mongos應(yīng)向其發(fā)送所有診斷日志記錄信息的日志文件的路徑 
  path: "/mongodb/sharded_cluster/myshardrs01_27218/log/mongod.log" 
  #當(dāng)mongos或mongod實例重新啟動時,mongos或mongod會將新條目附加到現(xiàn)有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod實例存儲其數(shù)據(jù)的目錄。storage.dbPath設(shè)置僅適用于mongod。 
  dbPath: "/mongodb/sharded_cluster/myshardrs01_27218/data/db" 
  journal: 
    #啟用或禁用持久性日志以確保數(shù)據(jù)文件保持有效和可恢復(fù)。 
    enabled: true 
processManagement: 
  #啟用在后臺運行mongos或mongod進(jìn)程的守護(hù)進(jìn)程模式。 
  fork: true 
  #指定用于保存mongos或mongod進(jìn)程的進(jìn)程ID的文件位置,其中mongos或mongod將寫入其PID 
  pidFilePath: "/mongodb/sharded_cluster/myshardrs01_27218/log/mongod.pid" 
net:
  #服務(wù)實例綁定所有IP,有副作用,副本集初始化的時候,節(jié)點名字會自動設(shè)置為本地域名,而不是ip 
  #bindIpAll: true 
  #服務(wù)實例綁定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #綁定的端口 
  port: 27218 
replication: 
  #副本集的名稱 
  replSetName: myshardrs01 
sharding: 
  #分片角色 
  clusterRole: shardsvr

5 啟動第一套副本集:一主一副本一仲裁

依次啟動三個mongod服務(wù):

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/myshardrs01_27018/mongod.conf

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/myshardrs01_27118/mongod.conf

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/myshardrs01_27218/mongod.conf

6 初始化副本集和創(chuàng)建主節(jié)點

使用客戶端命令連接任意一個節(jié)點,但這里盡量要連接主節(jié)點: /usr/yltrcc/mongodb/bin/mongo --host 180.76.159.126 --port 27018

執(zhí)行命令:

# 初始化副本集
> rs.initiate()

# 查看副本集情況
myshardrs01:SECONDARY> rs.status()

# 主節(jié)點配置查看
myshardrs01:PRIMARY> rs.conf()

7 添加副本節(jié)點和仲裁節(jié)點

# 添加從節(jié)點
myshardrs01:PRIMARY> rs.add("180.76.159.126:27118")

# 添加仲裁節(jié)點
myshardrs01:PRIMARY> rs.addArb("180.76.159.126:27218")

# 查看配置情況
myshardrs01:PRIMARY> rs.conf()

第二套副本集

1 準(zhǔn)備存放數(shù)據(jù)和日志的目錄

#-----------myshardrs01 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27318/log \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27318/data/db \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27418/log \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27418/data/db \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27518/log \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27518/data/db

2 新建或修改配置文件:vim /mongodb/sharded_cluster/myshardrs01_27318/mongod.conf

systemLog: 
  #MongoDB發(fā)送所有日志輸出的目標(biāo)指定為文件 
  destination: file
  #mongod或mongos應(yīng)向其發(fā)送所有診斷日志記錄信息的日志文件的路徑 
  path: "/mongodb/sharded_cluster/myshardrs01_27318/log/mongod.log" 
  #當(dāng)mongos或mongod實例重新啟動時,mongos或mongod會將新條目附加到現(xiàn)有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod實例存儲其數(shù)據(jù)的目錄。storage.dbPath設(shè)置僅適用于mongod。 
  dbPath: "/mongodb/sharded_cluster/myshardrs01_27318/data/db" 
  journal: 
    #啟用或禁用持久性日志以確保數(shù)據(jù)文件保持有效和可恢復(fù)。 
    enabled: true 
processManagement: 
  #啟用在后臺運行mongos或mongod進(jìn)程的守護(hù)進(jìn)程模式。 
  fork: true 
  #指定用于保存mongos或mongod進(jìn)程的進(jìn)程ID的文件位置,其中mongos或mongod將寫入其PID 
  pidFilePath: "/mongodb/sharded_cluster/myshardrs01_27318/log/mongod.pid" 
net:
  #服務(wù)實例綁定所有IP,有副作用,副本集初始化的時候,節(jié)點名字會自動設(shè)置為本地域名,而不是ip 
  #bindIpAll: true 
  #服務(wù)實例綁定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #綁定的端口 
  port: 27318 
replication: 
  #副本集的名稱 
  replSetName: myshardrs01 
sharding: 
  #分片角色 
  clusterRole: shardsvr

3 新建或修改配置文件: vim /mongodb/sharded_cluster/myshardrs01_27418/mongod.conf

systemLog: 
  #MongoDB發(fā)送所有日志輸出的目標(biāo)指定為文件 
  destination: file
  #mongod或mongos應(yīng)向其發(fā)送所有診斷日志記錄信息的日志文件的路徑 
  path: "/mongodb/sharded_cluster/myshardrs01_27418/log/mongod.log" 
  #當(dāng)mongos或mongod實例重新啟動時,mongos或mongod會將新條目附加到現(xiàn)有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod實例存儲其數(shù)據(jù)的目錄。storage.dbPath設(shè)置僅適用于mongod。 
  dbPath: "/mongodb/sharded_cluster/myshardrs01_27418/data/db" 
  journal: 
    #啟用或禁用持久性日志以確保數(shù)據(jù)文件保持有效和可恢復(fù)。 
    enabled: true 
processManagement: 
  #啟用在后臺運行mongos或mongod進(jìn)程的守護(hù)進(jìn)程模式。 
  fork: true 
  #指定用于保存mongos或mongod進(jìn)程的進(jìn)程ID的文件位置,其中mongos或mongod將寫入其PID 
  pidFilePath: "/mongodb/sharded_cluster/myshardrs01_27418/log/mongod.pid" 
net:
  #服務(wù)實例綁定所有IP,有副作用,副本集初始化的時候,節(jié)點名字會自動設(shè)置為本地域名,而不是ip 
  #bindIpAll: true 
  #服務(wù)實例綁定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #綁定的端口 
  port: 27418 
replication: 
  #副本集的名稱 
  replSetName: myshardrs01 
sharding: 
  #分片角色 
  clusterRole: shardsvr

4 新建或修改配置文件: vim /mongodb/sharded_cluster/myshardrs01_27518/mongod.conf

systemLog: 
  #MongoDB發(fā)送所有日志輸出的目標(biāo)指定為文件 
  destination: file
  #mongod或mongos應(yīng)向其發(fā)送所有診斷日志記錄信息的日志文件的路徑 
  path: "/mongodb/sharded_cluster/myshardrs01_27518/log/mongod.log" 
  #當(dāng)mongos或mongod實例重新啟動時,mongos或mongod會將新條目附加到現(xiàn)有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod實例存儲其數(shù)據(jù)的目錄。storage.dbPath設(shè)置僅適用于mongod。 
  dbPath: "/mongodb/sharded_cluster/myshardrs01_27518/data/db" 
  journal: 
    #啟用或禁用持久性日志以確保數(shù)據(jù)文件保持有效和可恢復(fù)。 
    enabled: true 
processManagement: 
  #啟用在后臺運行mongos或mongod進(jìn)程的守護(hù)進(jìn)程模式。 
  fork: true 
  #指定用于保存mongos或mongod進(jìn)程的進(jìn)程ID的文件位置,其中mongos或mongod將寫入其PID 
  pidFilePath: "/mongodb/sharded_cluster/myshardrs01_27518/log/mongod.pid" 
net:
  #服務(wù)實例綁定所有IP,有副作用,副本集初始化的時候,節(jié)點名字會自動設(shè)置為本地域名,而不是ip 
  #bindIpAll: true 
  #服務(wù)實例綁定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #綁定的端口 
  port: 27518 
replication: 
  #副本集的名稱 
  replSetName: myshardrs01 
sharding: 
  #分片角色 
  clusterRole: shardsvr

5 啟動第一套副本集:一主一副本一仲裁

依次啟動三個mongod服務(wù):

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/myshardrs01_27318/mongod.conf

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/myshardrs01_27418/mongod.conf

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/myshardrs01_27518/mongod.conf

6 初始化副本集和創(chuàng)建主節(jié)點

使用客戶端命令連接任意一個節(jié)點,但這里盡量要連接主節(jié)點: /usr/yltrcc/mongodb/bin/mongo --host 180.76.159.126 --port 27318

執(zhí)行命令:

# 初始化副本集
> rs.initiate()

# 查看副本集情況
myshardrs01:SECONDARY> rs.status()

# 主節(jié)點配置查看
myshardrs01:PRIMARY> rs.conf()

7 添加副本節(jié)點和仲裁節(jié)點

# 添加從節(jié)點
myshardrs01:PRIMARY> rs.add("180.76.159.126:27418")

# 添加仲裁節(jié)點
myshardrs01:PRIMARY> rs.addArb("180.76.159.126:27518")

# 查看配置情況
myshardrs01:PRIMARY> rs.conf()

配置節(jié)點副本集創(chuàng)建

1 準(zhǔn)備存放數(shù)據(jù)和日志的目錄

#-----------myshardrs01 
mkdir -p /mongodb/sharded_cluster/myconfigrs_27019/log \ & 
mkdir -p /mongodb/sharded_cluster/myconfigrs_27019/data/db \ & 
mkdir -p /mongodb/sharded_cluster/myconfigrs_27119/log \ & 
mkdir -p /mongodb/sharded_cluster/myconfigrs_27119/data/db \ & 
mkdir -p /mongodb/sharded_cluster/myconfigrs_27219/log \ & 
mkdir -p /mongodb/sharded_cluster/myconfigrs_27219/data/db

2 新建或修改配置文件:vim /mongodb/sharded_cluster/myconfigrs_27019/mongod.conf

systemLog: 
  #MongoDB發(fā)送所有日志輸出的目標(biāo)指定為文件 
  destination: file
  #mongod或mongos應(yīng)向其發(fā)送所有診斷日志記錄信息的日志文件的路徑 
  path: "/mongodb/sharded_cluster/myconfigrs_27019/log/mongod.log" 
  #當(dāng)mongos或mongod實例重新啟動時,mongos或mongod會將新條目附加到現(xiàn)有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod實例存儲其數(shù)據(jù)的目錄。storage.dbPath設(shè)置僅適用于mongod。 
  dbPath: "/mongodb/sharded_cluster/myconfigrs_27019/data/db" 
  journal: 
    #啟用或禁用持久性日志以確保數(shù)據(jù)文件保持有效和可恢復(fù)。 
    enabled: true 
processManagement: 
  #啟用在后臺運行mongos或mongod進(jìn)程的守護(hù)進(jìn)程模式。 
  fork: true 
  #指定用于保存mongos或mongod進(jìn)程的進(jìn)程ID的文件位置,其中mongos或mongod將寫入其PID 
  pidFilePath: "/mongodb/sharded_cluster/myconfigrs_27019/log/mongod.pid" 
net:
  #服務(wù)實例綁定所有IP,有副作用,副本集初始化的時候,節(jié)點名字會自動設(shè)置為本地域名,而不是ip 
  #bindIpAll: true 
  #服務(wù)實例綁定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #綁定的端口 
  port: 27019 
replication: 
  #副本集的名稱 
  replSetName: myconfigrs
sharding: 
  #分片角色 
  clusterRole: configsvr

3 新建或修改配置文件: vim /mongodb/sharded_cluster/myconfigrs_27119/mongod.conf

systemLog: 
  #MongoDB發(fā)送所有日志輸出的目標(biāo)指定為文件 
  destination: file
  #mongod或mongos應(yīng)向其發(fā)送所有診斷日志記錄信息的日志文件的路徑 
  path: "/mongodb/sharded_cluster/myconfigrs_27119/log/mongod.log" 
  #當(dāng)mongos或mongod實例重新啟動時,mongos或mongod會將新條目附加到現(xiàn)有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod實例存儲其數(shù)據(jù)的目錄。storage.dbPath設(shè)置僅適用于mongod。 
  dbPath: "/mongodb/sharded_cluster/myconfigrs_27119/data/db" 
  journal: 
    #啟用或禁用持久性日志以確保數(shù)據(jù)文件保持有效和可恢復(fù)。 
    enabled: true 
processManagement: 
  #啟用在后臺運行mongos或mongod進(jìn)程的守護(hù)進(jìn)程模式。 
  fork: true 
  #指定用于保存mongos或mongod進(jìn)程的進(jìn)程ID的文件位置,其中mongos或mongod將寫入其PID 
  pidFilePath: "/mongodb/sharded_cluster/myconfigrs_27119/log/mongod.pid" 
net:
  #服務(wù)實例綁定所有IP,有副作用,副本集初始化的時候,節(jié)點名字會自動設(shè)置為本地域名,而不是ip 
  #bindIpAll: true 
  #服務(wù)實例綁定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #綁定的端口 
  port: 27119
replication: 
  #副本集的名稱 
  replSetName: myconfigrs
sharding: 
  #分片角色 
  clusterRole: configsvr

4 新建或修改配置文件: vim /mongodb/sharded_cluster/myconfigrs_27219/mongod.conf

systemLog: 
  #MongoDB發(fā)送所有日志輸出的目標(biāo)指定為文件 
  destination: file
  #mongod或mongos應(yīng)向其發(fā)送所有診斷日志記錄信息的日志文件的路徑 
  path: "/mongodb/sharded_cluster/myconfigrs_27219/log/mongod.log" 
  #當(dāng)mongos或mongod實例重新啟動時,mongos或mongod會將新條目附加到現(xiàn)有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod實例存儲其數(shù)據(jù)的目錄。storage.dbPath設(shè)置僅適用于mongod。 
  dbPath: "/mongodb/sharded_cluster/myconfigrs_27219/data/db" 
  journal: 
    #啟用或禁用持久性日志以確保數(shù)據(jù)文件保持有效和可恢復(fù)。 
    enabled: true 
processManagement: 
  #啟用在后臺運行mongos或mongod進(jìn)程的守護(hù)進(jìn)程模式。 
  fork: true 
  #指定用于保存mongos或mongod進(jìn)程的進(jìn)程ID的文件位置,其中mongos或mongod將寫入其PID 
  pidFilePath: "/mongodb/sharded_cluster/myconfigrs_27219/log/mongod.pid" 
net:
  #服務(wù)實例綁定所有IP,有副作用,副本集初始化的時候,節(jié)點名字會自動設(shè)置為本地域名,而不是ip 
  #bindIpAll: true 
  #服務(wù)實例綁定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #綁定的端口 
  port: 27219 
replication: 
  #副本集的名稱 
  replSetName: myconfigrs
sharding: 
  #分片角色 
  clusterRole: configsvr

5 啟動第一套副本集:一主一副本一仲裁

依次啟動三個mongod服務(wù):

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/myconfigrs_27019/mongod.conf

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/myconfigrs_27119/mongod.conf

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/myconfigrs_27219/mongod.conf

6 初始化副本集和創(chuàng)建主節(jié)點

使用客戶端命令連接任意一個節(jié)點,但這里盡量要連接主節(jié)點: /usr/yltrcc/mongodb/bin/mongo --host 180.76.159.126 --port 27219

執(zhí)行命令:

# 初始化副本集
> rs.initiate()

# 查看副本集情況
myshardrs01:SECONDARY> rs.status()

# 主節(jié)點配置查看
myshardrs01:PRIMARY> rs.conf()

7 添加兩個副本節(jié)點

# 添加從節(jié)點
myshardrs01:PRIMARY> rs.add("180.76.159.126:27119")
myshardrs01:PRIMARY> rs.add("180.76.159.126:27219")

# 查看配置情況
myshardrs01:PRIMARY> rs.conf()

路由節(jié)點的創(chuàng)建

第一個路由節(jié)點

1 準(zhǔn)備存放數(shù)據(jù)和日志的目錄

#-----------mongos01
mkdir -p /mongodb/sharded_cluster/mymongos_27017/log

2 新建或修改配置文件:vi /mongodb/sharded_cluster/mymongos_27017/mongos.conf

systemLog: 
  #MongoDB發(fā)送所有日志輸出的目標(biāo)指定為文件 
  destination: file
  #mongod或mongos應(yīng)向其發(fā)送所有診斷日志記錄信息的日志文件的路徑 
  path: "/mongodb/sharded_cluster/mymongos_27017/log/mongod.log" 
  #當(dāng)mongos或mongod實例重新啟動時,mongos或mongod會將新條目附加到現(xiàn)有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod實例存儲其數(shù)據(jù)的目錄。storage.dbPath設(shè)置僅適用于mongod。 
  dbPath: "/mongodb/sharded_cluster/mymongos_27017/data/db" 
  journal: 
    #啟用或禁用持久性日志以確保數(shù)據(jù)文件保持有效和可恢復(fù)。 
    enabled: true 
processManagement: 
  #啟用在后臺運行mongos或mongod進(jìn)程的守護(hù)進(jìn)程模式。 
  fork: true 
  #指定用于保存mongos或mongod進(jìn)程的進(jìn)程ID的文件位置,其中mongos或mongod將寫入其PID 
  pidFilePath: "/mongodb/sharded_cluster/mymongos_27017/log/mongod.pid" 
net:
  #服務(wù)實例綁定所有IP,有副作用,副本集初始化的時候,節(jié)點名字會自動設(shè)置為本地域名,而不是ip 
  #bindIpAll: true 
  #服務(wù)實例綁定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #綁定的端口 
  port: 27017 
sharding: 
  #指定配置節(jié)點副本集 
  configDB: myconfigrs/180.76.159.126:27019,180.76.159.126:27119,180.76.159.126:27219

3 啟動mongod服務(wù):

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/mymongos_27017/mongos.conf

4 客戶端登錄mongos: /usr/yltrcc/mongodb/bin/mongo --host 180.76.159.126 --port 27017

通過路由節(jié)點操作,現(xiàn)在只是連接了配置節(jié)點,還沒有連接分片數(shù)據(jù)節(jié)點,因此無法寫入業(yè)務(wù)數(shù)據(jù)。

5 在路由節(jié)點上進(jìn)行分片配置操作

添加分片sh.addShard("IP:Port")

# 添加第一套副本集
sh.addShard("myshardrs01/192.168.0.2:27018,180.76.159.126:27118,180.76.159.126:2 7218")

# 添加第二套副本集
sh.addShard("myshardrs02/192.168.0.2:27318,180.76.159.126:27418,180.76.159.126:2 7518")

提示:如果添加分片失敗,需要先手動移除分片,檢查添加分片的信息的正確性后,再次添加分片。

移除分片參考(了解):

use admin 
db.runCommand( { removeShard: "myshardrs02" } )

開啟分片功能: sh.enableSharding("庫名")sh.shardCollection("庫名.集合名",{"key":1})

在mongos上的articledb數(shù)據(jù)庫配置sharding

sh.enableSharding("articledb")

# 查看分片狀態(tài)
 sh.status()

集合分片: 對集合分片,你必須使用 sh.shardCollection() 方法指定集合和分片鍵。

語法格式:sh.shardCollection(namespace, key, unique)

參數(shù)說明:

Parameter Type Description
namespace string 要(分片)共享的目標(biāo)集合的命名空間,格式: <database>.<collection>
key document 用作分片鍵的索引規(guī)范文檔。shard鍵決定MongoDB如何在shard之間分發(fā)文檔。除非集合為空,否則索引必須在shard collection命令之前存在。如果集合為空,則MongoDB在對集合進(jìn)行分片之前創(chuàng)建索引,前提是支持分片鍵的索引不存在。簡單的說:由包含字段和該字段的索引遍歷方向的文檔組成。
unique boolean 當(dāng)值為true情況下,片鍵字段上會限制為確保是唯一索引。哈希策略片鍵不支持唯一索引。默認(rèn)是false。

6 分片后插入數(shù)據(jù)測試

7 增加另一個路由節(jié)點

美文佳句

電影散場,影院里的觀眾皆唏噓而去。我和太太看到最后,直到音樂的休止落下、字幕拉到最底部。我似乎不能完整記住險象環(huán)生的情節(jié),但那印度電影的唯美音樂,和雖然處于隱線卻從來沒有放棄追逐的愛情,讓我喜歡和回味。

你好,我是yltrcc,日常分享技術(shù)點滴,歡迎關(guān)注我

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容