mongodb单机集群部署,仅仅为了测试

一、架构介绍

mongodb有几种部署方式,这里采用的是副本集架构(Replica Set)。

为了防止单点故障就需要引副本(Replication),当发生硬件故障或者其它原因造成的宕机时,可以使用副本进行恢复,最好能够自动的故障转移(failover)。有时引入副本是为了读写分离,将读的请求分流到副本上,减轻主(Primary)的读压力。而Mongodb的Replica Set都能满足这些要求。

Replica Set的一堆mongod的实例集合,它们有着同样的数据内容。

包含三类角色:

  1. 主节点(Primary):接收所有的写请求,然后把修改同步到所有Secondary。一个Replica Set只能有一个Primary节点,当Primary挂掉后,其他Secondary或者Arbiter节点会重新选举出来一个主节点。默认读请求也是发到Primary节点处理的,需要转发到Secondary需要客户端修改一下连接配置。
  2. 副本节点(Secondary):与主节点保持同样的数据集。当主节点挂掉的时候,参与选主。
  3. 仲裁者(Arbiter):不保有数据,不参与选主,只进行选主投票。使用Arbiter可以减轻数据存储的硬件需求,Arbiter跑起来几乎没什么大的硬件资源需求,但重要的一点是,在生产环境下它和其他数据节点不要部署在同一台机器上。

注意,一个自动failover的Replica Set节点数必须为奇数,目的是选主投票的时候要有一个大多数才能进行选主决策。

mongodb副本集

由图可以看到客户端连接到整个副本集,不关心具体哪一台机器是否挂掉。主服务器负责整个副本集的读写,副本集定期同步数据备份,一但主节点挂掉,副本节点就会选举一个新的主服务器,这一切对于应用服务器不需要关心。我们看一下主服务器挂掉后的架构:

副本集中的副本节点在主节点挂掉后通过心跳机制检测到后,就会在集群内发起主节点的选举机制,自动选举一位新的主服务器。

二、安装部署

下载mongodb:

wget https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-3.6.4.tgz

解压并文件夹重命名为mongodb1

进入mongodb目录,新建两个文件夹:db logs

bin目录下新建配置文件:touch mongodb.conf

dbpath=/Users/mac-desktop/app/mongodb1/db
logpath=/Users/mac-desktop/app/mongodb1/logs/mongodb.log
port=27018
fork=true

复制2份,分别为mongodb2mongodb3

分别修改配置文件中的目录和端口.

启动mongodb:

/Users/mac-desktop/app/mongodb1/bin/mongod --replSet repset -f /Users/mac-desktop/app/mongodb1/bin/mongodb.conf

/Users/mac-desktop/app/mongodb2/bin/mongod --replSet repset -f /Users/mac-desktop/app/mongodb2/bin/mongodb.conf

/Users/mac-desktop/app/mongodb3/bin/mongod --replSet repset -f /Users/mac-desktop/app/mongodb3/bin/mongodb.conf

查看服务是否已经启动:

ps -ef|grep mongodb

登陆任意一个mongodb:

/Users/mac-desktop/app/mongodb3/bin/mongo --host localhost --port 27018

使用admin数据库

use admin

定义副本集配置变量,这里的_id:”repset”和上面命令参数--replSet repset保持一致

config = { _id:"repset", members:[{_id:0,host:"127.0.0.1:27018"},{_id:1,host:"127.0.0.1:27019"},{_id:2,host:"127.0.0.1:27020"}]}

初始化副本集群:

rs.initiate(config);

查看集群节点的状态:

rs.status();

三、测试集群功能

主节点连接到终端:

/Users/mac-desktop/app/mongodb3/bin/mongo --host localhost --port 27018

连接test数据库:

use test;

往testdb表里插入数据

db.testdb.insert({"test1":"testval1"})

在副本节点连接查询:

/Users/mac-desktop/app/mongodb3/bin/mongo --host localhost --port 27019

使用test数据库:

user test;

查询表格:

show tables;

报错

原因: mongodb默认是从主节点读写数据,副本节点上不允许读,设置副本节点可读

db.getMongo().setSlaveOk();

注意:这条命令要在副节点上运行

然后就可以查询复制过来的数据了

repset:SECONDARY> db.testdb.find();

转载于:https://my.oschina.net/u/930279/blog/1797076

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值