MongoDB 是由C++語言編寫的,是一個基於分佈式文件存儲的開源數據庫系統。在高負載的狀況下,添加更多的節點,能夠保證服務器性能。
MongoDB 旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。
MongoDB 將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔相似於 JSON 對象。字段值能夠包含其餘文檔,數組及文檔數組。html
官網: https://www.mongodb.comnode
https://www.jianshu.com/p/e18...
https://www.cnblogs.com/tians...
https://blog.csdn.net/weixin_...
https://blog.csdn.net/eagle89...linux
操做系統:CentOS7 +
三臺服務器:192.168.90.225
安裝包: mongodb-linux-x86_64-4.0.10.tgznginx
mkdir /usr/local/tmp #臨時目錄,用於上傳壓縮包 mkdir /topinfo #mongodb的安裝目錄
上傳安裝包:mongodb
cd /usr/local/tmp/ # 跳轉到臨時目錄 rz #經過rz 上傳mongodb-linux-x86_64-4.0.10.tgz
一、解壓數據庫
tar -zxvf mongodb-linux-x86_64-4.0.10.tgz # 解壓 mv mongodb-linux-x86_64-4.0.10 mongodb #重命名 mv /usr/local/tmp/mongodb /topinfo # 將解壓包拷貝到指定目錄
二、MongoDB 的可執行文件位於 bin 目錄下,因此能夠將其添加到 PATH 路徑中:vim
vim /etc/profile
#加入如下內容 export MONGODB_HOME=/topinfo/mongodb export PATH=$MONGODB_HOME/bin:$PATH
#保持退出後,執行如下命令,當即生效 source /etc/profile
三、環境變量驗證
使用命令mongod -v輸出信息版本信息驗證環境變量是否配置成功數組
mongod -v
一、建立數據庫的目錄
MongoDB的默認數據存儲在跟目錄data/db目錄下,可是這個目錄在安裝過程不會自動建立,因此你須要手動建立data目錄,並在data目錄。
注意: data/db 是 MongoDB 默認的啓動的數據庫路徑。若是你的數據庫目錄不是/data/db,能夠經過 --dbpath 來指定。(mongod --dbpath /usr/local/mongo/data)服務器
若是是否是分片,則能夠暫時不須要建立數據庫的目錄。後續在分配中建立。數據結構
mkdir -p /topinfo/mongodb/data # 建立數據庫數據目錄 mkdir -p /topinfo/mongodb/logs # 建立數據庫日誌目錄
先測試一下 MongoDB 是否安裝成功:
which mongod
顯示 MongoDB 的bin/mongod 路徑則表示安裝成功。
啓動mongodb:
你能夠再命令行中執行mongo安裝目錄中的bin目錄執行mongod命令來啓動mongdb服務。
MongoDB後臺運行,啓動時只需添加 --fork函數便可。能夠在日誌路徑後面添加--logappend,防止日誌被刪除。
mongod --fork --dbpath= /topinfo/mongodb/data --logpath= /topinfo/mongodb/logs/mongodb2.log --logappend
查看進程:
ps -ef | grep mongo
中止MongoDB
mongod -shutdown --dbpath= /topinfo/mongodb /data --logpath= /topinfo/mongodb /logs/mongodb2.log --logappend
MongoDB數據庫啓動後,默認只能在本地使用,若是遠程訪問,須要進行一下設置。
一、關閉防火牆,或開放對應的端口
systemctl stop firewalld
二、啓動命令中添加 。--bind_ip=0.0.0.0
mongod --fork --dbpath= /topinfo/mongodb /data --logpath= /topinfo/mongodb /logs/mongodb2.log --logappend --bind_ip=0.0.0.0
在用客戶端鏈接如圖:
操做系統:CentOS7 +
三臺服務器:192.168.90.225/226/227
安裝包: mongodb-linux-x86_64-4.0.10.tgz
爲了更好的均衡機器的壓力,把每一個機器既能夠做爲主節點、副本節點、仲裁節點,這樣壓力就會均衡不少了。
因爲一個機器須要同時部署 mongos、config server 、shard一、shard二、shard3,因此須要用端口進行區分。
端口分配:
config:21000
shard1:27001
shard2:27002
shard3:27003
mongos:20000
一、 建立安裝和臨時目標
mkdir /usr/local/tmp #臨時目錄,用於上傳壓縮包 mkdir /topinfo #mongodb的安裝目錄
二、目錄規劃
mkdir -p /topinfo/mongodb/conf # 存放全部服務器的配置文件 mkdir -p /topinfo/mongodb/mongos/logs # 存放路由服務器的日誌信息 mkdir -p /topinfo/mongodb/config/data # 存放配置服務器的數據 mkdir -p /topinfo/mongodb/config/logs # 存放配置服務器的日誌 mkdir -p /topinfo/mongodb/shard1/data # 存放分片服務器上的數據 mkdir -p /topinfo/mongodb/shard1/logs # 存放分片服務器上的日誌 mkdir -p /topinfo/mongodb/shard2/data # 存放分片服務器上的數據 mkdir -p /topinfo/mongodb/shard2/logs # 存放分片服務器上的日誌 mkdir -p /topinfo/mongodb/shard3/data # 存放分片服務器上的數據 mkdir -p /topinfo/mongodb/shard3/logs # 存放分片服務器上的日誌
根據服務器規劃:
一、mongo服務經過配置文件啓動,存放配置文件目錄/topinfo/mongodb/conf
二、在每臺服務器建立該節點所含shard的數據存放目錄/topinfo/mongodb/shard1-3
三、在每臺服務器(也能夠在其中兩臺)建立存放config server數據的數據目錄/topinfo/mongodb/config,本次配置是在三臺機器上都配置。
故:分別在每臺機器創建conf、mongos、config、shard一、shard二、shard3六個目錄,由於mongos不存儲數據,只須要創建日誌文件目錄便可。
如圖:
上傳安裝包:
cd /usr/local/tmp/ # 跳轉到臨時目錄 rz #經過rz 上傳mongodb-linux-x86_64-4.0.10.tgz
一、解壓
tar -zxvf mongodb-linux-x86_64-4.0.10.tgz # 解壓 mv mongodb-linux-x86_64-4.0.10 mongodb #重命名 mv /usr/local/tmp/mongodb /topinfo # 將解壓包拷貝到指定目錄
二、MongoDB 的可執行文件位於 bin 目錄下,因此能夠將其添加到 PATH 路徑中:
vim /etc/profile
#加入如下內容 export MONGODB_HOME=/topinfo/mongodb export PATH=$MONGODB_HOME/bin:$PATH
#保持退出後,執行如下命令,當即生效 source /etc/profile
如圖:
三、環境變量驗證
使用命令mongod -v輸出信息版本信息驗證環境變量是否配置成功
mongod -v
如圖:
根據服務器規劃,咱們在三臺機器上部署config server副本集,在該三臺服務器上分別添加如下配置文件:
進入配置文件目錄 /topinfo/mongodb/conf/config.conf
vi /topinfo/mongodb/conf/config.conf
添加配置文件信息:
# where to write logging data. systemLog: destination: file logAppend: true path: /topinfo/mongodb/config/logs/config.log # Where and how to store data. storage: dbPath: /topinfo/mongodb/config/data/ journal: enabled: true # how the process runs processManagement: fork: true pidFilePath: /topinfo/mongodb/config/logs/configsrv.pid # network interfaces net: port: 21000 bindIp: 0.0.0.0 # 集羣名稱 replication: replSetName: configs # 聲明這是一個集羣的配置數據服務 sharding: clusterRole: configsvr
退出保存:
wq!
啓動三臺服務器的 config server
mongod -f /topinfo/mongodb/conf/config.conf
登陸任意一臺配置服務器(注意是配置端口),初始化配置副本集(執行命令的時候,不要複製註釋,只複製命令去一步步執行)。
mongo --port 21000
定義副本集配置(鍵「_id」對應的值必須與配置文件中的replicaction.replSetName一致)
config = { _id : "configs", members : [ {_id : 0, host : "192.168.90.225:21000" }, {_id : 1, host : "192.168.90.226:21000" }, {_id : 2, host : "192.168.90.227:21000" } ] }
初始化副本集
rs.initiate(config)
查看分區狀態
rs.status();
此時會發現終端上的輸出已經有了變化。
rs.initiate(config) 初始化。不成功的話,路由服務器與配置服務器鏈接不上。
其中,」_id」 : 「configs」應與配置文件中配置的 replicaction.replSetName 一致,」members」 中的 「host」 爲三個節點的 ip 和 配置port。
根據服務器規劃:
192.168.90.225: 27001 - 主節點
192.168.90.226: 27001 - 副節點
192.168.90.227: 27001 - 仲裁節點
三臺服務器上分別添加如下配置文件:
進入配置文件:
vi /topinfo/mongodb/conf/shard1.conf #分片配置文件
配置文件內容:
# where to write logging data. systemLog: destination: file logAppend: true path: /topinfo/mongodb/shard1/logs/shard1.log # Where and how to store data. storage: dbPath: /topinfo/mongodb/shard1/data journal: enabled: true # how the process runs processManagement: fork: true pidFilePath: /topinfo/mongodb/shard1/logs/shard1.pid # network interfaces net: port: 27001 bindIp: 0.0.0.0 # 副本集名稱 replication: replSetName: shard1 # 聲明這是一個集羣的分片服務; sharding: clusterRole: shardsvr
啓動三臺服務器的shard1 server
mongod -f /topinfo/mongodb/conf/shard1.conf
登錄任意一臺服務器(注意是分片端口),初始化副本集(執行命令的時候,不要複製註釋,只複製命令去一步步執行)
mongo --port 27001
#定義副本集配置(鍵「_id」對應的值必須與配置文件中的replicaction.replSetName一致,priority表明權重[1,100],大的被分配爲主服務器,0永久不會變爲主服務器) config = { _id : "shard1", members : [ {_id : 0, host : "192.168.90.225:27001", priority : 2 }, {_id : 1, host : "192.168.90.226:27001", arbiterOnly :true }, {_id : 2, host : "192.168.90.227:27001", priority : 1 } ] } #初始化副本集 rs.initiate(config) #查看分區狀態 rs.status();
其餘副本集都按照以上方式進行配置:
注意事項:
一、複製集的名稱不要重複
二、ip和端口根據分配進行配置
三、合理分配仲裁服務器的位置(由於仲裁不存放數據,很輕,合理的分配,能夠分擔其餘服務器的壓力)
注意:啓動mongodb時,先啓動配置服務器,再啓動分片服務器,最後啓動路由服務器。
根據服務器規劃,咱們在每臺服務器都配置了mongos:
192.168.90.225: 20000 - mongos
192.168.90.226: 20000 - mongos
192.168.90.227: 20000 - mongos
三臺服務器上分別添加如下配置文件:
進入配置文件:
vi /topinfo/mongodb/conf/mongos.conf
配置文件內容 # where to write logging data. systemLog: destination: file logAppend: true path: /topinfo/mongodb/mongos/logs/mongos.log # how the process runs processManagement: fork: true # pidFilePath: /var/log/nginx/mongos.pid # network interfaces net: port: 20000 bindIp: 0.0.0.0 #監聽的配置服務器,只能有1個或者3個,configs爲配置服務器的副本集名字,ip:configs配置服務器的端口 sharding: configDB: configs/192.168.90.225:21000,192.168.90.226:21000,192.168.90.227:21000
啓動三臺服務器的mongos server
mongos -f /topinfo/mongodb/conf/mongos.conf
目前已經搭建好配置服務器、數據分片服務器、路由服務器,下面進行分片啓用,使得app鏈接到路由服務器時可使用分片機制
登陸任意一臺mongos:
mongo --port 20000
使用admin數據庫
use admin
串聯路由服務器與分片副本集:
#串聯路由服務器與分片副本集 sh.addShard("shard1/192.168.90.225:27001,192.168.90.226:27001,192.168.90.227:27001") #sh.addShard("shard2/192.168.90.225:27001,192.168.90.226:27001,192.168.90.227:27001")
查看集羣狀態:
sh.status()
如圖:
目前配置服務、路由服務、分片服務、副本集服務都已經串聯起來了,但咱們的目的是但願插入數據,數據可以自動分片。鏈接在mongos上,準備讓指定的數據庫、指定的集合分片生效。
指定testdb分片生效
use admin # enableSharding只能針對admin數據庫運行,適宜選用admin
db.runCommand( { enablesharding :"testdb"});
指定數據庫裏須要分片的集合和片鍵:
咱們設置testdb的 testcoll 表須要分片,根據 id 自動分片到 shard1 ,shard2,.. 上面去。
db.runCommand( { shardcollection : "testdb.testcoll",key : {id: "hashed"} } )
要這樣設置是由於不是全部mongodb 的數據庫和表 都須要分片!!
查看分片狀態
db.testcoll.stats()
鏈接 MongoDB 路由服務:
執行測試語句:
for(i=1;i<=10000;i++){db.testcoll.insert({"id":i,"name":"yangp"})};
查看分片結果:
db.testcoll.stats();
如圖:
說明分片成功!
分片配置副本集的執行如下:
#定義副本集配置(鍵「_id」對應的值必須與配置文件中的replicaction.replSetName一致,priority表明權重[1,100],大的被分配爲主服務器,0永久不會變爲主服務器) config = { _id : "shard1", members : [ {_id : 0, host : "192.168.90.225:27001", priority : 2 }, {_id : 1, host : "192.168.90.226:27001", priority : 1 }, {_id : 2, host : "192.168.90.227:27001", arbiterOnly :true } ] } #初始化副本集 rs.initiate(config)
This node, 192.168.90.227:27001, with _id 2 is not electable under the new configuration version 1 for replica set shard1",
192.168.90.227這臺服務器不能初始化,換一臺機器作仲裁,順利經過。
#定義副本集配置(鍵「_id」對應的值必須與配置文件中的replicaction.replSetName一致,priority表明權重[1,100],大的被分配爲主服務器,0永久不會變爲主服務器) config = { _id : "shard1", members : [ {_id : 0, host : "192.168.90.225:27001", priority : 2 }, {_id : 1, host : "192.168.90.226:27001", arbiterOnly :true }, {_id : 2, host : "192.168.90.227:27001", priority : 1 } ] } #初始化副本集 rs.initiate(config) #查看分區狀態 rs.status();
mongod -shutdown -dbpath=/usr/local/mongodb/data
或
use admin db.shutdownServer()