Mongodb分片搭建
可以参考:
http://blog.csdn.net/chris_111x/article/details/52440003
拓扑图:
注意:下面的服务器启动要有顺序,不然启动不了
一、安装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
添加环境变量到/etc/profile目录下
export MONGODB_HOME=/usr/local/mongodb-rh7
export PATH=$MONGODB_HOME/bin:$PATH
创建mongod.conf文件
chmod +x mongod.conf
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
[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
启动查看
二、安装mongos服务器
安装步骤和上面的都一样
但是不一样的是
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
配置启动文件
[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
启动查看
三、配置shared服务器
安装配置也都一样但是在配置文件的地方需要修改
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
配合启动文件
[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
启动查看一下
注意:另外一台的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"})
函数结构:db.runCommand({addshard:mongodb服务器地址:端口号 })
如果添加的是副本分片,函数结构:
db.runCommand({addshard:"副本集名称/服务器地址:端口号"})
五、在mongos中添加分片数据库
开启数据库分片功能,命令很简单 enablesharding(),这里我就开启copp数据库
#db.runCommand({enablesharding:"copp"}) #开启copp数据库分片
六、设置片键
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万条记录
#for(vari=0;i<100000;i++){db.userInfo.insert({"userName":"user"+i,"depart":"towngas","userNo":"no."+i})}
插入数据成功后,会返回提示信息:WriteResult({“nInserted”:1})
九、分别在mongodb数据库的userinfo数据
十、打印数据库分片信息
在mongos数据服务器(172.16.2.134)下,必须进入到admin数据库下,
输入db.runCommand({“listShards”:1})查看所有分片服务器。
#./mongo 172.16.2.134:2080
#use admin
# db.runCommand({"listShards":1})
有点问题已经开启了切片功能,但是数据没有chunks成功
十一、移除切片服务器:
db.runCommand({"listShards":1})
移除
db.runCommand({"removeshard":"172.16.0.208:27017"})
db.runCommand({"removeshard":"分片服务器地址和端口"})