MongoDB集群搭建步骤------简

tech2026-09-27  0

MongoDB集群搭建

搭建之前先了解一下MongoDB分片群集主要有如下三个组件:

Shard:分片服务器,用于存储实际的数据块,实际生产环境中一个shard server 角色可以由几台服务器组成一个Replica Set 承担,防止主机单点故障。

Config Server:配置服务器,存储了整个分片群集的配置信息,其中包括chunk信息。

Routers:前端路由,客户端由此接入,且让整个群集看上去像单一数据库,前端应用可以透明使用。 从图中可以看到有四个组件:mongos、config server、shard、replica seto

mongos: 数据库集群请求的入口 ,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一请求分发中心,它负责把对应的数 据请求请求转发到对应的shard服务器上。在生产环境通常有多mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。

config server: 顾名思义为配置g艮务器,存储所有数据库元信息(路由、分片)的配置mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配劃艮 务器则实际存储这些数据。mongos第一次启动或者关掉重启就会从config server加载配置信息,以后如果配賽艮务器信息变化会通知到所有的mongos更新自己的状态, 这样mongos就嶼续准确路由。在生产环境通常有多个config server配置服务器,因为它存储了分片路由的元数据,防止数据丢失!

shard: 分片(sharding )是指将»据库拆分,将其分散在不同的机器上的过程。将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大 的负载。基本思想就是将集合切成小块,这些块分散到若干片里,每个片只负责总数据的一35分,最后通过一个均衡器来对各个分片进行均衡(数据迁移)。

**replica set:**中文翻译副本集,其实就是shard的备份,防止shard挂掉之后数据丢失。复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用 性,并可以保证数据的安全性。

仲裁者(Arbiter ):是复制集中的一个MongoDB实例,它并不保存数据。仲裁节点使用最小的资源并且不要求硬件设备,不能将Arbitergp署在同一个数据集节点中,可以 部署在其他应用服务器或者监视服务器中,也可部署在单独的虚拟机中。为了确保复制集中有奇数的投票成员(包括primary ),需要添加仲裁节点做为投票,否则primaiy 不能运行时不会自动切换primary。

简单了解之后,我们可以这样总结一下,应用请求mongos来操作mongodb的增删改查,配置服务器存储数据库元信息,并且和mongos做同步,数据最终存入在shard (分 片)上,为了防止数据丢失同步在副本集中存储了一份,仲裁在数据存储到分片的时候决定存储到哪个节点。

三台机器的配置服务(27018)形成复制集,分片1、2、3也在各机器都部署一个实例,它们之间形成复制集,客户端直接连接3个路由服务与之交互,配置服务和分片服务对客户端是透明的。 这里按照3台搭建

主机路由服务端口配置服务端口分片1端口分片2端口分片3端口zzen012701727018270012700227003zzen032701727018270012700227003zzen042701727018270012700227003

服务器的安装及配置(3台服务器执行相同操作)

1、下载解压MongoDB

到MongoDB官网下载: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.6.tgz MongoDB官网下载4.0.6 解压到/home/mongodb,设置环境变量:

echo 'export PATH=.:/home/mongodb/bin:$PATH' >> /etc/profile

保存后执行: source /etc/profile

2、创建路由、配置、分片等的相关目录与文件配置服务器部署(3台服务器执行相同操作)

配置服务器部署(3台服务器执行相同操作)

mkdir -p /home/mongodb/conf //启动配置文件存放的文件夹 mkdir -p /home/mongodb/data/config //配置服务数据存放目录 mkdir -p /home/mongodb/data/shard1 //分片1服务数据存放目录 mkdir -p /home/mongodb/data/shard2 //分片2服务数据存放目录 mkdir -p /home/mongodb/data/shard3 //分片3服务数据存放目录 mkdir -p /home/mongodb/log //创建log目录 touch /home/mongodb/log/config.log //配置服务日志存放文件 touch /home/mongodb/log/mongos.log //路由服务日志存放文件 touch /home/mongodb/log/shard1.log //分片1服务日志存放文件 touch /home/mongodb/log/shard2.log //分片2服务日志存放文件 touch /home/mongodb/log/shard3.log //分片3服务日志存放文件

1、在/home/mongodb/conf目录创建config.conf,内容如下

dbpath=/home/mongodb/data/config logpath=/home/mongodb/log/config.log port=27018 logappend=true fork=true maxConns=5000 //复制集名称 replSet=configs //置参数为true configsvr=true //允许任意机器连接 bind_ip=0.0.0.0

2、配置复制集

分别启动三台服务器的配置服务:

mongod -f /home/mongodb/conf/config.conf

3 、连接mongo

只需在任意一台机器执行即可:

mongo --host zzen03 --port 27018

切换数据库:

use admin

初始化复制集:

rs.initiate({_id:"configs",members:[{_id:0,host:"zzen01:27018"},{_id:1,host:"zzen03:27018"},{_id:2,host:"zzen04:27018"}]})

其中_id:"configs"的configs是上面config.conf配置文件里的复制集名称,把三台服务器的配置服务组成复制集

查看状态:

rs.status()

等几十秒左右,执行上面的命令查看状态,三台机器的配置服务就已形成复制集,其中1台为PRIMARY,其他2台为SECONDARY。

分片服务部署(3台服务器执行相同操作)

1、在/home/mongodb/conf目录创建shard1.conf、shard2.conf、shard3.conf,内容如下:

shard1.conf:

dbpath=/home/mongodb/data/shard1 logpath=/home/mongodb/log/shard1.log port=27001 logappend=true fork=true maxConns=5000 storageEngine=mmapv1 shardsvr=true replSet=shard1 bind_ip=0.0.0.0

shard2.conf:

dbpath=/home/mongodb/data/shard2 logpath=/home/mongodb/log/shard2.log port=27002 logappend=true fork=true maxConns=5000 storageEngine=mmapv1 shardsvr=true replSet=shard2 bind_ip=0.0.0.0

shard3.conf:

dbpath=/home/mongodb/data/shard3 logpath=/home/mongodb/log/shard3.log port=27003 logappend=true fork=true maxConns=5000 storageEngine=mmapv1 shardsvr=true replSet=shard3 bind_ip=0.0.0.0

端口分别是27001、27002、27003,分别对应shard1.conf、shard2.conf、shard3.conf。 还有数据存放目录、日志文件这几个地方都需要对应修改。 在3台机器的相同端口形成一个分片的复制集,由于3台机器都需要这3个文件,所以根据这9个配置文件分别启动分片服务:

mongod -f /home/mongodb/conf/shard1.conf mongod -f /home/mongodb/conf/shard2.conf mongod -f /home/mongodb/conf/shard3.conf

2、将分片配置为复制集

连接mongo,执行以下操作:

shard1:

//顺序执行 //1.连接mongo mongo --host zzen01 --port 27001 //2.切换数据库: use admin //3.初始化复制集: rs.initiate({_id:"shard1",members:[{_id:0,host:"zzen01:27001"},{_id:1,host:"zzen03:27001"},{_id:2,host:"zzen04:27001"}]})

exit 退出

shard2:

//1.连接mongo mongo --host zzen03 --port 27002 //2.切换数据库: use admin //3.初始化复制集: rs.initiate({_id:"shard2",members:[{_id:0,host:"zzen01:27002"},{_id:1,host:"zzen03:27002"},{_id:2,host:"zzen04:27002"}]})

exit 退出

shard3:

//1.连接mongo mongo --host zzen04 --port 27003 //2.切换数据库: use admin //3.初始化复制集: rs.initiate({_id:"shard3",members:[{_id:0,host:"zzen01:27003"},{_id:1,host:"zzen03:27003"},{_id:2,host:"zzen04:27003"}]})

exit 退出

执行以上操作,让3个分片各自形成1主2从的复制集,注意端口及仲裁节点的问题即可,操作完成后3个分片都启动完成,并完成复制集模式。

路由服务部署(3台服务器执行相同操作)

1、在/home/mongodb/conf目录创建mongos.conf,内容如下:

logpath=/home/mongodb/log/mongos.log logappend = true port = 27017 fork = true configdb = configs/zzen01:27018, zzen03:27018, zzen04:27018 maxConns=20000 bind_ip=0.0.0.0

2、启动mongos

分别在三台服务器启动:

mongos -f /home/mongodb/conf/mongos.conf

3、启动分片功能

连接mongo:

mongo --host zzen01 --port 27017

切换数据库:

use admin

添加分片,只需在一台机器执行即可:

sh.addShard("shard1/zzen01:27001,zzen03:27001,zzen04:27001") sh.addShard("shard2/zzen01:27002,zzen03:27002,zzen04:27002") sh.addShard("shard3/zzen01:27003,zzen03:27003,zzen04:27003")

查看集群状态:

sh.status()

显示内容如下:

--- Sharding Status --- sharding version: { "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, "clusterId" : ObjectId("5f51b9580335c89d4bda8807") } shards: { "_id" : "shard1", "host" : "shard1/zzen01:27001,zzen03:27001,zzen04:27001", "state" : 1 } { "_id" : "shard2", "host" : "shard2/zzen01:27002,zzen03:27002,zzen04:27002", "state" : 1 } { "_id" : "shard3", "host" : "shard3/zzen01:27003,zzen03:27003,zzen04:27003", "state" : 1 } active mongoses: "4.0.6" : 3 autosplit: Currently enabled: yes balancer: Currently enabled: yes Currently running: no Failed balancer rounds in last 5 attempts: 5 Last reported error: Could not find host matching read preference { mode: "primary" } for set shard1 Time of Reported error: Fri Sep 04 2020 22:53:26 GMT+0800 (CST) Migration Results for the last 24 hours: No recent migrations databases: { "_id" : "config", "primary" : "config", "partitioned" : true } config.system.sessions shard key: { "_id" : 1 } unique: false balancing: true chunks: shard1 1 { "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : shard1 Timestamp(1, 0)

做到这里,简单的MongoDB集群搭建已经搭建完成,如果显示上述内容,那么表示MongoDB集群已经搭建成功了,就可以继续进行其它操作了。

最新回复(0)