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> # 二、值范围策略(根据值范围来存储数据)