1、准备
-
安装最新的 MongoDB 版本
-
Windows 系统请事先配置好 MongoDB 可执行文件的环境变量
-
Linux 和 Mac 系统请配置 PATH 变量
-
确保有 10GB 以上的硬盘空间
2、创建数据目录
MongoDB 启动时将使用一个数据目录存放所有数据文件。我们将为3个复制集节点创建各自的数据目录。
-
Linux/MacOS:
mkdir -p /data/db
-
Windows:
md d:\data\db1
md d:\data\db2
md d:\data\db3
3、准备配置文件
复制集的每个mongod进程应该位于不同的服务器。我们现在在一台机器上运行3个进程,因此要为它们各自配置:
-
不同的端口。示例中将使用28017/28018/28019
-
不同的数据目录。示例中将使用:
/data/db1或 d:\data\db1
/data/db2或 d:\data\db2
/data/db3或 d:\data\db3 -
不同日志文件路径。示例中将使用:
/data/db1/mongod.log或 d:\data\db1\mongod.log
/data/db2/mongod.log或 d:\data\db2\mongod.log
/data/db3/mongod.log或 d:\data\db3\mongod.log
Linux/MacOS
/data/db1/mongod.conf
systemLog:
destination: file
path: /data/db1/mongod.log # log path
logAppend: true
storage:
dbPath: /data/db1 # data directory
net:
bindIp: 0.0.0.0
port: 28017 # port
replication:
replSetName: rs0
processManagement:
fork: true
/data/db2/mongod.conf
systemLog:
destination: file
path: /data/db2/mongod.log # log path
logAppend: true
storage:
dbPath: /data/db2 # data directory
net:
bindIp: 0.0.0.0
port: 28018 # port
replication:
replSetName: rs0
processManagement:
fork: true
/data/db3/mongod.conf
systemLog:
destination: file
path: /data/db3/mongod.log # log path
logAppend: true
storage:
dbPath: /data/db3 # data directory
net:
bindIp: 0.0.0.0
port: 28019 # port
replication:
replSetName: rs0
processManagement:
fork: true
4、启动 MongoDB 进程
-
Linux/Mac
mongod -f /data/db1/mongod.conf
mongod -f /data/db2/mongod.conf
mongod -f /data/db3/mongod.conf
注意:如果启用了 SELinux,可能阻止上述进程启动。简单起见请关闭 SELinux。
-
Windows
mongod -f c:\data1\mongod.conf
mongod -f c:\data2\mongod.conf
mongod -f c:\data3\mongod.conf
因为 Windows 不支持 fork,以上命令需要在3个不同的窗口执行,执行后不可关闭窗口否则进程将直接结束。
5、配置复制集
方法1
hostname 获取主机名称
# mongo --port 28017
> rs.initiate()
> rs.add("主机名称:28018")
> rs.add("主机名称:28019")
方法2
# mongo --port 28017
> rs.initiate({_id: "rs0",members: [
{_id: 0,host: "localhost:28017"}
,{_id: 1,host: "localhost:28018"}
,{_id: 2,host: "localhost:28019"}]})
6、验证
# mongo localhost:28017
> db.test.insert({ a:1 })
> db.test.insert({ a:2 });
MongoDB 从节点进行读
# mongo localhost:28018
> rs.slaveOk()
> db.test.find()
> db.test.find()
不同版本可能方法不一致; rs.slaveOk() 在较新的版本中为 rs.secondaryOk();
- 本文链接: https://www.sunce.wang/archives/mongodb复制集搭建
- 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!