本文共 4907 字,大约阅读时间需要 16 分钟。
一、 架构图如下
分片副本集部署规划:- 2个mongos实例分别在192.168.1.1、192.168.1.2上,端口为27019
- 3个config实例分别在192.168.2.1、192.168.2.2、192.168.2.3上,端口为27018,副本集名为configs
- shard1分片的副本集配置的三个实例分别在192.168.3.1、192.168.3.2、192.168.3.3上,端口为27017
- shard2分片的副本集配置的三个实例分别在192.168.4.1、192.168.4.2、192.168.4.3上,端口为27017
二、 创建/home/mongodb/{log,data,key}路径目录,用于存放mongodb的日志、数据和访问key。
三、mongos实例的config.conf配置文件如下:
systemLog: destination: file # mongos服务器日志的存储路径 path: "/home/mongodb/log/mongos.log" logAppend: truesharding: # 添加config副本集配置 # 例如config副本集配置的三个实例分别在192.168.2.1、192.168.2.2、192.168.2.3上,端口为27018,副本集名为configs。者该配置如下所写 configDB: configs/192.168.2.1:27018,192.168.2.2:27018,192.168.2.3:27018security: # 访问key的路径 keyFile: "/home/mongodb/key/mongodb_keyfile" clusterAuthMode: "keyFile"processManagement: fork: truenet: bindIp: 0.0.0.0 # 配置mongos的端口号为27019 port: 27019
四、config实例的config.conf配置文件如下:
systemLog: destination: file # config服务器日志的存储路径 path: "/home/mongodb/log/mongos.log" logAppend: truestorage: # config服务器数据的存储路径 dbPath: "/home/mongodb/data" journal: enabled: truesecurity: # 启用身份认证 authorization: "enabled" # 访问key的路径 keyFile: "/home/mongodb/key/mongodb_keyfile" clusterAuthMode: "keyFile"sharding: # 标识该实例用于config服务器 clusterRole: "configsvr"replication: oplogSizeMB: 1024 # config副本集的名字 replSetName: "configs"processManagement: fork: truenet: bindIp: 0.0.0.0 # 配置config的端口号为27018 port: 27018
四、分片下每一个mongod实例的config.conf配置文件如下:
systemLog: destination: file # shard服务器日志的存储路径 path: "/home/mongodb/log/shard.log" logAppend: truestorage: # shard服务器数据的存储路径 dbPath: "/home/mongodb/data" journal: enabled: truesecurity: # 启用身份认证 authorization: "enabled" # 访问key的路径 keyFile: "/home/mongodb/key/mongodb_keyfile" clusterAuthMode: "keyFile"sharding: # 标识该实例用于shard分片 clusterRole: "shardsvr"replication: oplogSizeMB: 1024 # shard副本集的名字 replSetName: "shard1"processManagement: fork: truenet: bindIp: 0.0.0.0 # 配置shard的端口号为27017 port: 27017
五、key的生成
mongodb_key_address=/home/mongodb/key/mongodb_keyfileopenssl rand -base64 756 > $mongodb_key_addresschmod 400 $mongodb_key_address
所有实例中都使用同一个key,复制key后还得要修改400权限后mongodb才可以正常运行。
六、 准备好所有的conf配置文件和key后,第一步首先启动负责shard的六个mongod实例。
# shard1分片# 在192.168.3.1主机中运行mongod -f /home/mongodb/config.conf# 在192.168.3.2主机中运行mongod -f /home/mongodb/config.conf# 在192.168.3.3主机中运行mongod -f /home/mongodb/config.conf# shard2分片# 在192.168.4.1主机中运行mongod -f /home/mongodb/config.conf# 在192.168.4.2主机中运行mongod -f /home/mongodb/config.conf# 在192.168.4.3主机中运行mongod -f /home/mongodb/config.conf
然后登入shard1分片中任意一台主机中运行以下代码
# 向端口号为27017的mongodb服务器输入指令mongo -port 27017 << mongouse admin;config={_id:'shard1',members:[{_id: 0 ,host: '192.168.3.1:27017'},{_id: 1 ,host: '192.168.3.2:27017'},{_id: 2 ,host: '192.168.3.3:27017'}]};rs.initiate(config);exit;mongo
然后再登入shard2分片中任意一台主机中运行以下代码
# 向端口号为27017的mongodb服务器输入指令mongo -port 27017 << mongouse admin;config={_id:'shard2',members:[{_id: 0 ,host: '192.168.4.1:27017'},{_id: 1 ,host: '192.168.4.2:27017'},{_id: 2 ,host: '192.168.4.3:27017'}]};rs.initiate(config);exit;mongo
此时,shard1、shard2分片的副本集已经正式启动了。
七、 然后再启动config的三个mongod实例。
# 在192.168.2.1主机中运行mongod -f /home/mongodb/config.conf# 在192.168.2.2主机中运行mongod -f /home/mongodb/config.conf# 在192.168.2.3主机中运行mongod -f /home/mongodb/config.conf
然后登入其中任意一台主机中运行以下代码
# 向端口号为27018的mongodb服务器输入指令mongo -port 27018 << configuse admin;config={ _id:'configs',members:[{ _id: 0 ,host: '192.168.2.1:27018'},{ _id: 1 ,host: '192.168.2.2:27018'},{ _id: 2 ,host: '192.168.2.3:27018'}]};rs.initiate(config);exit;config
那么config服务器的副本集也已经正式启动了。
八、 启动mongos的服务。
# 在192.168.1.1主机中运行mongos -f /home/mongodb/config.conf# 在192.168.1.2主机中运行mongos -f /home/mongodb/config.conf
任选一台mongos主机,运行以下代码
# 向端口号为27019的mongodb服务器输入指令mongo -port 27019 << mongosuse admin;# 创建root权限的账户,密码建议更改较为复杂的密码db.createUser({user:"root",pwd:"root",roles:[{role:"root",db:"admin"}]});# 用root账户登陆MongoDBdb.auth("root","root");# 添加分片集群信息sh.addShard("shard1/192.168.3.1:27017,192.168.3.2:27017,192.168.3.3:27017");sh.addShard("shard2/192.168.4.1:27017,192.168.4.2:27017,192.168.4.3:27017");# 自此分片添加已经完成,下面为对具体某集合执行分片指令# 设置分片规则(此处对testDB.col进行哈希分片):# 进入testDB库use testDB;# 创建集合coldb.createCollection(col);# 为集合col添加{"id":1}索引db.col.createIndex({"id":1})# 指定test_db分片生效:db.runCommand({enablesharding:"testDB"});# 指定数据库里需要分片的集合和片键:db.runCommand({shardcollection:"testDB.col",key:{id:"hashed"}})exitmongos
MongoDB分片副本集已经正式启动,并以完成对testDB.col集合进行分片并以文档中的id作为片键,执行哈希分片。
九、 分片副本集的测试用例如下:
首先登陆一台mongos服务器的主机,并用root权限账户实行登陆,在mongos服务器中运行以下代码
use testDBfor(var i = 0;i<5000;i++){ var arr = [{ id:0}]; for(var j = 0;j<1000;j++){ arr.push({ id:i,value_j:j}); } db.testDB.insertMany(arr);}
执行以上代码后,相当于向testDB.col集合插入5005000条数据。然后在执行以下代码,观察testDB.col集合的分块情况。
sh.status()
执行后可以观察到该集合在分片中的数据分布情况。
转载地址:https://blog.csdn.net/qq_39741836/article/details/105995105 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!