MongoDB副本集方式搭建集群 | 张扎瓦的博客

MongoDB副本集方式搭建集群

MongoDB副本集方式搭建集群


演示机器ip

ip 角色
192.168.0.56 master
192.168.0.61 slave
192.168.0.74 slave

MongoDB安装

官网下载mongo

解压程序包

1
tar -zxvf mongodb-linux-x86_64-4.2.1.tgz

解压完成后,会在前目录下生成 mongodb-linux-x86_64-4.2.1目录

进入mongodb-linux-x86_64-4.2.1目录,创建两个目录

1
2
mkdir -p data/db
mkdir logs

创建配置文件 mongod.conf,编辑保存以下内容

1
2
3
4
5
6
7
8
9
10
11
12
#数据目录
dbpath=/home/sas/soft/mongodb-linux-x86_64-rhel62-4.2.1/data/db
#日志目录
logpath=/home/sas/soft/mongodb-linux-x86_64-rhel62-4.2.1/logs/mongod.log
#端口号
port=27017
#绑定ip,一般为当前机器的ip
bind_ip=192.168.0.56
#设置后台运行
fork=true
#设置以复制集的方式启动,这个值可以自己随便设置,多个节点需要保持一致
replSet=rs0

进入bin目录,启动mongo

1
./mongod -f ../mongod.conf

其他两台机器也是相同的操作。

MongoDB复制原理

mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。

mongodb各个节点常见的搭配方式为:一主一从、一主多从。

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

MongoDB复制结构图如下所示:

MongoDB复制结构图

以上结构图中,客户端从主节点读取数据,在客户端写入数据到主节点时, 主节点与从节点进行数据交互保障数据的一致性。

副本集特征:

  • N 个节点的集群
  • 任何节点可作为主节点
  • 所有写入操作都在主节点上
  • 自动故障转移
  • 自动恢复

复制集设置

使用命令行连接mongo主节点

1
./mongo 192.168.0.56:27017

正常情况下,命令行的前缀是没有任何东西的,像这样:

image-20200909174332580

如果连接到命令行后,发现命令行前缀像这样:

image-20200909174500067

表示已经开启了复制集了,如果想重新清除复制集,需要使用非复制集的方式重新启动mongo,并删除local库。

具体操作如下:

  1. kill掉当前的mongo进程

  2. 使用vim编辑mongod.conf 文件,删除 replSet=rs0

  3. 重新启动mongo,使用命令行连接到mongo,执行

    1
    2
    use local;
    db.dropDatabase();
  4. 再次kill掉当前的mongo进程

  5. 使用vim编辑mongod.conf文件,添加 replSet=rs0

  6. 重启mongo

这样就可以重新设置复制集了。

执行

1
rs.initiate();

初始化副本集

image-20200909173700576

然后再执行:

1
rs.add("192.168.0.74:27017")

添加其他节点为从节点

至此就完成设置了。

验证数据同步

连接主节点,执行

1
rs.isMaster()

可以查看当前节点是否是主节点

image-20200909175922355

如果是从节点,会返回这样:

image-20200909180040460

向主节点写入一条数据,测试数据是否同步

1
2
use test
db.a.insert({"a":1})

image-20200909180231978

从节点查看数据:

1
2
3
show dbs
use test
db.a.find()

image-20200909180645233

如果执行 show dbs 时,返回如下信息:

image-20200909180804203

需要先执行

1
rs.slaveOk()

再执行命令

验证节点切换

首先查看哪个节点是主节点,随便连接一个mongo,执行rs.isMaster()

image-20200909184030664

可以看到现在192.168.0.56是主节点

将主节点的mongo进程kill掉

image-20200909184345899

然后随便连接一个mongo,再次执行rs.isMaster()

image-20200909184518925

可以看到现在master节点已经切换到192.168.0.74了。

SpringBoot连接mongo集群

修改application.properties 配置文件,改为如下配置:

1
spring.data.mongodb.uri=mongodb://192.168.0.43:27017,192.168.0.44:27017,192.168.0.45:27017/asr
如果我的文章对您有所帮助,不妨打赏一杯豆浆以资鼓励(○` 3′○)