中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

部署MongoDB分片群集

發布時間:2020-03-02 18:59:25 來源:網絡 閱讀:698 作者:xiaoyaokeyx 欄目:MongoDB數據庫

部署MongoDB分片群集

分片概述

高數據量和吞吐量的數據庫應用會對單機的性能造成較大的壓力,大的查詢量會將單機的CPU耗盡,大的數據量對單機的存儲壓力較大,最終會耗盡系統的內存而將壓力轉移到磁盤IO上。

MongoDB分片是使用多個服務器儲存數據的方法,以支持巨大的數據存儲和對數據進行操作。分片技術可以滿足MongoDB數據量大量增長的需求,當一臺MongoDB服務器不足以存儲海量數據或者不足以能提供可接受打讀寫吞吐量時,我們可以通過在多臺服務器上分割數據,使得數據庫系統能存儲和處理更多的數據。

MongoDB分片優勢

分片為應對吞吐量和大數據量提供了方法。

1、使得分片減少了每個分片需要處理的請求數,因此,通過水平擴展,群集可以提高自己的存儲容量和吞吐量。比如,當插入一條數據時,應用只需要訪問存儲這條數據的分片。

2、使用分片減少了每個分片存儲的數據。

如下圖所示,假設一個collection中有1TB的數據,通過分片可以將1TB數據分片到四個shard中,當查詢對應數據時,就會去對應的分片服務器查詢,可以提高數據可用性。

MongoDB分片群集組成

MongoDB分片集群主要有三個主要組件:

1、Shard:分片服務器,用于存儲實際的數據塊,實際生產環境中一個shard server角色可以由幾臺服務器組成一個復制集(Replica Set)承擔,防止主機單點故障。

2、Config Server:配置服務器,存儲了整個分片群集的配置信息,其中包括chunk信息。

3、Routers:前端路由,客戶端由此接入,且讓整個群集看上去像單一數據庫,前端應用可以透明使用。
部署MongoDB分片群集

實驗環境

這里實驗是在同一臺服務器上搭建MongoDB分片,但是MongoDB3.4以后Shard默認都是要搭建MongoDB服務集,為了方便起見,我們使用的MongoDB版本是3.2的。

組件 端口號
路由實例 27017
配置實例 37017
Shard1實例 47017
Shard2實例 47018

分片群集部署

1、部署配置服務器

安裝相關依賴包和解壓軟件到指定目錄中。

[root@localhost ~]# yum install openssl-devel -y   #安裝依賴包
[root@localhost ~]# tar xfvz mongodb-linux-x86_64-3.2.1.tgz -C /opt/
[root@localhost ~]# cd /opt/
[root@localhost opt]# mv mongodb-linux-x86_64-3.2.1/ /usr/local/mongodb
#將軟件包重命名,方便下面使用

將即將創建的實例所需要的數據目錄,日志目錄和日志文件先創建好。

[root@localhost opt]# mkdir -p /data/mongodb/mongodb{1,2,3,4}
#創建實例的數據存儲目錄
[root@localhost opt]# mkdir /data/mongodb/logs
#創建實例的日志目錄
[root@localhost opt]# touch /data/mongodb/logs/mongodb{1,2,3,4}.log
#創建實例的日志文件
[root@localhost opt]# chmod -R 777 /data/mongodb/logs/*.log
#修改日志權限
[root@localhost opt]# ulimit -n 25000
#將可以打開的最大進程數修改為25000
[root@localhost opt]# ulimit -u 25000
#將可以打開的最大文件數修改為25000
[root@localhost opt]# sysctl -w vm.zone_reclaim_mode=0
#當某個節點可用內存不足時,如果為0的話,那么系統會傾向于從其他節點分配內存。如果為1的話,那么系統會傾向于從本地節點回收Cache內存多數時候。
[root@localhost opt]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@localhost opt]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
#當節點可用內存不足時,選擇關閉占內存多的大頁面
[root@localhost opt]# export PATH=$PATH:/usr/local/mongodb/bin/
#將MongoDB路徑添加到環境變量中
[root@localhost bin]# vim mongodb1.conf
#創建配置服務器的配置文件
port=37017
dbpath=/data/mongodb/mongodb1
logpath=/data/mongodb/logs/mongodb1.log
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
configsvr=true   #設置為配置服務器
[root@localhost mongodb]# mongod -f /usr/local/mongodb/bin/mongodb1.conf 
#啟動配置服務器進程

部署MongoDB分片群集

2、配置分片服務器

編輯mongodb2.conf配置文件,端口為47017,設置為shardsvr=true,同樣編輯mongodb3.conf,端口為47018,shardsvr=true,然后同時啟動。

[root@localhost mongodb]# cd /usr/local/mongodb/bin/
[root@localhost bin]# cp -p mongodb1.conf mongodb2.conf 
[root@localhost bin]# vim mongodb2.conf 
port=47017      #設置端口
dbpath=/data/mongodb/mongodb2    #數據存儲目錄要修改
logpath=/data/mongodb/logs/mongodb2.log    #日志文件也要修改
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true   #設置為分片服務器

[root@localhost bin]# cp -p mongodb2.conf mongodb3.conf 
[root@localhost bin]# vim mongodb3.conf 
port=47018     #設置端口
dbpath=/data/mongodb/mongodb3     #數據存儲目錄要修改
logpath=/data/mongodb/logs/mongodb3.log     #日志文件也要修改
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true

都修改完后,將兩個分片服務器啟動。
部署MongoDB分片群集

3、啟動路由服務器
[root@localhost bin]# ./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.58.131:37017 --chunkSize 1
#這條命令意思就是凡事訪問mongodb 27017端口的,都會轉到 192.168.58.131:37017上面
[root@localhost bin]# ./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.58.131:37017 --chunkSize 1
2018-07-17T17:20:58.990+0800 W SHARDING [main] Running a sharded cluster with fewer than 3 config servers should only be done for testing purposes and is not recommended for production.
about to fork child process, waiting until server is ready for connections.
forked process: 6430
child process started successfully, parent exiting

部署MongoDB分片群集

[root@localhost ~]# mongo
MongoDB shell version: 3.2.1
connecting to: test
Server has startup warnings: 
2018-07-17T17:20:59.120+0800 I CONTROL  [main] ** WARNING: You are running this process as the root user, which is not recommended.
2018-07-17T17:20:59.120+0800 I CONTROL  [main] 
mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
    "_id" : 1,
    "minCompatibleVersion" : 5,
    "currentVersion" : 6,
    "clusterId" : ObjectId("5b4db4fdf19287c74d1a4081")
}
  shards:
  active mongoses:
    "3.2.1" : 1
  balancer:
    Currently enabled:  yes
    Currently running:  no
    Failed balancer rounds in last 5 attempts:  0
    Migration Results for the last 24 hours: 
        No recent migrations
  databases:
#可以看到shards下面為空,所以我們需要將兩個分片服務器添加進去

部署MongoDB分片群集

mongos> sh.addShard("192.168.58.131:47017")
#將47017端口的分片服務器添加進去
{ "shardAdded" : "shard0000", "ok" : 1 }

mongos> sh.addShard("192.168.58.131:47018")
#將47018端口的分片服務器添加進去
{ "shardAdded" : "shard0001", "ok" : 1 }

部署MongoDB分片群集
進行測試,查看是否能夠進行分片功能,我們創建一個collection,在里面插入50000條數據。

mongos> use test
switched to db test
mongos> for(var i=1;i<=50000;i++) db.users.insert({"id":i,"name":"tom"+i})
#利用for循環往collection中插入50000條數據
mongos> db.users.find().limit(10)
#查看collection中的前10條數據,表示插入成功。

部署MongoDB分片群集

mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
    "_id" : 1,
    "minCompatibleVersion" : 5,
    "currentVersion" : 6,
    "clusterId" : ObjectId("5b4db4fdf19287c74d1a4081")
}
  shards:
    {  "_id" : "shard0000",  "host" : "192.168.58.131:47017" }
    {  "_id" : "shard0001",  "host" : "192.168.58.131:47018" }
  active mongoses:
    "3.2.1" : 1
  balancer:
    Currently enabled:  yes
    Currently running:  no
    Failed balancer rounds in last 5 attempts:  0
    Migration Results for the last 24 hours: 
        No recent migrations
  databases:
    {  "_id" : "test",  "primary" : "shard0000",  "partitioned" : false }
#可以看到partitioned:false,說明并沒有進行分片。
mongos> sh.enableSharding("test")
{ "ok" : 1 }
#啟用分片功能
mongos> sh.status()
{  "_id" : "test",  "primary" : "shard0000",  "partitioned" : true }
mongos> db.users.createIndex({"id":1})
{
    "raw" : {
        "192.168.58.131:47017" : {
            "createdCollectionAutomatically" : false,
            "numIndexesBefore" : 1,
            "numIndexesAfter" : 2,
            "ok" : 1
        }
    },
    "ok" : 1
}
#創建索引,方便分片
mongos> sh.shardCollection("test.users",{"id":1})
{ "collectionsharded" : "test.users", "ok" : 1 }
#執行分片,可以看到分片成功1-20165,寫入到shard0001中,20166-50000寫入到shard0000中

部署MongoDB分片群集
部署MongoDB分片群集
部署MongoDB分片群集

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

刚察县| 方正县| 三穗县| 宁河县| 迁安市| 鸡泽县| 宁强县| 岳池县| 汶上县| 绥滨县| 黄大仙区| 马龙县| 昆山市| 昌吉市| 长泰县| 吉木萨尔县| 济南市| 乌鲁木齐市| 津市市| 临桂县| 温宿县| 娄烦县| 香河县| 九台市| 突泉县| 翼城县| 福海县| 托里县| 昆明市| 三亚市| 保亭| 白沙| 舞阳县| 天台县| 二连浩特市| 和林格尔县| 孟村| 宜昌市| 乐东| 高密市| 玉树县|