mongodb副本集群搭建

一、Mongodb集群说明及选取集群方式
mongodb集群的3种方式:Replica Set / Sharding / Master-Slaver。
1.Master-Slaver:
这个是最简答的集群搭建,不过准确说也不能算是集群,只能说是主备,
故障出现时需要手动切换数据库。官方已经不推荐这种方式,因此不选择此种方式。
2.Replica Set:副本集
集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据需要和主节点一致。
主备节点存储数据,仲裁节点不存储数据。客户端同时连接主节点与备节点,不连接仲裁节点。
默认设置下,主节点提供所有增删查改服务,备节点不提供任何服务。但是可以通过设置使备节点提供查询服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这个设置叫做Read Preference Modes,同时Java客户端提供了简单的配置方式,可以不必直接对数据库进行操作。
仲裁节点是一种特殊的节点,它本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点,所以客户端不需要连接此节点。这里虽然只有一个备节点,但是仍然需要一个仲裁节点来提升备节点级别。
搭建Replica Set至少需要3个mongodb节点。因为当主节点挂掉时,至少需要两个从节点才能完成选举过程。具体而言,选举是某个从节点给其他从节点发送消息,询问“我是否可以成为主节点”,接收到消息的从节点判断是否同意其成为主节点来完成的,如果只有一个从节点,那么将没有从节点可以接收消息,判断该节点是否能升级为主节点。
所以至少需要3个节点,可以是1主1丛1仲裁节点,也可以是1主2从(但不能是1主2仲裁,仲裁节点不备份数据,无法升为主节点)。一主一从的Replica Set也可以部署,但是效果等同于Master/Slave集群,主节点挂掉后,从节点无法自动提升为主节点。
Replica Set主要设计目标有几个:
高可用(主要目标):当一个结点故障时自动切换到其他结点;
数据冗余(主要目标):数据复制到n个结点上,增加数据安全性,同时为高可用提供基础;
功能隔离(次要目标):使用不同的结点隔离某些有特殊需求的功能,比如使用一个结点进行OLAP运算(大规模资源占用),使用一个结点在远程做灾备(性能要求不如本地高),读写分离等等
3.Sharding:分片集
分片集的主要设计目标是:
水平扩展:当一台服务器满足不了需求的时候,我们可以选择垂直扩展(增加服务器硬件),它虽然简单,但很容易达到极限,并且面临成本高等明显缺点。成本更低的方式是使用n台服务器组成集群来满足系统需求。这就是分片集的主要设计目标;
缩短响应时间:因为可以把数据分散到多台服务器上,自然每台服务器的处理压力减小,处理时间就会缩短;
这里会出现一个问题:假设每台服务器出故障的机率是x%,那么n台服务器有一台出现故障的机率就是x% * n,如果不做高可用设计,集群出现故障的概率就会随机器数量成正比增长,这在工程上是不能接受的。但我们已经有了解决高可用的方案,也就是复制集即副本集。MongoDB的分片集群要求每一个片都是复制集。
和Replica Set类似,都需要一个仲裁节点,但是Sharding还需要配置节点和路由节点。就三种集群搭建方式来说,这种是最复杂的。
综上考虑,本篇采用的是第二种搭建Replica Set副本集集群。

二、准备工作
1.准备3台linux服务器
192.168.137.4(主)、192.168.137.59(从)、192.168.137.252(仲裁),并在这3台服务器上安装mongodb。

三、搭建步骤

2.修改启动文件mongodb.conf
dbpath=/opt/app/mongodb/db
logpath=/opt/app/mongodb/logs/mongodb.log
directoryperdb=true
logappend=true
bind_ip=127.0.0.1,192.168.137.4
port=27017
oplogSize=10000
fork=true
noprealloc=true
replSet=testrs

注:三个服务器的mongodb.conf文件基本一样,不同的是各自绑定的ip,还有auth权限验证不能打开。
参数解释:
dbpath:数据存放目录
logpath:日志存放路径
pidfilepath:进程文件,方便停止mongodb
directoryperdb:为每一个数据库按照数据库名建立文件夹存放
logappend:以追加的方式记录日志
replSet:replica set的名字
bind_ip:mongodb所绑定的ip地址
port:mongodb进程所使用的端口号,默认为27017
oplogSize:mongodb操作日志文件的最大大小。单位为Mb,默认为硬盘剩余空间的5%
fork:以后台方式运行进程
noprealloc:不预先分配存储

3.分别启动3个mongodb
./mongod --config /opt/app/mongodb/bin/mongodb.conf

4.配置主,备,仲裁节点
1)连接mongodb,任意一台,现在在主节点那台操作
2)执行use admin
3)执行
cfg={
_id:“testrs”, members:
[
{_id:0,host:‘192.168.137.4:27017’,priority:2},
{_id:1,host:‘192.168.137.59:27017’,priority:1},
{_id:2,host:‘192.168.137.252:27017’,arbiterOnly:true}
]
}
Priority为优先级,优先级高的将成为主节点
4)使配置生效
rs.initiate(cfg)
5)查看状态
rs.status()
6)成功后可以查到以下信息,分别对应主节点,从节点和仲裁节点
在这里插入图片描述

5.创建帐户密码
副本集搭建成功后,需要给整个副本集创建帐户、密码
1、在主节点上,用客户端连接,创建用户权限(主节点,可以用 rs.status() 查看)
use admin
db.createUser({user:“admin”, pwd:“admin”, roles:[{role: “root”, db:“admin” }]})
在这里插入图片描述

2、创建普通数据库、用户
db.auth(“admin”,“admin”)
在这里插入图片描述

use mytest
db.createUser({user:“mytest”,pwd:“mytest”,roles:[{role:“dbOwner”,db:“mytest”}]})
在这里插入图片描述

这样,就创建数据库:mytest, 数据库用户:mytest / mytest, 生产部署的时候,改成对应的数据库名、用户名
验证连接:
mongo 192.168.137.4:27017/mytest -u mytest -p mytest
在这里插入图片描述

5.创建副本集认证key文件
1、创建key文件: 注意,三个节点必须要用同一份keyfile,在一台机器生成,拷贝到另外两台,并且修改成 600 的文件属性
[root@c43bfab6f744 ~]# openssl rand -base64 90 -out ./keyfile
[root@c43bfab6f744 ~]# cp keyfile /opt/app/mongodb/keyfile/
[root@c43bfab6f744 ~]# chmod 600 /opt/app/mongodb/keyfile/keyfile
并且把这份keyfile同步到其他两个节点的 ~/mongodb/keyfile/ 文件夹中;
3、关闭副本集:分别关闭每个节点的mongod
db.shutdownServer()或者pkill mongo、pkill mongod
4、修改每个节点的配置文件mongo.conf中的下面项
auth=true
keyFile=/opt/app/mongodb/keyfile/keyfile
5、重新启动副本集
./mongod --config /opt/app/mongodb/bin/mongodb.conf
6、配置开机启动

四、测试数据
1.Springboot配置(逗号分隔):
在这里插入图片描述

2.测试保存数据

3.查看数据情况
保存了3份,且能看到主、从、仲裁节点的在线情况
在这里插入图片描述

4.停掉一个主节点,测试是否正常运行
可以看到停掉主节点后,主节点状态为offline,从节点变成的primary即主节点,前台对数据进行增删改查时,仍然能成功进行。
在这里插入图片描述

重新启动原主节点后,从节点变回secondry,原主节点变为在线状态。对数据进行增删改查成功。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值