Mongodb:mongodb集群的搭建(副本集+分片)

  • Post author:
  • Post category:其他




mongodb集群的搭建(副本集+分片)

MongoDB 有三种集群部署模式,分别为主从复制(Master-Slaver)、副本集(Replica Set)和分片(Sharding)模式。

• Master-Slaver 是一种主从副本的模式,目前已经不推荐使用。

• ReplicaSet 模式取代了 Master-Slaver 模式,是一种互为主从的关系。Replica Set将数据复制多份保存,不同服务器保存同一份数据,在出现故障时自动切换,实现故障转移,在实际生产中非常实用。

• Sharding 模式适合处理大量数据,它将数据分开存储,不同服务器保存不同的数据,所有服务器数据的总和即为整个数据集。

Sharding 模式追求的是高性能,而且是三种集群中最复杂的。在实际生产环境中,

通常将 Replica Set 和 Sharding两种技术结合使用。

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

shard:分片服务器,用于存储实际的数据块,实际生产环境中一个

shard server:角色可以由几台服务器组成一个Peplica Set 承担,防止主机单点故障。

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

Routers:前端路由,客户端由此接入,且让整个群集看上去像单一数据库,前端应用可以透明使用。


分享一些比较清晰的架构图


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


机器规划


在这里插入图片描述


从上面的规划可以看出,每台机器要跑5个mongodb实例,也就是需要5个配置文件。


部署


1 解压mongodb(所有机器)

安装目录:/opt/

 cd /opt
 tar xf mongodb-linux-x86_64-rhel70-4.0.21.tgz
 mv mongodb-linux-x86_64-rhel70-4.0.21/  /opt/mongodb/

可以将命令配置成环境变量,方便执行

echo ‘export PATH=$PATH:/opt/mongodb/bin’ >> /etc/profile/mongodb.sh source /etc/profile/mongodb.sh

2 创建路由、配置、分片等的相关目录与文件(所有机器)

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

3 配置服务器部署(所有机器)

3.1 创建配置文件

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

3.2 配置复制集

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

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

3.3 连接mongo,只需在任意一台机器执行即可:

mongo --host 192.168.186.31 --port 27018
切换数据库:
use admin
初始化复制集:
rs.initiate({_id:"configs",members:[{_id:0,host:"192.168.186.31:27018"},{_id:1,host:"192.168.186.32:27018"}, {_id:2,host:"192.168.186.33:27018"}]})
其中_id:"configs"的configs是上面config.conf配置文件里的复制集名称,把三台服务器的配置服务组成复制集。
查看状态:
rs.status()

4 分片服务部署(所有机器)

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

dbpath=/opt/mongodb/data/shard1                 #其他2个分片对应修改为shard2、shard3文件夹      
logpath=/opt/mongodb/log/shard1.log            #其他2个分片对应修改为shard2.log、shard3.log      
port=27001                                                   #其他2个分片对应修改为27002、27003      
logappend=true      
fork=true      
maxConns=5000      
storageEngine=mmapv1      
shardsvr=true      
replSet=shard1                                                #其他2个分片对应修改为shard2、shard3      
bind_ip=0.0.0.0
端口分别是27001、27002、27003,分别对应shard1.conf、shard2.conf、shard3.conf。
还有数据存放目录、日志文件这几个地方都需要对应修改。
在3台机器的相同端口形成一个分片的复制集,由于3台机器都需要这3个文件,所以根据这9个配置文件分别启动分片服务:
mongod -f /opt/mongodb/conf/shard1.conf
mongod -f /opt/mongodb/conf/shard2.conf
mongod -f /opt/mongodb/conf/shard3.conf

4.2 将分片配置为复制集

连接mongo,只需在任意一台机器执行即可:

mongo --host 192.168.186.31 --port 27001                             #这里以shard1为例,其他两个分片则再需对应连接到27002、27003的端口进行操作即可
切换数据库:
use admin
初始化复制集:
rs.initiate({_id:"shard1",members:[{_id:0,host:"192.168.186.31:27001"},{_id:1,host:"192.168.186.32:27001"},{_id:2,host:"192.168.186.33:27001"}]})
以上是基于分片1来操作,同理,其他2个分片也要连到各自的端口来执行一遍上述的操作,让3个分片各自形成1主2从的复制集,注意端口及仲裁节点的问题即可,操作完成后3个分片都启动完成,并完成复制集模式。(shard1要对应修改成2,3)

5 路由服务部署(所有机器)

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

logpath=/opt/mongodb/log/mongos.log     
logappend = true      
port = 27017     
fork = true      
configdb = configs/192.168.186.31:27018,192.168.186.32:27018,192.168.186.33:27018      
maxConns=20000      
bind_ip=0.0.0.0

5.2、启动mongos

分别在三台服务器启动:

mongos -f /opt/mongodb/conf/mongos.conf

5.3、启动分片功能

连接mongo:
mongo --host 192.168.186.31 --port 27017
切换数据库:
use admin
添加分片,只需在一台机器执行即可:        
 sh.addShard("shard1/192.168.186.31:27001,192.168.186.32:27001,192.168.186.33:27001")     
 sh.addShard("shard2/192.168.186.31:27002,192.168.186.32:27002,192.168.186.33:27002")      
 sh.addShard("shard3/192.168.186.31:27003,192.168.186.32:27003,192.168.186.33:27003")
查看集群状态:
sh.status()


搭建完毕!


本文主要参考:


史上最详细的 MongoDB4.0搭建分布式集群



mongodb分布式集群搭建手记



版权声明:本文为rookie23rook原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。