Mongodb分片搭建

可以参考:

http://blog.csdn.net/chris_111x/article/details/52440003

 

mongodb分片操作_第1张图片 

 

拓扑图:

mongodb分片操作_第2张图片 

 

注意:下面的服务器启动要有顺序,不然启动不了

一、安装config服务器

 

tar zxf mongodb-linux-x86_64-rhel70-3.2.8.tgz

mv mongodb-linux-x86_64-rhel70-3.2.8/ mongodb-rh7

mv mongodb-rh7/ /usr/local/

 

创建目录

mkdir -p log

mkdir data

 

Cd data

 mkdir configdb

  mongodb分片操作_第3张图片

添加环境变量到/etc/profile目录下

export MONGODB_HOME=/usr/local/mongodb-rh7

export PATH=$MONGODB_HOME/bin:$PATH

 

创建mongod.conf文件

chmod +x mongod.conf

mongodb分片操作_第4张图片 

systemLog:

         destination: file

         path: /usr/local/mongodb-rh7/log/mongodb.log

         logAppend: true

storage:

         dbPath: /usr/local/mongodb-rh7/data/configdb

 

processManagement:

         fork: true

 

net:

#         bindIP: 127.0.0.1

          port: 27019

#security:

#           authorization: enabled

sharding:

       clusterRole: configsvr

 

 

创建启动文件:

vi /usr/lib/systemd/system/mongodb.service

 mongodb分片操作_第5张图片

[Unit]

Description=Mongodb service daemon

After=network.target

 

[Service]

Type=forking

ExecStart=/usr/local/mongodb-rh7/bin/mongod -f /usr/local/mongodb-rh7/bin/mongod.conf

ExecStop=/usr/local/mongodb-rh7/bin/mongod --shutdown -f /usr/local/mongodb-rh7/bin/mongod.conf

PrivateTmp=true

 

[Install]

WantedBy=multi-user.target

 

启动查看

 mongodb分片操作_第6张图片

 

二、安装mongos服务器

安装步骤和上面的都一样
但是不一样的是

 图片7.png

 mongodb分片操作_第7张图片

systemLog:

         destination: file

         path: /usr/local/mongodb-rh7/log/mongos.log

         logAppend: true

#storage:

#         dbPath: /usr/local/mongodb-rh7/data/

processManagement:

         fork: true

 

net:

#         bindIP: 127.0.0.1

          port: 2080

#security:

#           authorization: enabled

sharding:

         configDB: 172.16.2.117:27019

 

 

配置启动文件

图片9.png 

 

[Unit]

Description=Mongodb service daemon

After=network.target

 

[Service]

Type=forking

ExecStart=/usr/local/mongodb-rh7/bin/mongos -f /usr/local/mongodb-rh7/bin/mongos.conf

ExecStop=/usr/local/mongodb-rh7/bin/mongos --shutdown -f /usr/local/mongodb-rh7/bin/mongos.conf

PrivateTmp=true

 

[Install]

WantedBy=multi-user.target

 

 

启动查看

 

mongodb分片操作_第8张图片

 

三、配置shared服务器

 

安装配置也都一样但是在配置文件的地方需要修改

 图片12.png

 mongodb分片操作_第9张图片

systemLog:

         destination: file

         path: /usr/local/mongodb-rh7/log/mongodb.log

         logAppend: true

storage:

         dbPath: /usr/local/mongodb-rh7/data

processManagement:

         fork: true

 

#net:

#         bindIP: 127.0.0.1

#         port: 27017

#security:

#           authorization: enabled

 

 

 

配合启动文件

 图片14.png

 mongodb分片操作_第10张图片

[Unit]

Description=Mongodb service daemon

After=network.target

 

[Service]

Type=forking

ExecStart=/usr/local/mongodb-rh7/bin/mongod -f /usr/local/mongodb-rh7/bin/mongod.conf

ExecStop=/usr/local/mongodb-rh7/bin/mongod --shutdown -f /usr/local/mongodb-rh7/bin/mongod.conf

PrivateTmp=true

 

[Install]

WantedBy=multi-user.target

 

启动查看一下

mongodb分片操作_第11张图片 

 

注意:另外一台的shared也这一台配置方法一样

 

 

四、mongos中添加分片服务器

 ./mongo 172.16.2.134:2080/admin              #连接mongos服务器,并且默认选择admin数据库

 

#添加分片服务器

db.runCommand({addshard:"172.16.0.208:27017"})           

db.runCommand({addshard:"172.16.2.177:27017"})

 

mongodb分片操作_第12张图片 

 

函数结构:db.runCommand({addshard:mongodb服务器地址:端口号 })

如果添加的是副本分片,函数结构:

db.runCommand({addshard:"副本集名称/服务器地址:端口号"})

 

五、在mongos中添加分片数据库

 图片18.png

 

开启数据库分片功能,命令很简单 enablesharding(),这里我就开启copp数据库

#db.runCommand({enablesharding:"copp"})  #开启copp数据库分片

六、设置片键

图片19.png 

db.runCommand({shardcollection:"copp.userInfo",key:{"userName":1}})

指定集合中分片的片键,这里我就指定为UserInfo.userName,即userInfo集合中的userName字段。

 

 

函数结构:

db.runCommand({shardcollection:"数据库名称.集合名称 ",key:{"字段名称":1}})

 

 

块(chunk)

在一个shard server内部,MongoDB还是会把数据分为chunks,每个chunk代表这个shard server内部一部分数据,每个chunk的大小默认是64MB。

chunk的产生,会有以下两个用途:

Splitting(切分)

当一个chunk的大小超过配置中的chunk size时,MongDB的后台进程会把这个chunk切分成更小的chunk,从而避免chunk过大的情况

Balancing(均衡)

MongoDB中,balancer是一个后台进程,负责chunk的迁移,从而均衡各个shard server的负载

 

七、通过mongos向mongodb插入数据

八、注意这里要切换数据库到coop库当中

 

配置完分片后,我们将通过mongos向mongodb插入10万条记录

 mongodb分片操作_第13张图片

#for(vari=0;i<100000;i++){db.userInfo.insert({"userName":"user"+i,"depart":"towngas","userNo":"no."+i})}

插入数据成功后,会返回提示信息:WriteResult({“nInserted”:1})

 

九、分别在mongodb数据库的userinfo数据

 

 

mongodb分片操作_第14张图片 

 

十、打印数据库分片信息

mongos数据服务器(172.16.2.134)下,必须进入到admin数据库下,

输入db.runCommand({“listShards”:1})查看所有分片服务器。

#./mongo 172.16.2.134:2080

#use admin

# db.runCommand({"listShards":1})

 mongodb分片操作_第15张图片

 mongodb分片操作_第16张图片

有点问题已经开启了切片功能,但是数据没有chunks成功

 

 

十一、移除切片服务器:

db.runCommand({"listShards":1})

 mongodb分片操作_第17张图片

移除

db.runCommand({"removeshard":"172.16.0.208:27017"})

mongodb分片操作_第18张图片 

db.runCommand({"removeshard":"分片服务器地址和端口"})