Mongodb的安裝、主從配置、replicaSet配置
前段時間一直在研究mongodb,看了一些書,網上也看了很多資料,其實都是抄來抄去,很多根本都沒有經過自己驗證,隨便往部落格上一貼,然後坑死人,這樣真的要不得,本人在開始就深受其害,所以這裡未免後來人也跟我一樣走這些彎路,自己就花點時間把自己的一些實踐操作整理了下,寫了這篇文章。
文章很簡單,主要還是講基本的配置,關鍵是配置的時候要細心,這裡沒有講到原理性的東西,畢竟篇幅有限,所以如果大家在配置過程中有什麼疑點都可以和我交流。希望大家多多支援。
還有,我工作很忙的,寫篇帖子也不容易,大家覺得寫得有用,給個回覆,表示下支援,也算給點動力啦,呵呵。
一.Mongodb的安裝
環境:linux 64bit
版本:2.0.1
位置:/opt/mongodb
安裝步驟:
tar –zxvf mongodb-linux-x86_64-2.0.1.tar –C /opt/mongodb
mkdir /opt/mongodb/data
touch /opt/mongodb/logs
安裝是很簡單的,關鍵是下面的啟動的配置。啟動配置有三種情況,分別是正常的單主機啟動,主從啟動,副本集啟動三種方式。
1. 單主機啟動方式
啟動
cd /opt/mongodb/bin
/opt/mongodb/bin/mongod –f mongodb.conf
#mongodb.conf是自定義的啟動配置檔案,其中引數auth表明需要認證才能登入,內容如下:
#start as daemon and need authentication
port=27017
fork=true
dbpath=/opt/mongodb/data/
logpath=/opt/mongodb/logs
auth=true
設定開機自動啟動(可選)
echo "/opt/mongodb/bin/mongod –f /opt/mongodb/bin/mongodb.conf" >> /etc/rc.local
設定密碼
#連線mongodb
cd /opt/mongodb/bin
./mongo
#預設進入到mongodb預設的test庫
#為資料庫設定使用者名稱密碼
#首先切換到admin庫,先建立一個管理員賬號
> use admin
> db.addUser("root","root");
#切換到test庫
use test
#為test庫新增使用者名稱和密碼
> db.addUser("testUser","123456");
#注:若此時顯示
Tue May 22 16:16:29 uncaught exception: error {
"$err" : "unauthorized db:test lock type:-1 client:127.0.0.1",
"code" : 10057
}
說明設定密碼已生效,此時要先轉到admin庫,輸入認證再轉回到test庫設定使用者名稱密碼,如下:
use admin
db.auth(“root”,”root”);
use test
#下次再連線mongodb時需要使用如下方式:
./mongo –u testUser –p 123456
#刪除使用者
Db.system.users.remove({“user”:”testUser”});
#注:mongodb的使用者名稱和密碼都是針對每一個庫的,所以不同的庫可以設定不同的使用者名稱和密碼。
2. 主從方式啟動
實際上現在這種方式已經不推薦使用了,推薦使用的是replicaset,下面會講到
假設已經將mongodb安裝在了兩臺主機上ip分別為192.168.0.1和192.168.0.2上,下面是啟動配置
啟動master(192.168.0.1)
cd /opt/mongodb/
./bin/mongod --dbpath=/opt/mongodb/data --logpath=/opt/mongodb/logs
--master --oplogSize 64 --logappend --port=27017 –fork
啟動slave(192.168.0.2)
cd /opt/mongodb/
./bin/mongod --dbpath=/opt/mongodb/data --logpath=/opt/mongodb/logs
--slave --source 192.168.0.1 --only test --slavedelay 10
--logappend --port=27017 –fork
這樣配置就完成了,當然也可以將這些啟動引數像前面一樣寫在配置檔案中,啟動時使用配置檔案啟動。
配置完成後可以測試一下,如下:
在主機器上新增資料
cd /opt/mongodb/
./bin/mongo
db.foo.save({"id":123,"name":gongyong});
成功的話可以在從伺服器看到資料:
cd /opt/mongodb/
./bin/mongo
db.foo.find({"id":123})
3. replcaSet的配置
我們假設有三臺伺服器,分別已經安裝好了mongodb,有如下三段配置
#10.127.65.92上的配置
logpath=/opt/mongodb/logs
dbpath=/opt/mongodb/data/
port=27017
fork=true
logappend=true
replSet=snsgame/10.127.65.95:27017
#10.127.65.95上的配置
logpath=/opt/mongodb/logs
dbpath=/opt/mongodb/data/
port=27017
fork=true
logappend=true
replSet=snsgame/10.127.65.92:27017
#10.11.154.91上的配置
logpath=/opt/mongodb/logs
dbpath=/opt/mongodb/data/
port=27017
fork=true
logappend=true
replSet=snsgame/10.127.65.92:27017,10.127.65.95:27017
分別將上面三段配置複製後放到每臺mongodb的某個位置(推薦bin目錄),三臺伺服器分別使用上面的配置啟動後,要進行初始化
首先連線上65.92這臺mongo
./mongo -port 27017
這樣就連線上了mongodb的預設庫test,然後輸入如下指令:
> config_rs1={_id:'snsgame',members:[
...{_id:0,host:'10.127.65.92:27017',priority:10},
...{_id:1,host:'10.127.65.95:27017',priority:9},
...{_id:2,host:'10.11.154.91:27017',priority:9}]
...}
> rs.initiate(config_rs1);
回車後出現下面的提示:
{
“info”:"Config now saved locallly. should come online in about a minute.",
" ok":1
}
說明初始化成功,注意只需要在其中任何一臺上初始化就可以
執行如下指令檢視是否成功
rs.status()
然後退出再重新連線,發現游標變成下面這種就對了:
rs1:PRIMARY
配置完成後可以進行祕密和使用者名稱的設定,設定方式前面已經提到,需要注意的是,每臺mongodb都需要用同樣的方式設定使用者名稱和祕密。
到這裡,mongodb的安裝,主從,副本集的配置就基本完成,再往後還有mongodb的叢集分片的搭建,在另一篇文章裡會詳細說明。
附:各啟動引數的說明
引數解釋: --dbpath 資料庫路徑(資料檔案)
--logpath 日誌檔案路徑
--master 指定為主機器
--slave 指定為從機器
--source 指定主機器的IP地址
--pologSize 命令列引數(與--master一同使用)配置用於儲存給從節點可用的更新資訊佔用的磁碟空間(M為單位),如果不指定這個引數,預設大小為當前可用磁碟空間的5%(64位機器最小值為1G,32位機器為50M)。
--logappend 日誌檔案末尾新增
--port 啟用埠號
--fork 在後臺執行
--only 指定只複製哪一個資料庫
--slavedelay 指從複製檢測的時間間隔
--auth 是否需要驗證許可權登入(使用者名稱和密碼)
-h [ --help ] show this usage information
--version show version information
-f [ --config ] arg configuration file specifying additional options
--port arg specify port number
--bind_ip arg local ip address to bind listener - all local ips
bound by default
-v [ --verbose ] be more verbose (include multiple times for more
verbosity e.g. -vvvvv)
--dbpath arg (=/data/db/) directory for datafiles 指定資料存放目錄
--quiet quieter output 靜默模式
--logpath arg file to send all output to instead of stdout 指定日誌存放目錄
--logappend appnd to logpath instead of over-writing 指定日誌是以追加還是以覆蓋的方式寫入日誌檔案
--fork fork server process 以建立子程序的方式執行
--cpu periodically show cpu and iowait utilization 週期性的顯示cpu和io的使用情況
--noauth run without security 無認證模式執行
--auth run with security 認證模式執行
--objcheck inspect client data for validity on receipt 檢查客戶端輸入資料的有效性檢查
--quota enable db quota management 開始資料庫配額的管理
--quotaFiles arg number of files allower per db, requires --quota 規定每個資料庫允許的檔案數
--appsrvpath arg root directory for the babble app server
--nocursors diagnostic/debugging option 除錯診斷選項
--nohints ignore query hints 忽略查詢命中率
--nohttpinterface disable http interface 關閉http介面,預設是28017
--noscripting disable scripting engine 關閉指令碼引擎
--noprealloc disable data file preallocation 關閉資料庫檔案大小預分配
--smallfiles use a smaller default file size 使用較小的預設檔案大小
--nssize arg (=16) .ns file size (in MB) for new databases 新資料庫ns檔案的預設大小
--diaglog arg 0=off 1=W 2=R 3=both 7=W+some reads 提供的方式,是隻讀,只寫,還是讀寫都行,還是主要寫+部分的讀模式
--sysinfo print some diagnostic system information 列印系統診斷資訊
--upgrade upgrade db if needed 如果需要就更新資料庫
--repair run repair on all dbs 修復所有的資料庫
--notablescan do not allow table scans 不執行表掃描
--syncdelay arg (=60) seconds between disk syncs (0 for never) 系統同步重新整理磁碟的時間,預設是60s
Replication options:
--master master mode 主複製模式
--slave slave mode 從複製模式
--source arg when slave: specify master as <server:port> 當為從時,指定主的地址和埠
--only arg when slave: specify a single database to replicate 當為從時,指定需要從主複製的單一庫
--pairwith arg address of server to pair with
--arbiter arg address of arbiter server 仲裁伺服器,在主主中和pair中用到
--autoresync automatically resync if slave data is stale 自動同步從的資料
--oplogSize arg size limit (in MB) for op log 指定操作日誌的大小
--opIdMem arg size limit (in bytes) for in memory storage of op ids指定儲存操作日誌的記憶體大小
Sharding options:
--configsvr declare this is a config db of a cluster 指定shard中的配置伺服器
--shardsvr declare this is a shard db of a cluster 指定shard伺服器