1、mongodb集群

首先我们需要了解mongodb的集群模式,mongodb安装分为单机安装和集群安装。集群安装分为:主从复制(Master-Slaver)集群、副本集(Replica Set)集群和分片集群(Sharded Cluster)。MongoDB的主从复制(Master-Slave Replication)已不再是官方推荐的特性,并且在未来的版本中可能会被移除。MongoDB官方推荐使用副本集(Replica Set)作为高可用性的解决方案。

1.1主从复制存在的问题
  • 单点故障:Master节点故障时,没有自动故障转移机制。
  • 数据量有限:Slave节点数据通常不可写,限制了数据总量的增长。
  • 延迟和同步问题:Slave节点可能会落后于Master,导致数据延迟。
  • 资源利用率低:需要额外资源来运行Slave节点。
1.2 副本集的优点
  • 自动故障转移。
  • 读写分离,能提供更好的读扩展能力。
  • 副本集成员可配置为arbiter(仲裁),提供投票决定谁是主节点。
1.3 分片集群
  • 用于跨多个服务器分布数据的方法,用于支持非常大的数据集和高吞吐量的操作

2、副本集节点选择

一个副本集最多有50个节点并且最多支持7个投票节点,其余节点必须是没有投票权的节点。副本集通过设置priority决定优先级,默认优先级为1,priority值是0到100之间的数字,数字越大优先级越高,priority=0,则此节点永远不能成为主节点primay。

副本集的最小推荐配置是三个节点:

  • 一个主节点和两个从节点
  • 一个主节点、一个从节点和仲裁节点

如果可能,尽可能在副本集中使用奇数个数据成员,而不要使用仲裁者。所以推荐使用的最低配置为:一个主节点和两个从节点。副本集在部署时如果当节点数目为偶数个时,需要部署一个仲裁节点,否则偶数个节点,当主节点挂了后,其他节点会变为只读。不会去选举其他主节点。

关于仲裁者说明:

仲裁者可随意部署在网络通的任何地方,不会占用什么系统资源,它只提供投票选举的功能,不存储数据。

3、拉取mongodb镜像

docker pull mongo:5.0

4、创建mongodb文件夹

首先在宿主机里面创建mongodb的存储数据文件夹

mkdir mongo01 && cd mongo01

进入mongo01创建conf、data、logs、tmp文件夹

mkdir conf data logs tmp

进入conf文件夹编写mongod.conf文件

# 数据库文件存储位置
dbpath = /data/db
# log文件存储位置
logpath = /data/log/mongod.log
# 使用追加的方式写日志
logappend = true
# 是否以守护进程方式运行
# fork = true
# 全部ip可以访问
bind_ip = 0.0.0.0
# 端口号
port = 27017
# 是否启用认证
auth = true
# 设置oplog的大小(MB)
oplogSize=2048
#指定秘钥文件
keyFile = /data/key/mongo.key
#指定副本集名称
replSet = rs

MongoDB 的 mongod.conf 文件从版本 3.2 开始支持 YAML 格式。可以使用更加简洁和结构化的语法来配置 MongoDB

# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /data/db
journal:
enabled: true
# engine:
wiredTiger:
engineConfig:
cacheSizeGB: 1
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /tmp/mongod.log
# network interfaces
net:
port: 27017
#bindIp: 127.0.0.1
bindIp: 0.0.0.0
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
#开启认证
security:
keyFile: /data/key/mongo.key
authorization: enabled #operationProfiling: #replication: 配副本集名
replication:
replSetName: rs #sharding: ## Enterprise-Only Options: #auditLog: #snmp:

后面使用YAML格式进行配置说明。由于搭建副本集服务器,开启认证的同时,必须指定keyFile参数,节点之间的通讯基于该keyFile进行的。否则会启动失败。我们通过 docker logs 容器ID 查看docker日志可以发现启动的时候会报错:

BadValue: security.keyFile is required when authorization is enabled with replica sets

所以开始之前我们先把开启认证给注释掉,集群搭建成功后在开启认证。配置如下:


#开启认证
#security:
# keyFile: /data/key/mongo.key
# authorization: enabled

然后把配置好的mongo01文件夹拷贝两份

cp -r mongo01 mongo02
cp -r mongo01 mongo03

5、启动mongodb容器实例

Linux路径:

docker run -d --name mongo01 -p 27017:27017 --privileged=true -v ~/config/mongodb/mongo01/data:/data/db -v ~/config/mongodb/mongo01/conf:/data/configdb -v ~/config/mongodb/mongo01/logs:/data/log/  -v ~/config/mongodb/mongo01/tmp:/tmp  mongo:5.0   -f /data/configdb/mongod.conf
docker run -d --name mongo02 -p 27018:27017 --privileged=true -v ~/config/mongodb/mongo02/data:/data/db -v ~/config/mongodb/mongo02/conf:/data/configdb -v ~/config/mongodb/mongo02/logs:/data/log/  -v ~/config/mongodb/mongo02/tmp:/tmp  mongo:5.0   -f /data/configdb/mongod.conf
docker run -d --name mongo03 -p 27019:27017 --privileged=true -v ~/config/mongodb/mongo03/data:/data/db -v ~/config/mongodb/mongo03/conf:/data/configdb -v ~/config/mongodb/mongo03/logs:/data/log/  -v ~/config/mongodb/mongo03/tmp:/tmp  mongo:5.0   -f /data/configdb/mongod.conf

如果为Windows系统把容器卷路径改为磁盘地址即可:

docker run -d --name mongo01 -p 27017:27017 --privileged=true -v D:/mongo/mongo01/data:/data/db -v D:/mongo/mongo01/conf:/data/configdb -v D:/mongo/mongo01/logs:/data/log/  -v D:/mongo/mongo01/tmp:/tmp  mongo:5.0   -f /data/configdb/mongod.conf

启动成功后通过 docker ps 查看容器是否运行成功。

6、配置集群

随便进入一个容器节点进行集群配置。

docker exec -it mongo01 bash

进入容器后,登录mongodb命令行

mongo

执行配置副本集命令配置集群:

rs.initiate({_id: "rs",members: [{ _id: 0, host: "192.168.1.9:27017" },{ _id: 1, host: "192.168.1.9:27018" },{ _id: 2, host: "192.168.1.9:27019" }]})

_id: "rs" 副本集名要和配置文件中的一致。如果配置仲裁节点需要在改节点里面加上 arbiterOnly: true属性 如:

{ _id: 2, host: "192.168.1.9:27019", arbiterOnly: true}

也可以指定其 priority( 优先级)。如果不指定,默认优先级为1。如指定第一个节点优先级为90:

{"_id":0,"host":"192.168.1.9:27017",priority:90}

执行上面rs.initiate(config)命令后,集群就搭建成功了。系统会选择一个节点当主节点。

配置成功后,目前不需要账号密码就能够登录。下面我们需要开启安全认证以保证数据库的安全。

7、集群后开启安全认证

7.1 创建root权限用户

由于我们的副本集已经搭建成功了。我们可以看到有一个PRIMAY节点和两个SECONDARY节点,进入主节点容器创建用户信息。

切到admin库

use admin

创建用户,用户名root,密码1234qwer,权限root,所属库admin

db.createUser({user:"root",pwd:"1234qwer",roles:[{role:'root',db:'admin'}]})

执行上面命令后用户就创建成功了,我们先退出容器。

7.2 创建密钥文件

使用openssl生成key文件,由于上面已经提到了想要在副本集中开启认证,必须指定keyFile参数,所有节点使用相同的key。所以我们需要使用openssl生成一个mongo.key文件,并把文件拷贝到容器内部。

首先确保Linux系统安装了openssl,查看是否安装命令:

openssl version

如果没有输出软件包信息,执行下面命令安装openssl

yum install openssl

安装成功后执行命令生成mongo.key文件。

openssl rand -base64 753 > mongo.key

执行成功后,会生成一个mongo.key文件。我们使用docker cp命令把文件拷贝到容器中。

docker cp ./mongo.key mongo01:/data/key/mongo.key

拷贝成功后,进入容器内部给文件授权。

docker exec -it mongo01 bash

进入/data/key命令给文件授权。

chown 999 mongo.key #设置文件归属权
chmod 400 mongo.key #设置文件为只读

上面的授权命令必须要执行,不然容器会启动失败。一定要注意!!!

7.3 开启认证

上面的步骤操作成功后,接下来我们就可以把配置文件中注释掉的开启认证参数给打开了。

#开启认证
security:
keyFile: /data/key/mongo.key
authorization: enabled

keyFile指定的路径为拷贝到docker容器内部文件存放的路径。

7.4 重启容器

把mongo.key文件也按照相同的方式拷贝到另外两个节点容器内。以上操作都成功后,就可以重新启动容器了。首先退出容器关闭所有容器副本集节点

docker stop mongo01
docker stop mongo02
docker stop mongo03

在启动容器

docker start mongo01 mongo02 mongo03

查看容器是否启动成功

docker ps

8、副本集相关命令

初始化副本集

rs.initiate(config)

查看状态

rs.status()

查看配置信息

rs.conf()

查看是否为主节点

rs.isMaster()

添加从节点

rs.add("192.168.1.9:27020" )

添加仲裁节点

rs.addArb("ip:27017")

删除节点

rs.remove("192.168.1.9:27020")

降级节点,主节点降级为从节点,并重新选举新的主节点

rs.stepDown(stepDownSecs, secondaryCatchUpPeriodSecs)

查看备份节点的复制信息

db.printSlaveReplicationInfo()

开启从节点为只读权限

rs.secondaryOk()

如果是4.0以下的版本,则是

rs.slaveOk()

每次宕机重连之后都需要执行方法,不然在从节点数据库中无法读取数据。

测试服务宕机

use admin;

db.shutdownServer();

9、可视化工具连接

我们可以使用mongodb可视化工具连接副本集,这里使用Studio 3T进行连接。

选择新建连接:

配置连接信息

指定连接类型、节点地址、副本集名称。输入账号密码:

点击连接

使用Docker搭建MongoDB 5.0版本副本集集群的更多相关文章

  1. Docker搭建MongoDB

    1. Docker搭建Mongodb 1.1 获取docker镜像 docker pull mongo 1.2 创建mongodb容器 docker run --name my-mongo -p 27 ...

  2. ubuntu docker 搭建 mongodb,开启授权访问 redis,mysql mssql 备份还原

    命令安装docker 如果您想从Ubuntu存储库安装docker版本,则可以运行下面的apt命令. sudo apt install docker.io等到安装完成后,您可以启动Docker并使用s ...

  3. mongodb 3.0 版本分片部署步骤

    # linux 网络优化 1. 文件中/etc/sysctl.conf, 加入 net.core.somaxconn = 2048 fs.file-max = 2000000 fs.nr_open = ...

  4. dubbo-admin监控搭建2.6.0版本

    首先介绍一下dubbo的一个比较大的改变,那就是在2.6.1及2.6.1以后的版本当中,dubbo将一分为二,分为Dubbo-RPC和Dubbo-Admin,而在2.6.1以前的版本中Dubbo-Ad ...

  5. Docker搭建mysql:5.7版本数据库

    搭建MySQL: 1.启动测试mysql,拷贝容器内配置文件到宿主机 mkdr -P /server/docker/mysql/{data,conf} docker run -e MYSQL_ROOT ...

  6. 搭建 MongoDB分片(sharding) / 分区 / 集群环境

    1. 安装 MongoDB 三台机器 关闭防火墙 systemctl stop firewalld.service 192.168.252.121 192.168.252.122 192.168.25 ...

  7. 二进制搭建Kubernetes集群(最新v1.16.0版本)

    目录 1.生产环境k8s平台架构 2.官方提供三种部署方式 3.服务器规划 4.系统初始化 5.Etcd集群部署 5.1.安装cfssl工具 5.2.生成etcd证书 5.2.1 创建用来生成 CA ...

  8. MongoDB 4.0 事务实现解析

    MongoDB 4.0 引入的事务功能,支持多文档ACID特性,例如使用 mongo shell 进行事务操作 > s = db.getMongo().startSession() sessio ...

  9. MongoDB 3.0 新特性【转】

    本文来自:http://www.open-open.com/lib/view/open1427078982824.html#_label3 更多信息见官网: http://docs.mongodb.o ...

  10. MongoDB 3.0新增特性一览

    转自:http://blog.sina.com.cn/s/blog_48c95a190102vedr.html 引言 在历经版本号修改(2.8版本直接跳到3.0版本)和11个rc版本之后,MongoD ...

随机推荐

  1. matting tool by cs - 视频扣绿幕 1.4 - 软件推荐

    本地软件,还没用,先留个档,试试 第一个下载还套了个广告壳,醉了,但是能用 https://www.123pan.com/s/X3jA-POMQv 这个装了,是原版,没套壳 https://pan.b ...

  2. STM32进入HardFault_Handler的调试方法

    在编写STM32程序代码时由于自己的粗心会发现有时候程序跑着跑着就进入了 HardFault_Handler中断,按照经验来说进入HardFault_Handler故障的原因主要有两个方面: 1:内存 ...

  3. UDP可靠传输协议KCP的一些理解

    UDP主要用在哪两个方面 游戏 音视频通话 为什么要使用UDP? 实时性的考虑,丢包重传,TCP协议栈重传无法控制,UDP重发可以自定义策略. 在DNS查询的时候,也使用UDP,对资源的考虑. 如何做 ...

  4. 一个简单的RTMP服务器实现 --- RTMP与FLV

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  5. 3DCAT实时渲染云在虚拟展会中的应用

    随着互联网技术的不断发展,实时3D可视化技术在日常生活中应用越来越广泛,越来越多的行业开始转向线上.今年受新冠肺炎疫情影响很多展会都无法在线下举办,而3d线上虚拟展会采用了全新的在线展示产品方式,将展 ...

  6. Install fail! SyntaxError: Unexpected token 'h', "hub.com>","... is not valid JSON (file: C:\Users\Admin\Documents\uirecorder_test\node_modules\_mocha@5.2.0@mocha\package.json)

    uirecorder初始化时解析错误: PS C:\Users\Admin\Documents\uirecorder_test> PS C:\Users\Admin\Documents\uire ...

  7. 爬虫实战:探索XPath爬虫技巧之热榜新闻

    之前我们已经详细讨论了如何使用BeautifulSoup这个强大的工具来解析HTML页面,另外还介绍了利用在线工具来抓取HTTP请求以获取数据的方法.在今天的学习中,我们将继续探讨另一种常见的网络爬虫 ...

  8. 记录--vue3优雅的使用element-plus的dialog

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 如何优雅的基于 element-plus,封装一个梦中情 dialog 优点 摆脱繁琐的 visible 的命名,以及反复的重复 dom. ...

  9. 记录转载:Vite多环境配置--让项目拥有更高定制化能力

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 业务背景 近些年来,随着前端工程架构发展,使得前端项目中也能拥有如后端工程的模块能力.正所谓 "能力(越)越大(来),责任(越) ...

  10. 记录--uniapp 应用APP跳转微信小程序

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近APP项目开发完成,在评审会上老板提了一个需求,想在开发的APP上添加一个链接,可以跳转公司的小程序商城. 原以为会很复杂,结果只有短 ...