Linux中mongodb复制集+sharding

Linux中mongodb复制集+sharding

Scroll Down

(一)首先搭建一个最基础的mongodb数据库过程如下

  1. 解压压缩包
tar -zxvf mongodb-linux-x86_64-3.2.10.tgz

2.然后讲压缩包移动到/usr/local/目录下同时改名字为mongodb

sudo mv mongodb-linux-x86_64-3.2.10 /usr/local/mongodb

3.此时就算是安装好了

在这里插入图片描述

4.然后可以开始搭建复制集+sharding的集群了。

(二) 开始搭建复制集+sharding集群

1.首先可以将这个虚拟机克隆出来两个,作为另外两个节点。
2.然后分别关闭三个虚拟机的防火墙
由于mongodb分布式复制集初始化时需要各个节点之间的通话,所以需要将各个节点上的防火墙进行关闭。
注意: centos6和centos7关闭防火墙是不一样的
下面是centos6关闭防火墙的方法:

查看防火墙的状态:service iptable status
方法一:service iptables stop (即时生效,临时关闭防火墙,重系统后防火墙会自动开启)
方法二:chkconfig iptables off (重启后生效,永久关闭防火墙)

下面是centos7关闭防火墙的方法:

查看状态:firewall-cmd --state
关闭防火墙:systemctl stop firewalld.service
禁止开机自动启动:systemctl disable firewalld.service

3.然后分别在三个虚拟机的mongodb目录创建shardA、shardB和shardC三个目录。

在这里插入图片描述

4.接着分别在三个虚拟机的mongodb->shardA(B、C)目录下创建data目录,接着再创建config、shard1_1和shard2_1,shardB下的data下目录为config、shard1_2和shard2_2,shardC下的data下目录为config、shard1_3和shard2_3。如下图

在这里插入图片描述

5.接着配置复制集首先配置shard1所用到的复制集
在ServerA上启动shard1所用到的服务节点1,代码如下:

./mongod --shardsvr --replSet shard1 --port 27017 --dbpath /usr/local/mongodb/shardA/data/shard1_1 --logpath /usr/local/mongodb/shardA/data/shard1_1/shard1_1.log --logappend --fork

在这里插入图片描述

在ServerB shard1所用到的服务节点2,代码如下:

./mongod --shardsvr --replSet shard1 --port 27017 --dbpath /usr/local/mongodb/shardB/data/shard1_2 --logpath /usr/local/mongodb/shardB/data/shard1_2/shard1_2.log --logappend --fork

在这里插入图片描述

在ServerC shard1所用到的服务节点3,代码如下:

./mongod --shardsvr --replSet shard1 --port 27017 --dbpath /usr/local/mongodb/shardC/data/shard1_3 --logpath /usr/local/mongodb/shardC/data/shard1_3/shard1_3.log --logappend --fork

在这里插入图片描述

6.用mongo连接其中一台机器的27017端口的mongod,初始化复制集shard1,代码如下:

./mongo --port 27017
config={_id:'shard1',members:[{_id:0,host:'192.168.235.100:27017'},{_id:1,host:'192.168.235.101:27017'},{_id:2,host:'192.168.235.102:27017'}]}
rs.initiate(config)

在这里插入图片描述

在mongodb shell中通过rs.initiate命令初始化复制集shard1,结果显示已经成功的初始化复制集shard1.

7.配置shard2所用到的复制集

在 ServerA shard2所用到的服务节点1,代码如下:

./mongod --shardsvr --replSet shard2 --port 27018 --dbpath /usr/local/mongodb/shardA/data/shard2_1 --logpath /usr/local/mongodb/shardA/data/shard2_1/shard2_1.log --logappend --fork

在这里插入图片描述

在ServerB shard2所用到的服务节点2,代码如下:

./mongod --shardsvr --replSet shard2 --port 27018 --dbpath /usr/local/mongodb/shardB/data/shard2_2 --logpath /usr/local/mongodb/shardB/data/shard2_2/shard2_2.log --logappend --fork

在这里插入图片描述

在ServerC shard2所用到的服务节点3,代码如下:

./mongod --shardsvr --replSet shard2 --port 27018 --dbpath /usr/local/mongodb/shardC/data/shard2_3 --logpath /usr/local/mongodb/shardC/data/shard2_3/shard2_3.log --logappend --fork

在这里插入图片描述

8.用mongo连接其中一台机器的27018端口的mongod,初始化复制集shard2,代码如下:

./mongo --port 27018
config={_id:'shard2',members:[{_id:0,host:'192.168.235.100:27018'},{_id:1,host:'192.168.235.101:27018'},{_id:2,host:'192.168.235.102:27018'}]}
rs.initiate(config)

在mongodb shell中通过rs.initiate命令初始化复制集shard2,结果显示已经成功的初始化复制集shard2.
9.配置多台Config Server
在ServerA上启动configServer服务,代码如下:

./mongod --configsvr --dbpath  /usr/local/mongodb/shardA/data/config --port 20000 --logpath /usr/local/mongodb/shardA/data/config/config.log  --logappend --fork

在 ServerB Config Server服务,代码如下:

./mongod --configsvr --dbpath  /usr/local/mongodb/shardB/data/config --port 20000 --logpath /usr/local/mongodb/shardB/data/config/config.log  --logappend --fork

在 ServerC Config Server服务,代码如下

./mongod --configsvr --dbpath  /usr/local/mongodb/shardC/data/config --port 20000 --logpath /usr/local/mongodb/shardC/data/config/config.log  --logappend --fork

10.配置多台mongos
在serverA 上启动mongos 服务代码如下:

./mongos --configdb 192.168.235.100:20000,192.168.235.101:20000,192.168.235.102:20000 --port 30000 --chunkSize 1 --logpath /usr/local/mongodb/shardA/data/config/mongos.log  --logappend --fork

在serverB 上启动mongos 服务代码如下:

./mongos --configdb 192.168.235.100:20000,192.168.235.101:20000,192.168.235.102:20000 --port 30000 --chunkSize 1 --logpath /usr/local/mongodb/shardB/data/config/mongos.log  --logappend --fork

在serverC 上启动mongos 服务代码如下:

./mongos --configdb 192.168.235.100:20000,192.168.235.101:20000,192.168.235.102:20000 --port 30000 --chunkSize 1 --logpath /usr/local/mongodb/shardC/data/config/mongos.log  --logappend --fork

11.配置Shard Cluster
连接到其中一台机器的端口30000的mongos进程,并切换到admin数据进行配置代码如下:

/mongo --port 30000
use admin
db.runCommand({addshard:"shard1/192.168.235.100:27017,192.168.235.101:27017,192.168.235.102:27017"})
db.runCommand({addshard:"shard2/192.168.235.100:27018,192.168.235.101:27018,192.168.235.102:27018"})

Shard Cluster配置完成后,即可激活数据库及集合的分片功能,代码如下:

db.runCommand({enablesharding:"test"})
db.runCommand({shardcollection:"test.users",key:{_id:1}})

12.验证Sharding正常工作
连接到其中一个机器的端口为30000的mongos进程,切换到test数据库,一边测试添加数据,代码如下

./mongo --port 30000
for(var i=1;i<=100000;i++) db.users.insert({id:i,addr_1:"shenzhen",addr_2:"shanghai"});
db.users.stats();

13.导入数据
首先切换数据库

use zmongodb

可以插入一条数据,保证创建数据库
db.t1.insert({"name":"test"});
然后导入数据

./mongoimport --host 127.0.0.1 --port 30000 --db zmongodb --collection ztable --type csv --headerline --ignoreBlanks --file /home/z/raw_user.csv

--db zmongodb:需要将数据导入到哪个数据库,这是用zmongodb数据库;
--collection ztable:将数据导入的 collection 名,这里用ztable,如果这个ztable表之前是不存在的,则会自动创建一个。如果省略--collection networkmanagement这个参数,那么会自动新建一个以 CSV 文件名为名的 collection。
--type csv:文件类型,这里是 csv;
--headerline:这个参数很重要,加上这个参数后创建完成后的内容会以 CSV 第一行的内容为字段名;
--ignoreBlanks:这个参数可以忽略掉 CSV 文件中的空缺值;
--file /home/z/raw_user.csv:这里就是 csv 文件的路径了。

14.启动数据库的分片功能

sh.enableSharding(“zyymongodb”)
  1. 启动分片然后开始分片
    首先切换到admin数据库下,
use admin

然后运行

db.runCommand({shardcollection:”zyymongodb.zyytable”,key:{_id:1}})
  1. 然后验证分片是否成功
use zmongodb db.ztable.stats()

如下图分片已经成功

在这里插入图片描述