mongodb集群Replica Set搭建

MongoDB集群有三种搭建方案,分别为Replica Set / Sharding / Master-Slaver
本文介绍简单的Replica Set模式。

  • 安装mongodb
    参考https://blog.csdn.net/zhiyual/article/details/79764165

  • 主节点
    Mongodb的Replica Set即副本集方式主要有两个目的,一个是数据冗余做故障恢复使用,当发生硬件故障或者其它原因造成的宕机时,可以使用副本进行恢复。另一个是做读写分离,读的请求分流到副本上,减轻主(Primary)的读压力。

  • 副本节点(Secondary)
    与主节点保持同样的数据集。当主节点挂掉的时候,参与选主。
    默认设置下,主节点提供所有增删查改服务,备用节点只提供查询服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。

  • 仲裁者(Arbiter)
    不保有数据,不参与选主,只进行选主投票。使用Arbiter可以减轻数据存储的硬件需求,Arbiter跑起来几乎没什么大的硬件资源需求,但重要的一点是,在生产环境下它和其他数据节点不要部署在同一台机器上。
    注意,集群副本集数量建议是奇数可不设置仲裁者,如果是偶数,需要设置一个仲裁者。

  • 选主过程
    其中Secondary宕机,不受影响,若Primary宕机,会进行重新选主,选举过程参考https://blog.csdn.net/rudygao/article/details/49868437

  • 配置文件

dbpath=/data/app/mongo/data
logpath=/data/app/mongo/mongodb.log
pidfilepath=/data/app/mongo/mongodb.pid
#keyFile=/data/app/mongo/mongodb.key # 用户集群间的验证
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=0.0.0.0
port=27017
oplogSize=1000
fork=true
#noprealloc=true
#maxConns=4000
  • 创建集群
    不用仲裁者,启动三个mongodb服务,命令如下
mongod -f config.conf

连接任意节点并执行如下命令:

cfg = {_id : "rs0",members : [ { _id:0, host:"127.0.0.1:27018", priority:2 },{ _id:1, host:"127.0.0.1:27019", priority:1 },{ _id:2, host:"127.0.0.1:27020", priority:1 } ]}
 rs.initiate(cfg)

指定了127.0.0.1:27018为主节点,因为priority最大。

  • 节点增删
rs.add({"host":"127.0.0.1:27018", "priority": 1});# 增加节点
rs.remove("127.0.0.1:27018");  # 删除节点

配置集群访问密码

  • 第一步
    创建用户
use admin;
db.createUser({user: "root",pwd: "123456",roles: ["root"]});
  • 第二步
    创建key文件
openssl rand -base64 741 > mongodb.key
chmod 600 mongodb.key

并将mongodb.key复制到其他副本

  • 第三步
    先停到所有副本的服务,最后停掉主节点服务.
    在主节点以及副本节点的配置文件中添加如下,指定key file
keyFile=/data/app/mongo/mongodb.key

依次重启主节点和副本节点。

遇到的问题

  • 当主节点和一个副本节点down之后,只剩一个副本节点会出现没有主节点的问题。
    这是因为mongodb选主的大多数原则决定的(即当前复制集中,存活节点的数量必须大于节点总数的1/2,这样才能触发选举,否则当从节点挂掉时主节点会降级为从节点;当主节点挂掉时从节点也不会升为主节点)

参考文章
https://www.zhihu.com/question/27648448
MongoDB的选举过程
http://www.ywnds.com/?p=3366

你可能感兴趣的:(mongodb集群Replica Set搭建)