標籤:
最近抽時間搭建了一下mongodb簡單的分區,整個過程還算是蠻順利,只不過在使用者驗證這一塊遇到了一些問題,好在最後終於搞定。
一、伺服器搭建過程:
1、安裝四個mongodb:一個作為config、一個作為mongos、另外兩個作為主要資料存放區的伺服器(機器ip192.168.0.201),
分別對應圖中被紅框框起來的mongoconf、mongos、mongo1、mongo2(解壓安裝,安裝過程省略)。
2、分別建立data、conf、logs檔案夾,並在logs檔案夾下建立mongodb.log檔案,在conf中建立mongodb.conf(啟動配置參數)檔案。mongoconf中conf檔案內容如下:
dbpath=/home/admin/mongoconf/datalogpath=/home/admin/mongoconf/logs/mongodb.loglogappend=truefork=trueport=30000
mongos中conf檔案內容個如下(與上邊相比少了dbpath的指定):
logpath=/home/admin/mongos/logs/mongodb.loglogappend=truefork=trueport=40000
mongo1中conf內容如下(和mongoconf中基本一樣,只是路徑指向的是自己的):
dbpath=/home/admin/mongo1/datalogpath=/home/admin/mongo1/logs/mongodb.loglogappend=truefork=trueport=37117
mongo2中的conf也是一樣,只是把mongo1改為mongo2(省略)。
3、依次啟動mongoconf、mongos和mongo1、mongo2:啟動mongoconf,在bin目錄下執行mongod命令:
./mongod -f ../conf/mongodb.conf
啟動mongos,在bin目錄下執行mongos命令:
./mongos -f ../conf/mongodb.conf --configdb=192.168.0.201:30000
啟動mongo1和mongo2,在各自的bin目錄中執行mongod命令:
./mongod -f ../conf/mongodb.conf
4、串連mongos伺服器,並添加分區: (1)、串連mongos:在任意一個mongodb的bin目錄執行如下命令:
./mongo 192.168.0.201:40000/admin
(2)、進入mongos後添加mongo1和mongo2位分區資料服務器:
db.runCommand({"addshard":"192.168.0.201:37117"})db.runCommand({"addshard":"192.168.0.201:47117"})
5、開啟分區:
db.runCommand({"enablesharding":"test"})db.runCommand({"shardcollection":"test.user","key":{"name":1}})
6、測試:向test資料庫的user表中添加10w條資料:
use testfor(var i=0;i<100000;i++){ db.user.insert({"name":"test"+i,"age":i});}
7、查看分區結果:
db.printShardingStatus()
二、開啟使用者驗證:
1、切換資料庫到admin建立root使用者:
db.createUser({"user":"root","pwd":"123456","roles":["root"]})
再切換到test資料庫建立讀寫權限的使用者(非admin資料庫中無法建立叢集管理相關的使用者):
db.createUser({"user":"test","pwd":"123456","roles":[{"db":"test","role":"readWrite"},"readWrite"]})
2、退出mongo shell,建立keyFile(檔案名稱可自取)檔案,並賦予600許可權,必須要600許可權: 進入到mongo1的data目錄下執行如下命令:
openssl rand -base64 753 > keyFilechmod 600 keyFile
3、把產生的keyFile檔案拷貝到其他幾個mongodb的data目錄中:
4、修改mongodb.conf啟動設定檔:除開mongos之外,其他都加上如下內容(開啟使用者驗證和keyFile驗證):
auth=truekeyFile=/home/admin/mongo2/data/keyFile
mongos中沒有auth參數,只需要keyFile。
5、重新依次啟動mongoconf、mongos和mongo1、mongo2(參考上邊的啟動說明);
三、java代碼串連測試:
1、java串連代碼如下:
public class MonTest { public static void main(String[] args) { mongodbfind2(); } public static void mongodbfind2() { ServerAddress sa = new ServerAddress("192.168.0.201", 40000); List<MongoCredential> mongoCredentialList = new ArrayList<MongoCredential>(); mongoCredentialList.add(MongoCredential.createCredential("test", "test", "123456".toCharArray())); MongoClient client = new MongoClient(sa, mongoCredentialList); MongoDatabase database = client.getDatabase("test"); // ******** MongoCollection collection2 = database.getCollection("user"); FindIterable<Document> findIterable = collection2.find(); MongoCursor<Document> cursor2 = findIterable.iterator(); while (cursor2.hasNext()) { Document doc = cursor2.next(); System.out.println(doc.get("_id") + "," + doc.get("name") + "," + doc.get("age")); } // 關閉資料庫連接 client.close(); }}
2、運行結果:
收工完成!
mongodb3.0分區及java代碼串連操作測試(開啟使用者驗證)