Mongodb 分片集群
2020-05-13 本文已影响0人
Odven
在单台服务器上做 Mongodb分片集群测试
27080 mongos
27081 27082 27083 config
27084 27085 27086 shard1
27087 27088 27089 shard2
1) 下载 mongodb-linux-x86_64-rhel70-4.2.6.tgz
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.6.tgz
2) 解压,配置环境变量
tar -xf mongodb-linux-x86_64-rhel70-4.2.6.tgz -C /opt/
cd /opt/
mv mongodb-linux-x86_64-rhel70-4.2.6/ mongodb
echo "export PATH=$PATH:/opt/mongodb/bin/" >> /etc/profile
source /etc/profile
3) 脚本部署10个mongodb实例
# 搭建shard1副本集
cat > deploy_mongo_shard1.sh << EOF
#!/bin/bash
for i in {4..6}
do
mkdir /data/mongodb/2708\${i}/{data,log,conf,pid} -p
echo '''
systemLog:
destination: file
logAppend: true
path: /data/mongodb/27017/log/mongodb.log
storage:
journal:
enabled: true
dbPath: /data/mongodb/27017/data/
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 0.2
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
# security:
# keyFile: /data/mongodb/testKeyFile.file
# authorization: enabled
processManagement:
fork: true
pidFilePath: /data/mongodb/27017/pid/mongodb.pid
timeZoneInfo: /usr/share/zoneinfo
net:
port: 27017
bindIp: 127.0.0.1
replication:
oplogSizeMB: 256
replSetName: shard1
sharding:
clusterRole: shardsvr
''' > /data/mongodb/2708\${i}/conf/mongodb_2708\${i}.conf
sed -i "s#27017#2708\${i}#g" /data/mongodb/2708\${i}/conf/mongodb_2708\${i}.conf
done
EOF
# 搭建shard2副本集
cat > deploy_mongo_shard2.sh << EOF
#!/bin/bash
for i in {7..9}
do
mkdir /data/mongodb/2708\${i}/{data,log,conf,pid} -p
echo '''
systemLog:
destination: file
logAppend: true
path: /data/mongodb/27017/log/mongodb.log
storage:
journal:
enabled: true
dbPath: /data/mongodb/27017/data/
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 0.2
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
# security:
# keyFile: /data/mongodb/testKeyFile.file
# authorization: enabled
processManagement:
fork: true
pidFilePath: /data/mongodb/27017/pid/mongodb.pid
timeZoneInfo: /usr/share/zoneinfo
net:
port: 27017
bindIp: 127.0.0.1
replication:
oplogSizeMB: 256
replSetName: shard2
sharding:
clusterRole: shardsvr
''' > /data/mongodb/2708\${i}/conf/mongodb_2708\${i}.conf
sed -i "s#27017#2708\${i}#g" /data/mongodb/2708\${i}/conf/mongodb_2708\${i}.conf
done
EOF
# 搭建config副本集
cat > deploy_mongo_config.sh << EOF
#!/bin/bash
for i in {1..3}
do
mkdir /data/mongodb/2708\${i}/{data,log,conf,pid} -p
echo '''
systemLog:
destination: file
logAppend: true
path: /data/mongodb/27018/log/mongodb.log
storage:
journal:
enabled: true
dbPath: /data/mongodb/27018/data/
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 0.2
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
# security:
# keyFile: /data/mongodb/testKeyFile.file
# authorization: enabled
processManagement:
fork: true
pidFilePath: /data/mongodb/27018/pid/mongod.pid
timeZoneInfo: /usr/share/zoneinfo
net:
port: 27018
bindIp: 127.0.0.1
replication:
replSetName: configset
sharding:
clusterRole: configsvr
''' > /data/mongodb/2708\${i}/conf/mongodb_2708\${i}.conf
sed -i "s#27018#2708\${i}#g" /data/mongodb/2708\${i}/conf/mongodb_2708\${i}.conf
done
EOF
# 搭建mongos
cat > deploy_mongos.sh << EOF
#!/bin/bash
mkdir /data/mongodb/27080/{conf,log,pid} -p
echo '''
systemLog:
destination: file
logAppend: true
path: /data/mongodb/27080/log/mongos.log
# security:
# keyFile: /data/mongodb/testKeyFile.file
processManagement:
fork: true
pidFilePath: /data/mongodb/27080/pid/mongos.pid
timeZoneInfo: /usr/share/zoneinfo
net:
port: 27080
bindIp: 127.0.0.1
sharding:
configDB:
configset/127.0.0.1:27081,127.0.0.1:27082,127.0.0.1:27083
''' > /data/mongodb/27080/conf/mongos.conf
EOF
chmod +x deploy_mongo_shard1.sh deploy_mongo_shard2.sh deploy_mongo_config.sh deploy_mongos.sh
./deploy_mongo_shard1.sh
./deploy_mongo_shard2.sh
./deploy_mongo_config.sh
./deploy_mongos.sh
4) 启动shard1副本集, shard2副本集, 启动configset副本集, 启动mongos
# 启动shard,config 实例
vim start_config_shard.sh
#!/bin/bash
for i in {1..9}
do
mongod -f /data/mongodb/2708${i}/conf/mongodb_2708${i}.conf
sleep 0.05
done
bash start_config_shard.sh # 执行脚本
# 部署shard1副本集
mongo --port 27084
rs.initiate()
rs.add("127.0.0.1:27085")
rs.addArb("127.0.0.1:27086")
# 部署shard2副本集
mongo --port 27087
rs.initiate()
rs.add("127.0.0.1:27088")
rs.addArb("127.0.0.1:27089")
# 部署config副本集
mongo --port 27081
rs.initiate()
rs.add("127.0.0.1:27082")
rs.add("127.0.0.1:27083")
# 部署mongos
mongos -f /data/mongodb/27080/conf/mongos.conf
5) 开启认证
# 创建keyfile文件
openssl rand -base64 700 > /data/mongodb/testKeyFile.file
chmod 400 /data/mongodb/testKeyFile.file
# 登录mongos, shard1, shard2设置密码
mongo --port 端口
use admin
db.createUser({
user: "root",
pwd: "123",
roles: [{role: "root", db: "admin"}]
})
# 停止mongos, mongod
pkill mongos
pkill mongod
# 去掉注释重新执行
./deploy_mongo_shard1.sh # 去掉脚本里面的注释
./deploy_mongo_shard2.sh # 去掉脚本里面的注释
./deploy_mongo_config.sh # 去掉脚本里面的注释
./deploy_mongos.sh # 去掉脚本里面的注释
# 启动mongos, mongod
mongos -f /data/mongodb/27080/conf/mongos.conf
bash start_config_shard.sh
6) 登录mongos添加分片集群
mongo --port 27080
use admin
db.auth("root", "123")
db.runCommand({addShard: "shard1/127.0.0.1:27084,127.0.0.1:27085,127.0.0.1:27086"})
db.runCommand({addShard: "shard2/127.0.0.1:27087,127.0.0.1:27088,127.0.0.1:27089"})
# 查看分片信息
sh.status()
7) hash分片配置
mongo --port 27080
use admin
db.auth("root", "123")
# 开启数据库分片
db.runCommand( { enablesharding : "test" } )
# 创建索引
use test
db.test.ensureIndex( { id: "hashed" } )
# 集合开启哈希分片
use admin
sh.shardCollection( "test.test", { id: "hashed" } )
8) 测试
mongo --port 27080
use admin
db.auth("root", "123")
use test
for(i=1;i<10000;i++){db.test.insert({"id":i,"name":"ha","age": 100});}