美文网首页
MongoDB分片集群

MongoDB分片集群

作者: 古飞_数据 | 来源:发表于2022-09-26 06:12 被阅读0次
    image.png image.png

    环境准备
    3台Linux虚拟机,准备MongoDB环境,配置环境变量。
    一定要版本一致(重点),当前使用 version4.4.9

    配置域名解析
    在3台虚拟机上执行以下命令,注意替换实际 IP 地址
    echo "192.168.65.97 mongo1 mongo01.com mongo02.com" >> /etc/hosts
    echo "192.168.65.190 mongo2 mongo03.com mongo04.com" >> /etc/hosts
    echo "192.168.65.200 mongo3 mongo05.com mongo06.com" >> /etc/hosts

    准备分片目录
    在各服务器上创建数据目录,我们使用 /data,请按自己需要修改为其他目录:
    在mongo01.com / mongo03.com / mongo05.com 上执行以下命令:

    mkdir -p /data/shard1/db /data/shard1/log /data/config/db /data/config/log

    在mongo02.com / mongo04.com / mongo06.com 上执行以下命令:
    mkdir ‐p /data/shard2/db /data/shard2/log /data/mongos/

    创建第一个分片用的复制集
    在mongo01.com / mongo03.com / mongo05.com 上执行以下命令:
    mongod --bind_ip 0.0.0.0 --replSet shard1 --dbpath /data/shard1/db
    --logpath /data/shard1/log/mongod.log --port 27010 --fork
    --shardsvr --wiredTigerCacheSizeGB 1

    初始化第一个分片复制集

    进入mongo shell

    mongo --port 27010

    shard1复制集节点初始化

    rs.initiate({
    _id: "shard1",
    "members" : [
    {
    "_id": 0,
    "host" : "mongo01.com:27010"
    },
    {
    "_id": 1,
    "host" : "mongo03.com:27010"
    },
    {
    "_id": 2,
    "host" : "mongo05.com:27010"
    }
    ]
    })

    查看复制集状态

    rs.status()
    db.isMaster()

    创建 config server 复制集
    在mongo01.com / mongo03.com / mongo05.com上执行以下命令:
    mongod --bind_ip 0.0.0.0 --replSet config --dbpath /data/config/db
    --logpath /data/config/log/mongod.log --port 27019 --fork
    --configsvr --wiredTigerCacheSizeGB 1

    初始化 config server 复制集

    进入mongo shell

    mongo mongo01.com:27019

    config复制集节点初始化

    rs.initiate({
    _id: "config",
    "members" : [
    {
    "_id": 0,
    "host" : "mongo01.com:27019"
    },
    {
    "_id": 1,
    "host" : "mongo03.com:27019"
    },
    {
    "_id": 2,
    "host" : "mongo05.com:27019"
    }
    ]
    })

    搭建 mongos
    在mongo01.com / mongo03.com / mongo05.com上执行以下命令:

    启动mongos,指定config复制集

    mongos --bind_ip 0.0.0.0 --logpath /data/mongos/mongos.log --port 27017 --fork
    --configdb /data/config/mongo01.com:27019,mongo03.com:27019,mongo05.com:27019

    mongos加入第1个分片
    连接到mongos
    mongo mongo01.com:27017
    添加分片
    mongos>sh.addShard("/data/shard1/mongo01.com:27010,mongo03.com:27010,mongo05.com:27010")
    查看mongos状态
    mongos>sh.status()

    创建分片集合
    连接到mongos, 创建分片集合
    mongo mongo01.com:27017
    mongos>sh.status()
    为了使集合支持分片,需要先开启database的分片功能
    mongos>sh.enableSharding("company")
    执行shardCollection命令,对集合执行分片初始化
    mongos>sh.shardCollection("company.emp", {_id: 'hashed'})
    mongos>sh.status()

    插入测试数据
    use company
    for (var i = 0; i < 10000; i++) {
    db.emp.insert({i: i});
    }
    查询数据分布
    db.emp.find().count()
    db.emp.getShardDistribution()

    创建第2个分片的复制集
    在mongo02.com / mongo04.com / mongo06.com上执行以下命令:
    mongod --bind_ip 0.0.0.0 --replSet shard2 --dbpath /data/shard2/db
    --logpath /data/shard2/log/mongod.log --port 27011 --fork
    --shardsvr --wiredTigerCacheSizeGB 1

    初始化第二个分片的复制集
    进入mongo shell
    2 mongo mongo06.com:27011
    shard2复制集节点初始化
    rs.initiate({
    _id: "shard2",
    "members" : [
    {
    "_id": 0,
    "host" : "mongo06.com:27011"
    },
    {
    "_id": 1,
    "host" : "mongo02.com:27011"
    },
    {
    "_id": 2,
    "host" : "mongo04.com:27011"
    }
    ]
    })

    mongos加入第2个分片
    连接到mongos
    mongo mongo01.com:27017
    添加分片
    mongos>sh.addShard("shard2/mongo02.com:27011,mongo04.com:27011,mongo06.com:27011")
    查看mongos状态
    mongos>sh.status()
    use company
    db.emp.getShardDistribution()

    相关文章

      网友评论

          本文标题:MongoDB分片集群

          本文链接:https://www.haomeiwen.com/subject/dnpzortx.html