# mongdb-study **Repository Path**: linestyle007/mongdb-study ## Basic Information - **Project Name**: mongdb-study - **Description**: mongdb-study - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-08-10 - **Last Updated**: 2021-11-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mongdb-study mongdb分片集群 ## 安装 [官网]: https://www.mongodb.com/download-center/community/releases/archive ```scala tar -zxvf MongoDB-linux-x86_64-4.1.3.tgz https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-4.2.0.tgz ``` ## 配置config * config-17017.conf * config-17018.conf * config-17019.conf ```scala mkdir -p config/config1 mkdir -p config/config2 mkdir -p config/config3 mkdir -p config/logs touch config/logs/config1.log touch config/logs/config2.log touch config/logs/config3.log vim config/config1/config-17017.conf vim config/config1/config-17018.conf vim config/config1/config-17019.conf # 目录结构 |-- config |-- config1 |-- config-17017.conf |-- config2 |-- config-17018.conf |-- config3 |-- config-17019.conf |-- logs |-- config1.log |-- config2.log |-- config3.log ``` ### config-17017.conf * vim config/config1/config-17017.conf ```scala # 数据库文件位置 dbpath=config/config1 #日志文件位置 logpath=config/logs/config1.log # 以追加方式写入日志 logappend=true # 是否以守护进程方式运行 fork=true bind_ip=0.0.0.0 port=17017 # 表示是一个配置服务器 configsvr=true #配置服务器副本集名称 replSet=configsvr ``` ### config-17018.conf * vim config/config2/config-17018.conf ```scala # 数据库文件位置 dbpath=config/config2 #日志文件位置 logpath=config/logs/config2.log # 以追加方式写入日志 logappend=true # 是否以守护进程方式运行 fork=true bind_ip=0.0.0.0 port=17018 # 表示是一个配置服务器 configsvr=true #配置服务器副本集名称 replSet=configsvr ``` ### config-17019.conf * vim config/config3/config-17019.conf ```scala # 数据库文件位置 dbpath=config/config3 #日志文件位置 logpath=config/logs/config3.log # 以追加方式写入日志 logappend=true # 是否以守护进程方式运行 fork=true bind_ip=0.0.0.0 port = 17019 # 表示是一个配置服务器 configsvr=true #配置服务器副本集名称 replSet=configsvr ``` ### 启动配置 ```scala ./bin/mongod -f config/config1/config-17017.conf ./bin/mongod -f config/config2/config-17018.conf ./bin/mongod -f config/config3/config-17019.conf ``` ### 配置节点集群 ```scala ./bin/mongo --port 17017 use admin var cfg ={"_id":"configsvr", "members":[ {"_id":1,"host":"172.16.65.139:17017"}, {"_id":2,"host":"172.16.65.139:17018"}, {"_id":3,"host":"172.16.65.139:17019"}] }; rs.initiate(cfg) ``` ## 配置shard集群 ```scala mkdir -p shard/shard1/shard1-37017 mkdir -p shard/shard1/shard1-37018 mkdir -p shard/shard1/shard1-37019 mkdir -p shard/shard1/logs touch shard/shard1/logs/shard1-37017.log touch shard/shard1/logs/shard1-37018.log touch shard/shard1/logs/shard1-37019.log |-- shard |-- shard1 |-- shard1-37017 |-- shard1-37017.conf |-- shard1-37018 |-- shard1-370178.conf |-- shard1-37019 |-- shard1-37019.conf |-- logs |-- shard1-37017.log |-- shard1-37018.log |-- shard1-37019.log mkdir -p shard/shard2/shard2-47017 mkdir -p shard/shard2/shard2-47018 mkdir -p shard/shard2/shard2-47019 mkdir -p shard/shard2/logs touch shard/shard2/logs/shard2-47017.log touch shard/shard2/logs/shard2-47018.log touch shard/shard2/logs/shard2-47019.log |-- shard2 |-- shard2-47017 |-- shard2-47017.conf |-- shard2-47018 |-- shard2-470178.conf |-- shard2-47019 |-- shard2-47019.conf |-- logs |-- shard2-47017.log |-- shard2-47018.log |-- shard2-47019.log ``` ### shard1-37017.conf * vim shard/shard1/shard1-37017/shard1-37017.conf ```scala dbpath=shard/shard1/shard1-37017 bind_ip=0.0.0.0 port=37017 fork=true logpath=shard/shard1/shard1-37017.log replSet=shard1 shardsvr=true ``` ### shard1-37018.conf * vim shard/shard1/shard1-37018/shard1-37018.conf ```scala dbpath=shard/shard1/shard1-37018 bind_ip=0.0.0.0 port=37018 fork=true logpath=shard/shard1/logs/shard1-37018.log replSet=shard1 shardsvr=true ``` ### shard1-37019.conf * vim shard/shard1/shard1-37019/shard1-37019.conf ```scala dbpath=shard/shard1/shard1-37019 bind_ip=0.0.0.0 port=37019 fork=true logpath=shard/shard1/logs/shard1-37019.log replSet=shard1 shardsvr=true ``` ### 启动&配置shard1 ```scala ./bin/mongod -f shard/shard1/shard1-37017/shard1-37017.conf ./bin/mongod -f shard/shard1/shard1-37018/shard1-37018.conf ./bin/mongod -f shard/shard1/shard1-37019/shard1-37019.conf ./bin/mongo --port 37017 use admin var cfg ={"_id":"shard1", "protocolVersion" : 1, "members":[ {"_id":1,"host":"172.16.65.139:37017"}, {"_id":2,"host":"172.16.65.139:37018"}, {"_id":3,"host":"172.16.65.139:37019"} ] }; rs.initiate(cfg) rs.status() ``` ### shard2-47017 * vim shard/shard2/shard2-47017/shard2-47017.conf ```scala dbpath=shard/shard2/shard2-47017 bind_ip=0.0.0.0 port=47017 fork=true logpath=shard/shard2/logs/shard1-47017.log replSet=shard2 shardsvr=true ``` ### shard2-47018 * vim shard/shard2/shard2-47018/shard2-47018.conf ```scala dbpath=shard/shard2/shard2-47018 bind_ip=0.0.0.0 port=47018 fork=true logpath=shard/shard2/logs/shard2-47018.log replSet=shard2 shardsvr=true ``` ### shard2-47019 * vim shard/shard2/shard2-47019/shard2-47019.conf ```scala dbpath=shard/shard2/shard2-47019 bind_ip=0.0.0.0 port=47019 fork=true logpath=shard/shard2/logs/shard2-47019.log replSet=shard2 shardsvr=true ``` ### 配置shard2 ```scala ./bin/mongod -f shard/shard2/shard2-47017/shard2-47017.conf ./bin/mongod -f shard/shard2/shard2-47018/shard2-47018.conf ./bin/mongod -f shard/shard2/shard2-47019/shard2-47019.conf ./bin/mongo --port 47017 use admin var cfg ={"_id":"shard2", "protocolVersion" : 1, "members":[ {"_id":1,"host":"172.16.65.139:47017"}, {"_id":2,"host":"172.16.65.139:47018"}, {"_id":3,"host":"172.16.65.139:47019"} ] }; rs.initiate(cfg) rs.status() ``` ## 配置和启动路由节点 ```scala |-- route |-- route-27017.conf |-- logs |-- route.log mkdir -p route/logs touch route/logs/route.log ``` ### route-27017.conf * vim route/route-27017.conf ```scala port=27017 bind_ip=0.0.0.0 fork=true logpath=route/logs/route.log configdb=configsvr/172.16.65.139:17017,172.16.65.139:17018,172.16.65.139:17019 ``` ### 启动路由 ```scala ./bin/mongos -f route/route-27017.conf ``` ## 路由添加分片节点 ```scala ./bin/mongo --port 27017 sh.status() sh.addShard("shard1/172.16.65.139:37017,172.16.65.139:37018,172.16.65.139:37019"); sh.addShard("shard2/172.16.65.139:47017,172.16.65.139:47018,172.16.65.139:47019"); sh.status() ``` ## 开启数据库和集群分片 * 继续使用mongos完成分片开启和分片大小设置 ```scala # 为数据库开启分片功能 sh.enableSharding("lagou_resume") # 为指定集合开启分片功能 sh.shardCollection("lagou_resume.lagou_resume_datas",{"name":"hashed"}) ``` ## 向集合中插入测试数据 ```scala use lagou_resume; for(var i=1;i<= 1000;i++){ db.lagou_resume_datas.insert({"name":"test"+i, salary:(Math.random()*20000).toFixed(2)}); } ``` ## 验证分片效果 分别进入 shard1 和 shard2 中的数据库 进行验证 ```scala sh.status() # shard1 ./bin/mongo --port 37019 use lagou_resume; db.lagou_resume_datas.find(); # shard2 ./bin/mongo --port 47017 use lagou_resume; db.lagou_resume_datas.find(); db.auth('lagou_gx','abc321') ``` ## 添加仲裁节点 ```scala 1.方式一 var cfg ={"_id":"lagouCluster", "protocolVersion" : 1, "members":[ {"_id":1,"host":"172.16.65.139:37017","priority":10}, {"_id":2,"host":"172.16.65.139:37018","priority":0}, {"_id":3,"host":"172.16.65.139:37019","priority":5}, {"_id":4,"host":"172.16.65.139:37020","arbiterOnly":true} ] }; // 重新装载配置,并重新生成集群节点。 rs.reconfig(cfg) //重新查看集群状态 rs.status() 2.方式二 rs.addArb("172.16.65.139:37020") ``` ## 权限认证 ```scala 1.进入路由创建管理员 use admin db db.createUser( { user:"root", pwd:"123456", roles:[{role:"root",db:"admin"}] }) 2.创建普通用户 use lagou_resume db.createUser({ user:"lagou_gx", pwd:"abc321", roles:[{role:"readWrite",db:"lagou_resume"}] }) 3.重启mongd killall mongod 4.生成密钥文件 并修改权限 data/mongodb/testKeyFile.file chmod 600 data/mongodb/testKeyFile.file 5.配置节点集群和分片节点集群开启安全认证和指定密钥文件 vim config/config1/config-17017.conf vim config/config2/config-17018.conf vim config/config3/config-17019.conf vim shard/shard1/shard1-37017/shard1-37017.conf vim shard/shard1/shard1-37018/shard1-37018.conf vim shard/shard1/shard1-37019/shard1-37019.conf vim shard/shard2/shard2-47017/shard2-47017.conf vim shard/shard2/shard2-47018/shard2-47018.conf vim shard/shard2/shard2-47019/shard2-47019.conf --------- auth=true keyFile=data/mongodb/testKeyFile.file 6.在路由配置文件中 设置密钥文件 vim route/route-27017.conf keyFile=data/mongodb/testKeyFile.file 7.启动所有的配置节点 分片节点 和 路由节点 使用路由进行权限验证 ./bin/mongod -f config/config1/config-17017.conf ./bin/mongod -f config/config2/config-17018.conf ./bin/mongod -f config/config3/config-17019.conf ./bin/mongod -f shard/shard1/shard1-37017/shard1-37017.conf ./bin/mongod -f shard/shard1/shard1-37018/shard1-37018.conf ./bin/mongod -f shard/shard1/shard1-37019/shard1-37019.conf ./bin/mongod -f shard/shard2/shard2-47017/shard2-47017.conf ./bin/mongod -f shard/shard2/shard2-47018/shard2-47018.conf ./bin/mongod -f shard/shard2/shard2-47019/shard2-47019.conf ./bin/mongos -f route/route-27017.conf // 测试 ./bin/mongo --port 27017 use lagou_resume; db.auth('lagou_gx','abc321') db.lagou_resume_datas.find(); # shard1 ./bin/mongo --port 37019 use lagou_resume; db.lagou_resume_datas.find(); # shard2 ./bin/mongo --port 47017 use lagou_resume; db.lagou_resume_datas.find(); ./bin/mongo --port 47018 use lagou_resume; db.auth('lagou_gx','abc321') ``` ## 测试 ```scala # 停止 ps -ef|grep mongo killall mongod # 启动 ./bin/mongod -f config/config1/config-17017.conf ./bin/mongod -f config/config2/config-17018.conf ./bin/mongod -f config/config3/config-17019.conf ./bin/mongod -f shard/shard1/shard1-37017/shard1-37017.conf ./bin/mongod -f shard/shard1/shard1-37018/shard1-37018.conf ./bin/mongod -f shard/shard1/shard1-37019/shard1-37019.conf ./bin/mongod -f shard/shard2/shard2-47017/shard2-47017.conf ./bin/mongod -f shard/shard2/shard2-47018/shard2-47018.conf ./bin/mongod -f shard/shard2/shard2-47019/shard2-47019.conf ./bin/mongos -f route/route-27017.conf # 连接测试 ./bin/mongo --port 27017 use lagou_resume; db.auth('lagou_gx','abc321') db.lagou_resume_datas.find(); db.lagou_resume_datas.remove({}) use lagou_resume; for(var i=1;i<= 1000;i++){ db.lagou_resume_datas.insert({"name":"test"+i, salary:(Math.random()*20000).toFixed(2)}); } db.lagou_resume_datas.find(); # shard1 ./bin/mongo --port 37019 use lagou_resume; db.auth('lagou_gx','abc321') db.lagou_resume_datas.find(); # shard2 ./bin/mongo --port 47017 use lagou_resume; db.auth('lagou_gx','abc321') db.lagou_resume_datas.find(); ```