MongoDB分片集群安装配置

MongoDB Cluster 之 sharding module

一 工作原理

sharding 将数据水平切分到不同的物理节点,通过多台机器分配数据以大数据集和高吞吐量的操作,把计算量分摊到多个机器上同时运算,通过分布式来提高速度。这是MongoDB官方推荐的一种集群模式。

sharding module可以动态扩容、自动平衡数据,具有透明的使用接口。可以实现实例平滑升级,可以动态增加删除节点,响应数据快速增长。可以自动在节点间平衡数据量,避免负载集中在少数节点,而在这期间不影响数据库读写访问。对客户端,可以使用完全相同的驱动,大部分功能可复用,基本不需要更改任何代码。

一个功能完备的sharding module主要由shard,config,OS三个角色组成。其各自的职能如下:

shard:存储数据。

config存储元数据。

os:对客户端透明,提供客户端连接。

二 名词解释

Replica Sets :副本集合

Sharding :分片集合

Primary :主节点

Secondary :副本节点

Arbiter :仲裁调度

Elected :选主

Chunk :数据块

Range :数域,是一个左闭右开的区间

Balance :动态平衡

Split :动态扩容

Shard key :聚簇索引

HeartBeat :活性检测

三 相关逻辑图

  1   Sharding Cluster

 

 

2  Elected Process

 

 

 

 

3   Replica Set

 

4  A Business Scenario

 

 

 

 

四 安装配置步骤及说明

Step 1 确认服务器平台信息【本次实验服务器平台信息为:Intel i5M480CPU,6GBDDR3RAM,CentOS7-1104版本】

Step 2 下载 mongodb-linux-x86_64 源码包并作完整性校验【本次实验版本为 mongodb-linux-x86_64-4.0.6.tgz 】

Step 3 规划服务器进程、目录、端口安排,并提供规划清单【本次实验规划清单如下所示:】

服务器

主机 IP

服务

端口

目录

服务器 一

192.168.0.121

Mongod s 1-1

27020

/data/mongo/s1_1

Mongod s 2-1

27021

/data/mongo/s2_1

Mongond c 1

27018

/data/mongo/config

Mongod os 1

27017

 

服务器 二

192.168.0.185

Mongod s1-2

27020

/data/mongo/s1_2

Mongod s2-2

27021

/data/mongo/s2_1

Mongod c 2

27018

/data/mongo/config

Mongod os 2

27017

 

服务器 三

192.168.0.192

Mongod s1-3

27020

/data/mongo/s1_3

Mongod s2-3

27021

/data/mongo/s2_3

Mongod c 3

27018

/data/mongo/config

Mongod os 3

27017

 

 

Step 4 检查并校准主机时间

date -s "20190224 16:12:00" &&hwclock --systohc

Step 5 在物理服务器上创建已规划的目录,如

mkdir -p /data/mongo/{s1_1,s2_1,config}

Step 6 上传经过完整性校验的mongodb-linux-x86_64 源码包至 /home/loginuser/temprory/

Step 7 将所上传的mongodb-linux-x86_64 源码包解压到 /opt/ ,并将加压后的目录以“ software_architecture_version_user_current-time ” 的形式重命名,如:

tar -xzvPf mongodb-linux-x86_64-4.0.6.tgz -C /opt/mongodb_linux64_406_loginuser_20190224/

Step 8 在三台服务器上分别创建 :Mongod s 1-1、Mongod s 1-2、Mongod s 1-3 ;

      在三台服务器上分别创建  :Mongod s 2-1、Mongod s 2-2、Mongod s 2-3 ;

      在三台服务器上分别创建  :Mongod c 1、Mongod c 2、Mongod c 3 ;

      在三台服务器上分别运行  :Mongod os 1、Mongod os 2、Mongod os 3 。

     Step 9 配置节点

1 示例为 Mongod s 1-1 节点:

systemLog:  

    quiet: false  

    path: /data/mongo/s1_1/logs/mongod.log  

    logAppend: false  

    destination: file  

processManagement:  

    fork: true  

    pidFilePath: /data/mongo/s1_1/mongod.pid  

net:  

    bindIp: 127.0.0.1  

    port: 27020  

    maxIncomingConnections: 65536  

    wireObjectCheck: true  

    ipv6: false   

storage:  

    dbPath: /data/mongo/s1_1/db  

    indexBuildRetry: true  

    journal:  

        enabled: true  

    directoryPerDB: false  

    engine: mmapv1  

    syncPeriodSecs: 60   

    mmapv1:  

        quota:  

            enforced: false  

            maxFilesPerDB: 8  

        smallFiles: true      

        journal:  

            commitIntervalMs: 100  

operationProfiling:  

    slowOpThresholdMs: 100  

    mode: off  

sharding:  

    clusterRole: shardsvr  

    archiveMovedChunks: false  

 

2 示例为 Mongond c 1 :

systemLog:  

    quiet: false  

    path:/data/mongo/config/logs/mongod.log  

    logAppend: false  

    destination: file  

processManagement:  

    fork: true  

    pidFilePath:/data/mongo/config/mongod.pid  

net:  

    bindIp: 127.0.0.1  

    port: 27018  

    maxIncomingConnections: 65536  

    wireObjectCheck: true  

    ipv6: false   

storage:  

    dbPath:/data/mongo/config/db  

    indexBuildRetry: true  

    journal:  

        enabled: true  

    directoryPerDB: false  

    engine: mmapv1  

    syncPeriodSecs: 60   

    mmapv1:  

        quota:  

            enforced: false  

            maxFilesPerDB: 8  

        smallFiles: true      

        journal:  

            commitIntervalMs: 100  

operationProfiling:  

    slowOpThresholdMs: 100  

    mode: off  

sharding:  

    clusterRole: configsvr

 

3 示例为 Mongod os 1 :

systemLog:  

    quiet: false  

    path: /data/mongo/logs/mongod.log  

    logAppend: false  

    destination: file  

processManagement:  

    fork: true  

    pidFilePath: /data/mongo/mongod.pid  

net:  

    bindIp: 127.0.0.1  

    port: 27017  

    maxIncomingConnections: 65536  

    wireObjectCheck: true  

    ipv6: false   

sharding:  

    configDB: 127.0.0.1:27018

    chunkSize: 64  

  Step 10 配置relica set ,以配置shard1用到的RS为例

在服务器一上:mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_1/db --logpath=/data/mongo/s1_1/log/mongo.log --logappend --fork

 

  在服务器二上:mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_2/db --logpath=/data/mongo/s1_2/log/mongo.log --logappend --fork

 

  在服务器三上:mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_3/db --logpath=/data/mongo/s1_3/log/mongo.log --logappend --fork

 

  连接三个节点的任一个初始化RS: 

>use admin

>config = {_id:'s1',members:[{_id:0,host:'fuwuqiyi:27020',priority:1},{_id:1,host:'fuwuqier:27020'},{_id:2,host:'fuwuqisan:27020'}]}

>rs.initiate(config)

>rs.status()

 

  另外对RS的所有节点都执行如下命令确保所有节点都能分担读取的压力

>db.getMongo().setSlaveOk();

Step 11 配置 config服务,以Mongond c 1为例:

mongod  -fork --configsvr --dbpath /data/mongo/config/db --port 27018 --logpath /data/mongo/config/log/mongo.log --fork

Step 12 配置 os 服务,以Mongond os 1为例

mongos -fork --logpath /data/mongo/route/log/mongo.log --configdb fuwuqiyi:27018,fuwuqier:27018,fuwuqisan:27018 --port 27017

Step 13 配置Shard Cluster:

use admin

db.runCommand({addShard:"shard1/fuwuqiyi:27020,fuwuqier:27020,fuwuqisan:27020"})

db.runCommand({addShard:"shard2/fuwuqiyi:27021,fuwuqier:27021,fuwuqisan:27021"})

db.printShardingStatus()

Step 14 激活数据库及集合的分片:

db.runCommand({enablesharding:"testdb"})

db.runCommand({shardcollection:"testdb.collection_test",key:{_id:1}})

Step 15 添加 OS 用户:

use admin

db.addUser("<user>","<password>")

db.addUser("<user>","<password>",true)

Step 16 生成keyfile:

openssl rand -base64 753 >keyfile

Step 17 指定 keyfile 重启服务,以启动 RS1 为例:

mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_1/db --logpath=/data/mongo/s1_1/log/mongo.log --logappend --fork --keyFile  /data/mongo/s1_1/keyfile

 

mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_2/db --logpath=/data/mongo/s1_2/log/mongo.log --logappend --fork --keyFile  /data/mongo/s1_2/keyfile

 

mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_3/db --logpath=/data/mongo/s1_3/log/mongo.log --logappend --fork --keyFile  /data/mongo/s1_3/keyfile

 

mongod  -fork --configsvr --dbpath /data/mongo/config/db --port 27018 --logpath /data/mongo/config/log/mongo.log --fork --keyFile  /data/mongo/config/keyfile

 

mongos -fork --logpath /data/mongo/route/log/mongo.log --configdb ServerA:27018,ServerB:27018,ServerC:27018 --port 27017 --keyFile  /data/mongo/route/keyfile

 

五 应用建议

  在真实业务场景中应用时,建议按需配置Replica Set 的Primary节点、Secondary节点、Arbiter节点、Election规则、OS路由规则和Collection配置。

 

附录:

本次安装配置清单:

序号

项目

规格

1

宿主机

DELL N4010

2

宿主平台

ArchLinux 201901

3

虚拟化组件

Virtual Box 5.2

4

宿主机CPU

Inter i5 M480,2.67G

5

宿主机RAM

DDR3,6GB

6

服务器平台

CentOS7,64,1104

7

MongoDB版本

mongodb-linux-x86_64-4.0.6.tgz

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值