mongodb4.2版本搭建分片集群

 

本文是在3台麒麟服务器上部署3节点mongos、3节点mongod、3节点config

mongodb下载地址:

https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-4.2.25.tgz

1.基础配置,在三台服务器上分别执行:
echo "10.16.223.182 szhjx-182 mongo01.com mongo02.com" >> /etc/hosts
echo "10.16.223.183 szhjx-183 mongo03.com mongo04.com" >> /etc/hosts
echo "10.16.223.184 szhjx-184 mongo05.com mongo06.com" >> /etc/hosts

在三台服务器上分别创建下面的目录:

说明:

shard1为分片1的目录

shard2为分片2的目录

config为config server的目录

mongos为mongos的目录

注意:

(1)mongos服务没有数据目录,因为mongos不存储数据。

(2)因为是测试环境,所以在三台机器上同时部署副本集shard1和副本集shard2,创建副本集时使用mong01、03、05.com域名模拟shard1,使用mong02、04、06.com模拟shard2。

 

#分别在三台服务器上创建以下目录
mkdir -p /data/mongodb-cluster/shard1/db /data/mongodb-cluster/shard1/log
mkdir -p /data/mongodb-cluster/config/db /data/mongodb-cluster/config/log mkdir -p /data/mongodb-cluster/shard2/db /data/mongodb-cluster/shard2/log
mkdir -p /data/mongodb-cluster/mongos/

 

2.shard1复制集节点mongod.conf配置,在三台服务器上分别执行:

cat >> /data/mongodb-cluster/mongodb4-mongod1/mongod.conf << EOF
processManagement:
   fork: true
   pidFilePath: /data/mongodb-cluster/shard1/db0.pid
net:
   bindIp: 0.0.0.0
   port: 27010
storage:
   dbPath: /data/mongodb-cluster/shard1/db
systemLog:
   destination: file
   path: "/data/mongodb-cluster/shard1/log/mongod.log"
   logAppend: true
storage:
   journal:
      enabled: true
sharding:
    clusterRole: shardsvr
replication:
    replSetName: shard1
EOF

 

3.启动shard1复制集节点上服务,在三台服务器上分别执行::

/data/mongodb-cluster/mongodb4-mongod1/bin/mongod -f /data/mongodb-cluster/mongodb4-mongod1/mongod.conf

 


4.创建shard1数据分片复制集,可以在三个的任意一个复制集节点上连接mongod服务,我在第一个节点连接mongod,:
(1)连接:

/data/mongodb-cluster/mongodb4-mongod1/bin/mongo mongo01.com:27010 
或者  /data/mongodb-cluster/mongodb4-mongod1/bin/mongo --host mongo01.com --port 27010 #这两种连接方式都可以

 

(2)创建shard1,使用rs.initiate命令初始化复制集,指定复制集的名字为shard1,并指定各节点的IP和端口。

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()   # 查看分片复制集

 

5.创建 config server 复制集

在三台服务器上分别执行:

cat >>/data/mongodb-cluster/mongodb4-config/mongod.conf<< EOF
processManagement:
   fork: true
   pidFilePath: /data/mongodb-cluster/config/db0.pid
net:
   bindIp: 0.0.0.0
   port: 27019
storage:
   dbPath: /data/mongodb-cluster/config/db
systemLog:
   destination: file
   path: "/data/mongodb-cluster/config/log/mongod.log"
   logAppend: true
storage:
   journal:
      enabled: true
sharding:
    clusterRole: configsvr
replication:
    replSetName: config
EOF

 

在三台服务器上分别执行:
启动config server服务:

/data/mongodb-cluster/mongodb4-config/bin/mongod -f /data/mongodb-cluster/mongodb4-config/mongod.conf

 

6.创建config server复制集,连接三个节点中任何节点上的config server,我在第一个节点连接config:
(1)连接:

/data/mongodb-cluster/mongodb4-config/bin/mongo --host mongo01.com --port 27019

 

(2)config server 复制集节点初始化,在三台服务器上分别执行:

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

 

rs.status() #查看config server 复制集

 

7.搭建 mongos
在三台服务器上分别执行:

cat >>/data/mongodb-cluster/mongodb4-mongos/mongod.conf<< EOF
processManagement:
   fork: true
   pidFilePath: /data/mongodb-cluster/mongos/db0.pid
net:
   bindIp: 0.0.0.0
   port: 27017
systemLog:
   destination: file
   path: "/data/mongodb-cluster/mongos/mongod.log"
   logAppend: true
sharding:
  configDB: config/mongo01.com:27019,mongo03.com:27019,mongo05.com:27019                           #mongos在启动的时候指定config server复制集的所有节点的IP和端口
EOF

 

在三台服务器上分别执行:
启动:

/data/mongodb-cluster/mongodb4-mongos/bin/mongos -f /data/mongodb-cluster/mongodb4-mongos/mongod.conf  #注意mongos服务需要使用mongos命令启动

 

8.连接到其中一个mongos:
(1)连接:

/data/mongodb-cluster/mongodb4-mongos/bin/mongo --host mongo01.com --port 27017

 

(2)添加shard1分片:

mongos> sh.addShard("shard1/mongo01.com:27010,mongo03.com:27010,mongo05.com:27010")           #添加shard1复制集,指定shard1复制集所有节点的IP和端口
mongos> sh.status() #查看mongos状态

 

9.创建第二个分片复制集:
在三台服务器上分别执行:

cat >>/data/mongodb-cluster/mongodb4-mongod2/mongod.conf<< EOF
processManagement:
   fork: true
   pidFilePath: /data/mongodb-cluster/shard2/db0.pid
net:
   bindIp: 0.0.0.0
   port: 27011
storage:
   dbPath: /data/mongodb-cluster/shard2/db
systemLog:
   destination: file
   path: "/data/mongodb-cluster/shard2/log/mongod.log"
   logAppend: true
storage:
   journal:
      enabled: true
sharding:
    clusterRole: shardsvr
replication:
    replSetName: shard2
EOF

 


在三台服务器上分别执行:
启动:

/data/mongodb-cluster/mongodb4-mongod2/bin/mongod -f /data/mongodb-cluster/mongodb4-mongod2/mongod.conf

 


连接其中一个复制集节点:

/data/mongodb-cluster/mongodb4-mongod2/bin/mongo --host mongo02.com --port 27011

 

shard2复制集节点初始化

rs.initiate({
    _id: "shard2",
    "members" : [
    {
        "_id": 0,
        "host" : "mongo02.com:27011"
    },
    {
        "_id": 1,
        "host" : "mongo04.com:27011"
    },
    {
        "_id": 2,
        "host" : "mongo06.com:27011"
    }
    ]
})

 

查看shard2复制集状态

rs.status()

 

10.连接到其中一个mongos:
连接:

/data/mongodb-cluster/mongodb4-mongos/bin/mongo --host mongo01.com --port 27017

 

添加shard2分片:

mongos> sh.addShard("shard2/mongo02.com:27011,mongo04.com:27011,mongo06.com:27011")
mongos> sh.status() #查看mongos状态

 

11.测试:
对集合开启分片初始化:

连接到任何一个mongos, 对集合设置分片,如下为对company.emp集合的_id进行hash分片
/data/mongodb-cluster/mongodb4-mongos/bin/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
 var emps=[]
for (var i = 0; i < 10000; i++) {
    var emp = {i:i}
    emps.push(emp);
}
db.emp.insertMany(emps);
#查询数据分布
db.emp.getShardDistribution()

    Shard shard2 at shard2/mongo02.com:27011,mongo04.com:27011,mongo06.com:27011
     data : 161KiB docs : 5026 chunks : 2
     estimated data per chunk : 80KiB
     estimated docs per chunk : 2513

    Shard shard1 at shard1/mongo01.com:27010,mongo03.com:27010,mongo05.com:27010
     data : 160KiB docs : 4974 chunks : 2
     estimated data per chunk : 80KiB
     estimated docs per chunk : 2487

    Totals
     data : 322KiB docs : 10000 chunks : 4
     Shard shard2 contains 50.26% data, 50.26% docs in cluster, avg obj size on shard : 33B
     Shard shard1 contains 49.74% data, 49.74% docs in cluster, avg obj size on shard : 33B                  #可以看到这两个分片复制集的数据分布比例

 

posted @ 2025-05-27 17:49  粉色纽扣  阅读(78)  评论(0)    收藏  举报