目录


 
拓扑图:
在这里插入图片描述
 

一、配置说明

环境说明:三台centos7虚拟机

测试时各节点IP及端口分配:(IP和端口需根据自己的情况设定)

A:192.168.147.131 B:192.168.147.132 C:192.168.147.133 配置文件、数据文件、日志文件路径
mongos(27500) mongos(27500) mongos(27500) /usr/local/mongodb/conf/mongos.conf /usr/local/mongodb/log/mongos.log
configsvr (27600) configsvr (27600) configsvr (27600) /usr/local/mongodb/config/configsvr.conf /usr/local/mongodb/log/mongodb.log /usr/local/mongodb/data/configsvr
shard1 primary (27711) shard1 secondary (27711) shard1 arbiter(27711) /usr/local/mongodb/config/shard1.conf /usr/local/mongodb/log/shard1.log /usr/local/mongodb/data/shard1
shard2 primary (27712) shard2 secondary(27712) shard2 arbiter(27712) /usr/local/mongodb/config/shard.conf /usr/local/mongodb/log/shard2.log /usr/local/mongodb/data/shard2
shard3 primary (27713) shard3 secondary(27713) shard3 arbiter(27713) /usr/local/mongodb/config/shard3.conf /usr/local/mongodb/log/shard3.log /usr/local/mongodb/data/shard3
 
步骤说明:
 
1.下载与解压部署包

2.创建 configsvr 配置文件,并启动 configsvr 节点,初始化 configsvr 副本集

3.创建 shard1 配置文件,并启动 shard1 节点,初始化 shard1 副本集

4.创建 shard2 配置文件,并启动 shard2 节点,初始化 shard2 副本集

5.创建 shard3 配置文件,并启动 shard3 节点,初始化 shard3 副本集

6.创建 mongos 配置文件,启动 mongos 节点。

7.启动分片。

 

二、下载安装mongodb

 在三台虚拟机上都安装Mongodb,过程看MongoDB(一)https://blog.csdn.net/my_miuye/article/details/107959378

 测试时mongodb路径:/usr/local/mongodb/

 

三、创建数据、日志文件夹

mkdir /usr/local/mongodb/data/configsvr
mkdir /usr/local/mongodb/data/shard{1..3}
mkdir /usr/local/mongodb/log/shard{1..3}
mkdir /usr/local/mongodb/conf

shard{1…3}为同时创建shard1、shard2、shard3
【- - - 三台机子均需创建- - -】
 

四、 配置configsvr 节点

 
1.添加configsvr 配置文件

# vi /usr/local/mongodb/conf/configsvr.conf

配置文件内容:

systemLog:
  destination: file
  logAppend: true
  path: "/usr/local/mongodb/log/mongodb.log"
storage:
  dbPath: "/usr/local/mongodb/data/configsvr"
  journal:
    enabled: true
processManagement:
  fork: true
net:
  port: 27600
  bindIp: 0.0.0.0
replication:
  replSetName: mustone
sharding:
  clusterRole: configsvr

 
2.启动configsvr 节点

# numactl --interleave=all mongod -f /usr/local/mongodb/conf/configsvr.conf

(numactl没有的可以通过命令安装一下:yum -y install numactl
 
3.开放端口

# firewall-cmd --zone=public --add-port=27600/tcp --permanent
# firewall-cmd --zone=public --add-port=27500/tcp --permanent
# firewall-cmd --zone=public --add-port=27711/tcp --permanent
# firewall-cmd --zone=public --add-port=27712/tcp --permanent
# firewall-cmd --zone=public --add-port=27713/tcp --permanent
# sudo firewall-cmd --reload

(这里提前把接下来要用到的端口都开放了)

【- - - 三台机子均需完成以上配置- - -】
 

4.configsvr 副本集初始化

# mongo --port 27600
> config = { _id:"mustone",
  configsvr: true,
  members:[
    {_id:0,host:"192.168.147.134:27600",priority:2},
    {_id:1,host:"192.168.147.135:27600",priority:1},
    {_id:2,host:"192.168.147.136:27600",priority:1}
  ]
}

> rs.initiate(config)

其中,priority标记优先级,优先级高的成为主节点。

 

五、配置shard1节点

1.添加shard1配置文件

# vi /usr/local/mongodb/conf/shard1.conf

文件内容:

systemLog:
  destination: file
  logAppend: true
  path: /usr/local/mongodb/log/shard1.log
storage:
  dbPath: /usr/local/mongodb/data/shard1
  journal:
    enabled: true
processManagement:
  fork: true
net:
  port: 27711
  bindIp: 0.0.0.0
replication:
  replSetName: shard1
sharding:
  clusterRole: shardsvr

 
2.启动shard1节点

# numactl --interleave=all mongod -f /usr/local/mongodb/conf/shard1.conf

【- - - 三台机子均需完成以上[1、2] 配置- - -】
 

3.shard1副本集初始化

  三台机子均完成1、2步骤后,在A、B、C中随便挑一台机子进行初始化,个人挑的A机

# mongo --port 27711
>config = { _id:"shard1",
  members:[
    {_id:0,host:"192.168.147.134:27711",priority:2},
    {_id:1,host:"192.168.147.135:27711",priority:1},
    {_id:2,host:"192.168.147.136:27711",arbiterOnly:true}
  ]
}
>rs.initiate(config)

其中,priority标记优先级,arbiterOnly:true标记该节点为仲裁节点,不存储数据。

使用rs.status()可以查看副本集的状态。
 

六、配置shard2节点

1.添加shard1配置文件

# vi /usr/local/mongodb/conf/shard2.conf

文件内容:

systemLog:
  destination: file
  logAppend: true
  path: /usr/local/mongodb/log/shard2.log
storage:
  dbPath: /usr/local/mongodb/data/shard2
  journal:
    enabled: true
processManagement:
  fork: true
net:
  port: 27712
  bindIp: 0.0.0.0
replication:
  replSetName: shard2
sharding:
  clusterRole: shardsvr

 
2.启动shard2节点

# numactl --interleave=all mongod -f /usr/local/mongodb/conf/shard2.conf

【- - - 三台机子均需完成以上[1、2] 配置- - -】
 

3.shard2副本集初始化

  三台机子均完成1、2步骤后,在A、B、C中随便挑一台机子进行初始化,个人挑的A机

# mongo --port 27712
>config = { _id:"shard2",
  members:[
    {_id:0,host:"192.168.147.134:27712",priority:2},
    {_id:1,host:"192.168.147.135:27712",priority:1},
    {_id:2,host:"192.168.147.136:27712",arbiterOnly:true}
  ]
}
>rs.initiate(config)

 

七、配置shard3节点

1.添加shard3配置文件

# vi /usr/local/mongodb/conf/shard3.conf

文件内容:

systemLog:
  destination: file
  logAppend: true
  path: /usr/local/mongodb/log/shard3.log
storage:
  dbPath: /usr/local/mongodb/data/shard3
  journal:
    enabled: true
processManagement:
  fork: true
net:
  port: 27713
  bindIp: 0.0.0.0
replication:
  replSetName: shard3
sharding:
  clusterRole: shardsvr

 
2.启动shard3节点

# numactl --interleave=all mongod -f /usr/local/mongodb/conf/shard3.conf

【- - - 三台机子均需完成以上[1、2] 配置- - -】
 

3.shard3副本集初始化

  三台机子均完成1、2步骤后,在A、B、C中随便挑一台机子进行初始化,个人挑的A机

# mongo --port 27713
>config = { _id:"shard3",
  members:[
    {_id:0,host:"192.168.147.134:27713",priority:2},
    {_id:1,host:"192.168.147.135:27713",priority:1},
    {_id:2,host:"192.168.147.136:27713",arbiterOnly:true}
  ]
}
>rs.initiate(config)

 

八、配置mongos节点

1.添加mongos配置文件

# vi  /usr/local/mongodb/conf/mongos.conf

文件内容:

systemLog:
  destination: file
  logAppend: true
  path: /usr/local/mongodb/log/mongos.log
processManagement:
  fork: true
net:
  port: 27500
  bindIp: 0.0.0.0
sharding:
  configDB: mustone/192.168.147.134:27600,192.168.147.135:27600,192.168.147.136:27600

 
2.启动mongos节点

# numactl --interleave=all mongod -f /usr/local/mongodb/conf/mongos.conf

【- - - 三台机子均需完成以上[1、2] 配置- - -】
 

九、启用分片

上述操作只是启动了4个副本集(1个configsvr,3个shard),还需要启用分片。
在A、B、C中随便挑一台机子进行启用,个人挑的A机

# mongo --port 27500
mongos> use  admin
mongos> sh.addShard("shard1/192.168.147.134:27711,192.168.147.135:27711,192.168.147.136:27711")
mongos> sh.addShard("shard2/192.168.147.134:27712,192.168.147.135:27712,192.168.147.136:27712")
mongos> sh.addShard("shard3/192.168.147.134:27713,192.168.147.135:27713,192.168.147.136:27713")

 

十、测试

1.默认是不分片存取的,而是全部存在某个shard副本集中。如果要分片存取,需要用户显式的指定。

mongos> use admin
mongos> db.runCommand( { enablesharding :"mustone"});
mongos> db.runCommand( { shardcollection : "mustone.myuser",key : {_id: "hashed"} } )

存入数据测试:

mongos> use mustone
switched to db mustone
mongos> for(var i=1;i<100;i++){
... db.myuser.insert({age:(i*8)%10,name:"unknown"})
...}
mongos> sh.status()

  sh.status() 可以查看每个分片的数据量,可以看出存入的100条数据已经分散存储在3个shard了。
在这里插入图片描述
 
2.主节点宕机测试
  先用 rs.status() 查看当前各节点状态,由IP地址可以看到A机的shard1节点状态为PRIMARY,B机的shard1节点状态为SECONDARY。

在A机关闭shard1节点服务

# mongod --shutdown --dbpath=/usr/local/mongodb/data/shard1 --logpath=/usr/local/mongodb/log/shard1.log --port=27711 --logappend --fork

  在B机mongo连接shard1节点,rs.status() 查看当前各节点状态,可以看到此时B机的shard1节点状态为PRIMARY。说明在A机的shard1节点挂掉后,B机的shard1自动成为新的主节点。
  

参考:https://mp.weixin.qq.com/s?src=11&timestamp=1597300206&ver=2519&signature=F2Ebbia*dJpTnLqrTCqxU0Jn6docV0r7dUhKtygo3ahE6GLJyhczr3hPhyEQJtU-OD48yL0G3f2a4mWNzN7Sgzd4-BXtPz8mpAWYTG3Unb9w2KPXDbAE7rTeqGg225g9&new=1