ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Linux 搭建MongoDB复制集群

2021-05-18 23:02:47  阅读:279  来源: 互联网

标签:mongo MongoDB 27017 192.168 集群 usr Linux local 节点


一、介绍

1、节点类型

主节点(Primary):负责处理客户端的请求

从节点(Secondary):负责复制主节点上的数据。可读不可写

仲裁节点(Arbiter):不保留任何数据,只具有投票选举作用。

MongoDB实现复制集群至少需要两个节点(一主一从),仲裁节点为可选,但一般会一起作用

2、主从复制方式

从节点定期轮询从主节点操作日志中获取操作记录,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致

 

二、环境准备

虚拟机三台,分别安装好MongoDB。服务网格信息如下:

主机名 操作系统 IP Node 端口
vm-xwj100 Centos7.6 192.168.20.100 Primary 27017
vm-xwj101 Centos7.6 192.168.20.101 Secondary 27017
vm-xwj102 Centos7.6 192.168.20.102 Arbiter 27017

 

 

 

 

 

三、应用配置

修改三个节点下的mongo.conf配置文件

主节点(vm-xwj100):

#数据保存路径
dbpath=/usr/local/mongo/data/db/
#日志保存路径
logpath=/usr/local/mongo/logs/mongodb.log
#进程描述文件
pidfilepath=/usr/local/mongo/pids/mongo.pid
#日志追加写入
logappend=true
#复制集名称
replSet=rs0
bind_ip_all=true
#mongo默认端口
port=27017
#操作日志容量
oplogSize=10000
#开启子进程
fork=true

从节点(vm-xwj101):

#数据保存路径
dbpath=/usr/local/mongo/data/db/
#日志保存路径
logpath=/usr/local/mongo/logs/mongodb.log
#进程描述文件
pidfilepath=/usr/local/mongo/pids/mongo.pid
#日志追加写入
logappend=true
#复制集名称
replSet=rs0
bind_ip_all=true
#mongo默认端口
port=27017
#操作日志容量
oplogSize=10000
#开启子进程
fork=true

仲裁节点(vm-xwj102):

#数据保存路径
dbpath=/usr/local/mongo/data/db/
#日志保存路径
logpath=/usr/local/mongo/logs/mongodb.log
#进程描述文件
pidfilepath=/usr/local/mongo/pids/mongo.pid
#日志追加写入
logappend=true
#复制集名称
replSet=rs0
bind_ip_all=true
#mongo默认端口
port=27017
#操作日志容量
oplogSize=10000
#开启子进程
fork=true

 

四、初始化复制集群

1、在所有节点启动mongo服务端

/usr/local/mongo/bin/mongod -f /usr/local/mongo/conf/mongo.conf

2、登录客户端,访问主节点

/usr/local/mongo/bin/mongo --host 192.168.20.100 --port 27017

3、初始化复制集

rs.initiate({
    _id:"rs0",
    members:[
        {_id:0, host:"192.168.20.100:27017", priority:2},
        {_id:1, host:"192.168.20.101:27017", priority:1},
        {_id:2, host:"192.168.20.102:27017", arbiterOnly:true}
    ]
});

_id: "rs0": 复制集名称,与配置文件对应

priority: 权重(数字越大优先级越高)

arbiterOnly: 是否是仲裁节点

执行成功后,如下所示(命令行符号由 > 变为 rs0:SECONDARY>,然后会进行选举,最终变成rs0:Primary>):

4、查看复制集状态

rs.status()

5、查看当前节点是否为主节点 

rs.isMaster()

 

 

总结:

1、当主节点宕机时,仲裁节点会根据配置信息中的权重值优先选举权重高的节点作为主节点继续提供服务。当宕机的主节点回复后,复制集会恢复原主节点状态,临时主节点重新成为从节点。

 

踩坑:

1、初始化时,报如下错误:

"errmsg" : "replSetInitiate quorum check failed because not all proposed set members responded affirmatively: 192.168.20.101:27017 failed 
with Error connecting to 192.168.20.101:27017 :: caused by :: No route to host, 192.168.20.102:27017 failed with Error connecting to
192.168.20.102:27017 :: caused by :: No route to host", "code" : 74, "codeName" : "NodeNotFound",

问题原因:初始化复制集群时,用的三台机器,主节点想连通其它节点,需要关闭防火墙

解决办法:在从节点和仲裁节点上,关闭防火墙:systemctl stop firewalld

2、在从节点上读取数据失败,报如下错误:

 

 

问题原因:默认情况下直接连从节点是无法查询数据的。因为从节点是不可读的

解决办法:开启从节点读权限。在从节点客户端输入命令 rs.slaveOk(true)

 

标签:mongo,MongoDB,27017,192.168,集群,usr,Linux,local,节点
来源: https://www.cnblogs.com/xuwenjin/p/14780437.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有