❶ 【numa&mongoDB】使用numactl 啟動mongoDB
# yum -y install numactl
# yum info numactl
# rpm -ql numactl | grep bin
在SMP架構裡面,所有的CPU爭用一個匯流排來訪問所有內存,優點是資源共享,而缺點是匯流排爭用激烈。隨著PC伺服器上的CPU數量變多(不僅僅是CPU核數),匯流排爭用的弊端慢慢越來越明顯,於是Intel在Nehalem CPU上推出了NUMA架構,而AMD也推出了基於相同架構的Opteron CPU。
NUMA最大的特點是引入了node和distance的概念。 對於CPU和內存這兩種最寶貴的硬體資源,NUMA用近乎嚴格的方式劃分了所屬的資源組(node),而每個資源組內的CPU和內存是幾乎相等。資源組的數量取決於物理CPU的個數(現有的PC server大多數有兩個物理CPU,每個CPU有4個核);distance這個概念是用來定義各個node之間調用資源的開銷,為資源調度優化演算法提供數據支持。
NUMA和SMP是兩種CPU相關的硬體架構。在SMP架構裡面,所有的CPU爭用一個匯流排來訪問所有內存,優點是資源共享,而缺點是匯流排爭用激烈。隨著PC伺服器上的CPU數量變多(不僅僅是CPU核數),匯流排爭用的弊端慢慢越來越明顯,於是Intel在Nehalem CPU上推出了NUMA架構,而AMD也推出了基於相同架構的Opteron CPU。
NUMA最大的特點是引入了node和distance的概念。對於CPU和內存這兩種最寶貴的硬體資源,NUMA用近乎嚴格的方式劃分了所屬的資源組(node),而每個資源組內的CPU和內存是幾乎相等。資源組的數量取決於物理CPU的個數(現有的PC server大多數有兩個物理CPU,每個CPU有4個核);distance這個概念是用來定義各個node之間調用資源的開銷,為資源調度優化演算法提供數據支持。
1、每個進程(或線程)都會從父進程繼承NUMA策略,並分配有一個優先node。如果NUMA策略允許的話,進程可以調用其他node上的資源。
2、NUMA的CPU分配策略有cpunodebind、physcpubind。cpunodebind規定進程運行在某幾個node之上,而physcpubind可以更加精細地規定運行在哪些核上。
3、NUMA的內存分配策略有localalloc、preferred、membind、interleave。localalloc規定進程從當前node上請求分配內存;而preferred比較寬松地指定了一個推薦的node來獲取內存,如果被推薦的node上沒有足夠內存,進程可以嘗試別的node。membind可以指定若干個node,進程只能從這些指定的node上請求分配內存。interleave規定進程從指定的若干個node上以RR演算法交織地請求分配內存。
NUMA的內存分配策略對於進程(或線程)之間來說,並不是公平的。
在現有的Redhat linux中,localalloc是默認的NUMA內存分配策略,這個配置選項導致資源獨占程序很容易將某個node的內存用盡。而當某個node的內存耗盡時,Linux又剛好將這個node分配給了某個需要消耗大量內存的進程(或線程),swap就妥妥地產生了。盡管此時還有很多page cache可以釋放,甚至還有很多的free內存。
NUMA:NUMA是多核心CPU架構中的一種,其全稱為Non-Uniform Memory Access
簡單來說就是在多核心CPU中,機器的物理內存是分配給各個核。
每個核訪問分配給自己的內存會比訪問分配給其它核的內存要快,有下面幾種訪問控制策略:
$ numactl --interleave=all mongod \
-f /path/to/mongodb.conf \
--dbpath=/path/to/datadir \
--fork \
--logpath=/path/to/mongodb.log
上面使用numactl –interleave命令就是指定其為交叉共享模式。
在有多個物理CPU的架構下,NUMA把內存分為本地和遠程,每個物理CPU都有屬於自己的本地內存,訪問本地內存速度快於訪問遠程內存,預設情況下,每個物理CPU只能訪問屬於自己的本地內存。
對於MongoDB這種需要大內存的服務來說就可能造成內存不足,但是目前mongodb在這種架構下工作的不是很好,numactl --interleave=all就是禁用NUMA為每個核單獨分配。
理論上,MySQL、Redis、Memcached等等都可能會受到NUMA的影響,需要留意。
每當出問題的時候,總有一個名叫 irqbalance 的進程CPU佔用率居高不下,搜索了一下,發現很多介紹irqbalance的文章中都提及了NUMA。
# yum -y install irqbalance
# yum info irqbalance
我們知道虛擬內存機制是通過一個中斷信號來通知虛擬內存系統進行內存swap的,所以這個irqbalance進程忙,是一個危險信號,在這里是由於在進行頻繁的內存交換。
這種頻繁交換現象稱為swap insanity,在MySQL中經常提到,也就是在NUMA框架中,採用不合適的策略,導致核心只能從指定內存塊節點上分配內存,即使總內存還有富餘,也會由於當前節點內存不足時產生大量的swap操作。
關於mongoDB啟動使用numactl --interleave=all
http://www.cocoachina.com/articles/61437
記一次MongoDB性能問題
https://blog.huoding.com/2011/08/09/104
http://blog.sina.com.cn/s/blog_976d93830101ea3g.html
Mongodb NUMA 導致的性能問題
http://zhangliyong.github.io/posts/2014/04/09/mongodb-numa---de-xing-neng-wen-ti.html
mongoDB的NUMA問題
http://www.ttlsa.com/mongodb/mongodb-numa
mongoDB使用numactl 啟動
https://blog.51cto.com/linuxg/1921697
關於numactl工具
https://www.jianshu.com/p/29662d744dd1
https://ywnz.com/linux/numactl
The MySQL 「swap insanity」 problem and the effects of the NUMA architecture
https://blog.jcole.us/2010/09/28/mysql-swap-insanity-and-the-numa-architecture
❷ linux裡面安裝了mongo資料庫怎麼啟動
輸入Mongodb的命令 有的話就有 沒有的話就會報錯 這個但凡是使用linux系統的人都應該必須知道的常識呀 連這個都不知道還好意思在linux下玩資料庫 直接改到windows的吧!!
❸ mongodb在linux怎麼配置自動啟動
按照常理,把如下命令
/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/m.log --directoryperdb
放在/etc/rc.local文件中就可以實現開機自啟動了,第一次重啟機器發現mongodb順利啟動了,再次重啟機器後,通過ps沒有查看到相應mongod進程,也就是啟動失敗了。原因是由於重啟機器,導致非正常停止mongod服務,mongod.lock中還記錄了上次運行的進程號,為了數據的安全需要執行
/usr/local/mongodb/bin/mongod –repair,
當然如果直接把mongod.lock文件刪除也可以重新啟動了,例如:
/usr/local/mongodb/bin/mongod --repair
/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/m.log --directoryperdb
或
rm -rf /data/db/mongod.lock
/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/m.log --directoryperdb
注意上述啟動Mongodb都是沒有增加journal參數,如果帶了此參數就不會那麼麻煩了,例如
/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/m.log --directoryperdb --journal就可以了,就算是非正常重啟機器,mongodb也會根據日誌去修復資料庫的。
另外,如果mongodb的數據目錄是通過mount的NFS文件夾,自啟動好像有問題的。
❹ linux mongodb 怎麼使用
1.連接mongodb
mongo/bin目錄下執行
./mongo
2.查看資料庫
show dbs
3.查看當前所在資料庫
db
4.創建資料庫
use openfire (臨時創建 如果不做操作 則離開後被系統刪除)
5.在當前資料庫刪除當前資料庫
db.dropDatabase()
6.查看當前庫的所有用戶
show users
7.查看集合(或者叫表)
show collections
8.創建集合
db.createCollection(「mycollection」)
9.創建集合並制定集合的屬性
db.createCollection(「mycol」, { capped : true, autoIndexID : true, size : 6142800, max : 10000 } )
欄位
類型
描述
capped Boolean (可選)如果為true,則啟用封頂集合。封頂集合是固定大小的集合,會自動覆蓋最早的條目,當它達到其最大大小。如果指定true,則需要也指定尺寸參數。
autoIndexID Boolean (可選)如果為true,自動創建索引_id欄位的默認值是false。
size number (可選)指定最大大小位元組封頂集合。如果封頂如果是 true,那麼你還需要指定這個欄位。
max number (可選)指定封頂集合允許在文件的最大數量。
10.另一種創建集合
(當插入一條數據時,不存在mongodb會幫我們創建,和創建資料庫同理)
db.MySecondCollection.insert({「name」 : 「ming」})
11.刪除當前庫的一個集合
db.CollectionName.drop()
12.插入一條數據
db.MyFirstCollection.insert({「_id」:」3」,」title」:」mongotest」,」description」:」this is test」})
注意:插入的都是JSON形式的,所以一定要用{},否則會報錯:
Sat Mar 19 14:22:39.160 SyntaxError: Unexpected token :
13.插入一條_id存在的數據
db.MyFirstCollection.insert({「_id」:」3」,」title」:」mm」})
輸出:E11000 plicate key error index: openfire.MyFirstCollection.$_id_ p key: { : 「3」 }
解釋:_id即是mongodb的默認主鍵,默認自動生成,我們可以直接設置以達到我們想要的目的
❺ 如何在linux操作mongodb
首先到下面的工具原料中的mongodb的官...
1
解壓對應的安裝包 命令如下: ...
2
因為mongodb不需要像別的資料庫那樣繁...
3
然後為mongodb創建資料庫存放的位置和...
4
進到mongodb下面的bin目錄下查看mongod...
5
啟動mongodb資料庫,對應的參數說明用綠...
6
為了安全期間建議關閉28017埠防止信...
7
做好上面的操作就可以進入mongodb的客..
❻ linux下怎麼安裝mongodb
下載完安裝包,並解壓 tgz(以下演示的是 64 位 Linux上的安裝) 。
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz # 下載
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz # 解壓
mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb # 將解壓包拷貝到指定目錄
MongoDB 的可執行文件位於 bin 目錄下,所以可以將其添加到 PATH 路徑中:
export PATH=<mongodb-install-directory>/bin:$PATH
<mongodb-install-directory> 為你 MongoDB 的安裝路徑。如本文的 /usr/local/mongodb 。
創建資料庫目錄
MongoDB的數據存儲在data目錄的db目錄下,但是這個目錄在安裝過程不會自動創建,所以你需要手動創建data目錄,並在data目錄中創建db目錄。
以下實例中我們將data目錄創建於根目錄下(/)。
注意:/data/db 是 MongoDB 默認的啟動的資料庫路徑(--dbpath)。
mkdir -p /data/db
命令行中運行 MongoDB 服務
你可以再命令行中執行mongo安裝目錄中的bin目錄執行mongod命令來啟動mongdb服務。
注意:如果你的資料庫目錄不是/data/db,可以通過 --dbpath 來指定。
$ ./mongod
2015-09-25T16:39:50.549+0800 I JOURNAL [initandlisten] journal dir=/data/db/journal
2015-09-25T16:39:50.550+0800 I JOURNAL [initandlisten] recover : no journal files present, no recovery needed
2015-09-25T16:39:50.869+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 3.16
2015-09-25T16:39:51.206+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 3.52
2015-09-25T16:39:52.775+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 7.7
MongoDB後台管理 Shell
如果你需要進入MongoDB後台管理,你需要先打開mongodb裝目錄的下的bin目錄,然後執行mongo命令文件。
MongoDB Shell是MongoDB自帶的互動式Javascript shell,用來對MongoDB進行操作和管理的互動式環境。
當你進入mongoDB後台後,它默認會鏈接到 test 文檔(資料庫):
$ cd /usr/local/mongodb/bin
$ ./mongo
MongoDB shell version: 3.0.6
connecting to: test
Welcome to the MongoDB shell.
……
由於它是一個JavaScript shell,您可以運行一些簡單的算術運算:
> 2+2
4
> 3+6
9
現在讓我們插入一些簡單的數據,並對插入的數據進行檢索:
> db.runoob.insert({x:10})
WriteResult({ "nInserted" : 1 })
> db.runoob.find()
{ "_id" : ObjectId("5604ff74a274a611b0c990aa"), "x" : 10 }
>
第一個命令將數字 10 插入到 runoob 集合的 x 欄位中。
MongoDb web 用戶界面
MongoDB 提供了簡單的 HTTP 用戶界面。 如果你想啟用該功能,需要在啟動的時候指定參數 --rest 。
$ ./mongod --dbpath=/data/db --rest
MongoDB 的 Web 界面訪問埠比服務的埠多1000。
如果你的MongoDB運行埠使用默認的27017,你可以在埠號為28017訪問web用戶界面,即地址為:http://localhost:28017。
❼ linux下安裝mongodb後怎麼使用
首先到下面的工具原料中的mongodb的官網下載對應你系統的安裝包,拷貝到你的linux系統上面,如果有網路可以直接用wget下載
解壓對應的安裝包
命令如下:
tar zxf mongodb-linux-i686-2.0.2.tgz
因為mongodb不需要像別的資料庫那樣繁瑣的配置解壓後放到慣例的/usr/local目錄下面,當然你可以放到任何地方,放到/usr/local下面方便管理
命令如下:
mv mongodb-linux-i686-2.0.2/* /usr/local/mongodb
然後為mongodb創建資料庫存放的位置和日誌文件,默認是在/data/db下面,同樣為了方便就在mongodb下面建立了相應的目錄
進到mongodb下面的bin目錄下查看mongodb的幫助文檔和我們用到的啟動參數
啟動mongodb資料庫,對應的參數說明用綠色表明了
為了安全期間建議關閉28017埠防止信息外泄
做好上面的操作就可以進入mongodb的客戶端開始你的mongodb之旅了.
步驟閱讀