http://blog.csdn.net/luonanqin/article/details/8497860 MongoDB集群搭建的三種方式
成都創(chuàng)新互聯(lián)公司是一家成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè),提供網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,網(wǎng)站制作,建網(wǎng)站,按需規(guī)劃網(wǎng)站,網(wǎng)站開發(fā)公司,于2013年創(chuàng)立是互聯(lián)行業(yè)建設(shè)者,服務(wù)者。以提升客戶品牌價值為核心業(yè)務(wù),全程參與項目的網(wǎng)站策劃設(shè)計制作,前端開發(fā),后臺程序制作以及后期項目運營并提出專業(yè)建議和思路。
NOSQL = Not Only SQL mongodb存儲方式是文檔式存儲,并不是Key-Value形式。
Mongodb的三種集群方式的搭建:Replica Set / Sharding / Master-Slaver
Replica Set 副本集集群原理:(最簡單的集群方式)
主節(jié)點,備節(jié)點,仲裁節(jié)點。主備節(jié)點存儲數(shù)據(jù),仲裁節(jié)點不存儲數(shù)據(jù)。
客戶端同時連接主節(jié)點與備節(jié)點,不連接仲裁節(jié)點。
默認(rèn)設(shè)置下,主節(jié)點提供所有增刪查改服務(wù),備節(jié)點不提供任何服務(wù)。但是可以通過設(shè)置使備節(jié)點提供查詢服務(wù),這樣就可以減少主節(jié)點的壓力,當(dāng)客戶端進(jìn)行數(shù)據(jù)查詢時,請求自動轉(zhuǎn)到備節(jié)點上。這個設(shè)置叫做Read Preference Modes,同時Java客戶端提供了簡單的配置方式,可以不必直接對數(shù)據(jù)庫進(jìn)行操作。
仲裁節(jié)點是一種特殊的節(jié)點,它本身并不存儲數(shù)據(jù),主要的作用是決定哪一個備節(jié)點在主節(jié)點掛掉之后提升為主節(jié)點,所以客戶端不需要連接此節(jié)點。這里雖然只有一個備節(jié)點,但是仍然需要一個仲裁節(jié)點來提升備節(jié)點級別。
測試:一個是往主節(jié)點插入數(shù)據(jù),能從備節(jié)點查到之前插入的數(shù)據(jù)(查詢備節(jié)點可能會遇到某個問題,可以自己去網(wǎng)上查查看)。二是停掉主節(jié)點,備節(jié)點能變成主節(jié)點提供服務(wù)。三是恢復(fù)主節(jié)點,備節(jié)點也能恢復(fù)其備的角色,而不是繼續(xù)充當(dāng)主的角色。二和三都可以通過rs.status()命令實時查看集群的變化。
Sharding 分片集群:
和Replica Set類似,都需要一個仲裁節(jié)點,但是Sharding還需要配置節(jié)點和路由節(jié)點。就三種集群搭建方式來說,這種是最復(fù)雜的。
Master-Slaver 主備方式
官方已經(jīng)不推薦這種方式,搭建方式也相對簡單。
用過的人應(yīng)該知道m(xù)ongodb吃內(nèi)存的問題,解決辦法只能通過ulimit來控制內(nèi)存使用量,但是如果控制不好的話,mongodb會掛掉。
mongodb的安裝
執(zhí)行腳本 install_mongodb_20160510.sh 即可安裝mongodb服務(wù)。詳細(xì)請看redme
mongodb集群的安裝
常用命令
mongodb的啟動
/opt/server/mongodb/bin/mongod -f /opt/server/mongodb/mongodb.conf
/opt/server/mongodb/bin/mongod -f /opt/server/mongodb/mongodb.conf --fork #單機環(huán)境/與配置文件有關(guān)系,具體請參看配置文件
mongodb的停止
kill -15 pid
pkill mongod
mongodb登錄方式
/opt/server/mongodb/bin/mongo 192.168.1.200:27017
查看狀態(tài)
rs.status()
刪除節(jié)點:
rs.remove("mongodb13.kk.net:27019") #可以刪除節(jié)點
添加節(jié)點:
rs.addArb("mongodb13.kk.net:27019") #可以添加節(jié)點,但這樣添加的節(jié)點為仲裁
mongodb副本集如何添加一個節(jié)點使其成為備節(jié)點呢?
在主節(jié)點上操作
use admin
cfg={ _id:"wlb", members:[ {_id:0,host:'192.168.11.215:27017',priority:2}, {_id:1,host:'192.168.11.187:27017',priority:1},{_id:2,host:'192.168.11.25:27017',arbiterOnly:true}] };
rs.reconfig(cfg); #使配置生效
rs.status()
查看所有數(shù)據(jù)庫
show dbs
MongoDB 創(chuàng)建數(shù)據(jù)庫
use znx
db
show dbs #會發(fā)現(xiàn)創(chuàng)建的數(shù)據(jù)庫不在列表中,要想顯示需要插入數(shù)據(jù)
備節(jié)點若想查看數(shù)據(jù)庫,需要執(zhí)行如下命令,否則報13435錯誤
rs.slaveOk(true)
插入數(shù)據(jù)
db.znx.insert({"name":"dengyong"})
show dbs #會顯示出znx數(shù)據(jù)庫,備節(jié)點也會顯示
查看全部數(shù)據(jù)表
show collections
查看全部表記錄
db.znx.find()
刪除pushlog這張表
> db.Pushlog.drop() #具體操作,輸入db.Pushlog.d后按table鍵,看有啥命令
true
備節(jié)點查看數(shù)據(jù),先執(zhí)行如下命令,否則會報錯
rs.slaveOk(true)
MongoDB 刪除數(shù)據(jù)庫
use znx
db.dropDatabase() #執(zhí)行刪除命令
show dbs #znx數(shù)據(jù)庫已刪除
參考鏈接:http://blog.csdn.net/chen88358323/article/details/50206651
mongodb創(chuàng)建用戶
use admin
db.createUser({user:"wjs",pwd:"wjs",roles:[{role:"userAdminAnyDatabase",db:"admin"}]}) #創(chuàng)建用戶
show users #查看用戶 需要先use數(shù)據(jù)庫
內(nèi)置角色:
1. 數(shù)據(jù)庫用戶角色:read、readWrite;
2. 數(shù)據(jù)庫管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 備份恢復(fù)角色:backup、restore;
5. 所有數(shù)據(jù)庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超級用戶角色:root
// 這里還有幾個角色間接或直接提供了系統(tǒng)超級用戶的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 內(nèi)部角色:__system
具體角色:
Read:允許用戶讀取指定數(shù)據(jù)庫
readWrite:允許用戶讀寫指定數(shù)據(jù)庫
dbAdmin:允許用戶在指定數(shù)據(jù)庫中執(zhí)行管理函數(shù),如索引創(chuàng)建、刪除,查看統(tǒng)計或訪問system.profile
userAdmin:允許用戶向system.users集合寫入,可以找指定數(shù)據(jù)庫里創(chuàng)建、刪除和管理用戶
clusterAdmin:只在admin數(shù)據(jù)庫中可用,賦予用戶所有分片和復(fù)制集相關(guān)函數(shù)的管理權(quán)限。
readAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的讀權(quán)限
readWriteAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的讀寫權(quán)限
userAdminAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的userAdmin權(quán)限
dbAdminAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的dbAdmin權(quán)限。
root:只在admin數(shù)據(jù)庫中可用。超級賬號,超級權(quán)限
db.system.users.find() #查看用戶
show users
創(chuàng)建一個數(shù)據(jù)庫znx
use znx
創(chuàng)建一個普通用戶wxc
db.createUser({user:"wxc",pwd:"wxc",roles:[{role:"readWrite",db:"znx"}]})
釋放掉MongoDB占用的內(nèi)存
重啟服務(wù)來釋放內(nèi)存,或 使用MongoDB內(nèi)置的closeAllDatabases命令達(dá)到目的:
mongo> use admin
mongo> db.runCommand({closeAllDatabases:1})
監(jiān)控MongoDB的內(nèi)存使用情況
db.serverStatus().mem