windows下 mongo副本集配置 一主一从一仲裁

本文详细介绍了如何在单台服务器上配置MongoDB副本集,包括主库、从库及仲裁服务器的设置步骤,并实现了基于用户的认证访问。

好记性不如烂博客,记录一下,以后需要了直接用就可以了。

本文配置的三个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)

<think>好的,我现在需要帮助用户了解如何在本地单机环境中设置MongoDB副本。用户可能已经看过些引用资料,但需要具体的步骤指导。首先,我需要回忆MongoDB副本的基本概念,副本组维护相同数据mongod实例,提供冗余和高可用性。在单机上配置副本通常用于开发和测试环境,生产环境建议使用多机部署。 接下来,根据用户提供的引用内容,引用[2]提到在Windows环境下部署三个节点,复制MongoDB的bin目录三次,配置每个节点的数据目录、日志文件和端口。引用[5]提到使用Docker容器配置三个节点,并进入容器进行初始化。不过用户问的是单机环境,可能没有使用Docker,所以需要分情况讨论。但用户明确提到“本地单机环境”,可能更倾向于直接在本机安装MongoDB,而不是用Docker,所以重点放在引用[2]和引用[3]的方法。 用户的问题是如何在单机配置和启用副本。步骤可能包括安装MongoDB配置多个实例,每个实例使用不同的端口和数据目录,然后初始化副本。需要注意配置文件中的replication.replSetName参数,以及如何通过mongo shell执行rs.initiate()和相关添加节点的命令。 需要确认步骤是否适用于不同的操作系统,用户提到的是本地环境,但引用中有Windows和Linux的例子。用户可能需要通用步骤,或者具体到某个系统。但用户没有指定,所以可能需要给出通用步骤,同时指出不同系统的差异,例如路径分隔符或配置文件的位置。 另外,引用[1]提到副本选型,可能涉及节点类型(、从、仲裁者),但用户的问题要是设置步骤,所以可能不需要深入选型,但初始化时可以提到添加节点的参数,比如是否作为仲裁者。 现在需要将步骤分点说明,确保清晰。可能包括: 1. 安装MongoDB并准备多个实例目录。 2. 配置每个实例的配置文件,指定端口、数据目录、副本名称。 3. 启动各个mongod实例。 4. 连接到其中个实例,初始化副本,添加其他节点。 5. 验证副本状态。 同时,引用[4]可能涉及备份恢复工具,但当前问题不涉及,所以可能不需要提及。需要确保命令和路径正确,比如在Windows中使用mongod.exe,而Linux使用mongod。 最后,生成相关问题需要考虑用户在配置副本时可能遇到的后续问题,例如如何添加节点、处理故障转移、数据备份等,根据引用内容中的相关点来提问。</think>### 如何在本地单机环境中设置MongoDB副本 以下是在本地单机环境下配置MongoDB副本的步骤(以三节点为例): --- #### **1. 准备环境** - **安装MongoDB**:确保本地已安装MongoDB,并配置好`bin`目录的环境变量[^2]。 - **创建节点目录**:在单机中为每个节点创建独立的工作目录: ``` MongoDB1/ ├─ data/ # 数据存储目录 └─ log/ # 日志文件目录 MongoDB2/ MongoDB3/ ``` --- #### **2. 配置节点文件** 每个节点需独立配置: - **Windows示例**(修改`mongod.cfg`文件): ```yaml # MongoDB1配置 systemLog: destination: file path: D:\MongoDB1\log\mongod.log storage: dbPath: D:\MongoDB1\data net: port: 27017 replication: replSetName: rs0 # 副本名称需致[^2] # MongoDB2、MongoDB3配置类似,端口分别为27018、27019 ``` - **Linux示例**(启动命令): ```bash mongod --port 27017 --dbpath /path/to/MongoDB1/data --replSet rs0 mongod --port 27018 --dbpath /path/to/MongoDB2/data --replSet rs0 mongod --port 27019 --dbpath /path/to/MongoDB3/data --replSet rs0 ``` --- #### **3. 启动节点** 打开三个终端窗口,分别启动三个实例: ```bash # Windows mongod.exe --config D:\MongoDB1\mongod.cfg mongod.exe --config D:\MongoDB2\mongod.cfg mongod.exe --config D:\MongoDB3\mongod.cfg # Linux mongod --port 27017 --dbpath /path/to/MongoDB1/data --replSet rs0 mongod --port 27018 --dbpath /path/to/MongoDB2/data --replSet rs0 mongod --port 27019 --dbpath /path/to/MongoDB3/data --replSet rs0 ``` --- #### **4. 初始化副本** 连接到任意节点(如`27017`)并执行初始化: ```javascript mongo --port 27017 > rs.initiate({ _id: "rs0", members: [ { _id: 0, host: "localhost:27017" }, { _id: 1, host: "localhost:27018" }, { _id: 2, host: "localhost:27019" } ] }) ``` - **验证状态**: ```javascript rs.status() // 查看副本状态,确认所有节点为"PRIMARY"或"SECONDARY"[^5] ``` --- #### **5. 测试数据同步** - 在节点插入数据: ```javascript use testdb db.users.insert({name: "Alice"}) ``` - 在从节点查询(需先启用读权限): ```javascript rs.slaveOk() db.users.find() ``` --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值