MongoDB 基础(十)分片+复制集

MongoDB 基础(十)分片+复制集_第1张图片

#各个实例端口分配情况
27000 :mongos
27001~27003 :configsvr*3
27004~27006 :replSet=rs0(primary+standby+arbiter)
27007~27009 :replSet=rs1(primary+standby+arbiter)

replSet=rs0		#复制集
shardsvr=true	#shard server
configsvr=true	#config server

===========================================
#安装软件
===========================================
mkdir -p /data/mongodb/v4.0
groupadd mongodb && useradd -r -g mongodb -m -d /data/mongodb/home mongodb
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.12.tgz
tar -zxvf mongodb-linux-x86_64-4.0.12.tgz -C /data/mongodb/v4.0 --strip-components 1
chown -R mongodb:mongodb /data/mongodb

su - mongodb
echo 'export PATH=$PATH:/data/mongodb/v4.0/bin' >> ~/.bashrc
source ~/.bashrc

===========================================
部署分片&复制集
===========================================
#创建10个不同端口的示例数据目录
for port in {27000..27009}
do
mkdir -p /data/mgdb${port}/{etc,data,log}
done

#创建路由(mongos)配置文件
cat << EOF > /data/mgdb27000/etc/mongod.cnf
bind_ip=0.0.0.0
port=27000
fork=true
maxConns=20000
logappend=true	
logpath=/data/mgdb27000/log/mongod.log
pidfilepath=/data/mgdb27000/mongod.pid
configdb=configs/127.0.0.1:27001,127.0.0.1:27002,127.0.0.1:27003
EOF

#创建3个configsvr配置文件
for port in {27001..27003}
do
cat << EOF > /data/mgdb${port}/etc/mongod.cnf
bind_ip=0.0.0.0
port=${port}
fork=true
logappend=true
directoryperdb=true
dbpath=/data/mgdb${port}/data
logpath=/data/mgdb${port}/log/mongod.log
pidfilepath=/data/mgdb${port}/mongod.pid
configsvr=true
replSet=configs
EOF
done

#创建分片节点集合(rs0)的配置文件(primary+standby+arbiter)
for port in {27004..27006}
do
cat << EOF > /data/mgdb${port}/etc/mongod.cnf
bind_ip=0.0.0.0
port=${port}
fork=true
logappend=true
directoryperdb=true
dbpath=/data/mgdb${port}/data
logpath=/data/mgdb${port}/log/mongod.log
pidfilepath=/data/mgdb${port}/mongod.pid
shardsvr=true
replSet=rs0
EOF
done

#创建分片节点集合(rs1)的配置文件(primary+standby+arbiter)
for port in {27007..27009}
do
cat << EOF > /data/mgdb${port}/etc/mongod.cnf
bind_ip=0.0.0.0
port=${port}
fork=true
logappend=true
directoryperdb=true
dbpath=/data/mgdb${port}/data
logpath=/data/mgdb${port}/log/mongod.log
pidfilepath=/data/mgdb${port}/mongod.pid
shardsvr=true
replSet=rs1
EOF
done

#启动9个服务(configsvr / rs0 / rs1)
for port in {27001..27009}
do
mongod -f /data/mgdb${port}/etc/mongod.cnf
done

#初始化3个复制集( replSet : configs / rs0 / rs1)
mongo 127.0.0.1:27001 --eval 'rs.initiate({_id: "configs", members:[{_id: 0,host:"127.0.0.1:27001"},{_id: 1,host:"127.0.0.1:27002"},{_id: 2,host:"127.0.0.1:27003"}]})'
mongo 127.0.0.1:27004 --eval 'rs.initiate({_id: "rs0", members:[{_id: 0,host:"127.0.0.1:27004"},{_id: 1,host:"127.0.0.1:27005"}]})'
mongo 127.0.0.1:27007 --eval 'rs.initiate({_id: "rs1", members:[{_id: 0,host:"127.0.0.1:27007"},{_id: 1,host:"127.0.0.1:27008"}]})'

#主从复制集添加仲裁(rs0 / rs1)
mongo 127.0.0.1:27004 --eval 'rs.addArb("127.0.0.1:27006")'
mongo 127.0.0.1:27007 --eval 'rs.addArb("127.0.0.1:27009")'

#或者以下方法添加仲裁
#mongo 127.0.0.1:27004 --eval 'rs.add({host:"127.0.0.1:27006",arbiterOnly:true})'
#mongo 127.0.0.1:27007 --eval 'rs.add({host:"127.0.0.1:27009",arbiterOnly:true})'

#启动路由节点服务(注意以 mongos 启动)
mongos -f /data/mgdb27000/etc/mongod.cnf

#路由添加分片节点(Arbiter不添加)
mongo 127.0.0.1:27000 --eval 'sh.addShard("rs0/127.0.0.1:27004,127.0.0.1:27005")'
mongo 127.0.0.1:27000 --eval 'sh.addShard("rs1/127.0.0.1:27007,127.0.0.1:27008")'

#查看相关信息(各实例端口都可查)
mongo 127.0.0.1: --eval 'db.stats()'
mongo 127.0.0.1: --eval 'db.isMaster()'
mongo 127.0.0.1: --eval 'rs.status()'
mongo 127.0.0.1: --eval 'sh.status()'

#查看配置节点记录的信息
mongo 127.0.0.1:27001/config --eval 'db.mongos.find()'
mongo 127.0.0.1:27001/config --eval 'db.shards.find()'
mongo 127.0.0.1:27001/config --eval 'db.databases.find()'

===========================================
测试
===========================================
mongo 127.0.0.1:27000

#创建db并对db启用分片; collection使用字段 "_id" 启用哈希分片
db.createCollection("test")
sh.enableSharding("test")
sh.shardCollection("test.kk", {"_id": "hashed"})

#插入测试数据
use test

for (var i=1; i<=20000;i++){
db.kk.insert({"id": i, "myName": "kk"+i, "myDate": new Date()});
}

db.kk.count()
db.printShardingStatus();

#分片及主备都统计对比
mongo 127.0.0.1:27004/test --eval 'db.kk.count()'
mongo 127.0.0.1:27005/test --eval 'rs.slaveOk();db.kk.count()'

mongo 127.0.0.1:27007/test --eval 'db.kk.count()'
mongo 127.0.0.1:27008/test --eval 'rs.slaveOk();db.kk.count()'

 

 

你可能感兴趣的:(MongoDB)