首页 > 数据库 >mongodb分片部署(未启用密码认证)

mongodb分片部署(未启用密码认证)

时间:2023-07-19 09:22:21浏览次数:42  
标签:mongo 启用 mongodb 192.168 分片 services home root

环境:

OS:Centos 7
mongodb:4.4.22

拓扑结构:
s1分片(副本集):
192.168.104:29001 分片服务器1
192.168.106:29001 分片服务器2
192.168.107:29001 分片服务器3

s2分片(副本集):
192.168.104:29002 分片服务器1
192.168.106:29002 分片服务器2
192.168.107:29002 分片服务器3

s3分片(副本集):
192.168.104:29003 分片服务器1
192.168.106:29003 分片服务器2
192.168.107:29003 分片服务器3


配置服务器副本集
192.168.104:28001
192.168.106:28002
192.168.107:28002


路由服务器
192.168.108:30001

 

说明:

3.4以上的版本,分片服务器和配置服务器都需要配置成副本集的模式

 

####################部署s1副本集分片服务器######################
1.下载相应的版本
https://www.mongodb.com/download-center/community
我这里下载的是mongodb-linux-x86_64-rhel70-4.4.22.tgz

2.在每个分片服务器上创建如下目录
每个s1分片服务器上都执行
[root@test services]# mkdir -p /usr/local/services
[root@test services]# mkdir -p /home/middle/mongodb_s1/data
[root@test services]# mkdir -p /home/middle/mongodb_s1/log
[root@test services]# mkdir -p /home/middle/mongodb_s1/key
[root@test services]# mkdir -p /home/middle/mongodb_s1/conf
[root@test services]# mkdir -p /home/middle/mongodb_s1/run


3.在每个分片服务器上进行安装
每个s1分片服务器上都执行
[root@test soft]# tar -xvf mongodb-linux-x86_64-rhel70-4.4.22.tgz
[root@test soft]# mv mongodb-linux-x86_64-rhel70-4.4.22 /usr/local/services/mongodb_s1

 

4.产生秘钥验证(先不做) 
在其中一个机器上创建秘钥文件,我这里是在192.168.1.104:29001
[root@test key]# cd /home/middle/mongodb_s1/key
[root@test key]# openssl rand -base64 741 >>keyfile
[root@test key]# chmod 700 keyfile

加个keyfile拷贝到另外的两个节点相应的目录
scp keyfile [email protected]:/home/middle/mongodb/key/
scp keyfile [email protected]:/home/middle/mongodb/key/

 

5.生成日志文件(配置文件中指定了,提前创建)
每个s1分片服务器上都执行
[root@test key]#echo>/home/middle/mongodb_s1/log/mongodb.log

6.创建配置文件 mongo.cnf
每个s1分片服务器上都执行,需要修改相应的ip和端口
vi /home/middle/mongodb_s1/conf/mongo.cnf

port=29001
fork=true
dbpath=/home/middle/mongodb_s1/data
logpath=/home/middle/mongodb_s1/log/mongodb.log
pidfilepath=/home/middle/mongodb_s1/run/29001.pid
bind_ip=192.168.1.104,127.0.0.1
logappend=true
shardsvr=true
replSet=s1
oplogSize=16384
logRotate=reopen
##keyFile=/home/middle/mongodb_s1/key/keyfile
##auth=true

7.启动s1的每个分片服务器
每个s1分片服务器上都执行
/usr/local/services/mongodb_s1/bin/mongod -f /home/middle/mongodb_s1/conf/mongo.cnf


8.初始化s1
在s1副本集的其中一台机器上执行即可
[root@localhost bin]# /usr/local/services/mongodb_s1/bin/mongo 192.168.1.104:29001
use admin
config={_id:'s1',members:[{_id:0,host:'192.168.1.104:29001'},{_id:1,host:'192.168.1.106:29001'},{_id:2,host:'192.168.1.107:29001'}]}
rs.initiate(config)

9.查看副本集s1集群状态
rs.status()
rs.conf()


另外两个副本集也安装上面的步骤进行操作,将s1替换成s2,s3,同时注意ip和端口的修改.
登录查看集群情况
/usr/local/services/mongodb_s2/bin/mongo 192.168.1.104:29002
/usr/local/services/mongodb_s3/bin/mongo 192.168.1.104:29003

 

####################部署配置服务器######################
1.在每个分片服务器上创建如下目录
每个副本集服务器上都执行
[root@test services]# mkdir -p /usr/local/services
[root@test services]# mkdir -p /home/middle/mongo_config/data
[root@test services]# mkdir -p /home/middle/mongo_config/log
[root@test services]# mkdir -p /home/middle/mongo_config/key
[root@test services]# mkdir -p /home/middle/mongo_config/conf
[root@test services]# mkdir -p /home/middle/mongo_config/run

 

2.解压安装
每个副本集服务器上都执行
[root@test soft]# tar -xvf mongodb-linux-x86_64-rhel70-4.4.22.tgz
[root@test soft]# mv mongodb-linux-x86_64-rhel70-4.4.22 /usr/local/services/mongo_config

 

3.生成日志文件
每个副本集服务器上都执行
[root@localhost soft]#echo>/home/middle/mongo_config/log/mongodb.log

 

4.创建配置文件
在conf目录下创建配置文件,每个副本集服务器上都执行,注意修改ip地址
vi /home/middle/mongo_config/conf/mongo.cnf
[root@localhost conf]# more mongo.cnf
port=28001
fork=true
dbpath=/home/middle/mongo_config/data
logpath=/home/middle/mongo_config/log/mongodb.log
pidfilepath=/home/middle/mongo_config/run/28001.pid
bind_ip=192.168.1.104,127.0.0.1
logappend=true
oplogSize=16384
logRotate=reopen
configsvr=true
replSet=configrs


5.启动
每个副本集服务器上都执行
/usr/local/services/mongo_config/bin/mongod -f /home/middle/mongo_config/conf/mongo.cnf

 

6.初始化副本集
在副本集的其中一台机器上执行即可
[root@localhost bin]# /usr/local/services/mongodb_s1/bin/mongo 192.168.1.104:28001
use admin
config={_id:'configrs',members:[{_id:0,host:'192.168.1.104:28001'},{_id:1,host:'192.168.1.106:28001'},{_id:2,host:'192.168.1.107:28001'}]}
rs.initiate(config)

 

7.查看副本集状态
rs.status()
rs.conf()

 

####################部署路由服务器######################
1.在每个分片服务器上创建如下目录
每个分片服务器上都执行
[root@test services]# mkdir -p /usr/local/services
[root@test services]# mkdir -p /home/middle/mongo_router/data
[root@test services]# mkdir -p /home/middle/mongo_router/log
[root@test services]# mkdir -p /home/middle/mongo_router/key
[root@test services]# mkdir -p /home/middle/mongo_router/conf
[root@test services]# mkdir -p /home/middle/mongo_router/run

 

2.解压安装
[root@test soft]# tar -xvf mongodb-linux-x86_64-rhel70-4.4.22.tgz
[root@test soft]# mv mongodb-linux-x86_64-rhel70-4.4.22 /usr/local/services/mongo_router

 

3.生成日志文件
[root@localhost soft]#echo>/home/middle/mongo_router/log/mongodb.log

 

4.创建配置文件
在conf目录下创建配置文件,mongo.cnf
vi /home/middle/mongo_router/conf/mongo.cnf
[root@localhost conf]# more mongo.cnf
port=30001
fork=true
logpath=/home/middle/mongo_router/log/mongodb.log
pidfilepath=/home/middle/mongo_router/run/30001.pid
configdb=configrs/192.168.1.104:28001,192.168.1.106:28001,192.168.1.107:28001
bind_ip=192.168.1.108,127.0.0.1

 

5.启动
/usr/local/services/mongo_router/bin/mongos -f /home/middle/mongo_router/conf/mongo.cnf

注意这里是使用mongos命令启动,而不是mongod

 

################添加分片服务器#############################
1.添加分片服务器
目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。
登录路由服务器(192.168.1.108)
[root@pxc01 bin]# /usr/local/services/mongo_router/bin/mongo 192.168.1.108:30001
mongos> use admin
switched to db admin
#串联路由服务器与分配副本集
sh.addShard("s1/192.168.1.104:29001,192.168.1.106:29001,192.168.1.107:29001")
sh.addShard("s2/192.168.1.104:29002,192.168.1.106:29002,192.168.1.107:29002")
sh.addShard("s3/192.168.1.104:29003,192.168.1.106:29003,192.168.1.107:29003")
#查看集群状态
sh.status()

mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("64b64e0705045e89b67bb0f6")
  }
  shards:
        {  "_id" : "s1",  "host" : "s1/192.168.1.104:29001,192.168.1.106:29001,192.168.1.107:29001",  "state" : 1 }
        {  "_id" : "s2",  "host" : "s2/192.168.1.104:29002,192.168.1.106:29002,192.168.1.107:29002",  "state" : 1 }
        {  "_id" : "s3",  "host" : "s3/192.168.1.104:29003,192.168.1.106:29003,192.168.1.107:29003",  "state" : 1 }
  active mongoses:
        "4.4.22" : 1
  autosplit:
        Currently enabled: yes
  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" : "config",  "primary" : "config",  "partitioned" : true }
        

3.设置分片存储的数据库,这个时候hxl数据库是不存在的
[root@pxc01 bin]# /usr/local/services/mongo_router/bin/mongo 192.168.1.108:30001
mongos> use admin
mongos> db.runCommand({enablesharding:"hxl" })
{
        "ok" : 1,
        "operationTime" : Timestamp(1689673064, 4),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1689673064, 5),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

mongos> db.runCommand({"shardcollection":"hxl.person","key":{"_id":"hashed"}})
{
        "collectionsharded" : "hxl.person",
        "collectionUUID" : UUID("753575b3-2974-4223-b007-5bbf6f4efd88"),
        "ok" : 1,
        "operationTime" : Timestamp(1689673137, 14),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1689673137, 14),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

 

在路由服务器上执行该命令后,后台会自动在每个分片服务器上创建hxl数据库和person集合

 

写入数据
mongos> use hxl
switched to db hxl
mongos> for (var i=0;i<100000;i++){db.person.insert({"name":"hxl"+i,"age":i})}

 

4.数据核查
登录路由服务器
[root@pxc01 bin]# /usr/local/services/mongo_router/bin/mongo 192.168.1.108:30001
mongos> use hxl
switched to db hxl
mongos> db.person.find().count()
100000

分别登录s1,s2,s3 三个分片查看数据分布情况
s1:
[root@localhost soft]# /usr/local/services/mongodb_s1/bin/mongo 192.168.1.104:29001
s1:SECONDARY> use hxl
s1:PRIMARY> db.person.find().count()
33197

s2:
[root@localhost soft]#/usr/local/services/mongodb_s1/bin/mongo 192.168.1.104:29002
s2:SECONDARY> rs.secondaryOk()
s2:SECONDARY> use hxl
s2:SECONDARY> db.person.find().count()
33500

s3:
[root@localhost soft]#/usr/local/services/mongodb_s1/bin/mongo 192.168.1.104:29003
s3:SECONDARY> rs.secondaryOk()
s3:SECONDARY> use hxl
s3:SECONDARY> db.person.find().count()
33303

33197 + 33500 + 33303=100000,可以看到数据均匀的分布到3个分片了,但是发现写入速度很慢.

 

##############################日常维护#####################################
1.启动顺序:
配置服务器-->分片服务器器-->路由服务器
启动配置服务器
192.168.1.104
192.168.1.106
192.168.1.107
/usr/local/services/mongo_config/bin/mongod -f /home/middle/mongo_config/conf/mongo.cnf


启动分片s1
192.168.1.104
192.168.1.106
192.168.1.107
/usr/local/services/mongodb_s1/bin/mongod -f /home/middle/mongodb_s1/conf/mongo.cnf

启动分片s2
192.168.1.104
192.168.1.106
192.168.1.107
/usr/local/services/mongodb_s2/bin/mongod -f /home/middle/mongodb_s2/conf/mongo.cnf

启动分片s3
192.168.1.104
192.168.1.106
192.168.1.107
/usr/local/services/mongodb_s3/bin/mongod -f /home/middle/mongodb_s3/conf/mongo.cnf

启动路由服务器
192.168.1.108
/usr/local/services/mongo_router/bin/mongos -f /home/middle/mongo_router/conf/mongo.cnf

 

标签:mongo,启用,mongodb,192.168,分片,services,home,root
From: https://www.cnblogs.com/hxlasky/p/17564682.html

相关文章

  • ASP.NET 6 使用工作单元操作 MongoDB
    大家好,我是Edison。最近工作中需要用到MongoDB的事务操作,因此参考了一些资料封装了一个小的组件,提供基础的CRUDRepository基类和UnitOfWork工作单元模式。今天,就来简单介绍一下这个小组件。关于MongoDB的事务MongoDB在4.2版本开始全面支持了多文档事务,至今已过了四年了,虽然......
  • python连接mongodb副本集(PSA)
    环境:Python:3.6.5mongodb:4.4.22192.168.1.104:29001主节点192.168.1.107:29001从节点192.168.1.106:29001仲裁节点 #!/usr/bin/envpython#coding=utf-8importos,json,urllib,datetime,shutil,random,uuidfromrandomimportchoiceimportpymysqlimporttrace......
  • mongodb一主一从添加一个从节点
    环境:OS:Centos7mongodb:4.4.22拓扑结构:192.168.1.107primary192.168.1.104secondary新增节点:192.168.1.108secondary 1.新增的节点安装mongodb目录结构保持与现有的一致,同时将密钥拷贝到新节点的相应目录下mongo.cnf配置文件可以拷贝主库的过来,然后修改相应的ip即可......
  • 【Azure API Management】实现在API Management服务中使用MI(管理标识 Managed Identi
    问题描述在Azure的同一数据中心,APIManagement访问启用了防火墙的StorageAccount,并且把APIM的公网IP地址设置在白名单。但访问依旧是403原因是:存储帐户部署在同一区域中的服务使用专用的AzureIP地址进行通信。因此,不能基于特定的Azure服务的公共出站IP地址范围来限制......
  • java mongodb查询忽略大小写
    实现JavaMongoDB查询忽略大小写概述在使用Java与MongoDB进行数据交互时,有时我们需要执行不区分大小写的查询操作。本文将指导你如何在Java中实现忽略大小写的MongoDB查询。前提条件在开始之前,确保已经安装并配置好了Java开发环境和MongoDB数据库。流程下面是实现JavaMongoD......
  • vue实现浏览器端大文件分片上传
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......
  • 前端实现浏览器端大文件分片上传
    ​ javaweb上传文件上传文件的jsp中的部分上传文件同样可以使用form表单向后端发请求,也可以使用ajax向后端发请求    1.通过form表单向后端发送请求         <formid="postForm"action="${pageContext.request.contextPath}/UploadServlet"method="post"e......
  • python操作mongodb实现读写分离
    读写分离默认情况下,MongoClient实例将查询发送到副本集的主要成员。要使用副节点作为查询,以实现读写分离,我们必须更改读取首选项:读取首选项在模块pymongo.ReadPreference下:PRIMARY:从主节点中读取(默认)PRIMARY_PREFERRED:优先从主节点读取,如果不可用则从副节点读取、SECOND......
  • MongoDB副本集的搭建和管理(高可用)
    使得mongodb具备自动故障转移、高可用、读写分离。副本集默认情况下读写都只是通过主库,副节点只是备份数据而已,但是可以设置副节点允许读操作,这样就可以做成读写分离。使用pymongo的时候也可以设置,还可以动态设置库、集合的readPreference。详细的后面再写。。。如果主节点不可......
  • Mongodb从入门到熟悉
    RDB:数据库→表(列)→行Mongo:数据库→集合→文档SQL和Mongodb的关系映射表(里面还有一些增删改查等等操作与SQL的对应的语句):https://www.mongodb.com/docs/manual/reference/sql-comparison/mongodb数据格式是以BSON(二进制json)存储的。https://www.mongodb.......