Mongo 4.2.8 分片 + 复制集搭建

环境

IPInstance
192.168.65.129

mongos(30000)

config(27017)

shard1主节点(40001)

shard2仲裁节点(40002)

shard3副节点(40003)

192.168.65.130

mongos(30000)

config(27017)

shard1副节点(40001)

shard2主节点(40002)

shard3仲裁节点(40003)

192.168.65.131

mongos(30000)

config(27017)

shard1仲裁节点(40001)

shard2副节点(40002)

shard3主节点(40003)

3台机,每台机5个实例,分别mongos 1 个,config server 1 个,shard server 3 个

 

创建想应目录

mkdir -p /mongodb/{data,logs,apps}

mkdir -p /mongodb/data/shard{1,2,3}

mkdir -p /mongodb/data/config

 

创建用户及修改权限

/usr/sbin/groupadd -g 10001 mongodb

/usr/sbin/useradd -u 10001 -g mongodb mongodb

id mongodb

passwd mongodb

chown -R mongodb:mongodb /mongodb

chmod 775 /mongodb

 

配置 config 配置服务器

配置文件(3 个节点都一样,无需改动):

vi /mongodb/apps/mongodb/bin/mongodb-config.conf

dbpath=/mongodb/data/config

logpath=/mongodb/logs/mongodb-config.log

port=27017

fork=true

journal=true

maxConns=500

logappend=true

pidfilepath=/tmp/mongo-config.pid

directoryperdb=true

replSet=tyconfig

configsvr=true

bind_ip=0.0.0.0

 

启动config实例

3台机
mongod --config /mongodb/apps/mongodb/bin/mongodb-config.conf

创建复制集

连接一个实例

mongo 192.168.65.129:27017

config={_id:"tyconfig",members:[

{_id:0,host:"192.168.65.129:27017"},

{_id:1,host:"192.168.65.130:27017"},

{_id:2,host:"192.168.65.131:27017"},

]}

这个 tyconfig 名字一定要和config 配置文件中 replSet 的名字一致

初始化复制集

rs.initiate(config)

检查状态

rs.status()


复制集配完后,可能状态不会马上改变(可能都是secondary),过几秒就会自动更新

部署和管理分片服务器

部署shard1分片服务器

vi /mongdb/apps/mongodb/bin/mongodb-shard1.conf

dbpath=/mongodb/data/shard1
logpath=/mongodb/logs/mongodb-shard1.log
port=40001
fork=true
#auth=true
#noauth=true
#verbose=true
#vvvv=true
journal=true
maxConns=500
logappend=true
directoryperdb=true
pidfilepath=/tmp/mongo_27018.pid
#cpu=true
#nohttpinterface=false
#notablescan=false
#profile=0
#slowms=200
#quiet=true
#syncdelay=60
replSet=tyshard1
bind_ip=0.0.0.0
shardsvr=true

将此文件copy到另外2台机器

scp /mongodb/apps/mongodb/bin/mongodb-shard1.conf mongodb@192.168.65.130:/mongodb/apps/mongodb/bin/

scp /mongodb/apps/mongodb/bin/mongodb-shard1.conf mongodb@192.168.65.131:/mongodb/apps/mongodb/bin/

启动3台shard1实例

mongod --config /mongodb/apps/mongodb/bin/mongodb-shard1.conf 

连接一个实例

mongo 192.168.65.129:40001

创建复制集

use admin

config={_id:"tyshard1",members:[

{_id:0,host:"192.168.65.129:40001",priority:2},

{_id:1,host:"192.168.65.130:40001",priority:1},

{_id:2,host:"192.168.65.131:40001",arbiterOnly:true},

]}

这个 tyshard1名字一定要和 shard1配置文件中 replSet 的名字一致

初始化复制集

rs.initiate(config)

检查状态

rs.status()

复制集配完后,可能状态不会马上改变(可能都是secondary),过几秒就会自动更新

部署shard2分片服务器
 

将shard1的配置文件copy一份,修改其中的端口、路径及复制集名称。然后copy给另外2台主机

启动实例

mongod --config /mongodb/apps/mongodb/bin/mongodb-shard2.conf 

连接第二个节点创建复制集(为什么是连接第二个,因为规划的shard 的仲裁节点是129:40002,仲裁节点不能写数据,所以这里不能连129,要连130)

mongo 192.168.65.130:40002

use admin

config={_id:"tyshard2",members:[

{_id:0,host:"192.168.65.129:40002",arbiterOnly:true},

{_id:1,host:"192.168.65.130:40002",priority:2},

{_id:2,host:"192.168.65.131:40002",priority:1},

]}

这个 tyshard1名字一定要和 shard1配置文件中 replSet 的名字一致

初始化复制集

rs.initiate(config)

检查状态

rs.status()

复制集配完后,可能状态不会马上改变(可能都是secondary),过几秒就会自动更新

 

部署shard3分片服务器

将shard1的配置文件copy一份,修改其中的端口、路径及复制集名称。然后copy给另外2台主机

启动实例

mongod --config /mongodb/apps/mongodb/bin/mongodb-shard3.conf

连接第二个节点创建复制集(为什么是连接第二个,因为规划的shard 的仲裁节点是129:40002,仲裁节点不能写数据,所以这里不能连129,要连130)

mongo 192.168.65.129:40003

use admin

config={_id:"tyshard3",members:[

{_id:0,host:"192.168.65.129:40003",priority:1},

{_id:1,host:"192.168.65.130:40003",arbiterOnly:true},

{_id:2,host:"192.168.65.131:40003",priority:2},

]}

这个 tyshard1名字一定要和 shard1配置文件中 replSet 的名字一致

初始化复制集

rs.initiate(config)

检查状态

rs.status()

复制集配完后,可能状态不会马上改变(可能都是secondary),过几秒就会自动更新

创建路由实例

vi /mongodb/apps/mongodb/bin/mongodb-route.conf

pidfilepath=/mongodb/apps/mongo-route.pid

logpath=/mongodb/logs/mongodb-route.log

port=30000

fork=true

maxConns=5000

logappend=true

bind_ip=0.0.0.0

configdb=tyconfig/192.168.66.129:27017,192.168.66.130:27017,192.168.66.121:27017

并传入另外2台机器

scp /mongodb/apps/mongodb/bin/mongodb-route.conf mongodb@192.168.65.130://mongodb/apps/mongodb/bin/

scp /mongodb/apps/mongodb/bin/mongodb-route.conf mongodb@192.168.65.131://mongodb/apps/mongodb/bin/

启动路由实例

mongos --config /mongodb/apps/mongodb/bin/mongodb-route.conf

启用分片功能

登陆路由节点

mongo 192.168.65.129:30000

use admin

sh.addShard("tyshard1/192.168.65.129:40001,192.168.65.130:40001,192.168.65.131:40001")

sh.addShard("tyshard2/192.168.65.129:40002,192.168.65.130:40002,192.168.65.131:40002")

sh.status()

测试服务器分片功能

use config

db.settings.save({"_id":"chunksize","value":1})

模拟写入数据

在tydb库的tyuser表中循环写入6万条数据

use tydb

show collections

for(i=1;i<=60000;i++){db.tyuser.insert({"id":i,"name":"ty"+i})}

启用数据库分片

sh.enableSharding("tydb")
围标创建的索引

db.tyuser.createIndex({"id":1})

 

启用表分片

sh.shardCollection(”tydb.tyuser",{"id":1})

 

查看分片情况

sh.status()

手动添加分片服务器

mongo 192.168.65.129:30000

use admin

sh.addShard("tyshard3/192.168.65.129:40003,192.168.65.130:40003,192.168.65.131:40003")

sh.status()

服务器又对数据进行重新分片,当你再次移除一个分片服务器,此时又会对数据再次进行分片



use tydb

db.tydb.stats()

 

其他

开启平衡器
use admin sh.startBalance()

或者

sh.setBalancerState(true)

关闭平衡器

use admin

sh.stopBalancer()

或者

sh.setBalancerState(false)

.查看是否关闭,返回flase表示平衡器已关闭,还需要查询均衡器正在运行的 情况

sh.getBalancerState()

 

删除分片服务器

1.执行RemoveShard命令

db.runCommand({removeshard:"tyshard3"})

2.查看迁移状态

我们可以反复执行上面语句,查看执行结果。

db.runCommand({removeshard:"tyshard3"})

3.移出非Shard数据

db.runCommand({movePrimary:"tydb",to:"tyshard1"})

4.最后的清理

上面步骤都完成后,还需要在执行一次RemoveShard,清理残余数据。

db.runCommand({removeshard:"mongodb0"})

如果要移除的分片正好是某一个表的primary,就会报错无法移除,那么就先进行如下操作

db.runCommand({moveprimary:"tydb",to:"tyshard1"})

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ty_FFTQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值