DB

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});}
上一篇下一篇

猜你喜欢

热点阅读