MongoDB分片

4 篇文章 0 订阅
3 篇文章 0 订阅

mongodb关闭命令

 不要kill -9 xxx
 > use admin;
switched to db admin
> db.shutdownServer();

数据量过大时搭建。(搭建最终效果图)

 

1、创建副本集保存数据的文件夹(新建两个分片)

# 第一个分片副本集
[root@localhost /]# mkdir -p /mongodb/shard1/myrs_27117/data/db \ &
mkdir -p /mongodb/shard1/myrs_27117/log \ &
mkdir -p /mongodb/shard1/myrs_27118/data/db \ &
mkdir -p /mongodb/shard1/myrs_27118/log \ &
mkdir -p /mongodb/shard1/myrs_27119/data/db \ &
mkdir -p /mongodb/shard1/myrs_27119/log
# 第二个分片副本集
[root@localhost /]# mkdir -p /mongodb/shard2/myrs_27217/data/db \ &
[root@localhost /]# mkdir -p /mongodb/shard2/myrs_27217/log \ &
[root@localhost /]# mkdir -p /mongodb/shard2/myrs_27218/data/db \ &
[root@localhost /]# mkdir -p /mongodb/shard2/myrs_27218/log \ &
[root@localhost /]# mkdir -p /mongodb/shard2/myrs_27219/data/db \ &
[root@localhost /]# mkdir -p /mongodb/shard2/myrs_27219/log

2、副本集配置文件

(其它节点的端口和路径及副本集名称修改一下即可)

[root@localhost /]# vi /mongodb/shard1/myrs_27117/mongo.conf
systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
   path: "/mongodb/shard1/myrs_27117/log/mongod.log"
   #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
   logAppend: true
storage:
   #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
   dbPath: "/mongodb/shard1/myrs_27117/data/db"
   journal:
      #启用或禁用持久性日志以确保数据文件保持有效和可恢复。
      enabled: true
processManagement:
   #启用在后台运行mongos或mongod进程的守护进程模式。
   fork: true
   # 指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
   pidFilePath: "/mongodb/shard1/myrs_27117/log/mongod.pid"
net:
   #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
   #bindIpAll: true
   # 服务实例绑定的IP
   bindIp: localhost,192.168.2.120
   #bindIp
   #绑定的端口,默认是27017
   port: 27117
replication: 
   # 副本集的名称(多个节点的副本集名称要一致)
   replSetName: myshardrs_1
sharding: 
   # 分片角色(shardsvr:分片服务,configsvr:配置服务)
   clusterRole: shardsvr

3、副本集启动

[root@localhost /]# /usr/local/mongodb/bin/mongod -f /mongodb/shard1/myrs_27117/mongo.conf

二、第3套配置副本集搭建

1、创建配置副本集保存数据的文件夹

[root@localhost /]# mkdir -p /mongodb/shard/myrs_27017/data/db \ &
mkdir -p /mongodb/shard/myrs_27017/log \ &
mkdir -p /mongodb/shard/myrs_27018/data/db \ &
mkdir -p /mongodb/shard/myrs_27018/log \ &
mkdir -p /mongodb/shard/myrs_27019/data/db \ &
mkdir -p /mongodb/shard/myrs_27019/log

2、编辑配置副本集配置文件

(配置副本集的其它节点的配置文件类似,改一下路径或端口即可)

[root@localhost /]# vi /mongodb/shard/myrs_27017/mongo.conf
systemLog:
   # MongoDB发送所有日志输出的目标指定为文件
   destination: file
   # mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
   path: "/mongodb/shard/myrs_27017/log/mongod.log"
   # 当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
   logAppend: true
storage:
   # mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
   dbPath: "/mongodb/shard/myrs_27017/data/db"
   journal:
      # 启用或禁用持久性日志以确保数据文件保持有效和可恢复。
      enabled: true
processManagement:
   # 启用在后台运行mongos或mongod进程的守护进程模式。
   fork: true
   # 指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
   pidFilePath: "/mongodb/shard/myrs_27017/log/mongod.pid"
net:
   # 服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
   # bindIpAll: true
   # 服务实例绑定的IP
   bindIp: localhost,192.168.2.120
   # bindIp
   # 绑定的端口,默认是27017
   port: 27017
replication: 
   # 副本集的名称(多个节点的副本集名称要一致)
   replSetName: myconfigrs
sharding: 
   # 分片角色(shardsvr:分片服务,configsvr:配置服务)
   clusterRole: configsvr

3、配置副本集启动

[root@localhost mongodb]# /usr/local/mongodb/bin/mongod -f /mongodb/shard/myrs_27017/mongo.conf  \ &
/usr/local/mongodb/bin/mongod -f /mongodb/shard/myrs_27018/mongo.conf \ &
/usr/local/mongodb/bin/mongod -f /mongodb/shard/myrs_27019/mongo.conf

三、初始化3个副本集

先初始化副本集在初始化配置副本集

1、先初始化副本集

第一个副本集

# 初始化第一套副本集
[root@localhost mongodb]# /usr/local/mongodb/bin/mongo --host=192.168.2.120 --port=27117
MongoDB shell version v4.4.14
......
> rs.initiate()     # 初始化
{
        "info2" : "no configuration specified. Using a default configuration for the set",
        "me" : "192.168.2.120:27117",
        "ok" : 1
}
myshardrs_1:SECONDARY> 
myshardrs_1:PRIMARY> rs.add("192.168.2.120:27118")  # 第一个副本集添加从节点
myshardrs_1:PRIMARY> rs.addArb("192.168.2.120:27119")  # 第一个副本集添加仲裁节点

第二个副本集

[root@localhost shard]# /usr/local/mongodb/bin/mongo --host=192.168.2.120 --port=27217
MongoDB shell version v4.4.14
......
> rs.initiate()     # 初始化
{
        "info2" : "no configuration specified. Using a default configuration for the set",
        "me" : "192.168.2.120:27217",
        "ok" : 1
}
myshardrs_2:SECONDARY> rs.add("192.168.2.120:27218")    # 第二个副本集添加从节点
myshardrs_2:PRIMARY> rs.addArb("192.168.2.120:27219")   # 第二个副本集添加仲裁节点

配置副本集(没有仲裁节点)

[root@localhost /]# /usr/local/mongodb/bin/mongo --host=192.168.2.120 --port=27017
MongoDB shell version v4.4.14
......
> rs.initiate()     # 初始化
{
        "info2" : "no configuration specified. Using a default configuration for the set",
        "me" : "192.168.2.120:27017",
        "ok" : 1,
        "$gleStats" : {
                "lastOpTime" : Timestamp(1656662485, 1),
                "electionId" : ObjectId("000000000000000000000000")
        },
        "lastCommittedOpTime" : Timestamp(0, 0)
}
myconfigrs:PRIMARY> rs.add("192.168.2.120:27018")       # 配置副本集主节点添加节点
{
        "ok" : 1,
        "$gleStats" : {
                "lastOpTime" : {
                        "ts" : Timestamp(1656662618, 1),
                        "t" : NumberLong(1)
                },
                "electionId" : ObjectId("7fffffff0000000000000001")
        },
        "lastCommittedOpTime" : Timestamp(1656662618, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1656662620, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        },
        "operationTime" : Timestamp(1656662618, 1)
}
myconfigrs:PRIMARY> rs.add("192.168.2.120:27019")       # 配置副本集主节点添加节点

四、路由节点搭建

1、准备存放数据和日志的目录

创建目录(路由不做数据存储,只新建一个log目录)

[root@localhost /]# mkdir -p /mongodb/shard3/mongos_27317/log

2、编辑配置文件

[root@localhost /]# vi /mongodb/shard3/mongos_27317/mongos.conf

配置文件内容

systemLog:
   # MongoDB发送所有日志输出的目标指定为文件
   destination: file
   # mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
   path: "/mongodb/shard3/mongos_27317/log/mongod.log"
   # 当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
   logAppend: true
processManagement:
   # 启用在后台运行mongos或mongod进程的守护进程模式。
   fork: true
   # 指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
   pidFilePath: "/mongodb/shard3/mongos_27317/log/mongod.pid"
net:
   # 服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
   # bindIpAll: true
   # 服务实例绑定的IP
   bindIp: localhost,192.168.2.120
   # bindIp
   # 绑定的端口,默认是27017
   port: 27317
sharding: 
   # 指定 第3套 配置 副本集 节点
   configDB: myconfigrs/192.168.2.120:27017,192.168.2.120:27018,192.168.2.120:27019

3、启动路由节点

应该先启动前面节点并初始化副本集节点在启动。

[root@localhost /]# /usr/local/mongodb/bin/mongos -f /mongodb/shard3/mongos_27317/mongos.conf 

连接到路由节点

[root@localhost /]# /usr/local/mongodb/bin/mongo --host=192.168.2.120 --port=27317
MongoDB shell version v4.4.14
......
mongos> show dbs
admin   0.000GB
config  0.000GB
mongos> use article
switched to db article
mongos> db
article
mongos> db.file.insert({name: "curry"})
WriteCommandError({
        "ok" : 0,  # 插入数据失败
        ......

4、路由节点添加 保存数据分片/副本节点

[root@localhost mongodb]# /usr/local/mongodb/bin/mongo --host=192.168.2.120 --port=27317
mongos> sh.addShard("myshardrs_1/192.168.2.120:27117,192.168.2.120:27118,192.168.2.120:27119")  # 关联分片节点(保存数据的节点)
{
        "shardAdded" : "myshardrs_1",
        "ok" : 1,
        "operationTime" : Timestamp(1656906393, 2),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1656906393, 2),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
mongos> sh.addShard("myshardrs_2/192.168.2.120:27217,192.168.2.120:27218,192.168.2.120:27219") # 关联分片节点(保存数据的节点)
{
        "shardAdded" : "myshardrs_2",
        "ok" : 1,
        "operationTime" : Timestamp(1657077091, 2),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1657077091, 2),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("62c4ecd5874254196ae228cf")
  }
  shards:  # 分片集查看
        {  "_id" : "myshardrs_1",  "host" : "myshardrs_1/192.168.2.120:27117,192.168.2.120:27118",  "state" : 1 }
        {  "_id" : "myshardrs_2",  "host" : "myshardrs_2/192.168.2.120:27217,192.168.2.120:27218",  "state" : 1 }
  active mongoses:
        "4.4.14" : 1
......

5、给数据库、集合开启分片功能

# 1、给数据库开启分片功能
mongos> sh.enableSharding("db_kn_3_2") # 给db_kn_3_2库开启分片功能
{
        "ok" : 1,
        "operationTime" : Timestamp(1657093202, 6),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1657093202, 6),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
# 2、给指定集合开启分片功能,不能先建好这个集合或数据库(一、指定字段的hash策略)
mongos> sh.shardCollection("db_kn_3_2.arc_tb_file",{"id":"hashed"})  #给db_kn_3_2库的arc_tb_file集合根据id字段使用hashed方式开启分片功能
{
        "collectionsharded" : "db_kn_3_2.arc_tb_file",
        "collectionUUID" : UUID("937ea828-0764-4577-bc3d-bfa10d48eb8f"),
        "ok" : 1,
        "operationTime" : Timestamp(1657094455, 2),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1657094455, 2),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("62c4ecd5874254196ae228cf")
  }
  shards:
        {  "_id" : "myshardrs_1",  "host" : "myshardrs_1/192.168.2.120:27117,192.168.2.120:27118",  "state" : 1 }
        {  "_id" : "myshardrs_2",  "host" : "myshardrs_2/192.168.2.120:27217,192.168.2.120:27218",  "state" : 1 }
  active mongoses:
        "4.4.14" : 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: 
                512 : Success
  databases:
        {  "_id" : "arc_tb_file",  "primary" : "myshardrs_2",  "partitioned" : true,  "version" : {  "uuid" : UUID("cdb8f680-d8bd-454a-ba42-c2520a724c36"),  "lastMod" : 1 } }
        {  "_id" : "config",  "primary" : "config",  "partitioned" : true }
                config.system.sessions
                        shard key: { "_id" : 1 }
                        unique: false
                        balancing: true
                        chunks:
                                myshardrs_1     512
                                myshardrs_2     512
                        too many chunks to print, use verbose if you want to force print
        {  "_id" : "db_kn_3_2",  "primary" : "myshardrs_2",  "partitioned" : true,  "version" : {  "uuid" : UUID("4589b3e5-b5f8-4e42-b381-0529f47a3305"),  "lastMod" : 1 } }
                db_kn_3_2.arc_tb_file					# 分片集合
                        shard key: { "id" : "hashed" }   # hash策略
                        unique: false
                        balancing: true
                        chunks:
                                myshardrs_1     2
                                myshardrs_2     2		# 根据id的hash值范围决定存储地方
                        { "id" : { "$minKey" : 1 } } -->> { "id" : NumberLong("-4611686018427387902") } on : myshardrs_1 Timestamp(1, 0) 
                        { "id" : NumberLong("-4611686018427387902") } -->> { "id" : NumberLong(0) } on : myshardrs_1 Timestamp(1, 1) 
                        { "id" : NumberLong(0) } -->> { "id" : NumberLong("4611686018427387902") } on : myshardrs_2 Timestamp(1, 2) 
                        { "id" : NumberLong("4611686018427387902") } -->> { "id" : { "$maxKey" : 1 } } on : myshardrs_2 Timestamp(1, 3) 
mongos> 
# 二、值范围策略(根据值范围来存储数据)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值