设计感网站有哪些方面,山东省建设项目监理协会网站,在哪家网站做淘宝客最好,移动网站开发教材MongoDB集群的介绍与搭建
一.MongoDB集群的介绍
注意#xff1a;Mongodb是一个比较流行的NoSQL数据库#xff0c;它的存储方式是文档式存储#xff0c;并不是Key-Value形式#xff1b;
1.1集群的优势和特性
MongoDB集群的优势主要体现在以下几个方面#xff1a;
(1)高…MongoDB集群的介绍与搭建
一.MongoDB集群的介绍
注意Mongodb是一个比较流行的NoSQL数据库它的存储方式是文档式存储并不是Key-Value形式
1.1集群的优势和特性
MongoDB集群的优势主要体现在以下几个方面
(1)高可用性
MongoDB集群支持主从复制和故障转移机制这确保了数据的高可用性和冗余性。当主节点出现故障时集群可以自动切换到从节点保证系统的持续运行。这种故障转移能力对于维护系统的稳定性和可靠性至关重要。
(2)扩展性
MongoDB集群具有出色的扩展性可以通过水平扩展来增加系统的处理能力和存储容量。随着数据量的增加和访问压力的增大只需简单地添加新的节点即可轻松应对。这种扩展性使得MongoDB集群能够适用于各种规模的数据存储和处理需求。
(3)数据分片
MongoDB集群支持数据分片功能可以将数据划分为多个分片并部署在不同的节点上。这种数据分片机制不仅提高了系统的读写性能还提供了更大的存储容量。MongoDB能够根据数据的分布情况自动将查询请求分发到相应的分片上进行处理从而进一步优化了系统的性能。
(4)弹性伸缩
MongoDB集群具有弹性伸缩的能力可以根据系统的负载情况进行自动调整。当负载过高时可以添加更多的节点来分担压力当负载较低时可以减少节点数量以节省资源。这种弹性伸缩机制使得MongoDB集群能够灵活地应对各种负载变化保持系统的稳定性和性能。
(5)灵活性
MongoDB集群提供了灵活的数据模型和查询语言可以存储和处理各种类型的数据。它支持文档型、关系型和图形型数据并提供了强大的查询和聚合功能方便用户对数据进行分析和处理。这种灵活性使得MongoDB集群能够适用于各种复杂的数据存储和处理场景。
(6)数据安全与容灾
MongoDB集群通过数据冗余和备份机制提供了数据的安全性和容灾功能。即使某个节点出现故障其他节点仍然可以正常运行并保证数据的一致性和完整性。此外MongoDB还支持跨地域的数据复制和容灾部署进一步提高了数据的安全性和可靠性。
然而也需要注意到MongoDB集群的一些潜在挑战如配置复杂性、成本较高以及数据一致性等问题。在实际应用中需要根据具体的需求和资源情况来选择合适的集群类型和配置方案并进行合理的优化和维护以确保系统的性能和稳定性。
综上所述MongoDB集群具有高可用性、扩展性、数据分片、弹性伸缩、灵活性和数据安全与容灾等优势适用于各种大规模数据存储和处理的场景。
二.MongoDB集群的搭建
主要介绍三种集群方式的搭建过程
2.1Replica Set(副本集)方式
主节点-备节点-仲裁节点
是集群当中包含了多份数据保证主节点挂掉了备节点能继续提供数据服务提供的前提就是数据需要和主节点一致。 其中Mongodb(M)表示主节点Mongodb(S)表示备节点Mongodb(A)表示仲裁节点。主备节点存储数据仲裁节点不存储数据。客户端同时连接主节点与备节点不连接仲裁节点。
默认设置下主节点提供所有增删查改服务备节点不提供任何服务。但是可以通过设置使备节点提供查询服务这样就可以减少主节点的压力当客户端进行数据查询时请求自动转到备节点上。这个设置叫做Read Preference Modes同时Java客户端提供了简单的配置方式可以不必直接对数据库进行操作。
仲裁节点是一种特殊的节点它本身并不存储数据主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点所以客户端不需要连接此节点。这里虽然只有一个备节点但是仍然需要一个仲裁节点来提升备节点级别。我开始也不相信必须要有仲裁节点但是自己也试过没仲裁节点的话主节点挂了备节点还是备节点所以咱们还是需要它的。
1建立数据文件夹
一般情况下不会把数据目录建立在mongodb的解压目录下不过这里方便起见就建在mongodb解压目录下吧。
mkdir -p /mongodb/data/master
mkdir -p /mongodb/data/slaver
mkdir -p /mongodb/data/arbiter
#三个目录分别对应主备仲裁节点
2建立配置文件
由于配置比较多所以我们将配置写到文件里。
#master.conf
dbpath/mongodb/data/master
logpath/mongodb/log/master.log
pidfilepath/mongodb/master.pid
directoryperdbtrue
logappendtrue
replSettestrs
bind_ip10.10.148.130
port27017
oplogSize10000
forktrue
noprealloctrue#slaver.conf
dbpath/mongodb/data/slaver
logpath/mongodb/log/slaver.log
pidfilepath/mongodb/slaver.pid
directoryperdbtrue
logappendtrue
replSettestrs
bind_ip10.10.148.131
port27017
oplogSize10000
forktrue
noprealloctrue#arbiter.conf
dbpath/mongodb/data/arbiter
logpath/mongodb/log/arbiter.log
pidfilepath/mongodb/arbiter.pid
directoryperdbtrue
logappendtrue
replSettestrs
bind_ip10.10.148.132
port27017
oplogSize10000
forktrue
noprealloctrue参数解读 dbpath数据存放目录 portmongodb进程所使用的端口号默认为27017 logpath日志存放路径、bind_ipmongodb所绑定的ip地址 oplogSizemongodb操作日志文件的最大大小。单位为Mb默认为硬盘剩余空间的5% pidfilepath进程文件方便停止mongodb fork以后台方式运行进程 directoryperdb为每一个数据库按照数据库名建立文件夹存放 noprealloc不预先分配存储、replSetreplica set的名字 logappend以追加的方式记录日志
3启动mongodb
进入每个mongodb节点的bin目录下
./monood -f master.conf
./mongod -f slaver.conf
./mongod -f arbiter.conf
4配置主备仲裁节点
可以通过客户端连接mongodb也可以直接在三个节点中选择一个连接mongodb。
./mongo 10.10.148.130:27017 #ip和port是某个节点的地址
use admin
cfg{ _id:testrs, members:[ {_id:0,host:10.10.148.130:27017,priority:2}, {_id:1,host:10.10.148.131:27017,priority:1},
{_id:2,host:10.10.148.132:27017,arbiterOnly:true}] };
rs.initiate(cfg) #使配置生效cfg是可以任意的名字当然最好不要是mongodb的关键字confconfig都可以。最外层的_id表示replica set的名字members里包含的是所有节点的地址以及优先级。优先级最高的即成为主节点即这里的10.10.148.130:27017。特别注意的是对于仲裁节点需要有个特别的配置——arbiterOnly:true。这个千万不能少了不然主备模式就不能生效。 配置的生效时间根据不同的机器配置会有长有短配置不错的话基本上十几秒内就能生效有的配置需要一两分钟。如果生效了执行rs.status()命令会看到如下信息
{set : testrs,date : ISODate(2013-01-05T02:44:43Z),myState : 1,members : [{_id : 0,name : 10.10.148.130:27017,health : 1,state : 1,stateStr : PRIMARY,uptime : 200,optime : Timestamp(1357285565000, 1),optimeDate : ISODate(2013-01-04T07:46:05Z),self : true},{_id : 1,name : 10.10.148.131:27017,health : 1,state : 2,stateStr : SECONDARY,uptime : 200,optime : Timestamp(1357285565000, 1),optimeDate : ISODate(2013-01-04T07:46:05Z),lastHeartbeat : ISODate(2013-01-05T02:44:42Z),pingMs : 0},{_id : 2,name : 10.10.148.132:27017,health : 1,state : 7,stateStr : ARBITER,uptime : 200,lastHeartbeat : ISODate(2013-01-05T02:44:42Z),pingMs : 0}],ok : 1
}如果配置正在生效其中会包含如下信息
stateStr : RECOVERING
同时可以查看对应节点的日志发现正在等待别的节点生效或者正在分配数据文件。 现在基本上已经完成了集群的所有搭建工作。至于测试工作可以留给大家自己试试。一个是往主节点插入数据能从备节点查到之前插入的数据查询备节点可能会遇到某个问题可以自己去网上查查看。二是停掉主节点备节点能变成主节点提供服务。三是恢复主节点备节点也能恢复其备的角色而不是继续充当主的角色。二和三都可以通过rs.status()命令实时查看集群的变化。
2.2Sharding方式
主节点-备节点-仲裁节点-路由节点
和Replica Set类似都需要一个仲裁节点但是Sharding还需要配置节点和路由节点。就三种集群搭建方式来说这种是最复杂的。 (1)启动数据节点
./mongod --fork --dbpath ../data/set1/ --logpath ../log/set1.log --replSet test #192.168.4.43
./mongod --fork --dbpath ../data/set2/ --logpath ../log/set2.log --replSet test #192.168.4.44
./mongod --fork --dbpath ../data/set3/ --logpath ../log/set3.log --replSet test #192.168.4.45 决策 不存储数据(2)启动配置节点
./mongod --configsvr --dbpath ../config/set1/ --port 20001 --fork --logpath ../log/conf1.log #192.168.4.30
./mongod --configsvr --dbpath ../config/set2/ --port 20002 --fork --logpath ../log/conf2.log #192.168.4.31(3)启动路由节点
./mongos --configdb 192.168.4.30:20001,192.168.4.31:20002 --port 27017 --fork --logpath ../log/root.log #192.168.4.29
这里我们没有用配置文件的方式启动其中的参数意义大家应该都明白。一般来说一个数据节点对应一个配置节点仲裁节点则不需要对应的配置节点。注意在启动路由节点时要将配置节点地址写入到启动命令里。
4配置Replica Set 这里可能会有点奇怪为什么Sharding会需要配置Replica Set。其实想想也能明白多个节点的数据肯定是相关联的如果不配一个Replica Set怎么标识是同一个集群的呢。这也是人家mongodb的规定咱们还是遵守吧。配置方式和之前所说的一样定一个cfg然后初始化配置。
./mongo 192.168.4.43:27017 #ip和port是某个节点的地址
use admin
cfg{ _id:testrs, members:[ {_id:0,host:192.168.4.43:27017,priority:2}, {_id:1,host:192.168.4.44:27017,priority:1},
{_id:2,host:192.168.4.45:27017,arbiterOnly:true}] };
rs.initiate(cfg) #使配置生效5 配置Sharding
./mongo 192.168.4.29:27017 #这里必须连接路由节点
sh.addShard(test/192.168.4.43:27017) #test表示replica set的名字 当把主节点添加到shard以后会自动找到set里的主备决策节点
db.runCommand({enableSharding:diameter_test}) #diameter_test is database name
db.runCommand( { shardCollection: diameter_test.dcca_dccr_test,key:{__avpSessionId:1}})第一个命令很容易理解第二个命令是对需要进行Sharding的数据库进行配置第三个命令是对需要进行Sharding的Collection进行配置这里的dcca_dccr_test即为Collection的名字。另外还有个key这个是比较关键的东西对于查询效率会有很大的影响具体可以查看 Shard Key Overview 到这里Sharding也已经搭建完成了以上只是最简单的搭建方式其中某些配置仍然使用的是默认配置。如果设置不当会导致效率异常低下所以建议大家多看看官方文档再进行默认配置的修改。
2.3Master-Slave方式
主节点-备节点
这个是最简答的集群搭建不过准确说也不能算是集群只能说是主备。并且官方已经不推荐这种方式所以在这里只是简单的介绍下吧搭建方式也相对简单。
./mongod --master --dbpath /data/masterdb/ #主节点./mongod --slave --source masterip:masterport --dbpath /data/slavedb/ 备节点
基本上只要在主节点和备节点上分别执行这两条命令Master-Slaver就算搭建完成了。我没有试过主节点挂掉后备节点是否能变成主节点不过既然已经不推荐了大家就没必要去使用了。 三.自己亲测过程
3.1.准备工作
因为我这里的数据量不大所以一般使用带仲裁节点的集群即可没必要使用带有路由节点的
1环境准备三台Centos7的虚拟机192.168.32.215 / 192.168.32.216 / 192.168.32.217
2机器分配215为master节点 , 217为slave节点 , 216为仲裁节点
3安装包下载使用wget来下载版本为4.4.5想要其他的版本自己可以更换
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.5.tgz
将安装包用scp命令传输到另外两台上
3.2.进行配置
1目录准备
三台机器的目录尽量一致我这里都存放解压后的目录为/opt/hadoop
创建目录
215机器
#在opt下创建hadoop
mkdir /opt/hadoop
#将安装包解压到hadoop下
tar -zxvf mongodb-linux-x86_64-rhel70-4.4.5.tgz -C /opt/hadoop/
#解压的目录形式为:/opt/hadoop/mongo4.4
#我这里修改为了:/opt/hadoop/mongodb4.4为了方便然后就在mongodb4.4里面执行下面的操作#数据存文的目录
mkdir -p data/master
#日志目录
mkdir logs
#配置目录
mkdir conf
cd logs
#日志文件
touch master.log
cd conf
#配置文件
touch mongodb.conf
如同下面得图中表现 217机器
同上述节点
mkdir -p data/slave
mkdir logs
mkdir conf
cd logs
touch slave.log
cd conf
touch mongodb.conf
216机器
同上述节点
mkdir -p data/arbite
mkdir logs
mkdir conf
cd logs
touch arbite.log
cd conf
touch mongodb.conf
2编辑配置文件
215节点Master:
编辑mongodb.conf #master配置
#数据存放路径
dbpath/opt/hadoop/mongodb4.4/data/master
#日志路径
logpath/opt/hadoop/mongodb4.4/logs/master.log
#以追加的方式记录日志
logappendtrue
#mongoDB进程所绑定的ip地址
bind_ip192.168.32.215
#端口号默认端口号为27017
port27017
#以后台方式运行进程
forktrue
#4.33版本后已经取消
#noprealloctrue
#集群名称
replSettest
217节点Slave:
编辑mongodb.conf
#slave配置
dbpath/opt/hadoop/mongodb4.4/data/slave
logpath/opt/hadoop/mongodb4.4/logs/slave.log
logappendtrue
bind_ip192.168.32.217
port27017
forktrue
#noprealloctrue
replSettest
216节点arbite仲裁节点:
编辑mongodb.conf
#仲裁节点配置
dbpath/opt/hadoop/mongodb4.4/data/arbite
logpath/opt/hadoop/mongodb4.4/logs/arbite.log
logappendtrue
bind_ip192.168.32.216
#注意仲裁节点我给的端口号是27018
port27018
forktrue
#noprealloctrue
replSettest
3.3启用
分别启动mongodb
直接输入如下命令即可要保证路径正确即可 /opt/hadoop/mongodb4.4/bin/mongod -f /opt/hadoop/mongodb4.4/conf/mongodb.conf 启动成功如下 4再进一步简单的配置
a.在任意一个节点上连接到主节点
这里ip换成你们配置中的主节点即可 b.输入如下命令里面ip换成你们自己的即可
cfg{_id:test, members: [ {_id:0,host:192.168.32.215:27017,priority:2} ,{_id:1,host:192.168.32.217:27017,priority:1} ,{_id:2,host:192.168.32.216:27018,arbiterOnly:true}]}; c.初始化集群-让配置生效
rs.initiate(cfg)
当你能看到代表成功ok:1
注意如下是返回的初始化不成功的信息需要关闭你们的机器防火墙即可 关闭防火墙的命令
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld 再次执行发现返回状态成功。 d.查看集群状态 OK,测试完毕。
四.总结
以上三种集群搭建方式首选Replica Set只有真的是大数据Sharding才能显现威力毕竟备节点同步数据是需要时间的。Sharding可以将多片数据集中到路由节点上进行一些对比然后将数据返回给客户端但是效率还是比较低的说。大家在应用的时候还是多多做下性能测试毕竟不像Redis有benchmark。 Mongodb现在用的还是比较多的但是个人觉得配置太多了我看官网都看了好多天才把集群搭建的配置和注意要点弄明白。而且用过的人应该知道mongodb吃内存的问题解决办法只能通过ulimit来控制内存使用量但是如果控制不好的话mongodb会挂掉。