MongoDB复制集群搭建

一、介绍

1.1、节点类型

主节点:负责处理客户端请求
从节点:负责复制主节点上的数据
仲裁节点:选举出某个备用节点成为主节点(不存储数据)
MongoDB实现复制集群至少需要两个节点(主从),仲裁节点为可选,但一般会一起使用。

1.2、复制集群模式

1)一主一从一仲裁
2)一主多从一仲裁

1.3、从节点复制方式

从节点定期轮询从主节点oplog操作日志中获取操作记录,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

1.4、架构图

Primary为主节点,Secondary为从节点,客户端只需要访问主节点或从节点,不需要访问仲裁节点。
在这里插入图片描述

二、环境搭建

在一台机器上模拟4个节点(1主2从1仲裁)

2.1、安装mongoDB

1)上传安装包:mongodb-linux-x86_64-rhel80-4.2.8.tgz
2)解压:tar -zxf mongodb-linux-x86_64-rhel80-4.2.8.tgz
3)拷贝到/usr/local/目录中:mv mongodb-linux-x86_64-rhel80-4.2.8 /usr/local/mongo

2.2、创建目录

2.2.1、数据库目录(分别对应4个节点)
[root@localhost local]# cd mongo/
[root@localhost mongo]# mkdir -p data/db0
[root@localhost mongo]# mkdir -p data/db1
[root@localhost mongo]# mkdir -p data/db2
[root@localhost mongo]# mkdir -p data/db3
2.2.2、配置目录
[root@localhost mongo]# mkdir etc
2.2.3、日志目录
[root@localhost mongo]# mkdir log
2.2.4、进程文件目录
[root@localhost mongo]# mkdir pids

2.3、应用配置

2.3.1、配置主节点

vi etc/mongo0.conf

dbpath=/usr/local/mongo/data/db0
logpath=/usr/local/mongo/log/mdb0.log
pidfilepath=/usr/local/mongo/pids/mdb0.pid
logappend=true  # 日志追加写入
replSet=rs0  # 复制集名称
port=37010
oplogSize=10000  # 操作日志容量
fork=true  # 后台启动
2.3.2、配置从节点

vi etc/mongo1.conf

dbpath=/usr/local/mongo/data/db1
logpath=/usr/local/mongo/log/mdb1.log
pidfilepath=/usr/local/mongo/pids/mdb1.pid
logappend=true
replSet=rs0 port=37011
oplogSize=10000
fork=true

vi etc/mongo2.conf

dbpath=/usr/local/mongo/data/db2
logpath=/usr/local/mongo/log/mdb2.log
pidfilepath=/usr/local/mongo/pids/mdb2.pid
logappend=true
replSet=rs0
port=37012
oplogSize=10000
fork=true
2.3.2、配置仲裁节点

vi etc/mongo3.conf

dbpath=/usr/local/mongo/data/db3
logpath=/usr/local/mongo/log/mdb3.log
pidfilepath=/usr/local/mongo/pids/mdb3.pid
logappend=true
replSet=rs0
port=37013
oplogSize=10000
fork=true

3、启动服务

启动4个节点

[root@localhost etc]# /usr/local/mongo/bin/mongod -config /usr/local/mongo/etc/mongo0.conf 
[root@localhost etc]# /usr/local/mongo/bin/mongod -config /usr/local/mongo/etc/mongo1.conf 
[root@localhost etc]# /usr/local/mongo/bin/mongod -config /usr/local/mongo/etc/mongo2.conf 
[root@localhost etc]# /usr/local/mongo/bin/mongod -config /usr/local/mongo/etc/mongo3.conf 

查看进程,启动成功

[root@localhost ~]# ps -ef|grep mongo
root       2839      1  1 06:06 ?        00:00:15 /usr/local/mongo/bin/mongod -config /usr/local/mongo/etc/mongo0.conf
root       2882      1  1 06:07 ?        00:00:13 /usr/local/mongo/bin/mongod -config /usr/local/mongo/etc/mongo1.conf
root       2922      1  1 06:08 ?        00:00:13 /usr/local/mongo/bin/mongod -config /usr/local/mongo/etc/mongo2.conf
root       2961      1  1 06:09 ?        00:00:12 /usr/local/mongo/bin/mongod -config /usr/local/mongo/etc/mongo3.conf
root       3073   3046  0 06:29 pts/2    00:00:00 grep --color=auto mongo

3、初始化复制集

3.1、登录客户端

连接方式:./mongo --port 37010 --host 地址

[root@localhost bin]# ./mongo --port 37010
MongoDB shell version v4.2.8
connecting to: mongodb://127.0.0.1:37010/?compressors=disabled&gssapiServiceName=mongodb
...
3.2、初始化命令
rs.initiate({ _id:"rs0", members:[ {_id:0,host:"127.0.0.1:37010",priority:3}, {_id:1,host:"127.0.0.1:37011",priority:2}, {_id:2,host:"127.0.0.1:37012",priority:1}, {_id:3,host:"127.0.0.1:37013",arbiterOnly:true} ] });

priority:权重(数字越大优先级越高)
arbiterOnly:是否是仲裁节点
返回如下表示执行成功

{
	"ok" : 1,
	"$clusterTime" : {
		"clusterTime" : Timestamp(1595140789, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1595140789, 1)
}
3.3、其它命令

查看复制集状态:rs.status();
令查看当前节点是否是主节点:rs.isMaster();

三、说明

1)当主节点宕机时,仲裁节点会根据配置信息中的权重值优先选举权重高的节点作为主节点继续提供服务。当宕机的主节点恢复后,复制集会恢复原主节点状态,临时主节点重新成 为从节点。
2)默认情况下直接连接从节点是无法查询数据的(db.集合.find()报错)。因为从节点 是不可读的。如果需要在从节点上读取数据,则可以使用命令 rs.slaveOk([true|false])来设置。 rs.slaveOk()或 rs.slaveOk(true)代表可以在从节点上做读操作;rs.slaveOk(false)代表不可在从 节点上做读操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值