首页 > 数据库 >MongoDB安装部署、集群和分片

MongoDB安装部署、集群和分片

时间:2023-08-07 12:32:00浏览次数:39  
标签:www -- MongoDB 分片 shard 192.168 process 集群 mongodb

MongoDB安装部署、集群和分片

目录

一、     Mongo安装、启动和关闭

1.  MongoDB安装

下载MongoDB压缩包

 解压

tar –zxvf mongodb-linux-x86_64-rhel62-3.2.4.tgz

将解压包拷贝到指定目录

Mv mongodb-linux-x86_64-rhel62-3.2.4  /usr/local/mongodb

在~/.bashrc添加export PATH=/usr/local/mongodb/bin:$PATH

创建数据库目录

Mkdir –p /data/db

2.mongoDb启动

/usr/local/mongodb/bin/mongod

3.MongoDB后台管理shell

/usr/local/mongodb/bin/mongo

4.mongoDB关闭

a.进入后台管理shell

 mongo

 use admin

 db.shutdownServer()

b.或者直接kill -15  <pid> of mongodb

 注意kill -9 可能会导致数据文件损坏

二、          MongoDB基本概念

Database:数据库, collection: 数据库表/集合, field: 数据字段/域,index: 索引,

Table joins: MongoDB不支持表连接, Primary key: 主键,MongoDB自动将_id字段设置为主键。

 

三、          MongoDB 数据类型

下表为MongoDB中常用的几种数据类型。

数据类型

描述

String

字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。

Integer

整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。

Boolean

布尔值。用于存储布尔值(真/假)。

Double

双精度浮点值。用于存储浮点值。

Min/Max keys

将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。

Arrays

用于将数组或列表或多个值存储为一个键。

Timestamp

时间戳。记录文档修改或添加的具体时间。

Object

用于内嵌文档。

Null

用于创建空值。

Symbol

符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。

Date

日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。

Object ID

对象 ID。用于创建文档的 ID。

Binary Data

二进制数据。用于存储二进制数据。

Code

代码类型。用于在文档中存储 JavaScript 代码。

Regular expression

正则表达式类型。

 

四、    MongoDB集群部署

1.服务器分布情况

主机

用途

192.168.0.56

主节点(master)

192.168.0.55

备节点+仲裁点(slave+arbiter)


2.建立数据目录mkdir -p /data/mongodb/{master,slave,arbiter}

3、建立配置文件:

主节点:

vi /etc/mongodb_master.conf

#master.conf

dbpath=/data/mongodb/master

logpath=/data/mongodb/master.log

pidfilepath=/data/mongodb/master.pid

#keyFile=/data/mongodb/mongodb.key

directoryperdb=true

logappend=true

replSet=91db

bind_ip=192.168.0.56

port=27017

#auth=true

oplogSize=100

fork=true

noprealloc=true

#maxConns=4000


备节点:

vi /etc/mongodb_slave.conf

#slave.conf

dbpath=/data/mongodb/slave

logpath=/data/mongodb/slave.log

pidfilepath=/data/mongodb/slave.pid

#keyFile=/data/mongodb/mongodb.key

directoryperdb=true

logappend=true

replSet=91db

bind_ip=192.168.0.55

port=27017

#auth=true

oplogSize=100

fork=true

noprealloc=true

#maxConns=4000


仲裁点:

vi /etc/mongodb_arbiter.conf

#arbiter.conf

dbpath=/data/mongodb/arbiter

logpath=/data/mongodb/arbiter.log

pidfilepath=/data/mongodb/arbiter.pid

#keyFile=/data/mongodb/mongodb.key

directoryperdb=true

logappend=true

replSet=91db

bind_ip=192.168.0.55

port=27019

#auth=true

oplogSize=100

fork=true

noprealloc=true

#maxConns=4000


备注:

keyFile和auth选项要在集群配置好后,并且添加了验证用户后再启用


参数说明:

dbpath:存放数据目录

logpath:日志数据目录

pidfilepath:pid文件

keyFile:节点之间用于验证文件,内容必须保持一致,权限600,仅Replica Set 模式有效

directoryperdb:数据库是否分目录存放

logappend:日志追加方式存放

replSet:Replica Set的名字

bind_ip:mongodb绑定的ip地址

port:端口

auth:是否开启验证

oplogSize:设置oplog的大小(MB)

fork:守护进程运行,创建进程

moprealloc:是否禁用数据文件预分配(往往影响性能)

maxConns:最大连接数,默认2000


4、启动mongodb(可以相对路径也可以绝对路径)

/usr/local/mongodb/bin/mongod -f /etc/mongodb_master.conf

/usr/local/mongodb/bin/mongod -f /etc/mongodb_slave.conf

/usr/local/mongodb/bin/mongod -f /etc/mongodb_arbiter.conf

5、       在主节点上配置

进入mongo shell

/usr/local/mongodb/bin/mongo 192.168.0.56     #因为备节点和仲裁点在同一个机器以端口区分,所以登陆时要加上端口

>use admin

>cfg={ _id:"91db", members:[ {_id:0,host:'192.168.0.56:27017',priority:2},{_id:1,host:'192.168.0.55:27017',priority:1},{_id:2,host:'192.168.0.55:27019',arbiterOnly:true}] };

> rs.initiate(cfg)使cfg配置生效

说明:

cfg名字可选,只要跟mongodb参数不冲突,_id为Replica Set名字,members里面的优先级priority值高的为主节点,对于仲裁点一定要加上arbiterOnly:true,否则主备模式不生效

查看是否生效:

>rs.status()

91db:PRIMARY> rs.status()

{

     "set" : "91db",

     "date" : ISODate("2016-04-12T02:28:15.656Z"),

     "myState" : 1,

     "term" : NumberLong(2),

     "heartbeatIntervalMillis" : NumberLong(2000),

     "members" : [

         {

              "_id" : 0,

              "name" : "192.168.0.56:27017",

              "health" : 1,

              "state" : 1,

              "stateStr" : "PRIMARY",

              "uptime" : 578056,

              "optime" : {

                   "ts" : Timestamp(1460427578, 2),

                   "t" : NumberLong(2)

              },

              "optimeDate" : ISODate("2016-04-12T02:19:38Z"),

              "electionTime" : Timestamp(1460427578, 1),

              "electionDate" : ISODate("2016-04-12T02:19:38Z"),

              "configVersion" : 1,

              "self" : true

         },

         {

              "_id" : 1,

              "name" : "192.168.0.55:27017",

              "health" : 1,

              "state" : 2,

              "stateStr" : "SECONDARY",

              "uptime" : 524,

              "optime" : {

                   "ts" : Timestamp(1460427578, 2),

                   "t" : NumberLong(2)

              },

              "optimeDate" : ISODate("2016-04-12T02:19:38Z"),

              "lastHeartbeat" : ISODate("2016-04-12T02:28:14.433Z"),

              "lastHeartbeatRecv" : ISODate("2016-04-12T02:28:15.374Z"),

              "pingMs" : NumberLong(0),

              "syncingTo" : "192.168.0.56:27017",

              "configVersion" : 1

         },

         {

              "_id" : 2,

              "name" : "192.168.0.55:27019",

              "health" : 0,

              "state" : 8,

              "stateStr" : "(not reachable/healthy)",

              "uptime" : 0,

              "lastHeartbeat" : ISODate("2016-04-12T02:28:14.651Z"),

              "lastHeartbeatRecv" : ISODate("2016-04-06T02:46:24.852Z"),

              "pingMs" : NumberLong(0),

              "lastHeartbeatMessage" : "Connection refused",

              "configVersion" : -1

         }

     ],

     "ok" : 1

}

结果显示每个机器的信息,stateStr字段为主备仲裁节点的标志,下面会显示字样:"ok" : 1

 注意:若有多个slave,再需要建立数据目录、配置文件、指定不同端口,启动它。然后在执行cfg=时把它们加进去即可,再执行rs.initiate(cfg)

 

五、       MongoDB 分片

分片

在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。

当MongoDB存储海量的数据时,一台机器可能不足以存储数据也足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。


为什么使用分片

  • 复制所有的写入操作到主节点
  • 延迟的敏感数据会在主节点查询
  • 单个副本集限制在12个节点
  • 当请求量巨大时会出现内存不足。
  • 本地磁盘不足
  • 垂直扩展价格昂贵

MongoDB分片

下图展示了在MongoDB中使用分片集群结构分布:

上图中主要有如下所述三个主要组件:

  • Shard:

用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个relica set承担,防止主机单点故障

  • Config Server:

mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。

  • Query Routers:

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


分片实例

分片结构端口分布如下:

Shard Server 1:192.168.0.55 27020

Shard Server 2:192.168.0.55 27021

Shard Server 3:192.168.0.56 27022

Shard Server 4:192.168.0.56 27023

Shard Server 5:192.168.0.56 27024


Config Server :192.168.0.55 27100

Route Process:


1.       启动Shard  Server(192.168.0.55)

创建分片数据目录和日志目录

[root@www shard]# mkdir -p /www/mongoDB/shard/s0

[root@www shard]# mkdir -p /www/mongoDB/shard/s1

[root@www shard]# mkdir -p /www/mongoDB/shard/log

启动shard server

[root@www shard]# /usr/local/mongodb/bin/mongod --port 27020 --dbpath=/www/mongoDB/shard/s0 --logpath=/www/mongoDB/shard/log/s0.log --logappend --fork

about to fork child process, waiting until server is ready for connections.

forked process: 31103

child process started successfully, parent exiting

[root@www shard]# /usr/local/mongodb/bin/mongod --port 27021 --dbpath=/www/mongoDB/shard/s1 --logpath=/www/mongoDB/shard/log/s1.log --logappend --fork

about to fork child process, waiting until server is ready for connections.

forked process: 31126

child process started successfully, parent exiting

 

2.       启动Shard  Server(192.168.0.56)

[root@testlv /]# /usr/local/mongodb/bin/mongod --port 27022 --dbpath=/www/mongoDB/shard/s2 --logpath=/www/mongoDB/shard/log/s2.log --logappend --fork

about to fork child process, waiting until server is ready for connections.

forked process: 11665

child process started successfully, parent exiting

[root@testlv /]# /usr/local/mongodb/bin/mongod --port 27023 --dbpath=/www/mongoDB/shard/s3 --logpath=/www/mongoDB/shard/log/s3.log --logappend --fork

about to fork child process, waiting until server is ready for connections.

forked process: 11683

child process started successfully, parent exiting

[root@testlv /]# /usr/local/mongodb/bin/mongod --port 27024 --dbpath=/www/mongoDB/shard/s3 --logpath=/www/mongoDB/shard/log/s3.log --logappend --fork

 

3.启动config Server

[root@www shard]# cd /www/mongoDB/shard/config/

[root@www /]#/usr/local/mongodb/bin/mongod --port 27100 --dbpath=/www/mongoDB/shard/config --logpath=/www/mongoDB/shard/log/config.log --logappend --fork

about to fork child process, waiting until server is ready for connections.

forked process: 31159

child process started successfully, parent exiting

注意:这里我们完全可以像启动普通mongodb服务一样启动,不需要添加—shardsvr和configsvr参数。因为这两个参数的作用就是改变启动端口的,所以我们自行指定了端口就可以。

 

4.启动Route Process

[root@www /]# /usr/local/mongodb/bin/mongos --port 40000 --configdb 192.168.0.55:27100 --fork --logpath=/www/mongoDB/shard/log/route.log --chunkSize 500

2016-04-13T17:26:19.352+0800 W SHARDING [main] Running a sharded cluster with fewer than 3 config servers should only be done for testing purposes and is not recommended for production.

about to fork child process, waiting until server is ready for connections.

forked process: 31181

child process started successfully, parent exiting

mongos启动参数中,chunkSize这一项是用来指定chunk的大小的,单位是MB,默认大小为200MB.

 

5. 配置Sharding

接下来,我们使用MongoDB Shell登录到mongos,添加Shard节点

[root@www /]# /usr/local/mongodb/bin/mongo admin --port 40000

MongoDB shell version: 3.2.4

connecting to: 127.0.0.1:40000/admin

Server has startup warnings:

2016-04-13T17:26:19.358+0800 I CONTROL  [main] ** WARNING: You are running this process as the root user, which is not recommended.

2016-04-13T17:26:19.358+0800 I CONTROL  [main]

mongos> db.runCommand({addshard:"192.168.0.55:27020"})

{ "shardAdded" : "shard0000", "ok" : 1 }

mongos> db.runCommand({addshard:"192.168.0.55:27021"})

{ "shardAdded" : "shard0001", "ok" : 1 }

mongos> db.runCommand({addshard:"192.168.0.56:27022"})

{ "shardAdded" : "shard0002", "ok" : 1 }

mongos> db.runCommand({addshard:"192.168.0.56:27023"})

{ "shardAdded" : "shard0003", "ok" : 1 }

 

mongos> db.runCommand({addshard:"192.168.0.56:27024"})

{ "shardAdded" : "shard0004", "ok" : 1 }

 

 

mongos> db.runCommand({enablesharding:"test"}) #设置分片存储的数据库

{ "ok" : 1 }

mongos> db.runCommand({shardcollection:"test.log",key:{id:1,time:1}})

{ "collectionsharded" : "test.log", "ok" : 1 }

程序代码内无需太大更改,直接按照连接普通的mongo数据库那样,将数据库连接接入接口40000

标签:www,--,MongoDB,分片,shard,192.168,process,集群,mongodb
From: https://blog.51cto.com/u_13360482/6992637

相关文章

  • 比较 Java Enterprise Architecture 中的 MongoDB 和 Couchbase
    MongoDB和Couchbase是两种常用的NoSQL数据库,用于在Java实现的企业架构中存储和管理数据。以下是它们之间的主要差异、比较和权衡。在当今快速发展的企业架构领域,MongoDB和Couchbase已经成为NoSQL数据库中两个重要的竞争者。本文全面探讨了这两个强大解决方案之间的关键差异、比较和......
  • 【我和openGauss的故事】为集群实现VIP
    【我和openGauss的故事】为集群增加VIPlqkittenopenGauss2023-08-0418:01发表于四川openGauss发布以来,原生支持一主多备,RTO<10S,高可用性能大大增强。自openGauss3.0开始,更新了集群管理套件CM,易用性也得到了提高。但对于客户端来说,数据库端的切换,需要手工完成。openGauss增加VI......
  • Mongodb主从复制分片群集
    推荐步骤:1.在centos05-centos07上安装mongodb,配置主从复制和分片群集,centos05到centos07添加分片sh1分片群集2.在centos08-centos10上安装mongodb,配置主从复制和分片群集,centos08到centos10添加到分片sh2分片群集3.在centos01到centos03安装mongodb配置为配置节点4.配置分片功能实......
  • Windows11使用docker desktop安装kafka&zookeeper集群
    docker-compose安装zookeeper集群参考文章:http://t.csdn.cn/TtTYIhttps://blog.csdn.net/u010416101/article/details/122803105?spm=1001.2014.3001.5501准备工作:​ 在开始新建集群之前,新建好文件夹,用来挂载kafka、zookeeper数据,如下:zookeeper文件夹D:\soft\docker\zookee......
  • Zookeeper 集群 + Kafka 集群
    目录一、Zookeeper概述1.Zookeeper定义2.Zookeeper工作机制3.Zookeeper特点4.Zookeeper数据结构5.Zookeeper应用场景6.Zookeeper选举机制(1)第一次启动选举机制(2)非第一次启动选举机制二、部署Zookeeper集群一、Zookeeper概述1.Zookeeper定义Zookeeper是一个开......
  • Kafka集群
    Kafka集群使用消息队列,通过异步处理请求,从而缓解系统的压力。消息队列常应用于异步处理,流量削峰,应用解耦,消息通讯等场景。目录1.Kafka概述2.消息队列好处3.消息队列的模式4.Kafka的特性5.Kafka系统架构6.部署kafka集群7.总结     1.Kafka概述1.消息......
  • Zookeeper集群
    Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。也就是说Zookeeper=文件系统+通知机制。目录一、Zookeeper概述二、Zookeeper工作机制三、Zookeeper特点四、Zookeeper数据结构五、Zookeeper应用场景六、Zookeeper选举机制七、部署Zo......
  • Hadoop完全分布式集群安装
    Hadoop完全分布式集群安装使用版本:hadoop-3.2.0安装VMware看一下这张图,图里面表示是三个节点,左边这一个是主节点,右边的两个是从节点,hadoop集群是支持主从架构的。不同节点上面启动的进程默认是不一样的。下面我们就根据图中的规划实现一个一主两从的hadoop集群安装hado......
  • centos7.9 部署mongodb-4.4.18 分片集群
    准备基本环境名称ip地址cpu内存es监听端口redis-65110.0.2.18c64G9200redis-65210.0.2.28c64G9200redis-65310.0.2.38c64G9200......
  • 拷贝完hadoop集群后如何恢复网络
    流年似飞雪:结论:拷贝集群后不用重新配置网络知识:ip由四位组成,前三位是网络标识最后一个是端口ip你原先用的主机网络标识符是192.168.10,拷过来的集群的网络标识符为192.168.111,就把第三位的10改成111,网络标识得和拷过来的主机一致,都是192.168.111步骤:查看hadoop......