一.主从搭建
1.我在两台机器上操作(172.30.50.179,180 )
1.cd /usr/local/app/mongodb-4.0.5
2.mkdir -p data/{37017,37018}
3.mkdir -p config log
4.添加配置文件
vim config/config1-37017.conf 180的机器
dbpath=/usr/local/app/mongodb-4.0.5/data/37017 #数据存储路径
port=37017 #端口号
fork=true #是否后台启动
logpath=/usr/local/app/mongodb-4.0.5/log/config1-37017.log #日志文件目录
logappend=true #重启后日志是否追加
bind_ip=0.0.0.0 #是否限制IP使用 0.0.0.0(代表不限制ip使用)
replSet=shardCluster #集群名称
#configsvr=true #是否是一个配置集群-注意:此处为主从则该节点不配置,如果为shard分片集群则打开,切记
vim config/config2-37018.conf
dbpath=/usr/local/app/mongodb-4.0.5/data/37018 #数据存储路径
port=37018 #端口号
fork=true #是否后台启动
logpath=/usr/local/app/mongodb-4.0.5/log/config2-37018.log #日志文件目录
logappend=true #重启后日志是否追加
bind_ip=0.0.0.0 #是否限制IP使用 0.0.0.0(代表不限制ip使用)
replSet=shardCluster #集群名称
configsvr=true #是否是一个配置集群 -注意:此处为主从则该节点不配置,如果为shard分片集群则打开,切记
分别启动 config2-37018.conf config1-37017.conf 配置文件
./bin/mongod -config ./config config2-37018.conf
./bin/mongod -config ./config config1-37017.conf
启动完成后 netstat -nutlp
2.179的机器上配置 跟上面步骤一样
vim config/config3-37019.conf
dbpath=/usr/local/app/mongodb-4.0.5/data/37019 #数据存储路径
port=37019 #端口号
fork=true #是否后台启动
logpath=/usr/local/app/mongodb-4.0.5/log/config3-37019.log #日志文件目录
logappend=true #重启后日志是否追加
bind_ip=0.0.0.0 #是否限制IP使用 0.0.0.0(代表不限制ip使用)
replSet=shardCluster #集群名称
configsvr=true #是否是一个配置集群 注意:此处为主从则该节点不配置,如果为shard分片集群则打开,切记
启动 ./bin/mongod -config ./config/config3-37019.conf
进入到mongo 的客户端 ./bin/mongo --host 172.30.43.179 --host 37019
查看集群命令
现在我们需要添加一个配置js脚本,将节点添加进去
声明配置变量
var cfg1 ={
_id:"shardCluster",
protocolVersion : 1,
members:[
{_id:0,host:"172.30.43.179:37019"}, #此处一定要写ip不能为localhost 或者127.0.0.1 否则会报错
{_id:1,host:"172.30.43.180:37017"},
{_id:2,host:"172.30.43.180:37018"},
]
}
// 初始化配置
rs.initiate(cfg1)
// 查看集群状态 需要闪等一下 primary节点才能出来
rs.status()
#向集群中添加数据,主节点添加
user lq
db.emp.insert(.....)
进入到从节点 只需要切换端口就行
默认节点下从节点不能读取数据;解决办法 rs.slaveOk()
可以尝试kill 主节点,看从节点是否自动切换。
二,mongodb 中的分片架构
1.三个配置节点 172.30.43.180:37019 172.30.43.179:37017 172.30.43.179:37018 配置文件就是上面三个文件
2.配置两个shard集点集群 172.30.43.180:47017 172.30.43.179:47017
#179机器
dbpath=/usr/local/app/mongodb-4.0.5/data/shard1
port=47017#切记如果不是在同一台机器上,不配置的话分片会报错
fork=true
logpath=/usr/local/app/mongodb-4.0.5/log/shard1-47017.log
shardsvr=true
#180机器
dbpath=/usr/local/app/mongodb-4.0.5/data/shard2
port=47017
fork=true
logpath=/usr/local/app/mongodb-4.0.5/log/shard2-47017.log
shardsvr=true#切记如果不是在同一台机器上,不配置的话分片会报错
启动shard1 shard2 ./bin/mongod -f ./config/shard2-47017.conf
报错信息: 这就是shard 中的bind_ip=0.0.0.0 没有配置
3.配置信息 配置一个路由节点 roture 172.30.43.179:27017
port=27017
bind_ip=0.0.0.0
fork=true
logpath=/usr/local/app/mongodb-4.0.5/log/route.log
configdb=shardCluster/172.30.43.180:37017,172.30.43.180:37018,172.30.43.179:37019
启动 路由节点 mongos :./bin/mongos -f ./config/route-27017.conf
进入到route节点配置 shard节点
为数据库开启分片功能
添加分片 sh.addShard("172.30.43.179:47017") sh.addShard("172.30.43.180:47017")
查看分片状态
目前看到的只是一个分区信息 原因是因为数据默认为 64M
1.为数据库开启分片功能 sh.enableSharding("shardCluster")
为指定集合开启分片功能 sh.shardCollection("shardCluster.pressure",{"_id":1})
添加数据测试:
查看数据
到此分片集群搭建完毕。
================================================================================================
以下为测试分区,可以不用看
修改分片大小 ,目前只看到第一个分区有数据,现在修改分区1的大小
尝试插入32183万条数据
添加数据库脚本
for (var i = 0; i < 32183;i++){
db.pressure.insert({_id:i,name:"刘"+i,phone:1881221344+i})
}sh.status()
查看数据库数据
可以修改 shard分区大小
至此,两个分区都有数据了。 完结。。。不足之处还望指出