MongoDB4.4.8搭建分布式集群

本文链接:MongoDB4.0搭建分布式集群_kevinmcy的专栏-CSDN博客_mongodb分布式部署

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

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

Config Server:配置服务器,存储了整个分片群集的配置信息,其中包括chunk信息。     Routers:前端路由,客户端由此接入,且让整个群集看上去像单一数据库,前端应用可以透明使用。

系统环境

Centos7.5、MongoDB4.4.8、关闭防火墙。

三台机器的配置服务(27018)形成复制集,分片1、2、3也在各机器都部署一个实例,它们之间形成复制集,客户端直接连接3个路由服务与之交互,配置服务和分片服务对客户端是透明的。

服务器的安装及配置(3台服务器执行相同操作)

1、下载解压MongoDB

到MongoDB官网下载:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.8.tgz

tar -zxvf mongodb4.4.8.tgz

mv mongodb-linux-x86_64-rhel70-4.4.8  mongodb

解压到/opt/mongodb,设置环境变量:

echo 'export PATH=$PATH:/opt/mongodb/bin'  >> /etc/profile

保存后执行:

source  /etc/profile

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

    日志文件:mkdir -p /opt/mongodb/log
    配置服务日志存放文件: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台服务器执行相同操作)

1、在/opt/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
#置参数为true
#configsvr=true
#允许任意机器连接
#bind_ip=0.0.0.0

storage:
  dbPath: /opt/mongodb/data/config
  journal:
    enabled: true
processManagement:
  fork: true
systemLog:
  destination: file
  logAppend: true
  path: /opt/mongodb/log/config.log
net:
  port: 27018
  bindIp: 0.0.0.0
  maxIncomingConnections: 5000
replication:
##复制集名称
  replSetName: configs
sharding:
##分片角色
  clusterRole: configsvr

2、配置复制集

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

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

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

 mongo --host 172.17.5.132 --port 27018

切换数据库:

use admin

初始化复制集:

rs.initiate({_id:"configs",members:[{_id:0,host:"172.17.5.132:27018"},{_id:1,host:"172.17.5.133:27018"}, {_id:2,host:"172.17.5.166:27018"}]})

其中_id:"configs"的configs是上面config.conf配置文件里的复制集名称,把三台服务器的配置服务组成复制集。

查看状态:

rs.status()

等几十秒左右,执行上面的命令查看状态,三台机器的配置服务就已形成复制集,其中1台为PRIMARY,其他2台为SECONDARY。

分片服务部署(3台服务器执行相同操作)

1、在/opt/mongodb/conf目录创建shard1.conf、shard2.conf、shard3.conf,

(1)内容shard1.conf如下:        

 storage:
  dbPath: /opt/mongodb/data/shard1
  journal:
    enabled: true
  wiredTiger:
    collectionConfig: 
      blockCompressor: zlib
    engineConfig:
      cacheSizeGB: 4
processManagement:
  fork: true
systemLog:
  destination: file
  logAppend: true
  path: /opt/mongodb/data/shard1.log
net:
  port: 27001
  bindIp: 0.0.0.0
  maxIncomingConnections: 5000
replication:
##复制集名称
  replSetName: shard1
sharding:
##分片角色
  clusterRole: shardsvr

(2)内容shard2.conf如下: 

storage:
  dbPath: /opt/mongodb/data/shard2
  journal:
    enabled: true
  wiredTiger:
    collectionConfig: 
      blockCompressor: zlib
    engineConfig:
      cacheSizeGB: 4
processManagement:
  fork: true
systemLog:
  destination: file
  logAppend: true
  path: /opt/mongodb/data/shard2.log
net:
  port: 27002
  bindIp: 0.0.0.0
  maxIncomingConnections: 5000
replication:
##复制集名称
  replSetName: shard2
sharding:
##分片角色
  clusterRole: shardsvr

(3)内容shard3.conf如下:

storage:
  dbPath: /opt/mongodb/data/shard3
  journal:
    enabled: true
  wiredTiger:
    collectionConfig: 
      blockCompressor: zlib
    engineConfig:
      cacheSizeGB: 4
processManagement:
  fork: true
systemLog:
  destination: file
  logAppend: true
  path: /opt/mongodb/data/shard3.log
net:
  port: 27003
  bindIp: 0.0.0.0
  maxIncomingConnections: 5000
replication:
##复制集名称
  replSetName: shard3
sharding:
##分片角色
  clusterRole: shardsvr

端口分别是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

2、将分片配置为复制集

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

(1)连接mongo库:mongo --host 172.17.5.132 --port 27001

切换数据库:use admin

初始化复制集:rs.initiate({_id:"shard1",members:[{_id:0,host:"172.17.5.132:27001"},{_id:1,host:"172.17.5.133:27001"},{_id:2,host:"172.17.5.166:27001"}]})

以上是基于分片1来操作,同理,其他2个分片也要连到各自的端口来执行一遍上述的操作,让3个分片各自形成1主2从的复制集,注意端口及仲裁节点的问题即可,操作完成后3个分片都启动完成,并完成复制集模式。

(2)分片2执行

 连接mongo库:mongo --host 172.17.5.132 --port 27002
 切换数据库:use admin
初始化复制集: rs.initiate({_id:"shard2",members:[{_id:0,host:"172.17.5.132:27002"},{_id:1,host:"172.17.5.133:27002"},{_id:2,host:"172.17.5.166:27002"}]})

(3)分片3执行

连接mongo库mongo --host 172.17.5.132 --port 27003
切换数据库:use admin
初始化复制集:rs.initiate({_id:"shard3",members:[{_id:0,host:"172.17.5.132:27003"},{_id:1,host:"172.17.5.133:27003"},{_id:2,host:"172.17.5.166:27003"}]})

路由服务部署(3台服务器执行相同操作)

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

#logpath=/opt/mongodb/log/mongos.log
#logappend = true
#port = 27017
#fork = true
#configdb = configs/172.17.5.132:27018,172.17.5.133:27018,172.17.5.166:27018
#maxConns=20000
#bind_ip=0.0.0.0

systemLog:
  destination: file
  logAppend: true
  path: /opt/mongodb/log/mongos.log
# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0
  maxIncomingConnections: 20000

# how the process runs
processManagement:
  fork: true
sharding:
  configDB: configs/172.17.5.132:27018,172.17.5.133:27018,172.17.5.166:27018

2、启动mongos

分别在三台服务器启动:

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

3、启动分片功能

连接mongo:

mongo --host 172.17.5.132 --port 27017

切换数据库:

use admin

添加分片,只需在一台机器执行即可:        

     sh.addShard("shard1/172.17.5.132:27001,172.17.5.133:27001,172.17.5.166:27001")
     sh.addShard("shard2/172.17.5.132:27002,172.17.5.133:27002,172.17.5.166:27002")
     sh.addShard("shard3/172.17.5.132:27003,172.17.5.133:27003,172.17.5.166:27003")

查看集群状态:

sh.status()

4、实现分片功能

设置分片chunk大小        

    use config     db.setting.save({"_id":"chunksize","value":1}) # 设置块大小为1M是方便实验,不然需要插入海量数据

5、模拟写入数据        

    use calon     for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"jack"+i})} #模拟往calon数据库的user表写入5万数据

7、启用数据库分片

sh.enableSharding("calon")

8、创建索引,对表进行分片        

    db.user.createIndex({"id":1}) # 以"id"作为索引     sh.shardCollection(calon.user",{"id":1}) # 根据"id"对user表进行分片     sh.status() # 查看分片情况

到此,MongoDB分布式集群就搭建完毕。

下次服务器重启后按照如下顺序启动即可

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

查看进程 ps -ef | grep mongo

修改分片IP 地址

一共五步,

切换到主节点PRIMARY上
mongo --host 172.17.37.14 --port 27018
use admin
cfg = rs.conf()
cfg.members[0].host = "172.17.37.17:27018"
rs.reconfig(cfg)
rs.conf()


首先 采用mongo连接primary,修改配置

cfg = rs.conf()


由以上配置信息可知需要修改的是第一个成员的配置,所以修改命令如下

cfg.members[0].host = "172.17.37.17:27018" 
rs.reconfig(cfg)

修改完成后,查看集群配置

rs.conf()

linux 单线程打开数据个数限制,需要修改,mongodb报错发现  1024 改为65535
vim /etc/security/limits.conf
* soft noproc 65535
* hard noproc 65535
* soft nofile 65535
* hard nofile 65535
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值