在windows环境下配置mongoDB集群
mongodb官网
官网分片文档
首先感谢这次参考的文章:
mongodb搭建高可用分片集群示例-天才卧龙
MongoDB高可用集群搭建示例-lizh
配置中用到端口划分汇总:
(本次配置一共用了2个mongos、3个confiigserver、3个shard)
mongosR1(端口:27019) | mongosR2(端口:27029) | |
---|---|---|
configR1(端口:27018) | configR2(端口:27028) | configR3(端口:27038) |
Shard1R1(端口:27011) | Shard1R2(端口:27021) | Shard1R3(端口:27031) |
这是这次配置所需要用到的端口
配置的过程:
1. 新建文件加存放mongodb集群所需配置文件和数据
2. 在每个config文件夹中新建所需文件
3. 在 config.conf里编写配置内容
net:
port: 27018 #config1的端口27018 config2为27028 config3为27038
bindIp: 0.0.0.0 #允许连接地址,这里统一设置为允许任何ip连接
systemLog:
destination: file
logAppend: true
path: D:\developTool\mongodb\mongoCluster\configR1\log\config.log #config的日志存储地址,config2和config3修改路径即可
storage:
dbPath: D:\developTool\mongodb\mongoCluster\configR1\data #config的数据存储地址,config2和config3修改路径即可
journal:
enabled: true #数据故障恢复和持久化,肯定是开启
#processManagement:
# fork: true #linux下打开此设置,Windows环境下后台启动需要注册服务,
# pidFilePath: /mongo/config/run/mongod.pid
#副本集名称设置
replication:
replSetName: configs
#分片集群角色,配置服务器的固定值
sharding:
clusterRole: configsvr
#这里是集群安全认证配置,首次配置启动集群不打开此配置,先留着,后面再说
#security:
#keyFile:
#authorization: enabled
4. configR2、R3的配置一样,只是端口和路径进行修改
5. 新建shard文件夹以及目录下的文件
(shardR1下新建shard1,因为一个shard没有做分片处理,如果后续做分片处理可以新建shard2、3等等)
(shard1下新建data、log文件以及shard.conf配置文件)
6. 在shard.conf里写配置内容(shardR2和shardR3下的shard1同理配置,修改端口和路径即可)
net:
port: 27011 #shard1的端口27011 ,shard2端口27021 ,shard2端口27031
bindIp: 0.0.0.0
systemLog:
destination: file
logAppend: true
path: D:\developTool\mongodb\mongoCluster\shardR1\shard1\log\shard.log #shard1R1的路径,shard1R2和shard1R3做对应修改即可
storage:
dbPath: D:\developTool\mongodb\mongoCluster\shardR1\shard1\data #shard1R1的路径,shard1R2和shard1R3做对应修改即可
journal:
enabled: true
#processManagement:
# fork: true
# pidFilePath: /mongo/shard1/run/mongod.pid
replication:
replSetName: shard1
sharding:
clusterRole: shardsvr #集群中角色归属
7. 再mongosR1下新建文件以及配置文件
8. 在mongos.conf里编写配置
systemLog:
destination: file
logAppend: true
path: D:\developTool\mongodb\mongoCluster\mongosR1\log\mongos.log #mongos没有数据存储地址,只有日志输出地址,mongosR2下做对应的地址调整
# network interfaces
net:
port: 27019 # mongosR1的端口,mongosR2为27029
bindIp: 0.0.0.0
setParameter:
enableLocalhostAuthBypass: false
#注意!此处配置的连接地址为配置服务器config Serve的副本集名称和所在服务器地址以及端口
sharding:
configDB: configs/127.0.0.1:27018,127.0.0.1:27028,127.0.0.1:27038
9. 启动服务,分片集群启动时一定要按照config server,shard ,mongos的顺序启动
在安装mongodb的bin目录下启动dos命令:
./mongod -f D:\developTool\mongodb\mongoCluster\configR1\config.conf
(1) 启动完成之后新打开一个dos窗口进入一台configserver
./mongo -host 127.0.0.1 --port 27018
(2) 进入之后在dos界面配置配置器的服务集:
config = { _id : "configs",
members : [
{_id : 0, host : "127.0.0.1:27018" },
{_id : 1, host : "127.0.0.1:27028" },
{_id : 2, host : "127.0.0.1:27038" }
] }
(3) 初始化副本集:
rs.initiate(config)
(4) 查看副本集状态:
rs.status()
(执行完成之后对应data文件下会产生文件)
10.
(1) 在开启三个dos窗口分别启动shardR1的shard1、shardR2的shard1和shardR3的shard1
./mongod -f D:\developTool\mongodb\mongoCluster\shardR1\shard1\shard.conf
./mongod -f D:\developTool\mongodb\mongoCluster\shardR2\shard1\shard.conf
./mongod -f D:\developTool\mongodb\mongoCluster\shardR3\shard1\shard.conf
(2) 打开新的dos窗口连接shardR1
./mongo --port 27011
(3) 配置shard1的副本集:
config = { _id : "shard1",
members : [
{_id : 0, host : "127.0.0.1:27011"},
{_id : 1, host : "127.0.0.1:27021"},
{_id : 2, host : "127.0.0.1:27031"}
] }
(4) 初始化副本集:
rs.initiate(config);
11.
(1) 分别打开三个新的dos窗口启动前端路由器mongosR1,mongosR2
./mongos -f D:\developTool\mongodb\mongoCluster\mongosR1\mongos.conf
./mongos -f D:\developTool\mongodb\mongoCluster\mongosR2\mongos.conf
(2) 新开一个dos窗口:连接任意一个mongos
./mongo --port 27019
(3) 使用admin库,启用集群分片,创建用户
use admin;
sh.addShard("shard1/127.0.0.1:27011,127.0.0.1:27021,127.0.0.1:27031");
db.createUser( { user: "admin", pwd: "Zaq12wsx", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
(4) 关闭当前mongos 连接,重连如下:
./mongo --port 27019 -u "admin" -p "Zaq12wsx" --authenticationDatabase "admin"
#设置一下chunk的大小:
use config;
#设置块大小为1M是方便实验,不然需要插入海量数据
db.setting.save({"_id":"chunksize","value":1})
#cda配置
use cda;
#启用数据库分片
sh.enableSharding("cda")
#创建集合
db.createCollection("cdaDocLibMongo");
#以" uuid "作哈希索引分片键
db.cdaDocLibMongo.createIndex({"uuid":"hashed"})
#对cdaDocLibMongo集合启用分片
sh.shardCollection( " cda.cdaDocLibMongo", { " uuid " : "hashed" } )
# 查看分片情况
sh.status()
# 查看分片列表,所有分片
db.runCommand({listShards:1}) use config;
# 查询当前块大小
db.settings.find({"_id":"chunksize"})
# 修改块大小
db.settings.save( { _id:"chunksize", value: 64 } );
到此总共开启了8个服务(configserver3 、shard3 、mongos*2)
启动顺序一定要按照configserver、shard、mongos顺序启动