MongoDB 副本集复制配置

MongoDB提供了两种复制风格:主从复制和副本集.这两种方式都是在一个主节点进行写操作(写入的数据被异步地同步到所有的从节点上),并从节点上读取数据.

主从复制和副本集使用了相同的复制机制.但是副本集复制还是能自动保证自动故障转移:如果主节点由于某些原因下线了,可能的话.会自动将一个从节点提升为主节点.副本集还提供了其他增强.例如更容易恢复和更高级的部署拓扑.处于这些原因

现在已经没有什么有说服力的理由使用简单的主从复制了.副本集也因此是生产部署环境的推荐复制策略.

副本集复制是对主从复制的一种完善,也是推荐的MongoDB复制策略.最小的副本集配置由三个节点组成,其中两个节点是一等的,持久化mongod实例,两者都能作为副本集主节点.都有完整的数据副本.集合里面的第三个节点是仲裁节点.不复制数据.只是中立观察者

正如其名所示.仲裁节点是进行仲裁的:在要求故障转移时.仲裁节点会帮助选择出新的主节点,副本集配置过程如下:

先为副本集里面的每个成员创建数据目录:(根据本地机器上MongoDB安装配置路径可以修改我随后命令中的dbpath路径)

在MongoDB数据库文件存在目录新建三个目录分别命名为node1,node2,arbiter

接下来,分别为每个成员启动独立的mongod.因为要在同一台机上运行这些进程,最好在独立的命令终端窗口启动各个mongo,命令如下:

mongod --replSet myapp --dbpath F:\MongoDB\Data\db\node1 --port 40000

mongod --replSet myapp --dbpath F:\MongoDB\Data\db\node2 --prot 40001

mongod --replSet myapp --dbpath F:\MongoDB\Data\db\arbiter --port 40002

接下来配置副本集,先连接到一个刚启动的非仲裁节点的mongod上,在命令行下切换到F:\MongoDB\Server\3.4\bin目录下输入如下mongo 127.0.0.1:40000连接到node1节点的mongod上,输入命令后会有如下提示

连接成功后运行rs.initiate()命令:截图如下

一分钟左右,你就能拥有一个单成员的副本集了,现在在通过rs.add()添加其他两个成员:命令和截图如下:

rs.add("SERVER:40001")

rs.add("SERVER.local:40002",{arbiterOnly:true})(其中SERVER为本地机器名,指定arbiterOnly参数,依次创建一个仲裁节点)

所有的成员上线后,要获得副本集状态的摘要信息,可以运行db.isMaster()命令:

rs.status()方法能提供更详细的系统信息,可以看到每个节点的状态信息,下面是完整的状态信息:

测试副本集复制

先在一个命令行切换到F:\MongoDB\Server\3.4\bin目录,然后输入mongo SERVER:40000,再依次执行show dbs,use booksstore,db.books.insert({title: "Oliver Twist"}),截图如下:

然后重启一个命令窗口同样切换到F:\MongoDB\Server\3.4\bin目录,然后依次执行mongo SERVER:40001,show dbs,use booksstore,db.books.find()如果能看到如下截图证明副本集复制配置成功了

 

posted on 2017-09-21 15:45  anqli_java  阅读(633)  评论(0编辑  收藏  举报