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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 儿时的生日, 是妈妈的一个蒸鸡蛋。 千叮咛、万嘱咐: 一定要记得, 今天是你的生日。 长大后的生日, 是一帮朋友的...
    阳光gln阅读 1,481评论 0 1
  • 一、有准备 会议召集人必须提前把会议议程发给与会人员。参会人员要提前看材料并做好准备,不能进了会议室才开始思考。 ...
    丘一森阅读 6,509评论 0 0
  • 文│雪姐姐 这几年的闲暇时间不少都贡献给了电影,每年看片量都在百部以上,补课+重温+追新,不同类型的老片新片轮番欣...
    雪姐姐说阅读 4,873评论 9 18
  • 把优秀变成一种习惯,从身体,精神,智力,社会情感出发让自己不断更新提升 我的理解是想要优秀就必须有一个好体魄,才有...
    大飞比路克还幸运阅读 3,118评论 1 1
  • 前言 这里声明: elasticsearch -> es 漫谈 我们都知道Python 下 有es的sdk包的,我...
    mugbya阅读 5,341评论 0 0

友情链接更多精彩内容