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、启动数据库,配置主库、从库、仲裁库:

mongo 192.168.1.11:27311/admin
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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值