6.2完整部署一个复制集

6.2完整部署一个复制集

复制集的创建和配置:

  1. 创建复制集中每个节点存放数据的目录
  • D:\mongodb\db_rs0\data\rs0_0

  • D:\mongodb\db_rs0\data\rs0_1

  • D:\mongodb\db_rs0\data\rs0_2

  1. 创建复制集中每个节点的日志文件
  • D:\mongodb\db_rs0\logs\rs0_0.log

  • D:\mongodb\db_rs0\logs\rs0_1.log

  • D:\mongodb\db_rs0\logs\rs0_2.log

  1. 创建复制集中每个节点启动时的配置文件
  • 第一个节点配置文件为:

    • D:\mongodb\configs_rs0\rs0_0.conf,内容如下:

    • dbpath = D:\mongodb\db_rs0\data\rs0_0
      logpath =  D:\mongodb\db_rs0\logs\rs0_0.log
      journal = true
      port = 40000
      replSet = rs0
      
  • 第二个节点配置文件为:

    • D:\mongodb\configs_rs0\rs0_1.conf,内容如下:

    • dbpath = D:\mongodb\db_rs0\data\rs0_1
      logpath =  D:\mongodb\db_rs0\logs\rs0_1.log
      journal = true
      port = 40001
      replSet = rs0
      
  • 第三个节点配置文件为:

    • D:\mongodb\configs_rs0\rs0_2.conf,内容如下:

    • dbpath = D:\mongodb\db_rs0\data\rs0_2
      logpath =  D:\mongodb\db_rs0\logs\rs0_2.log
      journal = true
      port = 40002
      replSet = rs0
      
  1. 启动上面三个节点对应的MongoDB实例
  • .\mongod.exe --config D:\mongodb\configs_rs0\rs0_0.conf

  • .\mongod.exe --config D:\mongodb\configs_rs0\rs0_1.conf

  • .\mongod.exe --config D:\mongodb\configs_rs0\rs0_2.conf

  • 未报错即启动成功。

6.2-1

6.2-1

  1. 启动一个mongo客户端,连接到MongoDB实例
  • 因为第四步复制集没有配置好,还需要确定哪个节点为primary,哪个是second,哪个是arbiter;

  • .\mongo.exe --port 40000 //启动客户端并连接到40000

6.2-2

6.2-2

  • rs.initiate() //初始化复制集,出现ok: 1即成功

  • 这时候复制集只有刚才40000这个初始化成员,通过如下命令可查看信息:

  • rs.conf()

  • 默认情况下,刚才配置的节点为primary节点

  1. 在复制集中添加second和arbiter节点,继续执行如下命令:
  • rs0.PRIMARY> rs.add(“localhost:40001”)

  • 出现ok:1即成功

  • rs0.PRIMARY> rs.addArb(“localhost:40002”)

  • 出现ok:1即成功

  • 两个节点添加成功。

  1. 观察整个复制集的状态信息:
  • rs.status()
6.2-3

6.2-3

6.2-4

6.2-4

6.2-5

6.2-5

  • 复制集的状态信息输出是基于primary节点实例的,在secondary实例上也可以输出复制集的状态信息。
  • arbiter节点的“syncingTo” : “”为空,说明不需要从primary节点上同步数据;
  • 当主节点出现故障时,arbiter节点为仲裁节点,也称为选举节点,可辅助从secondary中选举主节点,不需要占用太多存储空间。
  • “date”表示当前实例所在服务器的时间;
  • “lastHeartbeat”表示当前实例到此远端成员最近一次成功发送与接收心跳包的时间;
  • 通过比较这个两个时间可以判断当前实例与此成员相差的时间间隔;
  • 比如某个成员宕机了,本实例发生此宕机成员的心跳包就不会被成功接收,随着时间推移,本实例的date字段值与此成员上的lastHeartbeat差值就会逐渐增加。
  • optime字段,这个字段的值说明了本实例最近一次更改数据库的时间“t” : 1376816431以及每秒执行的操作数据库的次数“i” : 1;
  • 此字段的值实际上是从本实例上的local数据库中的oplog.rs集合上读取的,这个集合还详细记录了具体是什么操作,如插入语句、修改语句等。
  • 复制集中的每一个实例都会有一个这样的数据库和集合,如果复制集运行正常,理论上来说,每一个mongod实例上此集合中的记录应该相同。
  • 实际上mongoDB也是根据此集合来实现复制集中primary节点与secondary节点间的数据同步。