# demo **Repository Path**: shichijoaria/demo ## Basic Information - **Project Name**: demo - **Description**: mongondbs分片 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-05-23 - **Last Updated**: 2021-11-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 部署手册 ## 安装mongodb ```shell tar -xvf mongodb-linux-x86_64-4.1.3.tgz mv mongodb-linux-x86_64-4.1.3/* /opt/mongodb mkdir -p /opt/mongodb/config/logs mkdir -p /opt/mongodb/config/17011 mkdir -p /opt/mongodb/config/17013 mkdir -p /opt/mongodb/config/17015 mkdir -p /opt/mongodb/shard/logs mkdir -p /opt/mongodb/shard/1/37011 mkdir -p /opt/mongodb/shard/1/37013 mkdir -p /opt/mongodb/shard/1/37015 mkdir -p /opt/mongodb/shard/1/37017 mkdir -p /opt/mongodb/shard/2/47011 mkdir -p /opt/mongodb/shard/2/47013 mkdir -p /opt/mongodb/shard/2/47015 mkdir -p /opt/mongodb/shard/2/47017 mkdir -p /opt/mongodb/shard/3/57011 mkdir -p /opt/mongodb/shard/3/57013 mkdir -p /opt/mongodb/shard/3/57015 mkdir -p /opt/mongodb/shard/3/57017 mkdir -p /opt/mongodb/shard/4/58011 mkdir -p /opt/mongodb/shard/4/58013 mkdir -p /opt/mongodb/shard/4/58015 mkdir -p /opt/mongodb/shard/4/58017 ``` ## 编写配置文件 ### 配置节点 #### 节点1 /opt/mongodb/config/17011.conf ```properties dbpath=config/17011 # 日志文件位置 logpath=config/logs/17011.log # 追加方式写入日志 logappend=true # fork守护进程 fork=true # 绑定IP bind_ip=0.0.0.0 # 端口 port=17011 # 标志为配置服务器 configsvr=true # 配置服务器副本集名称 replSet=configsvr ``` #### 节点2 /opt/mongodb/config/17013.conf ```pr # 数据库文件位置 dbpath=config/17013 # 日志文件位置 logpath=config/logs/17013.log # 追加方式写入日志 logappend=true # fork守护进程 fork=true # 绑定IP bind_ip=0.0.0.0 # 端口 port=17013 # 标志为配置服务器 configsvr=true # 配置服务器副本集名称 replSet=configsvr ``` #### 节点3 /opt/mongodb/config/17015.conf ```pr # 数据库文件位置 dbpath=config/17015 # 日志文件位置 logpath=config/logs/17015.log # 追加方式写入日志 logappend=true # fork守护进程 fork=true # 绑定IP bind_ip=0.0.0.0 # 端口 port=17015 # 标志为配置服务器 configsvr=true # 配置服务器副本集名称 replSet=configsvr ``` #### 启动配置节点 启动 ```she ./bin/mongod -f config/17011.conf ./bin/mongod -f config/17013.conf ./bin/mongod -f config/17015.conf ``` 配置节点 ```shell ./bin/mongo --port 17011 ./bin/mongo --port 17013 ./bin/mongo --port 17015 ``` ```shell use admin var cfg = {"_id":"configsvr", "members":[ {"_id":1,"host":"192.168.197.131:17011"}, {"_id":2,"host":"192.168.197.131:17013"}, {"_id":3,"host":"192.168.197.131:17015"}, ] }; rs.initiate(cfg) rs.status(); ``` ### 分片节点 #### 集群1 /opt/mongodb/shard/1/37011.conf ```properties # 数据库目录 dbpath=shard/1/37011 # 日志文件存放目录 logpath=shard/logs/shard1-37011.log # 追加方式写入日志 logappend=true # 绑定IP bind_ip=0.0.0.0 # 端口 port=37011 # 后台守护进程启动 fork=true # 复制集名称 replSet=shard1 # 指定为shardsvr shardsvr=true ``` /opt/mongodb/shard/1/37013.conf ```shell # 数据库目录 dbpath=shard/1/37013 # 日志文件存放目录 logpath=shard/logs/shard1-37013.log # 追加方式写入日志 logappend=true # 绑定IP bind_ip=0.0.0.0 # 端口 port=37013 # 后台守护进程启动 fork=true # 复制集名称 replSet=shard1 # 指定为shardsvr shardsvr=true ``` /opt/mongodb/shard/1/37015.conf ```properties # 数据库目录 dbpath=shard/1/37015 # 日志文件存放目录 logpath=shard/logs/shard1-37015.log # 追加方式写入日志 logappend=true # 绑定IP bind_ip=0.0.0.0 # 端口 port=37015 # 后台守护进程启动 fork=true # 复制集名称 replSet=shard1 # 指定为shardsvr shardsvr=true ``` 仲裁节点 /opt/mongodb/shard/1/37017.conf ```properties # 数据库目录 dbpath=shard/1/37017 # 日志文件存放目录 logpath=shard/logs/shard1-37017.log # 追加方式写入日志 logappend=true # 绑定IP bind_ip=0.0.0.0 # 端口 port=37017 # 后台守护进程启动 fork=true # 复制集名称 replSet=shard1 # 指定为shardsvr shardsvr=true ``` 启动集权 ```shell ./bin/mongod -f shard/1/37011.conf ./bin/mongod -f shard/1/37013.conf ./bin/mongod -f shard/1/37015.conf ./bin/mongod -f shard/1/37017.conf ``` 配置集群 ```shell ./bin/mongo -port 37011 ``` ```shell use admin var cfg = {"_id":"shard1", "protocolVersion":1, "members":[ {"_id":1,"host":"192.168.197.131:37011","priority":10}, {"_id":2,"host":"192.168.197.131:37013","priority":5}, {"_id":3,"host":"192.168.197.131:37015","priority":0}, {"_id":4,"host":"192.168.197.131:37017","arbiterOnly":true} ] }; rs.initiate(cfg) rs.status() ``` #### 集群2 /opt/mongodb/shard/2/47011.conf ```properties # 数据库目录 dbpath=shard/2/47011 # 日志文件存放目录 logpath=shard/logs/shard2-47011.log # 追加方式写入日志 logappend=true # 绑定IP bind_ip=0.0.0.0 # 端口 port=47011 # 后台守护进程启动 fork=true # 复制集名称 replSet=shard2 # 指定为shardsvr shardsvr=true ``` /opt/mongodb/shard2/47013.conf ```properties # 数据库目录 dbpath=shard/2/47013 # 日志文件存放目录 logpath=shard/logs/shard2-47013.log # 追加方式写入日志 logappend=true # 绑定IP bind_ip=0.0.0.0 # 端口 port=47013 # 后台守护进程启动 fork=true # 复制集名称 replSet=shard2 # 指定为shardsvr shardsvr=true ``` /opt/mongodb/shard/2/47015.conf ```properties # 数据库目录 dbpath=shard/2/47015 # 日志文件存放目录 logpath=shard/logs/shard2-47015.log # 追加方式写入日志 logappend=true # 绑定IP bind_ip=0.0.0.0 # 端口 port=47015 # 后台守护进程启动 fork=true # 复制集名称 replSet=shard2 # 指定为shardsvr shardsvr=true ``` /opt/mongodb/shard/2/47017.conf ```properties # 数据库目录 dbpath=shard/2/47017 # 日志文件存放目录 logpath=shard/logs/shard2-47017.log # 追加方式写入日志 logappend=true # 绑定IP bind_ip=0.0.0.0 # 端口 port=47017 # 后台守护进程启动 fork=true # 复制集名称 replSet=shard2 # 指定为shardsvr shardsvr=true ``` 启动集群2 ```shell ./bin/mongod -f shard/2/47011.conf ./bin/mongod -f shard/2/47013.conf ./bin/mongod -f shard/2/47015.conf ./bin/mongod -f shard/2/47017.conf ``` 配置集群2 ```shell ./bin/mongo -port 47011 ``` ```shell use admin var cfg = {"_id":"shard2", "protocolVersion":1, "members":[ {"_id":1,"host":"192.168.197.131:47011","priority":10}, {"_id":2,"host":"192.168.197.131:47013","priority":5}, {"_id":3,"host":"192.168.197.131:47015","priority":0}, {"_id":4,"host":"192.168.197.131:47017","arbiterOnly":true} ] }; rs.initiate(cfg) rs.status() ``` #### 集群3 /opt/mongodb/shard/3/57011.conf ```properties # 数据库目录 dbpath=shard/3/57011 # 日志文件存放目录 logpath=shard/logs/shard3-57011.log # 追加方式写入日志 logappend=true # 绑定IP bind_ip=0.0.0.0 # 端口 port=57011 # 后台守护进程启动 fork=true # 复制集名称 replSet=shard3 # 指定为shardsvr shardsvr=true ``` /opt/mongodb/shard/3/57013.conf ```properties # 数据库目录 dbpath=shard/3/57013 # 日志文件存放目录 logpath=shard/logs/shard3-57013.log # 追加方式写入日志 logappend=true # 绑定IP bind_ip=0.0.0.0 # 端口 port=57013 # 后台守护进程启动 fork=true # 复制集名称 replSet=shard3 # 指定为shardsvr shardsvr=true ``` /opt/mongodb/shard/3/57015.conf ```properties # 数据库目录 dbpath=shard/3/57015 # 日志文件存放目录 logpath=shard/logs/shard3-57015.log # 追加方式写入日志 logappend=true # 绑定IP bind_ip=0.0.0.0 # 端口 port=57015 # 后台守护进程启动 fork=true # 复制集名称 replSet=shard3 # 指定为shardsvr shardsvr=true ``` /opt/mongodb/shard/3/57017.conf ```properties # 数据库目录 dbpath=shard/3/57017 # 日志文件存放目录 logpath=shard/logs/shard3-57017.log # 追加方式写入日志 logappend=true # 绑定IP bind_ip=0.0.0.0 # 端口 port=57017 # 后台守护进程启动 fork=true # 复制集名称 replSet=shard3 # 指定为shardsvr shardsvr=true ``` 启动集群3 ```shell ./bin/mongod -f shard/3/57011.conf ./bin/mongod -f shard/3/57013.conf ./bin/mongod -f shard/3/57015.conf ./bin/mongod -f shard/3/57017.conf ``` 配置集群3 ```shell ./bin/mongo -port 57011 ``` ```shell use admin var cfg = {"_id":"shard3", "protocolVersion":1, "members":[ {"_id":1,"host":"192.168.197.131:57011","priority":10}, {"_id":2,"host":"192.168.197.131:57013","priority":5}, {"_id":3,"host":"192.168.197.131:57015","priority":0}, {"_id":4,"host":"192.168.197.131:57017","arbiterOnly":true} ] }; rs.initiate(cfg) rs.status(); ``` #### 集群4 /opt/mongodb/shard/4/58011.conf ```properties # 数据库目录 dbpath=shard/4/58011 # 日志文件存放目录 logpath=shard/logs/shard4-58011.log # 追加方式写入日志 logappend=true # 绑定IP bind_ip=0.0.0.0 # 端口 port=58011 # 后台守护进程启动 fork=true # 复制集名称 replSet=shard4 # 指定为shardsvr shardsvr=true ``` /opt/mongodb/shard/4/580113conf ```properties # 数据库目录 dbpath=shard/4/58013 # 日志文件存放目录 logpath=shard/logs/shard4-58013.log # 追加方式写入日志 logappend=true # 绑定IP bind_ip=0.0.0.0 # 端口 port=58013 # 后台守护进程启动 fork=true # 复制集名称 replSet=shard4 # 指定为shardsvr shardsvr=true ``` /opt/mongodb/shard/4/58015.conf ```properties # 数据库目录 dbpath=shard/4/58015 # 日志文件存放目录 logpath=shard/logs/shard4-58015.log # 追加方式写入日志 logappend=true # 绑定IP bind_ip=0.0.0.0 # 端口 port=58015 # 后台守护进程启动 fork=true # 复制集名称 replSet=shard4 # 指定为shardsvr shardsvr=true ``` /opt/mongodb/shard/4/58017.conf ```properties # 数据库目录 dbpath=shard/4/58017 # 日志文件存放目录 logpath=shard/logs/shard4-58017.log # 追加方式写入日志 logappend=true # 绑定IP bind_ip=0.0.0.0 # 端口 port=58017 # 后台守护进程启动 fork=true # 复制集名称 replSet=shard4 # 指定为shardsvr shardsvr=true ``` 启动集群4 ```shell ./bin/mongod -f shard/4/58011.conf ./bin/mongod -f shard/4/58013.conf ./bin/mongod -f shard/4/58015.conf ./bin/mongod -f shard/4/58017.conf ``` 配置集群4 ```shell ./bin/mongo -port 58011 ``` ```shell use admin var cfg = {"_id":"shard4", "protocolVersion":1, "members":[ {"_id":1,"host":"192.168.197.131:58011","priority":10}, {"_id":2,"host":"192.168.197.131:58013","priority":5}, {"_id":3,"host":"192.168.197.131:58015","priority":0}, {"_id":4,"host":"192.168.197.131:58017","arbiterOnly":true} ] }; rs.initiate(cfg) rs.status(); ``` ### 路由节点 mkdir -p /opt/mongodb/route/logs 配置节点 /opt/mongodb/route/27017.conf ```shell port=27017 # 绑定IP bind_ip=0.0.0.0 # fork fork=true # 日志文件 logpath=route/logs/route.log # 追加方式记录日志 logappend=true # 配置集群 configdb=configsvr/192.168.197.131:17011,192.168.197.131:17013,192.168.197.131:17015 ``` 启动路由节点 ```shell ./bin/mongos -f route/27017.conf ``` 添加分片节点 ```shell ./bin/mongo --port 27017 sh.status() sh.addShard("shard1/192.168.197.131:37011,192.168.197.131:37013,192.168.197.131:37015,192.168.197.131:37017"); sh.addShard("shard2/192.168.197.131:47011,192.168.197.131:47013,192.168.197.131:47015,192.168.197.131:47017"); sh.addShard("shard3/192.168.197.131:57011,192.168.197.131:57013,192.168.197.131:57015,192.168.197.131:57017"); sh.addShard("shard4/192.168.197.131:58011,192.168.197.131:58013,192.168.197.131:58015,192.168.197.131:58017"); sh.status() #开启数据库分片功能 sh.enableSharding("lagou_resume"); #指定集合开启分片功能 sh.shardCollection("lagou_resume.lagou_resume_datas",{"resumeid":"hashed"}) sh.status(); ``` ![img.png](img.png) ### 测试插入分片 插入数据 ``` db.lagou_resume_datas.insert({resumeid:1,name:'changweiwei1',city:'sc',birth_day:new ISODate('1996-08-01'),expectSalary:13000}); db.lagou_resume_datas.insert({resumeid:2,name:'changweiwei2',city:'sc',birth_day:new ISODate('1996-08-01'),expectSalary:13000}); db.lagou_resume_datas.insert({resumeid:3,name:'changweiwei3',city:'sc',birth_day:new ISODate('1996-08-01'),expectSalary:13000}); db.lagou_resume_datas.insert({resumeid:4,name:'changweiwei4',city:'sc',birth_day:new ISODate('1996-08-01'),expectSalary:13000}); db.lagou_resume_datas.insert({resumeid:5,name:'changweiwei5',city:'sc',birth_day:new ISODate('1996-08-01'),expectSalary:13000}); db.lagou_resume_datas.insert({resumeid:6,name:'changweiwei6',city:'sc',birth_day:new ISODate('1996-08-01'),expectSalary:13000}); db.lagou_resume_datas.insert({resumeid:7,name:'changweiwei7',city:'sc',birth_day:new ISODate('1996-08-01'),expectSalary:13000}); db.lagou_resume_datas.insert({resumeid:8,name:'changweiwei8',city:'sc',birth_day:new ISODate('1996-08-01'),expectSalary:13000}); db.lagou_resume_datas.insert({resumeid:9,name:'changweiwei9',city:'sc',birth_day:new ISODate('1996-08-01'),expectSalary:13000}); db.lagou_resume_datas.insert({resumeid:10,name:'changweiwei10',city:'sc',birth_day:new ISODate('1996-08-01'),expectSalary:13000}); ``` 查询某集群数据 ```shell ./bin/mongo -port 17011 use lagou_resume show tables; db.lagou_resume_datas.find(); ``` ## 安全认证配置 ### 创建账号 ```shell ./bin/mongo --port 27017 ``` ```shell use admin db db.createUser({ user:"root", pwd:"123456", roles:[{role:"root",db:"admin"}] }); use lagou_resume db db.createUser({ user:"lagou_gx", pwd:"abc321", roles:[{role:"readWrite",db:"lagou_resume"}] }); ``` ### 配置路由节点密匙文件 ```shell mkdir keyfile/mongodb -p openssl rand -base64 756 > keyfile/mongodb/lagouKeyfile.file chmod 600 keyfile/mongodb/lagouKeyfile.file ``` ### 重启所有节点 vim start.sh ```shell ./bin/mongod -f config/17011.conf ./bin/mongod -f config/17013.conf ./bin/mongod -f config/17015.conf ./bin/mongod -f shard/1/37011.conf ./bin/mongod -f shard/1/37013.conf ./bin/mongod -f shard/1/37015.conf ./bin/mongod -f shard/1/37017.conf ./bin/mongod -f shard/2/47011.conf ./bin/mongod -f shard/2/47013.conf ./bin/mongod -f shard/2/47015.conf ./bin/mongod -f shard/2/47017.conf ./bin/mongod -f shard/3/57011.conf ./bin/mongod -f shard/3/57013.conf ./bin/mongod -f shard/3/57015.conf ./bin/mongod -f shard/3/57017.conf ./bin/mongod -f shard/4/58011.conf ./bin/mongod -f shard/4/58013.conf ./bin/mongod -f shard/4/58015.conf ./bin/mongod -f shard/4/58017.conf ./bin/mongos -f route/27017.conf ``` ```shell chmod +x startup.sh killall mongod killall mongos ``` 修改所有的配置节点和分片节点的配置 ``` auth=true keyFile=keyfile/mongodb/lagouKeyfile.file ``` 修改路由节点配置 ``` keyFile=keyfile/mongodb/lagouKeyfile.file ``` ### 验证配置 ``` ./bin/mongo --port 27017 use lagou_resume db show tables; db.auth("lagou_gx","abc321") show tables; db.lagou_resume_datas.find(); ```