MongoDB學習--安裝與管理

来源:https://www.cnblogs.com/lbole/archive/2018/05/15/8902337.html
-Advertisement-
Play Games

一、簡介 MongoDB是一種強大、靈活,且易於擴展的通用型資料庫。他能擴展出非常多的功能。如二級索引(secondary index)、範圍查詢(range query)、排序、聚合(aggregation),以及地理空間索引(geospatial index)。 1、易於使用 MongoDB是一 ...


一、簡介

        MongoDB是一種強大、靈活,且易於擴展的通用型資料庫。他能擴展出非常多的功能。如二級索引(secondary index)、範圍查詢(range query)、排序、聚合(aggregation),以及地理空間索引(geospatial index)。

        1、易於使用

        MongoDB是一個面向文檔(document-oriented)的資料庫,而不是關係型資料庫。面向文檔的資料庫不在有“行(row)”的概念,取而代之的是更為靈活的“文檔(document)”模型。通過在文檔中嵌入文檔和數組,面向文檔的方法能夠僅適用一條記錄來表現複雜的層次關係。

        不在有預定義模式(predefined schema),文檔的鍵(key)和值(value)不在是固定的類型和大小。由於沒有固定的模式,根據需要添加或刪除欄位變得更容易了。

        2、易於擴展

        MongoDB的設計採用橫向擴展。面向文檔的數據模型使它很容易地在多台伺服器之間進行數據切割。MongoDB能自動處理跨集群的數據和負載,自動重新分配文檔,以及將用戶的路由到正確機器上。

        3、豐富的功能

        MongoDB作為一款通用型資料庫,除了能夠創建、讀取、更新和刪除數據之外,還提供一系列不斷擴展的獨特功能。

        索引(indexing):

        MongoDB支持通用二級索引,允許多種快速查找,且提供唯一索引、符合索引、地理空間索引,以及全文索引。

        聚合(aggregation):

        MongoDB支持“聚合管道(aggregation pipeline)”。用戶能夠通過簡單的片段創建複雜的聚合,並通過資料庫自動優化。

        特殊的集合類型:

        MongoDB支持存在時間有限的集合,適用於那些將在某個時刻過期的數據,如會話(session)。類似的,MongoDB也支持固定大小的集合,用於保存近期數據,如日誌。

        文件存儲(file storage):

        MongoDB支持一種非常易用的協議,用於存儲大文件和文件元數據。

        MongoDB並不具備一些在關係型資料庫中很普遍的功能,如連接(join)和複雜的多事務(multirow transcation)。省略這些功能是出於架構上的考慮(為了得到更好的擴展性),因為在分散式系統中這兩個功能難以高效地實現。

        4、卓越的性能

        MongoDB能對文檔盡心動態填充(dynamic padding),也能預分配數據文件以利用額外的空間來換取穩定的新能。MongoDB把儘可能多的記憶體用作緩存(cache),一般會用盡伺服器的可用記憶體,試圖為每次查詢自動選擇正確的索引。  所以MongoDB會非常占用伺服器記憶體,目前並沒有什麼辦法可以限制MongoDB占用記憶體的方法,所以一般不建議在MongoDB伺服器上啟用其他進程。

二、下載安裝包

下載地址為:https://www.mongodb.com/download-center?jmp=nav#community

Windows: mongodb-win32-x86_64-2008plus-ssl-3.6.4.zip

Linux(CentOS 7): mongodb-linux-x86_64-rhel70-3.6.4.tgz

註意:這裡下載的都是壓縮包,本文不提供rpm和msi等可執行程式的安裝方式

三、Windows下的MongoDB單節點安裝

我們將下載完的包解壓:C:/context/mongodb

在工作目錄下創建MongoDB數據存放目錄:D:/workspaces/mongodbspaces/data

在工作目錄下創建MongoDB日誌文件:D:/workspaces/mongodbspaces/logs/mongodb.log

在安裝目錄下創建config目錄:C:/context/mongodb/config

在配置目錄下創建配置文件:C:/context/mongodb/config/config.conf

修改配置文件:

systemLog:
    # 日誌級別,0:包含“info”信息,1~5,即大於0的值均會包含debug信息。類型: integer,預設: 0
    verbosity: 0
    # 發送所有的診斷信息日誌文件的路徑。systemLog.destination為file時有效。類型: string。
    path: D:/workspaces/mongodbspaces/logs/mongodb.log
    # 如果是true,則mongod服務重啟時會將日誌追加到日誌末尾,否則每次重啟會備份已有的日誌並創建新日誌。
    # 類型: boolean。預設: false。
    logAppend: true
    # 日誌輸出目的地,可以指定為“file”或者“syslog”,如果指定“file”則必須要設置systemLog.path。
    # 如果不指定,則會輸出到標準輸出中(standard output)。
    destination: file
processManagement:
    # Windows特有配置選項
    windowsService:
        # mongos/mongod作為Windows服務時的服務名稱,在net start <name>和net stop <name>時使用。
        # 類型: string。預設: MongoDB
        # 必須與--install 安裝服務或者--remove刪除服務結合使用。
        serviceName: MongoDB
        # 在服務管理應用程式中MongoDB服務應用程式的名稱。預設: MongoDB
        displayName: MongoDB
        # 設置MongoDB服務的描述,預設為MongoDB Server,在--install安裝服務時使用。
        description: MongoDB Server
net:
    # mongod/mongos服務偵聽客戶端連接的埠。類型: int。預設: 27017。
    port: 27017
    # mongod/monogs應用偵聽客戶端的IP地址或者完整UNIX域套接字路徑,如果想要綁定多個地址使用逗號分隔。
    # 若要綁定到所有IPv4地址,請輸入0.0.0.0。與net.bindIpAll配置互斥,不能同時配置兩個。
    # 類型: string。預設: localhost
    bindIp: 0.0.0.0
security:
    # 打開訪問資料庫和進行操作的用戶角色認證,僅mongod有效。disabled: 關閉; enabled: 開啟(預設開啟)
    authorization: enabled
    # 啟用或禁用伺服器端JavaScript執行,僅mongod有效。
    # 如果為false,那麼任何與javascript相關的功能都不能使用。類型: boolean。預設: true
    javascriptEnabled: true
setParameter:
    # 如果開啟,則允許本機(localhost/127.0.0.1)第一次訪問時不需要密碼認證,以便於創建第一個admin資料庫的用戶
    # true/1或者false/0,預設為true。mongods和mongod有效,建議mongod關閉該功能。
    enableLocalhostAuthBypass: true
    # 認證機制,可選值為“SCRAM-SHA-1”、“MONGODB-CR”、“PLAN”等,建議為“SCRAM-SHA-1”
    authenticationMechanisms: SCRAM-SHA-1
storage:
    # mongod實例存儲資料庫文件路徑,僅mongod有效。類型: string
    dbPath: D:/workspaces/mongodbspaces/data
    journal:
        # 是否開啟journal日誌持久存儲,journal日誌用來數據恢復,
        # 是mongod最基礎的特性,通常用於故障恢復,僅mongod有效。
        # 類型: boolean。64bit預設為true,32bit預設為false
        enabled: true
    # 是否將不同DB的數據存儲在不同的目錄中,dbPath的子目錄,目錄名為db的名稱,僅mongod有效。
    # 類型: boolean。預設: false
    directoryPerDB: true

配置mongodb環境變數這裡就不贅述了。我們執行命令將MongoDB安裝成服務:

mongod.exe --config C:/context/mongodb/config/config.conf --install

如果需要刪除MongoDB服務,則需要執行命令:

mongod.exe --config C:/context/mongodb/config/config.conf --remove

如果需要重新安裝MongoDB(先卸載再安裝),則需要執行:

mongod.exe --config C:/context/mongodb/config/config.conf --reinstall

需要註意的是,這裡的--config選項的值必須是絕對路徑,也可以使用-f參數後面跟配置文件路徑,這些操作都必須是在管理員CMD命令視窗裡面完成。至此MongoDB的安裝已經完成,我們需要先啟動MongoDB服務,然後創建admin資料庫下的管理員賬號和密碼:

C:\Users\Administrator> mongo
...
> use admin
...
> db.createUser({user: "root", pwd: "root", roles: [{role: "root", db: "admin"}]})
...

需要註意的是,由於我們第一次啟動之前就已經打開了角色認證功能: security.authorization: enabled,但是初始是沒有用戶和密碼的。MongoDB中 setParameter.enableLocalhostAuthBypass: true 這個配置是預設開啟的,使用localhost/127.0.0.1第一次登錄的時候可以免去角色認證,但是也僅有一次機會。

四、Linux下的MongoDB單節點安裝

我們將下載完的包解壓:

[root@abc] tar -zxvf mongodb-linux-x86_64-rhel70-3.6.4.tgz -C /usr/local/mongodb

在工作目錄下創建MongoDB數據存放目錄:

[root@abc] mkdir /data/mongodb/data -p

在工作目錄下創建MongoDB日誌文件:

[root@abc] mkdir /data/mongodb/logs/ -p
[root@abc] touch /data/mongodb/logs/mongodb.log

在安裝目錄下創建config配置文件,並編輯配置文件:

[root@abc] mkdir /usr/local/mongodb/config -p
[root@abc] vim /usr/local/mongodb/config/config.conf
systemLog:
    # 日誌級別,0:包含“info”信息,1~5,即大於0的值均會包含debug信息。類型: integer,預設: 0
    verbosity: 0
    # 發送所有的診斷信息日誌文件的路徑。systemLog.destination為file時有效。類型: string。
    path: /data/mongodb/logs/mongodb.log
    # 如果是true,則mongod服務重啟時會將日誌追加到日誌末尾,否則每次重啟會備份已有的日誌並創建新日誌。
    # 類型: boolean。預設: false。
    logAppend: true
    # 日誌輸出目的地,可以指定為“file”或者“syslog”,如果指定“file”則必須要設置systemLog.path。
    # 如果不指定,則會輸出到標準輸出中(standard output)。
    destination: file
processManagement:
    # 是否以守護進程(後臺進程)的方式運行mongod/mongos進程。類型: boolean。預設: false。
    fork: false
    # 配合"fork:true"參數,將mongod/mongos進程ID寫入指定的文件,如果不指定,將不會創建PID文件。類型: string
    pidFilePath: /data/mongodb/logs/mongodb.pid
net:
    # MongoDB服務監聽埠
    port: 27017
    # 指定MongoDB綁定的IP,多個IP使用逗號分隔。如果是0.0.0.0則可是使用機器上的任何IP訪問,否則只能使用指定IP訪問
    bindIp: 0.0.0.0
storage:
    # 指定數據文件的路徑
    dbPath: /data/mongodb/data
    # 預設關閉
    directoryPerDB: true
    journal:
        # 記錄操作日誌,防止數據丟失。64bit預設為true,32bit預設為false
        enabled: true
security:
    # 打開訪問資料庫和進行操作的用戶角色認證,僅mongod有效。disabled: 關閉; enabled: 開啟(預設開啟)
    authorization: enabled
setParameter:
    # 如果開啟,則允許本機(localhost/127.0.0.1)第一次訪問時不需要密碼認證,以便於創建第一個admin資料庫的用戶
    # true/1或者false/0,預設為true。mongods和mongod有效,建議mongod關閉該功能。
    enableLocalhostAuthBypass: true
    # 認證機制,可選值為“SCRAM-SHA-1”、“MONGODB-CR”、“PLAN”等,建議為“SCRAM-SHA-1”
    authenticationMechanisms: SCRAM-SHA-1

創建mongodb.service文件,將mongodb配置成Linux服務:

[root@abc] vim /lib/systemd/system/mongodb.service
[Unit]

Description=mongodb 
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/config/config.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/config/config.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

設置MongoDB服務開機啟動:

[root@abc] systemctl enable mongodb.service

如果需要取消開機啟動則執行:  systemctl disable mongodb.service

第一次啟動MongoDB服務:

[root@abc] systemctl start mongodb.service

如果需要停止服務則執行: systemctl stop mongodb.service

配置mongodb環境變數:

[root@abc] vim /etc/profile
...
...
export PATH=$PATH:/usr/local/mongodb/bin

:wq
[root@abc] source /etc/profile

然後開始創建admin資料庫的root角色用戶。記住,這裡只有一次機會免密碼登入創建用戶:

[root@abc] mongo
...
> use admin
...
> db.createUser({user: "root", pwd: "root", roles: [{role: "root", db: "admin"}]})
...

五、Linux下的MongoDB集群安裝

  在安裝之前,我們得先要瞭解一下MongoDB集群的集群類型,以及集群中的一些角色和它們的作用。mongodb有傳統的主從集群(未來可能會被廢棄)、副本集集群和分片集群三種模式的集群,傳統的主從集群這裡不做介紹。副本集和分片兩種集群模式並不對立,既可以單獨部署也可以組合部署。

1、副本集

   在副本集集群中有兩種類型的角色:主節點(primary)和備用節點(secondary)。客戶端只會與主節點進行數據交互(只有主節點允許寫操作),備用節點通過oplog日誌非同步複製主節點數據,oplog包含了主節點的每一次寫操作,是主節點中local資料庫中的一個固定集合,備用節點通過這個集合複製主節點數據,每個備用節點都維護著自己的oplog,記錄者每一次從主節點複製數據的操作,備用節點不對外提供服務。

        集群中每個成員會每隔2秒向其他成員發送一條心跳請求,確認集群中成員的狀態(那個是主節點,那個可以作為同步源、  那個節點下線了),心跳信息量非常小,用於檢查每個成員狀態。心跳的功能之一就是讓主節點知道自己是否滿足集合“大多數”的條件,如果主節點不在得到“大多數”伺服器的支持,他就會退位,變成備用節點。

        如果主節點宕機或者由於網路原因,備用節點無法連接到主節點,那麼所有得到這個消息的備用節點都會申請被選舉成為主節點,希望被選舉成為主節點的成員會向它能到達的所有成員發送通知。如果這個申請選舉的成員不符合候選主節點要求(這個成員的數據落後於副本集,或者只是由於網路原因備用節點無法到達主節點而申請的選舉),其他成員不會進行選舉。

        如果沒有反對理由,那麼其他成員就會對這個成員進行選舉投票。如果這個成員得到副本集中“大多數”贊成票,那麼它就會被選舉成為主節點。如果達不到“大多數”的要求,那麼選舉失敗,它仍然助於備用節點狀態,它之後還可以在此申請。主節點會一直處於主節點狀態,除非它由於不在滿足“大多數”的要求而退位。副本集節點數據必須是奇數個,否則在選舉時可能會出現平局的選舉結果導致無法出現主節點而集群不能工作。如果一定要使用偶數個節點,那麼就必須再加一個仲裁節點,仲裁節點只會在選舉平局的時候出來仲裁,並不會提供其他任何服務,所以占用資源非常少,但官方建議使用奇數個節點。

2、分片

  分片是指將數據拆分,將其分散存放到不同的機器上的過程。在分片集群中有配置服務(Config Server)、路由服務(Router Server)、和分片服務(Shard Server)等角色。mongodb本身有兩種組件:mongod和mongos,Shard Server和Config Server服務是以mongod類型的進程運行的,Router Server是以mongos類型的進程運行的。

        Config Server:配置服務相當於集群大腦,保存著集群和分片的元數據,即各分片包含著那些數據的信息。MongDB 3.4  之後要求配置服務必須是奇數個節點的副本集,否則集群不能正常啟動。鑒於配置服務所包含的數據極端重要,所以必須啟用日誌功能,並確保其數據保存在非易失性驅動器上。

        Router Server:前端路由,客戶端由此接入,且讓整個集群看上去像單一資料庫,前端應用可以透明使用。mongos能夠根據給定的片鍵找到文檔的存放位置,但當集群中存在成千上萬個文檔時,就會難以操作。因此將文檔分組為塊(chunk),每個塊由給定片鍵特定範圍內的文檔組成。一個塊只存在一個分片上,所以可以使用一個比較小的空間就能夠維護塊和分片間的映射。數據塊大小是固定的,均衡器(balancer)會周期性地檢查快的大小,當塊超過這個大小之後,會有均衡器將其拆分為多個塊,以保證數據均衡。

        Shard Server:用於存儲實際的數據塊,實際生產環境中一個shard server角色可由幾台機器組個一個副本集承擔,防止主機單點故障。當需要對集合分片時,就必須得指定一個片鍵,片鍵必須有索引,如果集合已存儲了大量數據,那麼基本就不可能再修改片鍵了,因此選擇片鍵時需要慎重。

3、分片+副本集集群安裝

        通過上面的描述,我們大概已經瞭解了分片+副本集集群的相關概念,可以開始安裝了。這裡我們提供三台機器供安裝,服務規劃為:

172.23.102.56 172.23.102.57 172.23.102.58
mongos port:27017 mongos port:27017 mongos port:27017
config server port:27018 config server port:27018 config server port:27018
shard1 server port:27019 shard1 server port:27019 shard1 server port:27019
shard2 server port:27020 shard2 server port:27020 shard2 server port:27020
shard3 server port:28021 shard3 server port:28021 shard3 server port:28021

將安裝包解壓到/use/local/mongodb目錄下(三個機器相同操作):

[root@abc] tar -zxvf mongodb-linux-x86_64-rhel70-3.6.4.tgz -C /usr/local/mongodb

在安裝目錄下創建配置文件存放目錄和配置文件(三個機器相同操作):

[root@abc] mkdir /usr/local/mongodb/config
[root@abc] cd /usr/local/mongodb/config
[root@abc] touch mongos.conf config.conf shard1.conf shard2.conf shard3.conf

配置文件目錄和配置文件都已經創建好了,其中 mongos.conf 為路由服務配置文件, config.conf 為配置服務配置文件, shard1.conf shard2.conf shard3.conf 為三個分片服務配置文件。我們開始創建數據存儲目錄(三個機器相同操作):

[root@abc] mkdir /data/mongodb/mongos/logs -p ## mongos日誌文件存儲目錄,由於mongos不存儲數據,所以不需要數據存儲目錄
[root@abc] touch /data/mongodb/mongos/logs/mongos.log ## mongos日誌文件
[root@abc] mkdir /data/mongodb/config/logs -p         ## config日誌文件存儲目錄
[root@abc] mkdir /data/mongodb/config/logs/config.log ## config日誌文件
[root@abc] mkdir /data/mongodb/config/data -p         ## config數據文件存儲目錄
[root@abc] mkdir /data/mongodb/shard1/logs -p         ## 第一個分片日誌文件存儲目錄
[root@abc] mkdir /data/mongodb/shard1/logs/shard1.log ## 第一個分片日誌文件
[root@abc] mkdir /data/mongodb/shard1/data -p         ## 第一個分片數據文件存儲目錄
[root@abc] mkdir /data/mongodb/shard2/logs -p         ## 第二個分片日誌文件存儲目錄
[root@abc] mkdir /data/mongodb/shard2/logs/shard2.log ## 第二個分片日誌文件
[root@abc] mkdir /data/mongodb/shard2/data -p         ## 第二個分片數據文件存儲目錄
[root@abc] mkdir /data/mongodb/shard3/logs -p         ## 第三個分片日誌文件存儲目錄
[root@abc] mkdir /data/mongodb/shard3/logs/shard3.log ## 第三個分片日誌文件
[root@abc] mkdir /data/mongodb/shard3/data -p         ## 第三個分片數據文件存儲目錄

在這裡我們使用keyFile的方式作為集群成員之間的安全校驗,所以需要先生成keyFile文件:

[root@abc] openssl rand -base64 756 > /usr/local/mongodb/keyFile.file
[root@abc] chmod 400 /usr/local/mongodb/keyFile.file

編寫config server配置文件,在三個機器中除 net.bindIp 配置需要對應到不同的機器之外,其他配置都一樣:

systemLog:
    # 日誌級別,0:包含“info”信息,1~5,即大於0的值均會包含debug信息。類型: integer,預設: 0
    verbosity: 0
    # 發送所有的診斷信息日誌文件的路徑。systemLog.destination為file時有效。類型: string。
    path: /data/mongodb/config/logs/config.log
    # 如果是true,則mongod服務重啟時會將日誌追加到日誌末尾,否則每次重啟會備份已有的日誌並創建新日誌。
    # 類型: boolean。預設: false。
    logAppend: true
    # 日誌輸出目的地,可以指定為“file”或者“syslog”,如果指定“file”則必須要設置systemLog.path。
    # 如果不指定,則會輸出到標準輸出中(standard output)。
    destination: file
processManagement:
    # 是否以守護進程(後臺進程)的方式運行mongod/mongos進程。類型: boolean。預設: false。
    # 在Linux下如果是使用npm包的方式安裝,並使用自帶的init script腳本,則不推薦修改預設值。
    # 否則需要禁用預設的init script,而使用自己的init script。
    fork: false
    # 配合"fork:true"參數,將mongod/mongos進程ID寫入指定的文件,如果不指定,將不會創建PID文件。類型: string
    pidFilePath: /data/mongodb/config/logs/config.pid
net:
    # mongod/mongos服務偵聽客戶端連接的埠。類型: int。預設: 27017。
    port: 27018
    # mongod/monogs應用偵聽客戶端的IP地址或者完整UNIX域套接字路徑,如果想要綁定多個地址使用逗號分隔。
    # 若要綁定到所有IPv4地址,請輸入0.0.0.0。與net.bindIpAll配置互斥,不能同時配置兩個。
    # 類型: string。預設: localhost
    bindIp: 127.0.0.1,172.23.102.56 / 127.0.0.1,172.23.102.57 / 127.0.0.1,172.23.102.58 #這裡三個設備分別對應
security:
    # 密鑰文件的路徑,它存儲MongoDB實例在共用的集群或副本集中相互驗證的共用密鑰。
    # 必須設置security.authorization為enable。類型: string
    keyFile: /usr/local/mongodb/keyFile.file
    # 集群成員之間的認證模式。類型: string。可選: keyFile、sendKeyFile、sendX509、x509。預設: keyFile。
    clusterAuthMode: keyFile
    # 打開訪問資料庫和進行操作的用戶角色認證,僅mongod有效。disabled: 關閉; enabled: 開啟(預設開啟)
    authorization: enabled
    # 啟用或禁用伺服器端JavaScript執行,僅mongod有效。
    # 如果為false,那麼任何與javascript相關的功能都不能使用。類型: boolean。預設: true
    javascriptEnabled: true
setParameter:
    # 如果開啟,則允許本機(localhost/127.0.0.1)第一次訪問時不需要密碼認證,以便於創建第一個admin資料庫的用戶
    # true/1或者false/0,預設為true。mongods和mongod有效,建議mongod關閉該功能。
    enableLocalhostAuthBypass: true
    # 認證機制,可選值為“SCRAM-SHA-1”、“MONGODB-CR”、“PLAN”等,建議為“SCRAM-SHA-1”
    authenticationMechanisms: SCRAM-SHA-1
storage:
    # mongod實例存儲資料庫文件路徑,僅mongod有效。類型: string
    dbPath: /data/mongodb/config/data
    # 是否將不同DB的數據存儲在不同的目錄中,dbPath的子目錄,目錄名為db的名稱,僅mongod有效。類型: boolean。預設: false
    directoryPerDB: true
    journal:
        # 記錄操作日誌,防止數據丟失。64bit預設為true,32bit預設為false
        enabled: true
replication:
    # 指定oplog的最大尺寸。對於已經建立過oplog.rs的資料庫,指定無效。
    # 預設為磁碟的5%。僅mongod有效
    # oplogSizeMB: 
    # 指定副本集的名稱。僅mongod有效
    replSetName: config
    # 指定副本集成員在接受oplog之前是否載入索引到記憶體。預設會載入所有的索引到記憶體。
    # none,不載入;all,載入所有;_id_only,僅載入_id。僅mongod有效
    secondaryIndexPrefetch: all
sharding:
    # 指定分片集的mongodb角色。configsvr: 配置伺服器。shardsvr: 分片實例。僅mongod有效
    clusterRole: configsvr
    # 在塊移動過程中,該選項強制mongodb實例保存所有移動的文檔到moveChunk目錄。
    # 在版本3.2及以後版本中預設值為false。
    archiveMovedChunks: false

分別啟動三個機器上的config server:

[root@abc] mongod --config /usr/local/mongodb/config/config.conf

當三個機器上的配置服務都啟動之後,然後隨便選擇一個服務登入,將三個配置服務節點添加到一個副本集中:

[root@abc] mongo --port 21018  #連接
...
> config = {
> ...     _id: "config",  # 配置文件中配置服務副本集的名稱
> ...     members: [
> ...         { _id: 0, host: "172.23.102.56:21018" },
> ...         { _id: 1, host: "172.23.102.57:21018" },
> ...         { _id: 2, host: "172.23.102.58:21018" }
> ...     ]
> ... }  # 設置變數
...
rs.initiate(config)  # 初始化副本集
...
rs.status();  # 查看副本集狀態
...

如果這裡使用的是偶數個節點的話,那麼就需要多加一個參數 {_id : 2, host : "172.23.102.58:21018", arbiterOnly: true } ,表示58這個機器為仲裁節點。需要註意的是,配置服務一定要在mongos路由服務之前啟動並初始化完成,因為mongos服務需要依賴配置服務中的數據。

編寫shard1 server配置文件,在三個機器中除 net.bindIp 配置需要對應到不同的機器之外,其他配置都一樣:

systemLog:
    # 日誌級別,0:包含“info”信息,1~5,即大於0的值均會包含debug信息。類型: integer,預設: 0
    verbosity: 0
    # 發送所有的診斷信息日誌文件的路徑。systemLog.destination為file時有效。類型: string。
    path: /data/mongodb/shard1/logs/shard1.log
    # 如果是true,則mongod服務重啟時會將日誌追加到日誌末尾,否則每次重啟會備份已有的日誌並創建新日誌。
    # 類型: boolean。預設: false。
    logAppend: true
    # 日誌輸出目的地,可以指定為“file”或者“syslog”,如果指定“file”則必須要設置systemLog.path。
    # 如果不指定,則會輸出到標準輸出中(standard output)。
    destination: file
processManagement:
    # 是否以守護進程(後臺進程)的方式運行mongod/mongos進程。類型: boolean。預設: false。
    # 在Linux下如果是使用npm包的方式安裝,並使用自帶的init script腳本,則不推薦修改預設值。
    # 否則需要禁用預設的init script,而使用自己的init script。
    fork: false
    # 配合"fork:true"參數,將mongod/mongos進程ID寫入指定的文件,如果不指定,將不會創建PID文件。類型: string
    pidFilePath: /data/mongodb/shard1/logs/shard1.pid
net:
    # mongod/mongos服務偵聽客戶端連接的埠。類型: int。預設: 27017。
    port: 27019
    # mongod/monogs應用偵聽客戶端的IP地址或者完整UNIX域套接字路徑,如果想要綁定多個地址使用逗號分隔。
    # 若要綁定到所有IPv4地址,請輸入0.0.0.0。與net.bindIpAll配置互斥,不能同時配置兩個。
    # 類型: string。預設: localhost
    bindIp: 127.0.0.1,172.23.102.56 / 127.0.0.1,172.23.102.57 / 127.0.0.1,172.23.102.58 #這裡三個設備分別對應
security:
    # 密鑰文件的路徑,它存儲MongoDB實例在共用的集群或副本集中相互驗證的共用密鑰。
    # 必須設置security.authorization為enable。類型: string
    keyFile: /usr/local/mongodb/keyFile.file
    # 集群成員之間的認證模式。類型: string。可選: keyFile、sendKeyFile、sendX509、x509。預設: keyFile。
    clusterAuthMode: keyFile
    # 打開訪問資料庫和進行操作的用戶角色認證,僅mongod有效。disabled: 關閉; enabled: 開啟(預設開啟)
    authorization: enabled
    # 啟用或禁用伺服器端JavaScript執行,僅mongod有效。
    # 如果為false,那麼任何與javascript相關的功能都不能使用。類型: boolean。預設: true
    javascriptEnabled: true
setParameter:
    # 如果開啟,則允許本機(localhost/127.0.0.1)第一次訪問時不需要密碼認證,以便於創建第一個admin資料庫的用戶
    # true/1或者false/0,預設為true。mongods和mongod有效,建議mongod關閉該功能。
    enableLocalhostAuthBypass: true
    # 認證機制,可選值為“SCRAM-SHA-1”、“MONGODB-CR”、“PLAN”等,建議為“SCRAM-SHA-1”
    authenticationMechanisms: SCRAM-SHA-1
storage:
    # mongod實例存儲資料庫文件路徑,僅mongod有效。類型: string
    dbPath: /data/mongodb/shard1/data
    # 是否將不同DB的數據存儲在不同的目錄中,dbPath的子目錄,目錄名為db的名稱,僅mongod有效。類型: boolean。預設: false
    directoryPerDB: true
    journal:
        # 記錄操作日誌,防止數據丟失。64bit預設為true,32bit預設為false
        enabled: true
replication:
    # 指定oplog的最大尺寸。對於已經建立過oplog.rs的資料庫,指定無效。
    # 預設為磁碟的5%。僅mongod有效
    # oplogSizeMB: 
    # 指定副本集的名稱。僅mongod有效
    replSetName: shard1
    # 指定副本集成員在接受oplog之前是否載入索引到記憶體。預設會載入所有的索引到記憶體。
    # none,不載入;all,載入所有;_id_only,僅載入_id。僅mongod有效
    secondaryIndexPrefetch: all
sharding:
    # 指定分片集的mongodb角色。configsvr: 配置伺服器。shardsvr: 分片實例。僅mongod有效
    clusterRole: shardsvr
    # 在塊移動過程中,該選項強制mongodb實例保存所有移動的文檔到moveChunk目錄。
    # 在版本3.2及以後版本中預設值為false。
    archiveMovedChunks: false

分別啟動三個機器上的shard1 server:

[root@abc] mongod --config /usr/local/mongodb/config/shard1.conf

當三個機器上的第一個分片服務都啟動之後,然後隨便選擇一個服務登入,將三個配置服務節點添加到一個副本集中:

[root@abc] mongo --port 21019  #連接
...
> config = {
> ...     _id: "shard1",  # 配置文件中第一個分片副本集的名稱
> ...     members: [
> ...         { _id: 0, host: "172.23.102.56:21019" },
> ...         { _id: 1, host: "172.23.102.57:21019" },
> ...         { _id: 2, host: "172.23.102.58:21019" }
> ...     ]
> ... }  # 設置變數
...
rs.initiate(config)  # 初始化副本集
...
rs.status();  # 查看副本集狀態
...

如果這裡使用的是偶數個節點的話,那麼就需要多加一個參數 {_id : 1, host : "172.23.102.57:21019", arbiterOnly: true } ,表示57這個機器為仲裁節點。

編寫shard2 server配置文件,在三個機器中除 net.bindIp 配置需要對應到不同的機器之外,其他配置都一樣:

systemLog:
    # 日誌級別,0:包含“info”信息,1~5,即大於0的值均會包含debug信息。類型: integer,預設: 0
    verbosity: 0
    # 發送所有的診斷信息日誌文件的路徑。systemLog.destination為file時有效。類型: string。
    path: /data/mongodb/shard2/logs/shard2.log
    # 如果是true,則mongod服務重啟時會將日誌追加到日誌末尾,否則每次重啟會備份已有的日誌並創建新日誌。
    # 類型: boolean。預設: false。
    logAppend: true
    # 日誌輸出目的地,可以指定為“file”或者“syslog”,如果指定“file”則必須要設置systemLog.path。
    # 如果不指定,則會輸出到標準輸出中(standard output)。
    destination: file
processManagement:
    # 是否以守護進程(後臺進程)的方式運行mongod/mongos進程。類型: boolean。預設: false。
    # 在Linux下如果是使用npm包的方式安裝,並使用自帶的init script腳本,則不推薦修改預設值。
    # 否則需要禁用預設的init script,而使用自己的init script。
    fork: false
    # 配合"fork:true"參數,將mongod/mongos進程ID寫入指定的文件,如果不指定,將不會創建PID文件。類型: string
    pidFilePath: /data/mongodb/shard2/logs/shard2.pid
net:
    # mongod/mongos服務偵聽客戶端連接的埠。類型: int。預設: 27017。
    port: 27020
    # mongod/monogs應用偵聽客戶端的IP地址或者完整UNIX域套接字路徑,如果想要綁定多個地址使用逗號分隔。
    # 若要綁定到所有IPv4地址,請輸入0.0.0.0。與net.bindIpAll配置互斥,不能同時配置兩個。
    # 類型: string。預設: localhost
    bindIp: 127.0.0.1,172.23.102.56 / 127.0.0.1,172.23.102.57 / 127.0.0.1,172.23.102.58 #這裡三個設備分別對應
security:
    # 密鑰文件的路徑,它存儲MongoDB實例在共用的集群或副本集中相互驗證的共用密鑰。
    # 必須設置security.authorization為enable。類型: string
    keyFile: /usr/local/mongodb/keyFile.file
    # 集群成員之間的認證模式。類型: string。可選: keyFile、sendKeyFile、sendX509、x509。預設: keyFile。
    clusterAuthMode: keyFile
    # 打開訪問資料庫和進行操作的用戶角色認證,僅mongod有效。disabled: 關閉; enabled: 開啟(預設開啟)
    authorization: enabled
    # 啟用或禁用伺服器端JavaScript執行,僅mongod有效。
    # 如果為false,那麼任何與javascript相關的功能都不能使用。類型: boolean。預設: true
    javascriptEnabled: true
setParameter:
    # 如果開啟,則允許本機(localhost/127.0.0.1)第一次訪問時不需要密碼認證,以便於創建第一個admin資料庫的用戶
    # true/1或者false/0,預設為true。mongods和mongod有效,建議mongod關閉該功能。
    enableLocalhostAuthBypass: true
    # 認證機制,可選值為“SCRAM-SHA-1”、“MONGODB-CR”、“PLAN”等,建議為“SCRAM-SHA-1”
    authenticationMechanisms: SCRAM-SHA-1
storage:
    # mongod實例存儲資料庫文件路徑,僅mongod有效。類型: string
    dbPath: /data/mongodb/shard2/data
    # 是否將不同DB的數據存儲在不同的目錄中,dbPath的子目錄,目錄名為db的名稱,僅mongod有效。類型: boolean。預設: false
    directoryPerDB: true
    journal:
        # 記錄操作日誌,防止數據丟失。64bit預設為true,32bit預設為false
        enabled: true
replication:
    # 指定oplog的最大尺寸。對於已經建立過oplog.rs的資料庫,指定無效。
    # 預設為磁碟的5%。僅mongod有效
    # oplogSizeMB: 
    # 指定副本集的名稱。僅mongod有效
    replSetName: shard1
    # 指定副本集成員在接受oplog之前是否載入索引到記憶體。預設會載入所有的索引到記憶體。
    # none,不載入;all,載入所有;_id_only,僅載入_id。僅mongod有效
    secondaryIndexPrefetch: all
sharding:
    # 指定分片集的mongodb角色。configsvr: 配置伺服器。shardsvr: 分片實例。僅mongod有效
    clusterRole: shardsvr
    # 在塊移動過程中,該選項強制mongodb實例保存所有移動的文檔到moveChunk目錄。
    # 在版本3.2及以後版本中預設值為false。
    archiveMovedChunks: false

分別啟動三個機器上的shard2 server:

[root@abc] mongod --config /usr/local/mongodb/config/shard2.conf

當三個機器上的第二個分片服務都啟動之後,然後隨便選擇一個服務登入,將三個配置服務節點添加到一個副本集中:

[root@abc] mongo --port 21020  #連接
...
> config = {
> ...     _id: "shard2",  # 配置文件中第二個分片副本集的名稱
> ...     members: [
> ...         { _id: 0, host: "172.23.102.56:21020" },
> ...         { _id: 1, host: "172.23.102.57:21020" },
> ...         { _id: 2, host: "172.23.102.58:21020" }
> ...     ]
> ... }  # 設置變數
...
rs.initiate(config)  # 初始化副本集
...
rs.status();  # 查看副本集狀態
...

如果這裡使用的是偶數個節點的話,那麼就需要多加一個參數 {_id : 0, host : "172.23.102.56:21020", arbiterOnly: true } ,表示56這個機器為仲裁節點。

編寫shard3 server配置文件,在三個機器中除 net.bindIp 配置需要對應到不同的機器之外,其他配置都一樣:

systemLog:
    # 日誌級別,0:包含“info”信息,1~5,即大於0的值均會包含debug信息。類型: integer,預設: 0
    verbosity: 0
    # 發送所有的診斷信息日誌文件的路徑。systemLog.destination為file時有效。類型: string。
    path: /data/mongodb/shard3/logs/shard3.log
    # 如果是true,則mongod服務重啟時會將日誌追加到日誌末尾,否則每次重啟會備份已有的日誌並創建新日誌。
    # 類型: boolean。預設: false。
    logAppend: true
    # 日誌輸出目的地,可以指定為“file”或者“syslog”,如果指定“file”則必須要設置systemLog.path。
    # 如果不指定,則會輸出到標準輸出中(standard output)。
    destination: file
processManagement:
    # 是否以守護進程(後臺進程)的方式運行mongod/mongos進程。類型: boolean。預設: false。
    # 在Linux下如果是使用npm包的方式安裝,並使用自帶的init script腳本,則不推薦修改預設值。
    # 否則需要禁用預設的init script,而使用自己的init script。
    fork: false
    # 配合"fork:true"參數,將mongod/mongos進程ID寫入指定的文件,如果不指定,將不會創建PID文件。類型: string
    pidFilePath: /data/mongodb/shard3/logs/shard3.pid
net:
    # mongod/mongos服務偵聽客戶端連接的埠。類型: int。預設: 27017。
    port: 27021
    # mongod/monogs應用偵聽客戶端的IP地址或者完整UNIX域套接字路徑,如果想要綁定多個地址使用逗號分隔。
    # 若要綁定到所有IPv4地址,請輸入0.0.0.0。與net.bindIpAll配置互斥,不能同時配置兩個。
    # 類型: string。預設: localhost
    bindIp: 127.0.0.1,172.23.102.56 / 127.0.0.1,172.23.102.57 / 127.0.0.1,172.23.102.58 #這裡三個設備分別對應
security:
    # 密鑰文件的路徑,它存儲MongoDB實例在共用的集群或副本集中相互驗證的共用密鑰。
    # 必須設置security.authorization為enable。類型: string
              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.查看系統環境 2.安裝軟體包和Apache SVN模塊 3. 驗證安裝 4.驗證Apache SVN模塊是否安裝成功,需要檢查mod_dav_svn.so和mod_authz_svn.so 5. 使用svnadmin命令創建SVN倉庫repos 6.修改repos目錄屬主和屬組 7. 複製/va ...
  • Grub(GRand Unified Bootloader),統一資源引導器,它的工作是提供一個菜單,允許用戶選擇要啟動的系統或不同的內核版本;把用戶選定的內核裝載到RAM中的特定空間中,然後解壓、展開,而後把系統控制權移交給內核。 Grub目前有兩個版本: 1、GRUB 0.X:Grub Lega ...
  • 用Linux已經有很長一段時間,但主要用於嵌入式開發(用交叉工具鏈進行版本編譯),所以用命令行就可以了,而且敲的最多的命令就是make。最近開始搭建TensorFlow的開發環境,大部分工作都是命令行完成,再加上TensorBoard可以實現web化展示,所以團隊共用一臺機器SSH接入就可以了。但是 ...
  • 目錄管理 ls、cd、pwd、mkdir、rmdir、tree ls(list) 列出,列表 用法: ls -l:長格式 文件類型: -:普通文件 (f) d: 目錄文件 b: 塊設備文件 (block) c: 字元設備文件 (character) l: 符號鏈接文件(symbolic link f ...
  • 為了方便自己快速使用命令,接觸了一下alias。在使用多個命令時,一般有兩種方式。各有不同 根據需求選擇。 直接上代碼: 1.alias Name='(date;pwd;cmd1;cmd2) 寫法簡潔容易。 2.alias da='da(){ date;pwd;who|wc -l;};da' 雖然有 ...
  • 想用中文系統,卻不想用中文文件夾,可以用以下方法: 先把home路徑下的桌面文件夾修改為Desktop 然後在命令行輸入 修改後ctrl -x然後確認修改重啟就行了 ...
  • 重啟網路失敗截圖 從本質上來看出現這樣的問題,是因為拷貝過來的虛擬機重新分配了網卡MAC地址。這樣造成的結果是配置文件中MAC與當前網卡MAC不一致。所以只需要修改一下配置文件即可。 ...
  • 1.安裝mysql客戶端流程: - 登錄navicat官網下載 - 將壓縮包拷貝ubuntu中進行解壓,解壓命令:tar zxvf navicat.tar.gz - 進入解壓目錄,運行命令./start_navicatt - 如果試用是灰色的則進行下一步 - 刪除 .navicat64/ 隱藏文件, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...