MongoDB副本集+分片集群搭建(windows下)

MongoDB副本集+分片集群搭建(windows下)

环境信息:

操作系统:windows
mongodb版本:mongodb-win32-x86_64-2008plus-ssl-3.4.10-signed.msi
3台虚拟机:

192.168.2.138  192.168.2.113  192.168.2.112

集群环境:
2个分片副本集

shard1(192.168.2.138:27018  192.168.2.113:27018  192.168.2.112:27018)
shard2(192.168.2.138:27019  192.168.2.113:27019  192.168.2.112:27019)

1个config副本集

(192.168.2.138:28018  192.168.2.113:28018  192.168.2.112:28018)

1个mongos路由节点

192.168.2.138:28017(可以有多个)
文件夹:
/mongodb
    /conf
        配置文件
    /config
        /data
        /log
    /mongos
        /data
        /log
    /shard1
        /data
        /log
    /shard2
        /data
        /log
搭建mongodb分片副本集

shard1集群搭建步骤

  • 添加repl1副本集配置文件 shard1.conf (138/112/113)
##副本集配置
# fork: 后台运行 windows中需要注释掉
#fork=true
#数据路径
dbpath=D:\mongodb\shard1\data
#日志路径
logpath=D:\mongodb\shard1\log\shard1.log
logappend=true
#端口
port=27018
bind_ip=0.0.0.0
#副本集名称
replSet=repl1
smallfiles=true
#分片集群必须要有的属性
shardsvr=true
  • 添加repl2副本集配置文件 shard2.conf (138/112/113)
##副本集配置
#后台运行 windows中需要注释掉
#fork=true
#数据路径
dbpath=D:\mongodb\shard2\data
#日志路径
logpath=D:\mongodb\shard2\log\shard2.log
logappend=true
#端口
port=27019
bind_ip=0.0.0.0
#副本集名称
replSet=repl2
smallfiles=true
#分片集群必须要有的属性
shardsvr=true
  • 启动副本集
#linux下根据自己的路径进行修改
${MONGODB_HOME}/bin/mongod -f shard1.conf

#windows下 不支持上面的语句 所以只能改用为windows服务
#每台机器上都要执行
"C:\Program Files\MongoDB\Server\3.4\bin\mongod.exe" --config "D:\mongodb\conf\shard1.conf" --serviceName "shard1" --serviceDisplayName "shard1" --install
net start shard1
"C:\Program Files\MongoDB\Server\3.4\bin\mongod.exe" --config "D:\mongodb\conf\shard2.conf" --serviceName "shard2" --serviceDisplayName "shard2" --install
net start shard2
  • 登录其中一台机器的副本集,添加初始化配置,进入27018
#初始化配置 repl1 
${MONGODB_HOME}/bin/mongo.exe -port 27018
  • 进入客户端之后,执行初始化命令
> rs.initiate({
    _id:'repl1',  
    members:[
        {_id:0, host:'192.168.2.138:27018'},
        {_id:1, host:'192.168.2.113:27018'},
        {_id:2, host:'192.168.2.112:27018'}
    ]
})
  • 进入27019
#初始化配置 repl2 
${MONGODB_HOME}/bin/mongo.exe -port 27019
  • 初始化
> rs.initiate({
    _id:'repl2',  
    members:[
        {_id:0, host:'192.168.2.138:27019'},
        {_id:1, host:'192.168.2.113:27019'},
        {_id:2, host:'192.168.2.112:27019'}
    ]
})

查看状态

xxxPRIMARY > rs.status() 
  • 搭建config节点副本集 创建config.conf配置文件 (138/113/112)
# 日志存储路径
logpath=D:\mongodb\config\log\config.log
# 数据存储路径
dbpath=D:\mongodb\config\data
logappend=true
# 端口
port=28018
bind_ip=0.0.0.0
auth=false
# 是否一个库一个文件夹
directoryperdb=true

oplogSize=2048
# 节点名称
replSet=configReplSet
configsvr=true
  • 启动配置副本集
#linux下根据自己的路径进行修改
${MONGODB_HOME}/bin/mongod -f config.conf

#windows下 不支持上面的语句 所以只能改用为windows服务
#每台机器上都要执行
"C:\Program Files\MongoDB\Server\3.4\bin\mongod.exe" --config "D:\mongodb\conf\config.conf" --serviceName "config" --serviceDisplayName "config" --install
net start config
  • 初始化配置节点,其中一台机器进入28018
#初始化配置 config
# 登录 指定端口和IP
${MONGODB_HOME}/bin/mongo.exe -host 192.168.2.138 -port 28018

初始化命令
> rs.initiate({
    _id:'configReplSet',  
    members:[
        {_id:0, host:'192.168.2.138:28018'},
        {_id:1, host:'192.168.2.113:28018'},
        {_id:2, host:'192.168.2.112:28018'}
    ]
})
  • 搭建mongos节点 mongos配置文件(138)
# 日存储路径
logpath=D:\mongodb\mongos\log\mongos.log
logappend=true

bind_ip=0.0.0.0
port=28017
#fork=true

#监听的配置服务器,只能有1个或者3个 配置服务器副本集名称(replSet)/ip地址:端口
configdb=configReplSet/192.168.2.138:28018,192.168.2.113:28018,192.168.2.112:28018
  • 启动mongos
#linux下根据自己的路径进行修改
${MONGODB_HOME}/bin/mongos -f mongos.conf

#windows下 不支持上面的语句 所以只能改用为windows服务
#每台机器上都要执行
"C:\Program Files\MongoDB\Server\3.4\bin\mongos.exe" --config "D:\mongodb\conf\mongos.conf" --serviceName "mongos" --serviceDisplayName "mongos" --install
net start mongos
# 登录mongos节点
${MONGODB_HOME}/bin/mongo 192.168.2.138:28017 
  • 在mongos中添加集群中的分片节点
# 切换admin
mongos> use admin


#添加shard1副本集
mongos> db.runCommand({
    addShard: "repl1/192.168.2.138:27018,192.168.2.113:27018,192.168.2.112:27018", 
    name: "shard1"
})


#添加shard2副本集
mongos> db.runCommand({
    addShard: "repl2/192.168.2.138:27019,192.168.2.113:27019,192.168.2.112:27019", 
    name: "shard2"
})


# 查看分片
mongos> db.runCommand({
    listshards:1
})


# 查看状态
mongos> sh.status()
测试分片集群
  1. 开启数据库分片配置
# 开启分片数据库
mongos> db.runCommand({ enablesharding : "testdb"})
  1. 创建分片的key键
# 根据id进行分片
mongos> db.runCommand({ 
    shardcollection : "testdb.user", 
    key : {id : 1}
})

# 这边2个执行语句是创库创表,执行如果找不到表会自动创表和表的索引

如果开启已经存在的库表 需要自己创建表索引

mongos> use testdb
mongos> db.user.ensureIndex({
    id : 1
}) 
  1. 添加测试数据
var arr=[]
for(var i=0;i<2000000;i++){
    var uid=i;
    var name="testdata"+uid;
    arr.push({
        "id":uid,
        "name":name
    })
}
db.user.insertMany(arr)
其他命令
# 添加分片
db.runCommand({
    addShard: "repl2/192.168.2.138:27019,192.168.2.113:27019,192.168.2.112:27019", 
    name: "shard2"
})

# 删除分片
db.runCommand({ removeShard:"shard1" })

# 开启分片数据库
db.runCommand({enablesharding:"testdb"})
# 开启分片集合
db.runCommand({enablesharding:"testcollect"})
# 如果片键要设置为非_id的键,则要先建立索引
db.testcollect.ensureIndex({"name":1})
# 设置片键类型
//哈希片键
db.runCommand({shardcollection: "db.collect", key:{name:"hashed" }})
//递增片键(name的数据类型为整型)
db.runCommand({shardcollection: "db.collect", key:{name:1 }})
//随机片键(name的数据类型为字符串)
db.runCommand({shardcollection: "db.collect", key:{name:1 }})


副本集有关(replication set):
rs.
分片集群(sharding cluster)
sh.
# 启动集群支持分片
sh.enableSharding("testShard")


  mongos> use 库名

  mongos> db.集合名.ensureIndex({"键名":1}) ##创建索引

  mongos> sh.enableSharding("库名") ##开启库的分片

  mongos> sh.shardCollection("库名.集合名",{"键名":1}) ##开启集合的分片并指定片键
后期运维

mongodb的启动顺序是,先启动配置服务器,在启动分片,最后启动mongos.
关闭时,直接killall杀掉所有进程

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值