好記性不如爛部落格,記錄一下,以後需要了直接用就可以了。
本文配置的三個mongodb在同一台機器,按理來說應該放三台機器的,不過資源有限,一台機器將就用,配置複本集總比不配置的好。
本文配置使用資料庫版本:3.2.6 64位版
1、拷貝三分mongodb到伺服器下,目錄依次為: mongo_master // 192.168.1.11 27311 主庫 實際在資料庫運行時,哪個執行個體是主庫是不一定的,但為了區分檔案夾,暫且如此起名了
mongo_slaver // 192.168.1.11 27321 從庫
mongo_arbiter // 192.168.1.11 27331 仲裁伺服器
2、主庫配置
2.1、開啟cmd,進入mater\bin目錄下:
cd E:\mongo\mongo_master\bin
2.2、執行以下命令,建立資料庫服務:
mongod --replSet shard1 --port 27311 --logpath "E:\mongo\mongo_master\data\log\MongoDB.log" --logappend --dbpath "E:\mongo\mongo_master\data\db" --serviceName "mongo_master" --serviceDisplayName "mongo_master" --install
3、從庫配置
3.1、進入mongo-slaver\bin目錄下:
cd E:\mongo\mongo_slaver\bin
3.2、執行以下命令、建立資料庫服務:
mongod --replSet shard1 --port 27321 --logpath "E:\mongo\mongo_slaver\data\log\MongoDB.log" --logappend --dbpath "E:\mongo\mongo_slaver\data\db" --serviceName "mongo_slaver" --serviceDisplayName "mongo_slaver" --install
4、仲裁伺服器配置
4.1、進入mongo_arbiter\bin目錄下:
cd E:\mongo\mongo_arbiter\bin
4.2、執行以下命令、建立資料庫服務:
mongod --replSet shard1 --port 27331 --logpath "E:\mongo\mongo_arbiter\data\log\MongoDB.log" --logappend --dbpath "E:\mongo\mongo_arbiter\data\db" --serviceName "mongo_arbiter" --serviceDisplayName "mongo_arbiter" --install
5、啟動資料庫,配置主庫、從庫、仲裁庫:
config={_id:'shard1',members:[{_id:0,host:'192.168.1.11:27311'},{_id:1,host:'192.168.1.11:27321'},{_id:3,host:'192.168.1.11:27331', arbiterOnly:true}]}
rs.initiate(config)
5.1、說明:_id的值“shard1”是配置名稱,多處使用,需統一。members下就是各mongo執行個體,第三個成員中的arbiterOnly:true表明改成員是仲裁伺服器。rs.initiate(config)啟用本配置。
5.2、查看複本集配置情況:rs.status()
5.3、改變複本集配置:
var config = rs.config();
config.members[0].host = '120.27.194.222:27311'
rs.reconfig(config)
5.4、如果出現“not master and slaveok=false”的提示錯誤,請輸入一下命令:
rs.slaveOk()
6、在主庫中配置使用者:
6.1、為admin資料庫添加admin使用者
use admin db.createUser({user: "admin",pwd: "admin",roles:[{ role:"clusterAdmin", db: "admin"},{role:"dbAdminAnyDatabase", db: "admin"},{role:"userAdminAnyDatabase",db: "admin"},{role:"readWriteAnyDatabase", db:"admin" } ]})
6.2、為mydb資料庫添加sa使用者
use mydb db.createUser({user: "sa", pwd: "sa",roles:[{ role: "dbOwner", db: "mydb"} ]})
7、建立keyFile檔案
7.1、在 E:\mongo\mongo_master建立檔案夾key,在檔案夾中建立檔案key,內容要求如下:
(1)至少6個字元,小於1024位元組
(2)認證時候不考慮檔案中空白字元
(3)串連到複本集的成員和mongos進成的keyfile檔案內容必須一樣
(4)必須是base64編碼,但是不能有等號
(5)檔案許可權必須是x00,也就是說,不能分配任何許可權給group成員和other成員
windows下可以建一個txt檔案,拷貝一段base64編碼的內容,刪除檔案尾碼名。將key檔案夾連同key檔案拷貝至三個mongo目錄下即可。
8、修改主庫、從庫以認證方式啟動:
8.1、停止主庫服務,修改主庫啟動服務(添加啟動參數--auth):
cd E:\mongo\mongo_master\bin
mongod --replSet shard1 --port 27311 --auth --keyFile "E:\mongo\mongo_master\key\key" --logpath "E:\mongo\mongo_master\data\log\MongoDB.log" --logappend --dbpath "E:\mongo\mongo_master\data\db" --serviceName "mongo_master" --serviceDisplayName "mongo_master" --reinstall
8.2、停止從庫服務,修改從庫啟動服務
cd E:\mongo\mongo_slaver\bin
mongod --replSet shard1 --port 27321 --auth --keyFile "E:\mongo\mongo_master\key\key" --logpath "E:\mongo\mongo_slaver\data\log\MongoDB.log" --logappend --dbpath "E:\mongo\mongo_slaver\data\db" --serviceName "mongo_slaver" --serviceDisplayName "mongo_slaver" --reinstall
8.3、停止仲裁庫服務,修改仲裁庫啟動服務
cd E:\mongo\mongo_arbiter\bin
mongod --replSet shard1 --port 27331 --auth --keyFile "E:\mongo\mongo_master\key\key" --logpath "E:\mongo\mongo_arbiter\data\log\MongoDB.log" --logappend --dbpath "E:\mongo\mongo_arbiter\data\db" --serviceName "mongo_arbiter" --serviceDisplayName "mongo_arbiter" --reinstall