亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

MongoDB4.0構建分布式分片群集

發布時間:2020-03-04 12:05:09 來源:網絡 閱讀:2735 作者:你講多次 欄目:MongoDB數據庫

MongoDB分片簡述

  • 高數據量和吞吐量的數據庫應用會對單機的性能造成較大壓力,大的查詢量會將單機的 CPU 耗盡,大的數據量對單機的存儲壓力較大,最終會耗盡系統的內存而將壓力轉移到磁盤 IO 上。
  • MongoDB 分片是使用多個服務器存儲數據的方法,以支持巨大的數據存儲和對數據進行操作。分片技術可以滿足 MongoDB 數據量大量增長的需求,當一臺 MongoDB 服務器不足以存儲海量數據或不足以提供可接受的讀寫吞吐量時,我們就可以通過在多臺服務器上分割數據,使得數據庫系統能存儲和處理更多的數據。

MongoDB分片優勢

  • 分片為應對高吞吐量與大數據量提供了方法:
  1. 使用分片減少了每個分片需要處理的請求數,因此,通過水平擴展,群集可以提高自己的存儲容量。比如,當插入一條數據時,應用只需要訪問存儲這條數據的分片。
  2. 使用分片減少了每個分片村存儲的數據。

分片的優勢在于提供類似線性增長的架構,提高數據可用性,提高大型數據庫查詢服務器的性能。當MongoDB單點數據庫服務器存儲成為瓶頸、單點數據庫服務器的性能成為瓶頸或需要部署大型應用以充分利用內存時,可以使用分片技術。

MongoDB分片群集的組成

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

  • Shard:分片服務器,用于存儲實際的數據塊,實際生產環境中一個shard server 角色可以由幾臺服務器組成一個Peplica Set 承擔,防止主機單點故障。
  • Config Server:配置服務器,存儲了整個分片群集的配置信息,其中包括chunk信息。
  • Routers:前端路由,客戶端由此接入,且讓整個群集看上去像單一數據庫,前端應用可以透明使用。

系統環境

  • 系統:CentOS 7.4 x86_64
  • 軟件版本:4.0
  • 關閉防火墻及selinux
IP地址 路由服務器(Routers) 配置服務器(Config Server) Shard1 Shard2 Shard3
192.168.125.119 27017 27018 27001 27002 27003
192.168.125.120 27017 27018 27001 27002 27003
192.168.125.121 27017 27018 27001 27002 27003

部署分片群集

 

三臺物理服務器安裝及配置

  1. 下載解壓MongoDB
    wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz
    tar zxvf mongodb-linux-x86_64-4.0.0.tgz -C /opt
    mv /opt/mongodb-linux-x86_64-4.0.0/ /usr/local/mongodb
  2. 創建路由、配置、分片服務器的數據存放目錄及日志管理
    路由服務器不存儲數據,因此不需要創建數據存儲目錄,日志文件創建完成還需給予權限。
    mkdir -p /data/mongodb/config
    mkdir -p /data/mongodb/shard{1,2,3}
    mkdir -p /data/mongodb/logs
    touch /data/mongodb/logs/shard{1,2,3}.log
    touch /data/mongodb/logs/mongos.log
    touch /data/mongodb/logs/config.log
    chmod 777 /data/mongodb/logs/*.log
  3. 創建管理用戶,修改目錄權限
    useradd -M -s /sbin/nologin mongo
    chown -R mongo:mongo /usr/local/mongodb
    chown -R mongo:mongo /data/mongodb
  4. 添加環境變量,便于使用
    echo 'export MONGODB_HOME=/usr/local/mongodb' >> /etc/profile
    echo 'export PATH=$PATH:$MONGODB_HOME/bin' >> /etc/profile
    source /etc/profile
  5. 系統參數優化
    ulimit -n 25000    //可以打開的最大文件數量
    ulimit -u 25000    //用戶最大可用的進程數
    sysctl -w vm.zone_reclaim_mode=0  //內存不足時,從其他節點分配內存
    # 從CentOS7開始,MongoDB會建議關閉系統的THP特性,否則可能會導致性能下降
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    echo never > /sys/kernel/mm/transparent_hugepage/defrag  //*注意*這些優化都是臨時的,重啟失效

部署配置服務器(三臺物理服務器配置步驟相同)

  1. 寫入配置文件,我們可以用scp命令把配置文件發到其他兩臺物理服務器
    # vim config.conf
    dbpath=/data/mongodb/config  //數據文件存放位置
    logpath=/data/logs/config.log    //日志文件
    port=27018    //端口號
    logappend=true
    fork=true
    maxConns=5000  
    storageEngine=mmapv1
    replSet=configs  //復制集名稱
    configsvr=true    //設置參數為true
    # mongod -f config.conf  //啟動config實例
    scp /usr/local/mongodb/bin/config.conf root@192.168.125.120:/usr/local/mongodb/bin
    scp /usr/local/mongodb/bin/config.conf root@192.168.125.121:/usr/local/mongodb/bin
  2. 配置復制集(任意一臺物理機上操作即可)
    mongo --port 27018
    config={_id:"configs",members:[{_id:0,host:"192.168.125.119:27018"},{_id:1,host:"192.168.125.120:27018"},{_id:2,host:"192.168.125.121:27018"}]}    //創建復制集
    rs.initiate(config)                //初始化復制集

部署分片服務器

  • 編輯shard{1,2,3}.conf配置文件,端口分別為27001,27002,27003,設置shardsvr=true,啟動分片服務器
    # vim shard1.conf
    dbpath=/data/mongodb/shard1
    logpath=/data/logs/shard1.log
    port=27001
    logappend=true
    fork=true
    maxConns=5000  
    storageEngine=mmapv1
    shardsvr=true
    # mongod -f shard1.conf
    # 與另外兩臺配置實例配置文件相同,僅端口、數據文件存放及日志文件要改,只需配置完成后啟動即可
  • 將shard1配置為復制集(這里需要注意的是,預先被設為仲裁節點的服務器上創建復制集會報錯。)
    mongo --port 27001
    use admin
    config={_id:"shard1",members:[{_id:0,host:"192.168.125.119:27001"},{_id:1,host:"192.168.125.120:27001"},{_id:2,host:"192.168.125.121:27001"}]}    //創建復制集
    rs.initiate(config)                //初始化復制集
  • 其余兩臺分片服務器shard2、shard3設置相同,注意端口及仲裁節點的問題即可

    部署路由服務器

  • 創建配置文件,將配置文件發送到其他物理服務器。注意,路由服務器不需要存儲數據目錄
    # vim mongos.conf
    logpath=/data/mongodb/logs/mongos.log
    logappend = true
    port = 27017
    fork = true
    configdb = configs/192.168.125.119:27018,192.168.125.120:27018,192.168.125.121:27018
    maxConns=20000
  • 啟動mongos實例
    mongs -f /usr/local/mongodb/bin/mongos.conf
    # 注意,這邊啟動mongos實例用的是mongos命令

啟動分片功能

mongo  //默認進入27017端口
mongos> use admin
mongos> sh.addShard("shard1/192.168.125.119:27001,192.168.125.120:27001,172.16.10.29:27001")
mongos> sh.addShard("shard2/192.168.125.119:27002,192.168.125.120:27002,172.16.10.29:27002")
mongos> sh.status()           //查看群集狀態
# 此處為添加兩臺分片服務器,后續添加的也會均勻分配分片數據

實現分片功能

  • 設置分片chunk大小
    mongos> use config
    mongos> db.settings.save({"_id":"chunksize","value":1})
    # 設置塊大小為1M是方便實驗,不然需要插入海量數據
  • 模擬寫入數據
    mongos> use school
    mongos> show collections
    mongos> for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"jack"+i})}
    # 在school庫的user表中循環寫入五萬條數據
  • 啟動數據庫分片
    mongos>sh.enableSharding("school")
    # 我們可以自定義需要分片的庫或表
  • 為school庫中的user集合創建索引,然后對表進行分片
    mongos> db.user.createIndex({"id":1})
    # 以"id"作為索引
    mongos> sh.shardCollection("school.user",{"id":1})
    # 根據"id"對user表進行分片
    mongos> sh.status()
    # 查看分片情況
    mongos> sh.help()
    # 查看分片相關的命令
向AI問一下細節

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

AI

江城| 垫江县| 绥芬河市| 晋城| 乐亭县| 巫山县| 浙江省| 龙里县| 崇义县| 盖州市| 陇南市| 乌拉特前旗| 丽江市| 东方市| 多伦县| 南漳县| 辉县市| 余姚市| 鹤山市| 漳平市| 永顺县| 铅山县| 泸水县| 建宁县| 平阴县| 宝兴县| 林周县| 南安市| 特克斯县| 丰顺县| 漳浦县| 平顶山市| 南木林县| 敖汉旗| 琼海市| 内丘县| 长葛市| 志丹县| 彰化县| 盘山县| 威宁|