linux mongodb集群搭建

MongoDB集群搭建

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

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

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

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

linux mongodb集群搭建_第1张图片

从图中可以看到有四个组件:mongosconfig servershardreplica 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个路由服务与之交互,配置服务和分片服务对客户端是透明的。

linux mongodb集群搭建_第2张图片

 这里按照3台搭建

主机 路由服务端口 配置服务端口 分片1端口 分片2端口 分片3端口
zzen01 27017 27018 27001 27002 27003
zzen03 27017 27018 27001 27002 27003
zzen04 27017 27018 27001 27002 27003

服务器的安装及配置(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 zzen01 --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。

你可能感兴趣的:(mongodb,linux,数据库)