0创设分布式分片群集,4集群搭建实战之高可用的分片

By admin in 美高梅手机版4858 on 2019年4月2日

概念:

MongoDB分片是行使两个服务器存款和储蓄数据的主意,以帮助巨大的数量存款和储蓄和对数据开始展览仓库储存

MongoDB分片简述

前言

逻辑图

优势:

1、缩小了各种分片需啊哟处理的乞求数,群集能够提升本人的储存容积和吞吐量

贰、裁减了各类分片存款和储蓄的数额

高数据量和吞吐量的数据库应用会对单机的性质造成较大压力,大的查询量会将单机的
CPU
耗尽,大的数据量对单机的积存压力较大,最后会耗尽系统的内部存款和储蓄器而将压力转换来磁盘
IO 上。

近些年因为工作的因由,在读书应用mongodb数据库,mongodb是最常用的nodql数据库,在数据库排行中曾经上升到了前6。那篇作品介绍怎么样搭建高可用的mongodb(分片+副本)集群,分享出去供大家参考学习,上面话不多说了,来1块看看详细的牵线:

美高梅手机版4858 1

四个第壹组件:

shard:分片服务器,用于存储实际的数据块,由多台服务器组成一个复制集承担,防止主机单点故障

config server:配置服务器,存储整个分片群集的配置信息,包括块信息

routers:前端路由,客户端由此进入,让整个群集看上去像单一数据库

如何陈设MongoDB分片群集!!!

MongoDB
分片是选取多少个服务器存款和储蓄数据的方法,以援助巨大的多寡存款和储蓄和对数据开始展览操作。分片技术能够满足MongoDB 数据量大量升高的须要,当1台 MongoDB
服务器不足以存款和储蓄海量数据或不足以提供可接受的读写吞吐量时,我们就足以由此在多台服务器上划分数据,使得数据库系统能储存和拍卖越来越多的多少。

在搭建集群此前,须求首先领会多少个概念:路由,分片、副本集、配置服务器等。

image.png

一、安装MongoDB叁.二版本包和openssl-devel包
[root@localhost ~]# yum install openssl-devel -y

[root@localhost ~]# mkdir /abc
[root@localhost ~]# mount.cifs //192.168.200.1/orc /abc
Password for root@//192.168.200.1/orc:  
[root@localhost ~]# cd /abc
[root@localhost abc]# ls
mongodb-linux-x86_64-3.2.1.tgz  //MongoDB 3.2版本
[root@localhost abc]# tar zxvf mongodb-linux-x86_64-3.2.1.tgz -C /opt
[root@localhost abc]# cd /opt
[root@localhost opt]# ls
mongodb-linux-x86_64-3.2.1  rh
[root@localhost opt]# mv mongodb-linux-x86_64-3.2.1/ /usr/local/mongodb                 

[root@localhost opt]# cd /usr/local/bin/
[root@localhost bin]# ln -s /usr/local/mongodb/bin/mongo /usr/bin/mongo //建立软连接
[root@localhost bin]# ln -s /usr/local/mongodb/bin/mongod /usr/bin/mongod

[root@localhost bin]# mkdir -p /data/mongodb/mongodb{1,2,3,4}
[root@localhost bin]# mkdir /data/mongodb/logs
[root@localhost bin]# touch /data/mongodb/logs/mongodb{1,2,3,4}.log
[root@localhost bin]# chmod -R 777 /data/mongodb/logs/*.log

[root@localhost bin]# ulimit -n 25000   //打开文件数量
[root@localhost bin]# ulimit -u 25000    //进程并发数

MongoDB分片优势

相关概念

如上海体育场合,MongoDB分片集群首要由叁部分组成:

二、铺排安插服务器

编辑mongodb一.conf配置文件,端口为370一柒,设置configsvr=true,运维配置服务器

[root@localhost bin]# vim mongodb1.con
port=37017
dbpath=/data/mongodb/mongodb1
logpath=/data/mongodb/logs/mongodb1.log
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
configsvr=true                //开启配置服务器

分片为应对高吞吐量与大数据量提供了措施:

先来看一张图:

·shard:mongodb分片,是将数据库中储存的数额开展拆分到差别的服务器,那样能够减轻每台服务器的下压力,同时它协助复制集的花样

三、某节点内部存储器不足,从其余节点分配内部存款和储蓄器
[root@localhost bin]# sysctl -w vm.zone_reclaim_mode=0
vm.zone_reclaim_mode = 0
[root@localhost bin]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@localhost bin]# echo never > /sys/kernel/mm/transparent_hugepage/defrag

[root@localhost bin]# mongod -f mongodb1.conf 
about to fork child process, waiting until server is ready for connections.
forked process: 6895
child process started successfully, parent exiting
  1. 行使分片减弱了种种分片需求处理的伸手数,因而,通过水平增加,群集能够增强本身的储存体积。比如,当插入一条数据时,应用只需求拜访存款和储蓄那条数据的分片。
  2. 运用分片减弱了种种分片村存款和储蓄的数据。

美高梅手机版4858 2

shard: Each shard contains a subset of the sharded data. Each shard
can be deployed as a replica set.

四、陈设分片服务器

编辑mongodb2.conf配置文件,端口为4701七,设置shardsvr=true;编辑mongodb三.conf配置文件,端口为4701八,运行八个分片服务器

[root@localhost bin]# cp -p mongodb1.conf mongodb2.conf 

[root@localhost bin]# vim mongodb2.conf 
port=47017                   //修改端口
dbpath=/data/mongodb/mongodb2
logpath=/data/mongodb/logs/mongodb2.log
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true                //开启分片服务器

[root@localhost bin]# cp -p mongodb2.conf mongodb3.conf
[root@localhost bin]# vim mongodb3.conf 
port=47018
dbpath=/data/mongodb/mongodb3
logpath=/data/mongodb/logs/mongodb3.log
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true

[root@localhost bin]# mongod -f mongodb2.conf 
about to fork child process, waiting until server is ready for connections.
forked process: 7080
child process started successfully, parent exiting
[root@localhost bin]# mongod -f mongodb3.conf 
about to fork child process, waiting until server is ready for connections.
forked process: 7107
child process started successfully, parent exiting

[root@localhost bin]# netstat -antp | grep mongod
tcp        0      0 0.0.0.0:37017           0.0.0.0:*               LISTEN      god         
tcp        0      0 0.0.0.0:47017           0.0.0.0:*               LISTEN      god         
tcp        0      0 0.0.0.0:47018           0.0.0.0:*               LISTEN      god  

分片的优势在于提供类似线性增进的架构,提升多少可用性,提升大型数据库查询服务器的属性。当MongoDB单点数据库服务器存款和储蓄成为瓶颈、单点数据库服务器的性质成为瓶颈或索要配备大型应用以丰裕利用内存时,能够运用分片技术。

从图中得以看到有多个零件:mongos、config server、shard、replica set。

·mongos:为利用和集群之间提供查询路由的接口,数据库集群请求的入口,全体的央求都通过mongos进行协调,在生产条件1般有多mongos作为请求的进口,幸免内部三个挂掉全数的mongodb请求都尚未主意操作。

伍、运营路由服务器

./mongos
–help命令能够查看路由相关参数音信。chunkSize为数据块大小,暗中同意为200M,那里将值设为一

[root@localhost bin]# ./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.200.142:37017 --chunkSize 1

MongoDB分片群集的咬合

mongos,数据库集群请求的入口,全体的呼吁都因此mongos举行协调,不供给在应用程序添加多个路由选用器,mongos本人就是2个呼吁分发主题,它担负把相应的数码请求请求转载到相应的shard服务器上。在生育条件一般有多mongos作为请求的进口,防止内部一个挂掉全部的mongodb请求都并未有主意操作。

mongos: The mongos acts as a query router, providing an interface
between client applications and the sharded cluster.

陆、启用分片服务器
mongos> sh.addShard("192.168.200.142:47017")
{ "shardAdded" : "shard0000", "ok" : 1 }
mongos> sh.addShard("192.168.200.142:47018")
{ "shardAdded" : "shard0001", "ok" : 1 }
mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
    "_id" : 1,
    "minCompatibleVersion" : 5,
    "currentVersion" : 6,
    "clusterId" : ObjectId("5b4f68599dcf397cc4e7c598")
}
  shards:                 //分片服务器开启
    {  "_id" : "shard0000",  "host" : "192.168.200.142:47017" }
    {  "_id" : "shard0001",  "host" : "192.168.200.142:47018" }
  active mongoses:
    "3.2.1" : 1
  balancer:
    Currently enabled:  yes
    Currently running:  no
    Failed balancer rounds in last 5 attempts:  0
    Migration Results for the last 24 hours: 
        No recent migratio

MongoDB分片群集主要有如下五个零件:

config
server,顾名思义为布局服务器,存储全体数据库元音讯(路由、分片)的安排。mongos本人未有物理存款和储蓄分片服务器和数据路由消息,只是缓存在内部存款和储蓄器里,配置服务器则实在存款和储蓄这个数据。mongos第1遍运行也许关闭重启就会从
config server 加载配置音讯,现在要是布置服务器消息变化会布告到独具的
mongos 更新本人的场馆,那样 mongos
就能继承规范路由。在生育条件壹般有七个 config server
配置服务器,因为它存款和储蓄了分片路由的元数据,防止数据丢失!

·config
server:首要囤积壹些元数据和一部分配备消息,mongos第四回运转只怕关闭重启就会从
config server 加载配置信息,以往假诺布置服务器音讯变化会通告到全数的
mongos 更新自身的动静,那样 mongos
就能一而再规范路由。在生育条件壹般有三个 config server
配置服务器,因为它存款和储蓄了分片路由的元数据,防止数据丢失!从mongodb3.肆版本起,它必须作为复制集举行安插

7、分片作用
[root@localhost bin]# mongo
mongos> use school
switched to db school

mongos> for(var i=1;i<=10000;i++)db.users.insert({"id":i,"name":"jack"+i})           
WriteResult({ "nInserted" : 1 })

mongos> show dbs
config  0.031GB
school  0.078GB             

mongos> use school
switched to db school

mongos> show collections
system.indexes
users

mongos> db.users.find().limit(10)  //查看头十行内容
{ "_id" : ObjectId("5b4f6a24ef33d588c0dbc4ae"), "id" : 1, "name" : "jack1" }
{ "_id" : ObjectId("5b4f6a24ef33d588c0dbc4af"), "id" : 2, "name" : "jack2" }
{ "_id" : ObjectId("5b4f6a24ef33d588c0dbc4b0"), "id" : 3, "name" : "jack3" }
{ "_id" : ObjectId("5b4f6a24ef33d588c0dbc4b1"), "id" : 4, "name" : "jack4" }
{ "_id" : ObjectId("5b4f6a24ef33d588c0dbc4b2"), "id" : 5, "name" : "jack5" }
{ "_id" : ObjectId("5b4f6a24ef33d588c0dbc4b3"), "id" : 6, "name" : "jack6" }
{ "_id" : ObjectId("5b4f6a24ef33d588c0dbc4b4"), "id" : 7, "name" : "jack7" }
{ "_id" : ObjectId("5b4f6a24ef33d588c0dbc4b5"), "id" : 8, "name" : "jack8" }
{ "_id" : ObjectId("5b4f6a24ef33d588c0dbc4b6"), "id" : 9, "name" : "jack9" }
{ "_id" : ObjectId("5b4f6a24ef33d588c0dbc4b7"), "id" : 10, "name" : "jack10" }

mongos> sh.status()             //查看数据库分片信息
--- Sharding Status --- 
  sharding version: {
    "_id" : 1,
    "minCompatibleVersion" : 5,
    "currentVersion" : 6,
    "clusterId" : ObjectId("5b4f68599dcf397cc4e7c598")
}
  shards:
    {  "_id" : "shard0000",  "host" : "192.168.200.142:47017" }
    {  "_id" : "shard0001",  "host" : "192.168.200.142:47018" }
  active mongoses:
    "3.2.1" : 1
  balancer:
    Currently enabled:  yes
    Currently running:  no
    Failed balancer rounds in last 5 attempts:  0
    Migration Results for the last 24 hours: 
        No recent migrations
  databases:
    {  "_id" : "school",  "primary" : "shard0000",  "partitioned" : false }

mongos> sh.enableSharding("school") //启用数据库分片
{ "ok" : 1 }

mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
    "_id" : 1,
    "minCompatibleVersion" : 5,
    "currentVersion" : 6,
    "clusterId" : ObjectId("5b4f68599dcf397cc4e7c598")
}
  shards:
    {  "_id" : "shard0000",  "host" : "192.168.200.142:47017" }
    {  "_id" : "shard0001",  "host" : "192.168.200.142:47018" }
  active mongoses:
    "3.2.1" : 1
  balancer:
    Currently enabled:  yes
    Currently running:  no
    Failed balancer rounds in last 5 attempts:  0
    Migration Results for the last 24 hours: 
        No recent migrations
  databases:
    {  "_id" : "school",  "primary" : "shard0000",  "partitioned" : true }

mongos> db.users.createIndex({"id":1})  //对users表创建索引
{
    "raw" : {
        "192.168.200.142:47017" : {
            "createdCollectionAutomatically" : false,
            "numIndexesBefore" : 1,
            "numIndexesAfter" : 2,
            "ok" : 1
        }
    },
    "ok" : 1
}

mongos> sh.shardCollection("school.users",{"id":1})//表分片
{ "collectionsharded" : "school.users", "ok" : 1 }

mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
    "_id" : 1,
    "minCompatibleVersion" : 5,
    "currentVersion" : 6,
    "clusterId" : ObjectId("5b4f68599dcf397cc4e7c598")
}
  shards:
    {  "_id" : "shard0000",  "host" : "192.168.200.142:47017" }
    {  "_id" : "shard0001",  "host" : "192.168.200.142:47018" }
  active mongoses:
    "3.2.1" : 1
  balancer:
    Currently enabled:  yes
    Currently running:  no
    Failed balancer rounds in last 5 attempts:  0
    Migration Results for the last 24 hours: 
        No recent migrations
  databases:
    {  "_id" : "school",  "primary" : "shard0000",  "partitioned" : true }
        school.users
            shard key: { "id" : 1 }
            unique: false
            balancing: true
            chunks:
                shard0000   3
            { "id" : { "$minKey" : 1 } } -->> { "id" : 4682 } on : shard0000 Timestamp(1, 0) 
            { "id" : 4682 } -->> { "id" : 9364 } on : shard0000 Timestamp(1, 1) 
            { "id" : 9364 } -->> { "id" : { "$maxKey" : 1 } } on : shard0000 Timestamp(1, 2)        //分片成功
  • Shard:分片服务器,用于存款和储蓄实际的数据块,实际生产条件中一个shard
    server 剧中人物能够由几台服务器组成一个Peplica Set
    承担,幸免主机单点故障。
  • Config
    Server:配置服务器,存款和储蓄了全数分片群集的布署新闻,当中囊括chunk新闻。
  • Routers:前端路由,客户端因而接入,且让全数群集看上去像单1数据库,前端采纳能够透明使用。

shard,分片(sharding)是指将数据库拆分,将其疏散在差异的机械上的进度。将数据分散到不一致的机器上,不必要作用强大的服务器就足以储存越多的数据和处理更大的载荷。基本思想正是将集合切成小块,这几个块分散到若干片里,各样片只负责总数据的一有个别,最终通过3个均衡器来对各种分片进行平衡(数据迁移)。

config servers: Config servers store metadata and configuration
settings for the cluster. As of MongoDB 3.4, config servers must be
deployed as a replica set (CSRS).

系统环境

replica
set,汉语翻译副本集,其实便是shard的备份,防止shard挂掉之后数据丢失。复制提供了数额的冗余备份,并在四个服务器上囤积数据副本,进步了数据的可用性,
并可以保证数据的安全性。

3.一 服务器规划

10.202.80.149 10.202.80.150 10.202.80.151
mongos mongos mongos
config server config server config server
shard1(主节点) shard1(从节点) shard1(仲裁节点)
shard2(仲裁节点) shard2(主节点) shard2(从节点)
shard3(从节点) shard3(仲裁节点) shard3(主节点)

注:关于那八个节点介绍,能够参照上边复制集配置文书档案

行使相关端口,一定要记得在防火墙中开放对应端口:

mongos:20000
config server:21000
shard1:27001
shard2:27002
shard3:27003

系统:CentOS 7.4 x86_64

仲裁者(Arbiter),是复制集中的二个MongoDB实例,它并不保留数据。仲裁节点使用最小的财富并且不供给硬件配备,不能够将Arbiter铺排在同多少个数目集节点中,能够配备在此外应用服务器或然监视服务器中,也可配置在单独的虚拟机中。为了保障复制集中有单数的投票成员(包罗primary),供给添加仲裁节点做为投票,不然primary不可能运营时不会自动切换primary。

3.2 MongoDB安装

参照0创设分布式分片群集,4集群搭建实战之高可用的分片。MongoDB自学记录【一】(略)

软件版本:四.0

简易询问之后,我们得以如此计算一下,应用请求mongos来操作mongodb的增加和删除改查,配置服务器存款和储蓄数据库元新闻,并且和mongos做联合,数据最后存入在shard(分片)上,为了防备数据丢失同步在副本集中储存了一份,仲裁在多少存款和储蓄到分片的时候决定期存款款和储蓄到哪些节点。

三.三 创设目录存放文件

在搭建集群环境此前,先创制对应目录应用于存放数据和日志,conf文件夹用于存相关陈设文件,由于mongos未有多少,所以只创设日志目录

sudo mkdir -p /usr/local/mongodb/conf  
sudo mkdir -p /usr/local/mongodb/mongos/log  
sudo mkdir -p /usr/local/mongodb/config/data
sudo mkdir -p /usr/local/mongodb/config/log
sudo mkdir -p /usr/local/mongodb/shard1/data
sudo mkdir -p /usr/local/mongodb/shard1/log
sudo mkdir -p /usr/local/mongodb/shard2/data
sudo mkdir -p /usr/local/mongodb/shard2/log
sudo mkdir -p /usr/local/mongodb/shard3/data
sudo mkdir -p /usr/local/mongodb/shard3/log

关闭防火墙及selinux

条件准备

3.4 配置config server

第3添加配置文件config.conf

sudo vim /usr/local/mongodb/conf/config.conf

#日志路径配置以及是否叠加
systemLog:
    path:/usr/local/mongodb/config/log/configsrv.log
        logAppend:true

processManagement:
        fork:true
        pidFilePath:/usr/local/mongodb/config/log/configsrv.pid
#配置ip,port以及最大连接数
net:
    #bindIp: 127.0.0.1
    port: 21000
        maxIncomingConnections:200
#配置存放数据的地方
storage:
        dbPath:/usr/local/mongodb/config/data
#配置复制集
replication:
        replSetName:GridSum
#配置分片集群中的角色:configsvr,shardsvr
sharding:
        clusterRole:configsvr

在三台服务器都设置好后,分别运转3台服务器的config server

sudo mongod -f /usr/local/mongodb/conf/config.conf

都运营今后,任意选择1台服务器,进行以下操作:

mongo 10.202.80.149:21000

config={
    _id:"GridSum",
    members:[
        {_id:0,host:"10.202.80.149:21000"},
        {_id:1,host:"10.202.80.150:21000"},
        {_id:2,host:"10.202.80.151:21000"}
    ]
}

#初始化副本集
rs.initiate(config)

其中,_id要与事先计划文件中的replSet保持一致

IP地址 路由服务器(Routers) 配置服务器(Config Server) Shard1 Shard2 Shard3
192.168.125.119 27017 27018 27001 27002 27003
192.168.125.120 27017 27018 27001 27002 27003
192.168.125.121 27017 27018 27001 27002 27003
  • 系统系统 centos陆.5
  • 美高梅手机版4858,三台服务器:1玖二.16八.0.75/850%陆
  • 安装包: mongodb-linux-x86_64-3.4.6.tgz

三.5 分别配备分片副本集(三台机械)

布局分片群集

服务器规划

3.5.1 配置shard1

首先创立布局文件shard一.conf:

sudo vim /usr/local/mongodb/conf/shard1.conf

#日志路径配置以及是否叠加
systemLog:
    path:/usr/local/mongodb/shard1/log/shard1.log
        logAppend:true
processManagement:
        fork:true
        pidFilePath:/usr/local/mongodb/shard1/log/shard1.pid
#配置ip,port以及最大连接数
net:
    #bindIp: 127.0.0.1
    port: 27001
        maxIncomingConnections:200
#配置web监控
        http:
              RESTInterfaceEnabled:true
#配置存放数据的地方
storage:
        dbPath:/usr/local/mongodb/shard1/data
#配置复制集
replication:
        replSetName:shard1
#配置分片集群中的角色:configsvr,shardsvr
sharding:
        clusterRole:shardsvr

布局好后,分别运转叁台服务器的shard壹服务,任意选1台服务器(注意:不要选择即将要设置为决策节点的服务器)

sudo mongod -f /usr/local/mongodb/conf/shard1.conf

mongo 10.202.80.149:27001

config = {
    _id : "shard1",
     members : [
         {_id : 0, host : "10.202.80.149:27001" },
         {_id : 1, host : "10.202.80.150:27001" },
        {_id : 2, host : "10.202.80.151:27001" , arbiterOnly: true }
    ]
 }

rs.initiate(config)

同样,_id要和shard一.conf中的replSet保持一致

三台物理服务器安装及安顿

服务器75 服务器84 服务器86
mongos mongos mongos
config server config server config server
shard server1 主节点 shard server1 副节点 shard server1 仲裁
shard server2 仲裁 shard server2 主节点 shard server2 副节点
shard server3 副节点 shard server3 仲裁 shard server3 主节点

3.5.2 配置shard2

sudo vim /usr/local/mongodb/conf/shard2.conf

#日志路径配置以及是否叠加
systemLog:
    path:/usr/local/mongodb/shard2/log/shard2.log
        logAppend:true
processManagement:
        fork:true
        pidFilePath:/usr/local/mongodb/shard2/log/shard2.pid
#配置ip,port以及最大连接数
net:
    #bindIp: 127.0.0.1
    port: 27002
        maxIncomingConnections:200
#配置web监控
        http:
              RESTInterfaceEnabled:true
#配置存放数据的地方
storage:
        dbPath:/usr/local/mongodb/shard2/data
#配置复制集
replication:
        replSetName:shard2
#配置分片集群中的角色:configsvr,shardsvr
sharding:
        clusterRole:shardsvr

布署好后,分别运维叁台服务器的shard2服务,任意选壹台服务器(注意:不要选拔即将要安装为决策节点的服务器)

sudo mongod -f /usr/local/mongodb/conf/shard2.conf

mongo 10.202.80.150:27002

config = {
    _id : "shard2",
     members : [
         {_id : 0, host : "10.202.80.149:27002" , arbiterOnly: true},
         {_id : 1, host : "10.202.80.150:27002" },
        {_id : 2, host : "10.202.80.151:27002"  }
    ]
 }

rs.initiate(config)

一、下载解压MongoDB

端口分配:

3.5.3 配置shard3

sudo vim /usr/local/mongodb/conf/shard3.conf


#日志路径配置以及是否叠加
systemLog:
    path:/usr/local/mongodb/shard3/log/shard3.log
        logAppend:true
processManagement:
        fork:true
        pidFilePath:/usr/local/mongodb/shard3/log/shard3.pid
#配置ip,port以及最大连接数
net:
    #bindIp: 127.0.0.1
    port: 27003
        maxIncomingConnections:200
#配置web监控
        http:
              RESTInterfaceEnabled:true
#配置存放数据的地方
storage:
        dbPath:/usr/local/mongodb/shard3/data
#配置复制集
replication:
        replSetName:shard3
#配置分片集群中的角色:configsvr,shardsvr
sharding:
        clusterRole:shardsvr

布署好后,分别运营叁台服务器的shard3劳动,任意选1台服务器(注意:不要挑选即将要设置为决策节点的服务器)

sudo mongod -f /usr/local/mongodb/conf/shard3.conf

mongo 10.202.80.151:27003

config = {
    _id : "shard3",
     members : [
         {_id : 0, host : "10.202.80.149:27003" },
         {_id : 1, host : "10.202.80.150:27003" , arbiterOnly: true},
         {_id : 2, host : "10.202.80.151:27003" }
     ]
 }


rs.initiate(config)
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz
tar zxvf mongodb-linux-x86_64-4.0.0.tgz -C /opt
mv /opt/mongodb-linux-x86_64-4.0.0/ /usr/local/mongodb
mongos:20000
config:21000
shard1:27001
shard2:27002
shard3:27003

3.6 配置mongos

先是创造布局文件mongos.conf

sudo vim /usr/local/mongodb/conf/mongos.conf

#日志路径配置以及是否叠加
systemLog:
    path:/usr/local/mongodb/mongos/log/mongos.log
        logAppend:true
processManagement:
        fork:true
        pidFilePath:/usr/local/mongodb/mongos/log/mongos.pid
#配置ip,port以及最大连接数
net:
    #bindIp: 127.0.0.1
    port: 20000
        maxIncomingConnections:200
#监听的配置服务器,只能有1个或者3个 GridSum为配置服务器的副本集名字
sharding:
        configDB:GridSum/10.202.80.149:21000,10.202.80.150:21000,10.202.80.151:21000

配置之后,三台服务器运维mongos:

sudo mongos -f /usr/local/mongodb/conf/mongos.conf

2、创设路由、配置、分片服务器的多少存放目录及日志管理

集群搭建

三.柒 运转分片

脚下搭建了mongodb配置服务器、路由服务器,种种分片服务器,不过应用程序连接到mongos路由服务器并无法选择分片机制,还索要在先后里设置分片配置,让分片生效。

登六任意壹台mongos

mongo 10.202.80.149:20000

mongos>sh.addShard("shard1/10.202.80.149:27001,10.202.80.150:27001,10.202.80.151:27001")
mongos>sh.addShard("shard2/10.202.80.149:27002,10.202.80.150:27002,10.202.80.151:27002")
mongos>sh.addShard("shard3/10.202.80.149:27003,10.202.80.150:27003,10.202.80.151:27003")

下一场用sh.status()查看意况,结果如下:

是因为决策节点唯有选举权,并无法进行数据的操作,所以每一种分片中唯有八个节点

路由服务器不存款和储蓄数据,因而不须求创建数量存款和储蓄目录,日志文件制造完毕还需给予权力。

1、安装mongodb

3.8测试

先是制定数据库能够分片,以及如何分片

#只有admin才有操作权限
use admin
#指定testdb分片生效
db.runCommand( { enablesharding :"testdb"});
mkdir -p /data/mongodb/config
mkdir -p /data/mongodb/shard{1,2,3}
mkdir -p /data/mongodb/logs
touch /data/mongodb/logs/shard{1,2,3}.log
touch /data/mongodb/logs/mongos.log
touch /data/mongodb/logs/config.log
chmod 777 /data/mongodb/logs/*.log
#解压
tar -xzvf mongodb-linux-x86_64-3.4.6.tgz -C /usr/local/
#改名
mv mongodb-linux-x86_64-3.4.6 mongodb

1.使用限量的分片情势:

#指定数据库里需要分片的集合和片键,1表示自增长
db.runCommand( { shardcollection : "testdb.userid",key : {id: 1} } )

然后插入数据

use testdb
for(var i=0;i<=1000;i++) db.userid.save({id:i})

用db.userid.stats()查看结果如下:

美高梅手机版4858 3

image.png

能够看看分片很不平均,再经过sh.status()查看,能够见见分片规则不均衡:

美高梅手机版4858 4

image.png

叁、成立管理用户,修改目录权限

分别在每台机器建立conf、mongos、config、shard一、shard贰、shard三两个目录,因为mongos不存款和储蓄数据,只要求树立日志文件目录即可。

2.采用hashed分片

#指定数据库里需要分片的集合和片键,1表示自增长
db.runCommand( { shardcollection : "testdb.username",key : {id: "hashed"} } )

接下来插入数据

use testdb
for(var i=0;i<=1000;i++) db.username.save({id:i})

用db.username.stats()查看结果如下:

美高梅手机版4858 5

image.png

能够阅览分片比较均匀,再通过sh.status()查看,能够见到分片规则:

美高梅手机版4858 6

image.png

由此建议利用hashed来展开分片

参报考博士博士客:http://www.cnblogs.com/ityouknow/p/7344005.html

useradd -M -s /sbin/nologin mongo
chown -R mongo:mongo /usr/local/mongodb
chown -R mongo:mongo /data/mongodb
mkdir -p /usr/local/mongodb/conf
mkdir -p /usr/local/mongodb/mongos/log
mkdir -p /usr/local/mongodb/config/data
mkdir -p /usr/local/mongodb/config/log
mkdir -p /usr/local/mongodb/shard1/data
mkdir -p /usr/local/mongodb/shard1/log
mkdir -p /usr/local/mongodb/shard2/data
mkdir -p /usr/local/mongodb/shard2/log
mkdir -p /usr/local/mongodb/shard3/data
mkdir -p /usr/local/mongodb/shard3/log

四、添加环境变量,便于使用

安插环境变量

echo 'export MONGODB_HOME=/usr/local/mongodb' >> /etc/profile
echo 'export PATH=$PATH:$MONGODB_HOME/bin' >> /etc/profile
source /etc/profile
vim /etc/profile
# 内容
export MONGODB_HOME=/usr/local/mongodb
export PATH=$MONGODB_HOME/bin:$PATH
# 使立即生效
source /etc/profile

伍、系统参数优化

二、config server配置服务器

ulimit -n 25000  //可以打开的最大文件数量
ulimit -u 25000  //用户最大可用的进程数
sysctl -w vm.zone_reclaim_mode=0 //内存不足时,从其他节点分配内存
# 从CentOS7开始,MongoDB会建议关闭系统的THP特性,否则可能会导致性能下降
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag //*注意*这些优化都是临时的,重启失效

mongodb三.肆今后需求安插服务器也开创副本集,不然集群搭建不成事。

安插安顿服务器(叁台物理服务器配置步骤一样)

拉长安排文件

一、写入配置文件,大家得以用scp命令把安顿文件发到其余两台物理服务器

vi /usr/local/mongodb/conf/config.conf

## 配置文件内容
pidfilepath = /usr/local/mongodb/config/log/configsrv.pid
dbpath = /usr/local/mongodb/config/data
logpath = /usr/local/mongodb/config/log/congigsrv.log
logappend = true

bind_ip = 0.0.0.0
port = 21000
fork = true

#declare this is a config db of a cluster;
configsvr = true

#副本集名称
replSet=configs

#设置最大连接数
maxConns=20000
# vim config.conf
dbpath=/data/mongodb/config //数据文件存放位置
logpath=/data/logs/config.log  //日志文件
port=27018  //端口号
logappend=true
fork=true
maxConns=5000 
storageEngine=mmapv1
replSet=configs //复制集名称
configsvr=true  //设置参数为true
# mongod -f config.conf //启动config实例
scp /usr/local/mongodb/bin/config.conf root@192.168.125.120:/usr/local/mongodb/bin
scp /usr/local/mongodb/bin/config.conf root@192.168.125.121:/usr/local/mongodb/bin

起步三台服务器的config server

二、配置复制集(任意1台物理机上操作即可)

mongod -f /usr/local/mongodb/conf/config.conf
mongo --port 27018
config={_id:"configs",members:[{_id:0,host:"192.168.125.119:27018"},{_id:1,host:"192.168.125.120:27018"},{_id:2,host:"192.168.125.121:27018"}]}  //创建复制集
rs.initiate(config)        //初始化复制集

报到任意1台配置服务器,初叶化配置副本集

配备分片服务器

#连接
mongo --port 21000
#config变量
config = {
... _id : "configs",
... members : [
...  {_id : 0, host : "192.168.0.75:21000" },
...  {_id : 1, host : "192.168.0.84:21000" },
...  {_id : 2, host : "192.168.0.86:21000" }
... ]
... }

#初始化副本集
rs.initiate(config)

编纂shard{1,二,三}.conf配置文件,端口分别为2700一,2700贰,2700三,设置shardsvr=true,运维分片服务器

其中,”_id” : “configs”应与布署文件中配置的 replicaction.replSetName
1致,”members” 中的 “host” 为八个节点的 ip 和 port

# vim shard1.conf
dbpath=/data/mongodb/shard1
logpath=/data/logs/shard1.log
port=27001
logappend=true
fork=true
maxConns=5000 
storageEngine=mmapv1
shardsvr=true
# mongod -f shard1.conf
# 与另外两台配置实例配置文件相同,仅端口、数据文件存放及日志文件要改,只需配置完成后启动即可

3、配置分片副本集(三台机械)

将shard一配置为复制集(那里须要注意的是,预先被设为仲裁节点的服务器上创制复制集会报错。)

设置第多少个分片副本集

mongo --port 27001
use admin
config={_id:"shard1",members:[{_id:0,host:"192.168.125.119:27001"},{_id:1,host:"192.168.125.120:27001"},{_id:2,host:"192.168.125.121:27001"}]}  //创建复制集
rs.initiate(config)        //初始化复制集

布局文件

其他两台分片服务器shard2、shard三装置同样,注意端口及裁决节点的难题即可

vi /usr/local/mongodb/conf/shard1.conf

#配置文件内容
#——————————————–
pidfilepath = /usr/local/mongodb/shard1/log/shard1.pid
dbpath = /usr/local/mongodb/shard1/data
logpath = /usr/local/mongodb/shard1/log/shard1.log
logappend = true

bind_ip = 0.0.0.0
port = 27001
fork = true

#打开web监控
httpinterface=true
rest=true

#副本集名称
replSet=shard1

#declare this is a shard db of a cluster;
shardsvr = true

#设置最大连接数
maxConns=20000

布局路由服务器

最先三台服务器的shard壹 server

创办布局文件,将安插文件发送到其余物理服务器。注意,路由服务器不供给仓库储存数据目录

mongod -f /usr/local/mongodb/conf/shard1.conf
# vim mongos.conf
logpath=/data/mongodb/logs/mongos.log
logappend = true
port = 27017
fork = true
configdb = configs/192.168.125.119:27018,192.168.125.120:27018,192.168.125.121:27018
maxConns=20000

登陆任意1台服务器,发轫化副本集

启动mongos实例

mongo --port 27001
#使用admin数据库
use admin
#定义副本集配置,第三个节点的 "arbiterOnly":true 代表其为仲裁节点。
config = {
... _id : "shard1",
... members : [
...  {_id : 0, host : "192.168.0.75:27001" },
...  {_id : 1, host : "192.168.0.84:27001" },
...  {_id : 2, host : "192.168.0.86:27001” , arbiterOnly: true }
... ]
... }
#初始化副本集配置
rs.initiate(config);
mongs -f /usr/local/mongodb/bin/mongos.conf
# 注意,这边启动mongos实例用的是mongos命令

设置第三个分片副本集

运维分片效用

配置文件

mongo //默认进入27017端口
mongos> use admin
mongos> sh.addShard("shard1/192.168.125.119:27001,192.168.125.120:27001,172.16.10.29:27001")
mongos> sh.addShard("shard2/192.168.125.119:27002,192.168.125.120:27002,172.16.10.29:27002")
mongos> sh.status()      //查看群集状态
# 此处为添加两台分片服务器,后续添加的也会均匀分配分片数据
vi /usr/local/mongodb/conf/shard2.conf

#配置文件内容
#——————————————–
pidfilepath = /usr/local/mongodb/shard2/log/shard2.pid
dbpath = /usr/local/mongodb/shard2/data
logpath = /usr/local/mongodb/shard2/log/shard2.log
logappend = true

bind_ip = 0.0.0.0
port = 27002
fork = true

#打开web监控
httpinterface=true
rest=true

#副本集名称
replSet=shard2

#declare this is a shard db of a cluster;
shardsvr = true

#设置最大连接数
maxConns=20000

兑现分片功用

运行3台服务器的shard贰 server

安装分片chunk大小

mongod -f /usr/local/mongodb/conf/shard2.conf
mongos> use config
mongos> db.settings.save({"_id":"chunksize","value":1})
# 设置块大小为1M是方便实验,不然需要插入海量数据

登陆任意1台服务器,初阶化副本集

模仿写入数据

mongo --port 27002
#使用admin数据库
use admin
#定义副本集配置
config = {
... _id : "shard2",
... members : [
...  {_id : 0, host : "192.168.0.75:27002" , arbiterOnly: true },
...  {_id : 1, host : "192.168.0.84:27002" },
...  {_id : 2, host : "192.168.0.86:27002" }
... ]
... }

#初始化副本集配置
rs.initiate(config);
mongos> use school
mongos> show collections
mongos> for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"jack"+i})}
# 在school库的user表中循环写入五万条数据

安装第多少个分片副本集

运转数据库分片

安插文件

mongos>sh.enableSharding("school")
# 我们可以自定义需要分片的库或表
vi /usr/local/mongodb/conf/shard3.conf


#配置文件内容
#——————————————–
pidfilepath = /usr/local/mongodb/shard3/log/shard3.pid
dbpath = /usr/local/mongodb/shard3/data
logpath = /usr/local/mongodb/shard3/log/shard3.log
logappend = true

bind_ip = 0.0.0.0
port = 27003
fork = true

#打开web监控
httpinterface=true
rest=true

#副本集名称
replSet=shard3

#declare this is a shard db of a cluster;
shardsvr = true

#设置最大连接数
maxConns=20000

为school库中的user集合创造索引,然后对表进行分片

运维三台服务器的shard叁 server

mongos> db.user.createIndex({"id":1})
# 以"id"作为索引
mongos> sh.shardCollection("school.user",{"id":1})
# 根据"id"对user表进行分片
mongos> sh.status()
# 查看分片情况
mongos> sh.help()
# 查看分片相关的命令
mongod -f /usr/local/mongodb/conf/shard3.conf

以上便是本文的全体内容,希望对我们的上学抱有帮助,也愿意大家多多援助脚本之家。

登6任意1台服务器,伊始化副本集

您可能感兴趣的稿子:

  • MongoDB分片键的选用和案例实例详解
  • MongoDB分片详解
  • mongodb分片技术_重力节点Java大学整理
  • mongodb3.四集群搭建实战之高可用的分片+副本集
  • 深刻理解MongoDB分片的田管
  • MongoDB的分片集群基本配备教程
  • MongoDB分片测试
  • Mongodb
    删除添加分片与非分片表维护
  • MongoDB入门教程之平分秋色技术详解
mongo --port 27003
#使用admin数据库
use admin
#定义副本集配置
config = {
... _id : "shard3",
...  members : [
...   {_id : 0, host : "192.168.0.75:27003" },
...   {_id : 1, host : "192.168.0.84:27003" , arbiterOnly: true},
...   {_id : 2, host : "192.168.0.86:27003" }
...  ]
... }

#初始化副本集配置
rs.initiate(config);

四、配置路由劳务器 mongos

先运维配置服务器和分片服务器,后开发银行路由实例运维路由实例:(叁台机械)

vi /usr/local/mongodb/conf/mongos.conf

#内容
pidfilepath = /usr/local/mongodb/mongos/log/mongos.pid
logpath = /usr/local/mongodb/mongos/log/mongos.log
logappend = true

bind_ip = 0.0.0.0
port = 20000
fork = true

#监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
configdb = configs/192.168.0.75:21000,192.168.0.84:21000,192.168.0.86:21000

#设置最大连接数
maxConns=20000

起步三台服务器的mongos server

mongod -f /usr/local/mongodb/conf/mongos.conf

5、启用分片

此时此刻搭建了mongodb配置服务器、路由服务器,各类分片服务器,不过应用程序连接到mongos路由服务器并不可能选取分片机制,还要求在先后里设置分片配置,让分片生效。

登六任意一台mongos

mongo --port 20000
#使用admin数据库
user admin
#串联路由服务器与分配副本集
sh.addShard("shard1/192.168.0.75:27001,192.168.0.84:27001,192.168.0.86:27001")
sh.addShard("shard2/192.168.0.75:27002,192.168.0.84:27002,192.168.0.86:27002")
sh.addShard("shard3/192.168.0.75:27003,192.168.0.84:27003,192.168.0.86:27003")
#查看集群状态
sh.status()

6、测试

此时此刻布署服务、路由劳务、分片服务、副本集服务都曾经串联起来了,但大家的目标是指望插入数据,数据可见活动分片。连接在mongos上,准备让内定的数据库、内定的集结分片生效。

#指定testdb分片生效
db.runCommand( { enablesharding :"testdb"});
#指定数据库里需要分片的集合和片键
db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } )

咱俩设置testdb的 table1 表需求分片,依照 id 自动分片到 shard1,shard二,shard三 上边去。要这样设置是因为不是兼备mongodb 的数据库和表
都亟待分片!

测试分片配置结果

mongo 127.0.0.1:20000
#使用testdb
use testdb;
#插入测试数据
for (var i = 1; i <= 100000; i++)
db.table1.save({id:i,"test1":"testval1"});
#查看分片情况如下,部分无关信息省掉了
db.table1.stats();

{
  "sharded" : true,
  "ns" : "testdb.table1",
  "count" : 100000,
  "numExtents" : 13,
  "size" : 5600000,
  "storageSize" : 22372352,
  "totalIndexSize" : 6213760,
  "indexSizes" : {
    "_id_" : 3335808,
    "id_1" : 2877952
  },
  "avgObjSize" : 56,
  "nindexes" : 2,
  "nchunks" : 3,
  "shards" : {
    "shard1" : {
      "ns" : "testdb.table1",
      "count" : 42183,
      "size" : 0,
      ...
      "ok" : 1
    },
    "shard2" : {
      "ns" : "testdb.table1",
      "count" : 38937,
      "size" : 2180472,
      ...
      "ok" : 1
    },
    "shard3" : {
      "ns" : "testdb.table1",
      "count" :18880,
      "size" : 3419528,
      ...
      "ok" : 1
    }
  },
  "ok" : 1
}

能够看出数据分到二个分片,各自分片数量为: shard1 “count” : 421八3,shard2“count” : 38937,shard3 “count” : 18880。已经成功了!

最终运转

启航关闭

mongodb的起步顺序是,先运营配置服务器,在起步分片,最后运营mongos.

mongod -f /usr/local/mongodb/conf/config.conf
mongod -f /usr/local/mongodb/conf/shard1.conf
mongod -f /usr/local/mongodb/conf/shard2.conf
mongod -f /usr/local/mongodb/conf/shard3.conf
mongod -f /usr/local/mongodb/conf/mongos.conf

关闭时,直接killall杀掉全部进程

killall mongod
killall mongos

总结

如上正是那篇文章的全体内容了,希望本文的始末对大家的学习也许工作能推动一定的帮助,假诺有问号大家能够留言交换,感激大家对剧本之家的支持。

参考:

  • 搭建高可用mongodb集群(四)——
    分片
  • MongoDB三.4副本集分片集群搭建
  • Mongodb高可用集群(四)——分片

您可能感兴趣的小说:

  • mongodb分片技术_引力节点Java高校整理
  • 深远驾驭MongoDB分片的管制
  • MongoDB的分片集群基本配备教程
  • MongoDB分片测试
  • Mongodb
    删除添加分片与非分片表维护
  • MongoDB入门教程之平分秋色技术详解
  • MongoDB分片详解

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有