windows下 mongo副本集配置 一主一從一仲裁
好記性不如爛部落格,記錄一下,以後需要了直接用就可以了。
本文配置的三個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
9、java中連線資料庫:
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
ServerAddress master = new ServerAddress("192.168.1.11", 27311);
ServerAddress slaver = new ServerAddress("192.168.1.11", 27321);
List<ServerAddress> sends = new ArrayList<ServerAddress>();
sends.add(master);
sends.add(slaver);
MongoCredential c = MongoCredential.createCredential("sa", "mydb", "sa".toCharArray());
MongoClient mc = new MongoClient(sends, Arrays.asList(c));
MongoCollection<Document> test = mc.getDatabase("mydb").getCollection("test");
Document doc = new Document();
doc.put("name", "test");
mcoll.insertOne(doc)