娃哈哈好喝-真的!
技术够用就行,吃好喝好睡好!

Mongodb分片集群搭建

Mongodb分片集群搭建

1、环境介绍:

演示使用3台机器,角色分配:

服务器 角色 备注
192.168.1.10 Mongo-route,mongo-config 路由和配置服务
192.168.1.11 Mongo-shard01a,mongo-shard01b 分片1
192.168.1.12 Mongo-shard02a,mongo-shard02b 分片2

mongo术语:

config server:

配置服务,存储集群信息,包括chunk信息

route:

路由,是客户端访问的入口,程序读写都是经过路由访问集群

shard:

分片服务,存储实际的数据,实际生产中一个分片角色可以由多个replicaset承担,防止单点故障

其他的后面再补充吧

2、软件下载

有商业版和社区版,这是社区版下载地址,包括服务端和各种客户端,还有其他工具,如备份恢复工具

https://www.mongodb.com/try/download/community-edition

本次演示使用的是6.x版本

mongosh-linux客户端工具

https://downloads.mongodb.com/compass/mongodb-mongosh-2.3.4.aarch64.rpm

mongo其他工具合集

https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel70-x86_64-100.10.0.rpm

3、分片服务器配置
3.1、分片1服务器

将下载的tar压缩包解压后根据你的实际情况存放,我这里保存在/data目录下

[root@demo-02 mongodb]# pwd
/data/mongodb
[root@demo-02 mongodb]# ls
arbite01  bin  conf  logs  restart.sh  shard01a  shard01b
[root@demo-02 mongodb]# ls bin
install_compass  mongod  mongos
[root@demo-02 mongodb]# 

除了bin目录外其他目录都需要自己创建,如果目录不存在启动mongo时会失败,分片1服务器有3个配置文件:

[root@demo-02 mongodb]# ls conf/
arbite01.conf  shard01a.conf  shard01b.conf
[root@demo-02 mongodb]# 
# shard01a.conf是主分片
# shard01b.conf是副分片
# arbite01.conf是仲裁节点,不保存实际数据,作用就是防止平票的情况出现

三个配置文件内容分别是:

shard01a.conf

dbpath=/data/mongodb/shard01a
logpath=/data/mongodb/logs/shard01a.log
bind_ip_all=true
shardsvr=true
logappend=true
replSet=shard01
port=27018
oplogSize=10000
fork=true

shard01b.conf

dbpath=/data/mongodb/shard01b
logpath=/data/mongodb/logs/shard01b.log
bind_ip_all=true
shardsvr=true
logappend=true
replSet=shard01
port=27028
oplogSize=10000
fork=true

arbite01.conf

dbpath=/data/mongodb/arbite01
logpath=/data/mongodb/logs/arbite01.log
bind_ip_all=true
shardsvr=true
logappend=true
replSet=shard01
port=27008
oplogSize=10000
fork=true

启动服务

[root@demo-02 mongodb]# /data/mongodb/bin/mongod -f /data/mongodb/conf/shard01a.conf
[root@demo-02 mongodb]# /data/mongodb/bin/mongod -f /data/mongodb/conf/shard01b.conf
[root@demo-02 mongodb]# /data/mongodb/bin/mongod -f /data/mongodb/conf/arbite01.conf

连接分片1服务,这里需要用到mongosh,linux客户端,上面有下载地址

# 连接主分片
[root@demo-02 mongodb]# mongosh --port 27018

初始化分片1

use admin;
rs.initiate({
    _id:"shard01",
    members:[
    		# priority表示权重,arbiterOnly表示仲裁节点
        {_id:0,host:"192.168.1.11:27018",priority:2},
        {_id:1,host:"192.168.1.11:27028",priority:1},
        {_id:2,host:"192.168.1.11:27008",arbiterOnly:true}
    ]
});
3.2、分片2服务器

目录结构和服务器1相同

三个配置文件内容分别是:

shard02a.conf

dbpath=/data/mongodb/shard02a
logpath=/data/mongodb/logs/shard02a.log
bind_ip_all=true
shardsvr=true
logappend=true
replSet=shard01
port=27018
oplogSize=10000
fork=true

shard02b.conf

dbpath=/data/mongodb/shard02b
logpath=/data/mongodb/logs/shard02b.log
bind_ip_all=true
shardsvr=true
logappend=true
replSet=shard01
port=27028
oplogSize=10000
fork=true

arbite02.conf

dbpath=/data/mongodb/arbite02
logpath=/data/mongodb/logs/arbite02.log
bind_ip_all=true
shardsvr=true
logappend=true
replSet=shard01
port=27008
oplogSize=10000
fork=true

启动服务

[root@demo-03 mongodb]# /data/mongodb/bin/mongod -f /data/mongodb/conf/shard02a.conf
[root@demo-03 mongodb]# /data/mongodb/bin/mongod -f /data/mongodb/conf/shard02b.conf
[root@demo-03 mongodb]# /data/mongodb/bin/mongod -f /data/mongodb/conf/arbite02.conf

初始化分片2

# 连接主分片
[root@demo-03 mongodb]# mongosh --port 27018

初始化分片2

use admin;
rs.initiate({
    _id:"shard02",
    members:[
        {_id:0,host:"192.168.1.12:27018",priority:2},
        {_id:1,host:"192.168.1.12:27028",priority:1},
        {_id:2,host:"192.168.1.12:27008",arbiterOnly:true}
    ]
});
3.3、配置服务器

配置服务也可以使用1个,但是启动mongo时会有警告,所以本次演示使用3个

目录结构

[root@demo-01 mongodb]# ls
bin  conf  configsrv01  configsrv02  configsrv03  logs  restart.sh
[root@demo-01 mongodb]# ls conf
configsrv01.conf  configsrv02.conf  configsrv03.conf  route.conf
[root@demo-01 mongodb]#

configsrv01.conf内容

dbpath=/data/mongodb/configsrv01
logpath=/data/mongodb/logs/configsrv01.log
bind_ip_all=true
configsvr=true
logappend=true
replSet=configReplSet
port=27019
oplogSize=10000
fork=true

configsrv02.conf内容

dbpath=/data/mongodb/configsrv02
logpath=/data/mongodb/logs/configsrv02.log
bind_ip_all=true
configsvr=true
logappend=true
replSet=configReplSet
port=27029
oplogSize=10000
fork=true

configsrv03.conf内容

dbpath=/data/mongodb/configsrv03
logpath=/data/mongodb/logs/configsrv03.log
bind_ip_all=true
configsvr=true
logappend=true
replSet=configReplSet
port=27039
oplogSize=10000
fork=true

启动服务

[root@demo-01 mongodb]# /data/mongodb/bin/mongod -f /data/mongodb/conf/configsrv01.conf
[root@demo-01 mongodb]# /data/mongodb/bin/mongod -f /data/mongodb/conf/configsrv02.conf
[root@demo-01 mongodb]# /data/mongodb/bin/mongod -f /data/mongodb/conf/configsrv03.conf

连接config服务

[root@demo-01 mongodb]# mongosh --port 27019

初始化config

use admin;
rs.initiate({
    _id:"configReplSet",
    members:[
        {_id:0,host:"192.168.1.10:27019", priority:2},
        {_id:1,host:"192.168.1.10:27029", priority:1},
        {_id:2,host:"192.168.1.10:27039", priority:1}
    ]
});
3.4、路由服务器

因为是和配置服务在同一台,所以目录结构和配置服务相同

[root@demo-01 mongodb]# ls
bin  conf  configsrv01  configsrv02  configsrv03  logs  restart.sh
[root@demo-01 mongodb]# ls conf
configsrv01.conf  configsrv02.conf  configsrv03.conf  route.conf
[root@demo-01 mongodb]#

route.conf内容

configdb=configReplSet/192.168.1.10:27019,192.168.1.10:27029,192.168.1.10:27039
logpath=/data/mongodb/logs/router.log
bind_ip_all=true
port=27017
fork=true

启动路由服务,启动路由使用的是mongos,而不是mongod

[root@demo-01 mongodb]# /data/mongodb/bin/mongos -f /data/mongodb/conf/route.conf

连接路由

[root@demo-01 mongodb]# mongosh --port 27017

初始化路由

use admin;
# 设置分片数量,不包含仲裁节点
db.adminCommand({
  "setDefaultRWConcern" : 1,
  "defaultWriteConcern" : {
    "w" : 2
  }
});
# 添加分片信息
sh.addShard("shard01/192.168.1.11:27018,192.168.1.11:27028")
sh.addShard("shard02/192.168.1.12:27018,192.168.1.12:27028")
# 开启shard,开启分片命令必须在admin库下执行
use admin;
db.runCommand({ enablesharding: 'test'})
# 执行完可以查看集群的状态
sh.status();

到此集群配置完成

4、mongo常用命令
4.1添加用户

分片集群

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

非分片集群

use admin
db.createUser({
  user: "admin",
  pwd: "Aa123456",
  roles: [{ role: "root", db: "admin" }]
})
4.2、对库,表操作

mongo不需要创建库,直接使用use就可以切换库,没有会自动创建

# 删除库
use test
db.dropDatabase()
# 删除表
use users
db.users.drop()
# 清空表
db.test.deleteMany({})
4.3、倒入数据

类似mysql的source

use test
load("/data/script/test.js")
赞(0)
未经允许不得转载:娃哈哈好喝 » Mongodb分片集群搭建
分享到: 更多 (0)

相关推荐

  • 暂无文章