• MongoDB分片集群搭建及扩容


    ### 实验:分片集群搭建及扩容
    #### 实验目标及流程
    * 目标:学习如何搭建一个两分片的分片集群
    * 环境:3台Linux虚拟机器,4Core 8GB
    * 步骤:
    * 配置域名解析
    * 准备分片目录
    * 创建第一个分片复制集并初始化
    * 初始化分片集群,加入第一个分片
    * 创建分片表
    * 加入第二个分片
    #### 实验架构
    ```
    demo1 shard1(Primary|27017) shard2(Primary|27011) Config1(27019) mongos(27017)
    ```
    ```
    demo2 Secondary|27010 Secondary|27011 Config2(27019)
    ```
    ```
    demo3 Secondary|27010 Secondary|27011 Config3(27019)
    ```

    | | member1 | member2 | member3 | member4 | member5 | member6 |
    |-------|---------|---------|---------|---------|---------|---------|
    | shard1 | ● | | ● | | ● | |
    | shard2 | | ● | | ● | | ● |
    | config | ● | | ● | | ● | |
    | mongos | | ● | | ● | | ● |

    demo1 member1.example.com member2.example.com

    demo2 member3.example.com member4.example.com

    demo3 member5.example.com member6.example.com

    1. 配置域名解析
    在3台虚拟器上分别执行以下3条命令,注意替换实际IP地址
    ```
    echo "192.168.1.1 demo1 member1.example.com member2.example.com" >> /etc/hosts
    echo "192.168.1.2 demo2 member3.example.com member4.example.com" >> /etc/hosts
    echo "192.168.1.3 demo3 member5.example.com member6.example.com" >> /etc/hosts
    ```
    2. 准备分片目录
    在各服务器上创建数据目录,我们用`/data`,请按自己需要修改为其他目录:
    - 在member1/member3/member5上执行以下命令:
    mkdir -p /data/shard1/
    mkdir -p /data/config/
    _ 在member2/member4/member6上执行以下命令:
    mkdir -p /data/shard2/
    mkdir -p /data/mongos/
    3. 创建第一个分片用的复制集
    在member1/member3/member5上执行以下命令
    ```
    mongod --bind_id 0.0.0.0 --replSet shard1 --dbpath /data/shard1 --logpath
    /data/shard1/mongod.lgo --port 27010 --fork --shardsvr --wiredTigerCacheSizeGB 1
    ```
    4. 初始化第一个分片复制集
    ```
    mongo --host member1.example.com:27010
    rs.initiate({
    _id : "shard1",
    "members": [
    {
    "_id": 0,
    "host": "member1.example.com:27010"
    },
    {
    "_id": 1,
    "host": "member3.example.com:27010"
    },
    {
    "_id": 2,
    "host": "member5.example.com:27010"
    },
    ]
    })
    ```
    5. 创建config server复制集
    在member1/member3/member5上执行以下命令
    ```
    mongod --bind_id 0.0.0.0 --replSet shard1 --dbpath /data/shard1 --logpath
    /data/shard1/mongod.lgo --port 27010 --fork --shardsvr --wiredTigerCacheSizeGB 1
    ```
    6. 初始化config server复制集
    ```
    mongo --host member1.example.com:27010
    rs.initiate({
    _id : "shard1",
    "members": [
    {
    "_id": 0,
    "host": "member1.example.com:27010"
    },
    {
    "_id": 1,
    "host": "member3.example.com:27010"
    },
    {
    "_id": 2,
    "host": "member5.example.com:27010"
    },
    ]
    })
    ```
    7. 在第一台机器上搭建mongos
    ```
    # mongos --bind_ip 0.0.0.0 --logpath /data/mongos/mongos.log --port 27017 --fork
    -- configdb config/member1.example.com:27019,member3.example.com:27019,member5.example.com:27019
    # 连接到mongos,添加分片
    # mongo --host member1.example.com:27017
    mongos>
    sh.addShard("shard1/member1.example.com:27010,member3.example.com:27010,member5.example.com:27010");
    ```
    8. 创建分片表
    ```
    # 连接到mongos,创建分片集合
    # mongo --host member1.example.com:27017
    mongos > sh.status();
    mongos > sh.enableSharding("foo");
    mongos > sh.shardCollection("foo.bar", {_id:'hashed'});
    mongos > sh.status();
    插入测试数据
    use foo
    for (var i = 0; i < 10000; i++) {
    db.bar.insert({i:i});
    }
    ```
    9. 创建第2个分片复制集
    在 member2/member4/member6上执行以下命令
    ```
    mongod --bind_id 0.0.0.0 --replSet shard2 --dbpath /data/shard2
    --logpath /data/shard2/mongod.log --port 27011 --fork --shardsvr --wiredTigerCacheSizeGB 1
    ```
    10. 初始化第二个分片的复制集
    ```
    # mongo --host member2.example.com:27011
    rs.initiate({
    _id : "shard2",
    "members": [
    {
    "_id": 0,
    "host": "member2.example.com:27011"
    },
    {
    "_id": 1,
    "host": "member4.example.com:27011"
    },
    {
    "_id": 2,
    "host": "member6.example.com:27011"
    },
    ]
    })
    ```
    11. 加入第2个分片
    ```
    # 连接到mongos,添加分片
    # mongo --host member1.example.com:27017
    mongos>
    sh.addShard("shard2/member2.example.com:27011,member4.example.com:27011,member6.example.com:27011");
    mongos>sh.status()
    ```
  • 相关阅读:
    你了解RTOS吗?
    [转] git rebase 详解
    MinGW vs MinGW-W64及其它
    【转】Video Rendering with 8-Bit YUV Formats
    Ubuntu假死
    渐进增强和优雅降级的区别
    JavaScript 插件的学习
    菜单的制作
    生活
    小组学习情况
  • 原文地址:https://www.cnblogs.com/w3liu/p/12520431.html
Copyright © 2020-2023  润新知