來個原創: mongodb 叢集執行個體
因為估計我沒那麼多伺服器去做分區,所以下只是類似主從的伺服器叢集,沒有對單個資料庫再分區到多個機器上.
以下目標就是在多個機器上都儲存一份完整資料,並能自動主從切換(未實現)
即便是這樣,配置仍然一波三折,特別網上的文章多基於本機或者是版本實現差異,多個步驟是對不上那些教程的.
使用版本 mongodb-win32-i386-2.0.2
1.解壓後即可開始使用.
2.講解一下設定檔.
網上的例子基本都是命令列的,設定檔方式如下
mongod --config D:\mongodb-win32-i386-2.0.2\bin\mongo.cnf
基本上設定檔內容與參數差不多: 把命令列參數的 "--" 去掉然後加上 "=" 在參數值前並且每個參數單獨一行就可以了.
樣本如下:
dbpath=D:\mongodb-win32-i386-2.0.2\bin\data
不過例子仍然是命令列,如下
mongod.exe --dbpath D:\mongodb-win32-i386-2.0.2\bin\data --replSet rs1 --keyFile D:\mongodb-win32-i386-2.0.2\bin\key_r0
3.看到那個 key_r0 檔案沒有,這個是 mongdb 一定要有的標識,並且主從機是一樣的(其實我的主從機只有 data 目錄不同)
內容就是一個文字檔,可以這樣 "this is rs1 super secret key"
4.第一次一定要在命令列中初始化,不過初始化後就會寫入檔案以後就不用了,程式啟動就行.
5.初始化時主從機都要初始化.
6.初始化時至少從機的 data 中不能有資料.執行 rs.initiate(config_rs1); --初始化配置 時會報錯的,看提示來.
7.命令如下:
命令1
config_rs1 = {_id: 'rs1', members: [
{_id: 0, host: '192.168.41.177:27017', priority:1}, --成員IP 及連接埠,priority=1 指PRIMARY
{_id: 1, host: '192.168.41.34:27017'}
}
命令2
rs.initiate(config_rs1); --初始化配置
可能我的版本或配置有問題,命令中的英文要去掉.
8.命令是否成功用 rs.status() 查看.
9.命令要用原生 mongodb.exe 執行.
10.要想用 MongoVUE 這樣的工具跨機器訪問從機的資料還能使用使用者登入模式,方法是給資料庫加一個使用者.加在 admin
資料庫中的話可以訪問全部資料庫.添加使用者的操作要在主機上執行,從機會自動同步的.
11.預設從機是唯讀,要改 SlaveOk ,否則會報 "Server is not a primary and SlaveOk is false.."
12.認證方式的登入連接字串如下:
MongoServer mongodb = MongoServer.Create("mongodb://192.168.41.34:27017/root:111");
失敗
//MongoServer mongodb = MongoServer.Create("mongodb://192.168.41.34:27017/root:111?slaveOk=true");