Mongo 分片搭建

转载请注明出处:https://blog.csdn.net/qq_36358787/article/details/85063483

环境说明

  1. mongo版本:4.0.4
  2. 系统环境: centos 7 64位
  3. 安装目录 /data/mongodb
  4. 服务器信息
    mongo-shard1: 10.100.101.202
    mongo-shard2: 10.100.101.218
    mongo-shard3: 10.100.101.217
mongo-shard1mongo-shard2mongo-shard3
mongosmongosmongos
Config ServerConfig ServerConfig Server
Shard1 主节点Shard1 副节点Shard1 仲裁节点
Shard2 仲裁节点Shard2 主节点Shard2 副节点
Shard3 副节点Shard3 仲裁节点Shard3 主节点

端口:

mongos: 27050
mongo_config: 27010
mongo_shard1: 27101
mongo_shard2: 27102
mongo_shard3: 27103

创建所需目录 - 三台机器都需要

mkdir -p /data/mongodb/config
mkdir -p /data/mongodb/data
mkdir -p /data/mongodb/data/config/data
mkdir -p /data/mongodb/data/config/log
mkdir -p /data/mongodb/data/mongos/log
mkdir -p /data/mongodb/data/shard1/log
mkdir -p /data/mongodb/data/shard1/data
mkdir -p /data/mongodb/data/shard2/log
mkdir -p /data/mongodb/data/shard2/data
mkdir -p /data/mongodb/data/shard3/log
mkdir -p /data/mongodb/data/shard3/data

配置文件

mongo_config.conf

systemLog:
 destination: file
###日志存储位置
 path: /data/mongodb/data/config/log/mongodb.log
 logAppend: true
storage:
##journal配置
 journal:
  enabled: true
##数据文件存储位置
 dbPath: /data/mongodb/data/config/data
##是否一个库一个文件夹
 directoryPerDB: true
##数据引擎
 engine: wiredTiger
##WT引擎配置
 wiredTiger:
  engineConfig:
##是否将索引也按数据库名单独存储
   directoryForIndexes: true
##表压缩配置
  collectionConfig:
   blockCompressor: zlib
##索引配置
  indexConfig:
   prefixCompression: true
processManagement:
 fork: true
##端口配置
net:
 port: 27010
 bindIp: 0.0.0.0
##权限
security:
  authorization: enabled
  clusterAuthMode: keyFile
  keyFile: /data/mongodb/config/mongodb-keyfile
##分片设置
sharding:
  clusterRole: configsvr
replication:
  replSetName: lashouwan

mongos.conf

systemLog:
 destination: file
###日志存储位置
 path: /data/mongodb/data/mongos/log/mongodb.log
 logAppend: true
net:
 port: 27050
 bindIp: 0.0.0.0
##权限
security:
  clusterAuthMode: keyFile
  keyFile: /data/mongodb/config/mongodb-keyfile
sharding:
 configDB: lashouwan/10.100.101.202:27010,10.100.101.218:27010,10.100.101.217:27010
processManagement:
 fork: true

mongo_shard1.conf

systemLog:
 destination: file
###日志存储位置
 path: /data/mongodb/data/shard1/log/mongodb.log
 logAppend: true
storage:
##journal配置
 journal:
  enabled: true
##数据文件存储位置
 dbPath: /data/mongodb/data/shard1/data
##是否一个库一个文件夹
 directoryPerDB: true
##数据引擎
 engine: wiredTiger
##WT引擎配置
 wiredTiger:
  engineConfig:
##是否将索引也按数据库名单独存储
   directoryForIndexes: true
##表压缩配置
  collectionConfig:
   blockCompressor: zlib
##索引配置
  indexConfig:
   prefixCompression: true
processManagement:
 fork: true
##端口配置
net:
 port: 27101
 bindIp: 0.0.0.0
##权限
security:
  authorization: enabled
  clusterAuthMode: keyFile
  keyFile: /data/mongodb/config/mongodb-keyfile
sharding:
  clusterRole: shardsvr
replication:
  replSetName: shard1

mongo_shard2.conf

systemLog:
 destination: file
###日志存储位置
 path: /data/mongodb/data/shard2/log/mongodb.log
 logAppend: true
storage:
##journal配置
 journal:
  enabled: true
##数据文件存储位置
 dbPath: /data/mongodb/data/shard2/data
##是否一个库一个文件夹
 directoryPerDB: true
##数据引擎
 engine: wiredTiger
##WT引擎配置
 wiredTiger:
  engineConfig:
##是否将索引也按数据库名单独存储
   directoryForIndexes: true
##表压缩配置
  collectionConfig:
   blockCompressor: zlib
##索引配置
  indexConfig:
   prefixCompression: true
processManagement:
 fork: true
##端口配置
net:
 port: 27102
 bindIp: 0.0.0.0
##权限
security:
  authorization: enabled
  clusterAuthMode: keyFile
  keyFile: /data/mongodb/config/mongodb-keyfile
sharding:
  clusterRole: shardsvr
replication:
  replSetName: shard2

mongo_shard3.conf

systemLog:
 destination: file
###日志存储位置
 path: /data/mongodb/data/shard3/log/mongodb.log
 logAppend: true
storage:
##journal配置
 journal:
  enabled: true
##数据文件存储位置
 dbPath: /data/mongodb/data/shard3/data
##是否一个库一个文件夹
 directoryPerDB: true
##数据引擎
 engine: wiredTiger
##WT引擎配置
 wiredTiger:
  engineConfig:
##是否将索引也按数据库名单独存储
   directoryForIndexes: true
##表压缩配置
  collectionConfig:
   blockCompressor: zlib
##索引配置
  indexConfig:
   prefixCompression: true
processManagement:
 fork: true
##端口配置
net:
 port: 27103
 bindIp: 0.0.0.0
##权限
security:
  authorization: enabled
  clusterAuthMode: keyFile
  keyFile: /data/mongodb/config/mongodb-keyfile
sharding:
  clusterRole: shardsvr
replication:
  replSetName: shard3

以上配置文件 放到三台服务器 /data/mongodb/conf 根据自己需求自行修改

操作 mongo-shard1: 10.100.101.202

生成 keyfile

cd /data/mongodb/config
openssl rand -base64 741 > mongodb-keyfile
chmod 400 mongodb-keyfile

将mongodb-keyfile 拷贝到其他两台服务器上

/data/mongodb/config 应该有一下几个文件

mongodb-keyfile
mongos.conf
mongo_config.conf
mongo_shard1.conf
mongo_shard2.conf
mongo_shard3.conf

---------------开始设置分片

配置config

启动

在三台机器上都需要执行

mongod -f /data/mongodb/config/mongo_config.conf

如果没有mongod命令 执行下边

ln -s /data/mongodb/bin/* /usr/bin/

进入mongo-shard1: 10.100.101.202 mongo config

mongo 127.0.0.1:27010

进入之后在mongo里执行(这个只在一台服务器上执行就可以)

config = {
   _id : "lashouwan",
     members : [
         {_id : 0, host : "10.100.101.202:27010" },
         {_id : 1, host : "10.100.101.218:27010" },
         {_id : 2, host : "10.100.101.217:27010" }
     ]
 }
rs.initiate(config);

创建账号密码

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

启动并配置副本集

启动 - 三台服务器上分别启动shard1 shard2 shard3

mongod -f /data/mongodb/config/mongo_shard1.conf
mongod -f /data/mongodb/config/mongo_shard2.conf
mongod -f /data/mongodb/config/mongo_shard3.conf

配置 shard1

进入 mongo-shard1: 10.100.101.202 的 MongoShard1

mongo 127.0.0.1:27101

config={
    _id:"shard1",
    members:[
        {_id:0,host:"10.100.101.202:27101"},
        {_id:1,host:"10.100.101.218:27101"},
        {_id:2,host:"10.100.101.217:27101",arbiterOnly:true}
    ]
}
rs.initiate(config)

设置密码 - 不退出mongo执行

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

配置shard2

进入 mongo-shard2: 10.100.101.218 的 MongoShard2

mongo 127.0.0.1:27102

config={
    _id:"shard2",
    members:[
        {_id:0,host:"10.100.101.202:27102",arbiterOnly:true},
        {_id:1,host:"10.100.101.218:27102"},
        {_id:2,host:"10.100.101.217:27102"}
    ]
}
rs.initiate(config)

设置密码 - 不退出mongo执行

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

配置shard3

进入 mongo-shard3: 10.100.101.217 的 MongoShard2

mongo 127.0.0.1:27103

config={
    _id:"shard3",
    members:[
        {_id:0,host:"10.100.101.202:27103"},
        {_id:1,host:"10.100.101.218:27103",arbiterOnly:true},
        {_id:2,host:"10.100.101.217:27103"}
    ]
}
rs.initiate(config)

设置密码 - 不退出mongo执行

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

配置mongos

启动 三台都需要启动

mongos -f /data/mongodb/config/mongos.conf

进入某一台 mongos

mongo 127.0.0.1:27050

执行

use admin
db.runCommand({addshard:"shard1/10.100.101.202:27101,10.100.101.218:27101,10.100.101.217:27101",name:"shard1"})
db.runCommand({addshard:"shard2/10.100.101.202:27102,10.100.101.218:27102,10.100.101.217:27102",name:"shard2"})
db.runCommand({addshard:"shard3/10.100.101.202:27103,10.100.101.218:27103,10.100.101.217:27103",name:"shard3"})
db.runCommand( { enablesharding : "shard1" } );
db.runCommand( { enablesharding : "shard2" } );
db.runCommand( { enablesharding : "shard3" } );

设置密码 - 不退出mongo执行

use admin
db.createUser({
	user: "root",
	pwd: "root",
	roles: [{
		role: "root",
		db: "admin"
	}]
})
到此就已经搭建完成

测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB的分片集群是一种将数据分布在多个服务器上的方式,以实现高可用性和横向扩展性。下面是一些关于MongoDB分片集群的常见问题和答案: 1. 什么是MongoDB的分片集群? MongoDB的分片集群是一种将数据分割成多个片段并分布在多个服务器上的方法。每个片段(shard)都是一个独立的MongoDB实例,可以存储一部分数据。通过将数据分散在多个片段上,可以实现数据的水平扩展和负载均衡。 2. 如何设置MongoDB的分片集群? 要设置MongoDB的分片集群,需要遵循以下步骤: a. 部署和配置一个或多个Config Server。Config Server用于存储集群的元数据,如分片键范围和配置信息。 b. 部署和配置一个或多个mongos路由器。mongos路由器是客户端与分片集群交互的入口点。 c. 部署和配置一个或多个shard服务器。每个shard服务器都是一个独立的MongoDB实例,可以存储一部分数据。 d. 启动mongos路由器,并将其连接到Config Server和shard服务器。 e. 创分片集合,并根据需要启用分片。 3. 分片键是什么?如何选择分片键? 分片键是用来决定将数据分配到哪个片段的字段。选择合适的分片键非常重要,以确保数据在分片集群中均匀分布。通常,一个好的分片键应该满足以下条件: a. 数据均匀分布:分片键的值应该能够在不同的分片之间平均分配。 b. 查询性能:选择经常被查询的字段作为分片键,以便查询可以在单个片段上执行而不需要扫描整个集群。 c. 数据增长:选择一个能够支持数据增长的分片键,以避免在未来需要重新分片。 4. 如何监控和管理MongoDB的分片集群? MongoDB提供了一些工具和功能来监控和管理分片集群。一些常见的方法包括: a. 使用mongos路由器的命令行工具或管理界面来管理集群配置、添加/删除shard以及监控性能指标。 b. 使用MongoDB的内置监控工具,如mongostat和mongotop,来监视集群的吞吐量、延迟和负载情况。 c. 使用第三方监控工具,如Prometheus、Grafana等,来获取更详细的指标和可视化。 这些是关于MongoDB分片集群的一些常见问题和答案。希望能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值