6.2完整部署一个复制集
复制集的创建和配置:
- 创建复制集中每个节点存放数据的目录
-
D:\mongodb\db_rs0\data\rs0_0
-
D:\mongodb\db_rs0\data\rs0_1
-
D:\mongodb\db_rs0\data\rs0_2
- 创建复制集中每个节点的日志文件
-
D:\mongodb\db_rs0\logs\rs0_0.log
-
D:\mongodb\db_rs0\logs\rs0_1.log
-
D:\mongodb\db_rs0\logs\rs0_2.log
- 创建复制集中每个节点启动时的配置文件
-
第一个节点配置文件为:
-
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
-
- 启动上面三个节点对应的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
-
未报错即启动成功。
- 启动一个mongo客户端,连接到MongoDB实例
-
因为第四步复制集没有配置好,还需要确定哪个节点为primary,哪个是second,哪个是arbiter;
-
.\mongo.exe --port 40000 //启动客户端并连接到40000
-
rs.initiate() //初始化复制集,出现ok: 1即成功
-
这时候复制集只有刚才40000这个初始化成员,通过如下命令可查看信息:
-
rs.conf()
-
默认情况下,刚才配置的节点为primary节点
- 在复制集中添加second和arbiter节点,继续执行如下命令:
-
rs0.PRIMARY> rs.add(“localhost:40001”)
-
出现
ok:1
即成功 -
rs0.PRIMARY> rs.addArb(“localhost:40002”)
-
出现
ok:1
即成功 -
两个节点添加成功。
- 观察整个复制集的状态信息:
rs.status()
- 复制集的状态信息输出是基于primary节点实例的,在secondary实例上也可以输出复制集的状态信息。
- arbiter节点的“syncingTo” : “”为空,说明不需要从primary节点上同步数据;
- 当主节点出现故障时,arbiter节点为仲裁节点,也称为选举节点,可辅助从secondary中选举主节点,不需要占用太多存储空间。
- “date”表示当前实例所在服务器的时间;
- “lastHeartbeat”表示当前实例到此远端成员最近一次成功发送与接收心跳包的时间;
- 通过比较这个两个时间可以判断当前实例与此成员相差的时间间隔;
- 比如某个成员宕机了,本实例发生此宕机成员的心跳包就不会被成功接收,随着时间推移,本实例的date字段值与此成员上的lastHeartbeat差值就会逐渐增加。
- optime字段,这个字段的值说明了本实例最近一次更改数据库的时间“t” : 1376816431以及每秒执行的操作数据库的次数“i” : 1;
- 此字段的值实际上是从本实例上的local数据库中的oplog.rs集合上读取的,这个集合还详细记录了具体是什么操作,如插入语句、修改语句等。
- 复制集中的每一个实例都会有一个这样的数据库和集合,如果复制集运行正常,理论上来说,每一个mongod实例上此集合中的记录应该相同。
- 实际上mongoDB也是根据此集合来实现复制集中primary节点与secondary节点间的数据同步。