Mongodb集群搭建一篇就够了-复制集模式、分片模式、带认证、不带认证等(带详细步骤说明)

       本文主要介绍mongodb集群的搭建安装过程,对于学习mongodb的同窗颇有帮助,包括分片模式、复制集模式、是否启用认证等,本文选取mongodb-3.6.3版本为例进行详细安装说明,其余版本搭建过程和本过程同样,只需按照本文说明操做便可node

  1. Mongodb分片集群架构

       如上图所示,整个mongodb分片集群由lvs、mongos、mongo-config集群、mongodb复制集组成,其对应的功能以下:linux

Mongos: 提供路由功能mongodb

Mongo-config集群:配置服务器至关于集群的大脑,保存在集群和路由分片的元数据,包括集群有哪些分片、分片的是哪些集合、以及数据块的分布。数据库

Mongodb复制集:用于多个mongod实例之间的数据复制,维护mongod集群的稳定性,实现故障转移,故障切换,故障恢复。服务器

有了该架构,能够很方便的实现增长可用RAM、增长可用磁盘空间、减轻单台服务器的负载、处理单个mongod集群没法承受的吞吐量。架构

如下按照mongod复制集、mongo-config集群、mongos代理顺序进行安装介绍其地址信息分别以下:app

mongos节点: 127.0.0.1:9000,127.0.0.1:9000学习

mongo-cfg集群节点: 127.0.0.1:8000,127.0.0.1:8001,127.0.0.1:8002测试

mongod复制分片1: 127.0.0.1: 27017,127.0.0.1: 27018,127.0.0.1: 27019url

mongod复制分片2: 127.0.0.1: 27027,127.0.0.1: 27028,127.0.0.1: 27029

2. 分片集群(不带认证)安装构建过程

2.1下载mongodb安装包

        到https://www.mongodb.org/dl/linux/x86_64-rhel62       https://www.mongodb.org/dl/linux/x86_64-rhel70下载对应mongodb二进制安装而后解压到安装目录,例如本文指定安装目录为/usr/local/,以下图所示:

       安装完成后,检查mongo二进制文件是否能够正常运行,若是能正常运行,则会有相应提示,以下:

2.2 mongod分片复制集安装过程

2.2.1 不带认证分片集群搭建过程

2.2.1.1建立mongo分片复制集节点相关目录

       假设数据库信息存放到/home/mongodb目录,则根据下面步骤建立相关的子目录同时修改配置文件。

cd  /home/mongodb

mkdir  taxi_business   //表明这个集群是什么业务

cd  taxi_business

mkdir  shardcluster1   //mongo赋值分片1的数据所有存放在这里面若是有多分片,则这里还会建立shardcluster2shardcluster-n根据本身实际须要建立

cd  shardcluster1   

mkdir node1 node2 node3  //该复制集分片有3个节点,相关数据分布存入到node一、node2、node3节点

cd node1

mkdir  data  etc  keys  logs  //建立node1节点的相关配置、数据、日志、key目录

cd node2

mkdir  data  etc  keys  logs

cd node3

mkdir  data  etc  keys  logs

2.2.1.2 修改配置mongod文件

processManagement:

  fork: true

systemLog:

  destination: file

# 指定mongod服务日志文件目录,若是node2则把node1为node2,类推

  path: /home/mongodb/taxi_business/shardcluster1/node1/logs/mongodb.log

  logAppend: true

storage:

  journal:

enabled: true

  # 指定数据存放的路径若是node2则把node1为node2,类推

  dbPath: /home/mongodb/taxi_business/shardcluster1/node1/logs/data/

  directoryPerDB: true

  engine: wiredTiger  #选择存储引擎

  wiredTiger:

    engineConfig:

      cacheSizeGB: 20  #指定存储引擎的cache大小

      directoryForIndexes: true

    collectionConfig:

      blockCompressor: snappy

    indexConfig:

      prefixCompression: true

net:

   port: 27028          #设置mongod监听端口

   maxIncomingConnections: 10000 #设置最大链接数

   bindIpAll: true

operationProfiling:

   slowOpThresholdMs: 100  #设置慢日志时间

   mode: slowOp

sharding:       #是否支持分片,本集群须要支持分片,所以须要加上配置

   clusterRole: shardsvr

   archiveMovedChunks: true

replication:  

   oplogSizeMB: 10240

   replSetName: featdoc_1  #表示这是featdoc集群的第一个分片复制集中的全部node节点这个名字要同样若是是第二个复制集,这里能够取名featdoc_2

#不带认证须要屏蔽一下配置

#security:

#   keyFile: /home/mongodb/taxi_business/shardcluster1/node1/keys/keyfile

#   clusterAuthMode: keyFile

#   authorization: enabled

注意:把该配置文件拷贝到全部mongod集群的etc配置文件中,并根据实际状况修改端口和路径

2.2.1.3 启动mongod服务

       1. 根据前面的配置启动mongod服务

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/shardcluster1/node1/etc/mongodb.cnf –fork

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/shardcluster1/node2/etc/mongodb.cnf –fork

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/shardcluster1/node3/etc/mongodb.cnf –fork

      注意: mongodb服务端使用numactl --interleave=all 能够成倍的提升导入速度

2.2.1.4 构建node1 node2 node3同一个复制集

/usr/local/mongodb-3.6.3/bin/mongo  --port 27017

config = {_id : "featdoc_1",   members : [{_id : 0, host : "127.0.0.1:27017" },{_id : 1, host : "127.0.0.1:27018" },{_id : 2, host : "127.0.0.1:27019"}]}

rs.initiate(config)

Rs.initiate(config)执行后会进行主从选举,选举成功后能够经过rs.status()查看复制集集群状态

rs.status()

       而后经过rs.status()查看集群状态能够看到27017节点被选举为主节点该复制集1集群搭建完成

若是要搭建其余分片复制集2,过程相似,以此内推。 

2.2.2 mongo-cfg集群搭建

2.2.2.1 建立mongo-cfg集群相关节点目录

cd /home/mongodb/taxi_business

mkdir mongocfg_cluster

mkdir node1  node2  node3

cd node1

mkdir data  etc  keys  logs

cd ../node2

mkdir data  etc  keys  logs

cd ../node3

mkdir data  etc  keys  logs

2.2.2.2 添加mongo-cfg配置文件

       以node1为,在etc目录下面建立mongocfg.cnf配置文件内容以下:

processManagement:

  fork: true

systemLog:

  destination: file

  #日志路径,node2 node3节点须要把node1改为node2或者node3

  path: /home/mongodb/taxi_business/mongocfg_cluster/node1/logs/mongodb.log

  logAppend: true

storage:

  journal:

enabled: true

  #数据路径,node2 node3节点须要把node1改为node2或者node3

  dbPath: /home/mongodb/taxi_business/mongocfg_cluster/node1/data/

  directoryPerDB: true

  engine: wiredTiger

  wiredTiger:

    engineConfig:

      cacheSizeGB: 20

      directoryForIndexes: true

    collectionConfig:

      blockCompressor: snappy

    indexConfig:

      prefixCompression: true

net:

   port: 8000  #监听的端口

   maxIncomingConnections: 10000  

   bindIpAll: true

operationProfiling:

   slowOpThresholdMs: 100

   mode: slowOp

sharding:

   clusterRole: configsvr #这里是重点,表示该mongod进程提供mongo-cfg服务

   archiveMovedChunks: true

replication:

   oplogSizeMB: 10240

   replSetName: featdoc  #须要mongos configDB配置中的名字一致

 

#不认证集群须要屏蔽如下配置

#security:

#key路径,node2 node3节点须要把node1改为node2或者node3

#   keyFile: /home/mongodb/taxi_business/mongocfg_cluster/node1/keys/keyfile

#   clusterAuthMode: keyFile

#   authorization: enabled

说明: 

  1. mongo-cfg集群和mongod复制集都是mongod进程提供服务,他们的配置文件几乎彻底一致,惟一的区别是clusterRole角色不同,复制集配置中角色为shardsvr(表示分片)mongo-cfg集群角色为configsvr
  2. mongo-cfg配置中的replSetName名称必须mongos configDB配置名称同样
  3. 同理,node2node3etc下面的配置文件修改过程相似
  4. Mongo-cfg目录etc下面的配置文件最好取名为mongocfg.cnf,这样能够很方便的从进程能知道是mongo分片集群仍是mongo-cfg集群

注意:把该配置文件拷贝到全部mongo-config集群node节点etc配置文件中,并根据实际状况修改端口和路径

2.2.2.3 启动mongo-cfg服务

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/shardcluster1/node1/etc/mongodb.cnf --fork

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/shardcluster1/node2/etc/mongodb.cnf --fork

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/shardcluster1/node3/etc/mongodb.cnf –fork

2.2.2.4 构建不带认证的mongo-cfg集群

       登陆任何一cfg节点,构建集群:

config = {_id : "featdoc",   members : [{_id : 0, host : "127.0.0.1:8000" },{_id : 1, host : "127.0.0.1:8001" },{_id : 2, host : "127.0.0.1:8002"}]}

rs.initiate(config)

2.2.3 mongos不带认证代理搭建

2.2.3.1 建立mongos相关的目录

cd /home/mongodb/taxi_business

mkdir mongos

cd mongos

mkdir mongos_1 mongos_2

cd mongos_1

mkdir etc  keys  logs

cd mongos_2

mkdir etc  keys  logs

cd /home/mongodb/taxi_business/mongos/mongos_1/etc

该目录建立mongos.cnf

2.2.3.2 添加mongos配置文件

#不带认证须要屏蔽这两行配置

#security:

#   keyFile: /home/mongodb/taxi_business/mongos/mongos_1/keys/keyfile

 

systemLog:

  destination: file

  logAppend: true

  path: /home/mongodb/taxi_business/mongos/mongos_1/logs/mongos.log

processManagement:

  fork: true

  pidFilePath: /home/mongodb/taxi_business/mongos/mongos_1/mongos.pid

net:

  port: 9000   #端口

  maxIncomingConnections: 20000

sharding:

  # 这里的featdoc必须和mongs configDB配置名称一致

  # 这里的三个地址为mongo-cfg集群的地址

  configDB: featdoc/127.0.0.1:8000,127.0.0.1:8001,127.0.0.1:8002

2.2.3.3 启动mongos服务

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongos -f /home/mongodb/taxi_business/mongos/mongos_1/etc/mongos.cnf

 

2.2.3.4 mongos代理添加分片信息

sh.addShard("featdoc_1/127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019")

2.2.3 mongos不带认证代理搭建

2.2.3.1 建立mongos相关的目录

cd /home/mongodb/taxi_business

mkdir mongos

cd mongos

mkdir mongos_1 mongos_2

cd mongos_1

mkdir etc  keys  logs

cd mongos_2

mkdir etc  keys  logs

cd /home/mongodb/taxi_business/mongos/mongos_1/etc

该目录建立mongos.cnf

2.2.3.2 添加mongos配置文件

#不带认证须要屏蔽这两行配置

#security:

#   keyFile: /home/mongodb/taxi_business/mongos/mongos_1/keys/keyfile

systemLog:

  destination: file

  logAppend: true

  path: /home/mongodb/taxi_business/mongos/mongos_1/logs/mongos.log

processManagement:

  fork: true

  pidFilePath: /home/mongodb/taxi_business/mongos/mongos_1/mongos.pid

net:

  port: 9000   #端口

  maxIncomingConnections: 20000

sharding:

  # 这里的featdoc必须和mongs configDB配置名称一致

  # 这里的三个地址为mongo-cfg集群的地址

  configDB: featdoc/127.0.0.1:8000,127.0.0.1:8001,127.0.0.1:8002

2.2.3.3 启动mongos服务

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongos -f /home/mongodb/taxi_business/mongos/mongos_1/etc/mongos.cnf

2.2.3.4 mongos代理添加分片信息

sh.addShard("featdoc_1/127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019")

注意: featdoc_1必须分片对应的复制集的replSetName名字一致

若是要再搭建一个mongos,搭建步骤相似

3. 分片集群(带认证)安装构建过程

       接前面的第2章节认证分片集群搭建过程,首先须要搭建好不带认证分片集群(mongos+mongo-cfg集群+mongo复制集集群),参考前面

而后为mongos和mongod集群添加帐号信息添加成功后退出服务,而后修改配置加上认证配置,从新启动服务便可,注意退出服务顺序为:

  1. stop mongos
  2. stop mongod
  3. Stop mongo-cfg

       重启服务的启动顺序为:

  1. start mongo-cfg
  2. start mongod
  3. start mongos

3.1 为不带认证的mongo复制集和mongos添加帐号

       1. 登陆mongo复制集集群主节点,mongo复制集集群添加帐号

/home/yyz/mongodb-test/bin/mongo 127.0.0.1:27017

use admin

db.createUser({user: "root", pwd: "123456", roles: [{role: "root", db: "admin"}]});

db.createUser( { user: "admin", pwd: "123456", roles: [{role: "userAdminAnyDatabase", db: "admin"}]});

2. mongos代理添加帐号

/home/yyz/mongodb-test/bin/mongo 127.0.0.1:9000

use admin

db.createUser({user: "root", pwd: "123456", roles: [{role: "root", db: "admin"}]});

db.createUser( { user: "admin", pwd: "123456", roles: [{role: "userAdminAnyDatabase", db: "admin"}]});

3.2 shutdown关闭mongos、mongod集群、mongo-cfg

       依次登陆mongos、mongod节点、mongo-cfg节点,而后执行:
use admin

db.shutdownServer()

3.3 生成key文件,并拷贝到全部node节点的keys目录

1. 生成key文件,并修改权限

openssl rand -base64 666 > keyfile

chmod 600 keyfile

2.拷贝keyfilemongosmongod集群节点、mongo-cfg集群节点的相应目录中

cp keyfile keys

cp keyfile ../node2/keys/

cp keyfile ../node3/keys/

3.4 修改配置文件,在mongodmongo-cfg配置文件中,使能认证配置

1. mongo-cfgmongod集群配置中,把如下配置加上

security:

#key路径,node2 node3节点须要把node1改为node2或者node3

   keyFile: /home/mongodb/taxi_business/mongocfg_cluster/node1/keys/keyfile

   clusterAuthMode: keyFile

   authorization: enabled

2. 在mongos配置文件中,把如下配置加上:

security:

   keyFile: /home/mongodb/taxi_business/mongos/mongos_1/keys/keyfile

3.4 依次重启mongo-cfg集群、mongo复制集集群、mongos代理

1. 启动mong-cfg集群实例

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/mongocfg_cluster/node1/etc/mongocfg.cnf

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/mongocfg_cluster/node2/etc/mongocfg.cnf

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/mongocfg_cluster/node3/etc/mongocfg.cnf

2.启动mongo复制集集群实例

numactl --interleave=all  /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/shardcluster1/node1/etc/mongodb.cnf

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/shardcluster1/node2/etc/mongodb.cnf

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongod -f /home/mongodb/taxi_business/shardcluster1/node3/etc/mongodb.cnf

3.启动mongos代理实例

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongos -f /home/mongodb/taxi_business/mongos/mongos_1/etc/mongos.cnf

numactl --interleave=all /usr/local/mongodb-3.6.3/bin/mongos -f /home/mongodb/taxi_business/mongos/mongos_2/etc/mongos.cnf

3.5带认证分片集群测试

       经过上面的步骤整个分片集群已经安装完毕,进行简单测试: 

      插入后查找,查找成功,说明认证分片集群搭建完成

相关文章
相关标签/搜索