MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的状况下,添加更多的节点,能够保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档相似于 JSON 对象。字段值能够包含其余文档,数组及文档数组。html
官网: https://www.mongodb.comnode
https://www.jianshu.com/p/e18...
https://www.cnblogs.com/tians...
https://blog.csdn.net/weixin_...
https://blog.csdn.net/eagle89...linux
操做系统:CentOS7 +
三台服务器:192.168.90.225
安装包: mongodb-linux-x86_64-4.0.10.tgznginx
mkdir /usr/local/tmp #临时目录,用于上传压缩包 mkdir /topinfo #mongodb的安装目录
上传安装包:mongodb
cd /usr/local/tmp/ # 跳转到临时目录 rz #经过rz 上传mongodb-linux-x86_64-4.0.10.tgz
一、解压数据库
tar -zxvf mongodb-linux-x86_64-4.0.10.tgz # 解压 mv mongodb-linux-x86_64-4.0.10 mongodb #重命名 mv /usr/local/tmp/mongodb /topinfo # 将解压包拷贝到指定目录
二、MongoDB 的可执行文件位于 bin 目录下,因此能够将其添加到 PATH 路径中:vim
vim /etc/profile
#加入如下内容 export MONGODB_HOME=/topinfo/mongodb export PATH=$MONGODB_HOME/bin:$PATH
#保持退出后,执行如下命令,当即生效 source /etc/profile
三、环境变量验证
使用命令mongod -v输出信息版本信息验证环境变量是否配置成功数组
mongod -v
一、建立数据库的目录
MongoDB的默认数据存储在跟目录data/db目录下,可是这个目录在安装过程不会自动建立,因此你须要手动建立data目录,并在data目录。
注意: data/db 是 MongoDB 默认的启动的数据库路径。若是你的数据库目录不是/data/db,能够经过 --dbpath 来指定。(mongod --dbpath /usr/local/mongo/data)服务器
若是是否是分片,则能够暂时不须要建立数据库的目录。后续在分配中建立。数据结构
mkdir -p /topinfo/mongodb/data # 建立数据库数据目录 mkdir -p /topinfo/mongodb/logs # 建立数据库日志目录
先测试一下 MongoDB 是否安装成功:
which mongod
显示 MongoDB 的bin/mongod 路径则表示安装成功。
启动mongodb:
你能够再命令行中执行mongo安装目录中的bin目录执行mongod命令来启动mongdb服务。
MongoDB后台运行,启动时只需添加 --fork函数便可。能够在日志路径后面添加--logappend,防止日志被删除。
mongod --fork --dbpath= /topinfo/mongodb/data --logpath= /topinfo/mongodb/logs/mongodb2.log --logappend
查看进程:
ps -ef | grep mongo
中止MongoDB
mongod -shutdown --dbpath= /topinfo/mongodb /data --logpath= /topinfo/mongodb /logs/mongodb2.log --logappend
MongoDB数据库启动后,默认只能在本地使用,若是远程访问,须要进行一下设置。
一、关闭防火墙,或开放对应的端口
systemctl stop firewalld
二、启动命令中添加 。--bind_ip=0.0.0.0
mongod --fork --dbpath= /topinfo/mongodb /data --logpath= /topinfo/mongodb /logs/mongodb2.log --logappend --bind_ip=0.0.0.0
在用客户端链接如图:
操做系统:CentOS7 +
三台服务器:192.168.90.225/226/227
安装包: mongodb-linux-x86_64-4.0.10.tgz
为了更好的均衡机器的压力,把每一个机器既能够做为主节点、副本节点、仲裁节点,这样压力就会均衡不少了。
因为一个机器须要同时部署 mongos、config server 、shard一、shard二、shard3,因此须要用端口进行区分。
端口分配:
config:21000
shard1:27001
shard2:27002
shard3:27003
mongos:20000
一、 建立安装和临时目标
mkdir /usr/local/tmp #临时目录,用于上传压缩包 mkdir /topinfo #mongodb的安装目录
二、目录规划
mkdir -p /topinfo/mongodb/conf # 存放全部服务器的配置文件 mkdir -p /topinfo/mongodb/mongos/logs # 存放路由服务器的日志信息 mkdir -p /topinfo/mongodb/config/data # 存放配置服务器的数据 mkdir -p /topinfo/mongodb/config/logs # 存放配置服务器的日志 mkdir -p /topinfo/mongodb/shard1/data # 存放分片服务器上的数据 mkdir -p /topinfo/mongodb/shard1/logs # 存放分片服务器上的日志 mkdir -p /topinfo/mongodb/shard2/data # 存放分片服务器上的数据 mkdir -p /topinfo/mongodb/shard2/logs # 存放分片服务器上的日志 mkdir -p /topinfo/mongodb/shard3/data # 存放分片服务器上的数据 mkdir -p /topinfo/mongodb/shard3/logs # 存放分片服务器上的日志
根据服务器规划:
一、mongo服务经过配置文件启动,存放配置文件目录/topinfo/mongodb/conf
二、在每台服务器建立该节点所含shard的数据存放目录/topinfo/mongodb/shard1-3
三、在每台服务器(也能够在其中两台)建立存放config server数据的数据目录/topinfo/mongodb/config,本次配置是在三台机器上都配置。
故:分别在每台机器创建conf、mongos、config、shard一、shard二、shard3六个目录,由于mongos不存储数据,只须要创建日志文件目录便可。
如图:
上传安装包:
cd /usr/local/tmp/ # 跳转到临时目录 rz #经过rz 上传mongodb-linux-x86_64-4.0.10.tgz
一、解压
tar -zxvf mongodb-linux-x86_64-4.0.10.tgz # 解压 mv mongodb-linux-x86_64-4.0.10 mongodb #重命名 mv /usr/local/tmp/mongodb /topinfo # 将解压包拷贝到指定目录
二、MongoDB 的可执行文件位于 bin 目录下,因此能够将其添加到 PATH 路径中:
vim /etc/profile
#加入如下内容 export MONGODB_HOME=/topinfo/mongodb export PATH=$MONGODB_HOME/bin:$PATH
#保持退出后,执行如下命令,当即生效 source /etc/profile
如图:
三、环境变量验证
使用命令mongod -v输出信息版本信息验证环境变量是否配置成功
mongod -v
如图:
根据服务器规划,咱们在三台机器上部署config server副本集,在该三台服务器上分别添加如下配置文件:
进入配置文件目录 /topinfo/mongodb/conf/config.conf
vi /topinfo/mongodb/conf/config.conf
添加配置文件信息:
# where to write logging data. systemLog: destination: file logAppend: true path: /topinfo/mongodb/config/logs/config.log # Where and how to store data. storage: dbPath: /topinfo/mongodb/config/data/ journal: enabled: true # how the process runs processManagement: fork: true pidFilePath: /topinfo/mongodb/config/logs/configsrv.pid # network interfaces net: port: 21000 bindIp: 0.0.0.0 # 集群名称 replication: replSetName: configs # 声明这是一个集群的配置数据服务 sharding: clusterRole: configsvr
退出保存:
wq!
启动三台服务器的 config server
mongod -f /topinfo/mongodb/conf/config.conf
登陆任意一台配置服务器(注意是配置端口),初始化配置副本集(执行命令的时候,不要复制注释,只复制命令去一步步执行)。
mongo --port 21000
定义副本集配置(键“_id”对应的值必须与配置文件中的replicaction.replSetName一致)
config = { _id : "configs", members : [ {_id : 0, host : "192.168.90.225:21000" }, {_id : 1, host : "192.168.90.226:21000" }, {_id : 2, host : "192.168.90.227:21000" } ] }
初始化副本集
rs.initiate(config)
查看分区状态
rs.status();
此时会发现终端上的输出已经有了变化。
rs.initiate(config) 初始化。不成功的话,路由服务器与配置服务器链接不上。
其中,”_id” : “configs”应与配置文件中配置的 replicaction.replSetName 一致,”members” 中的 “host” 为三个节点的 ip 和 配置port。
根据服务器规划:
192.168.90.225: 27001 - 主节点
192.168.90.226: 27001 - 副节点
192.168.90.227: 27001 - 仲裁节点
三台服务器上分别添加如下配置文件:
进入配置文件:
vi /topinfo/mongodb/conf/shard1.conf #分片配置文件
配置文件内容:
# where to write logging data. systemLog: destination: file logAppend: true path: /topinfo/mongodb/shard1/logs/shard1.log # Where and how to store data. storage: dbPath: /topinfo/mongodb/shard1/data journal: enabled: true # how the process runs processManagement: fork: true pidFilePath: /topinfo/mongodb/shard1/logs/shard1.pid # network interfaces net: port: 27001 bindIp: 0.0.0.0 # 副本集名称 replication: replSetName: shard1 # 声明这是一个集群的分片服务; sharding: clusterRole: shardsvr
启动三台服务器的shard1 server
mongod -f /topinfo/mongodb/conf/shard1.conf
登录任意一台服务器(注意是分片端口),初始化副本集(执行命令的时候,不要复制注释,只复制命令去一步步执行)
mongo --port 27001
#定义副本集配置(键“_id”对应的值必须与配置文件中的replicaction.replSetName一致,priority表明权重[1,100],大的被分配为主服务器,0永久不会变为主服务器) config = { _id : "shard1", members : [ {_id : 0, host : "192.168.90.225:27001", priority : 2 }, {_id : 1, host : "192.168.90.226:27001", arbiterOnly :true }, {_id : 2, host : "192.168.90.227:27001", priority : 1 } ] } #初始化副本集 rs.initiate(config) #查看分区状态 rs.status();
其余副本集都按照以上方式进行配置:
注意事项:
一、复制集的名称不要重复
二、ip和端口根据分配进行配置
三、合理分配仲裁服务器的位置(由于仲裁不存放数据,很轻,合理的分配,能够分担其余服务器的压力)
注意:启动mongodb时,先启动配置服务器,再启动分片服务器,最后启动路由服务器。
根据服务器规划,咱们在每台服务器都配置了mongos:
192.168.90.225: 20000 - mongos
192.168.90.226: 20000 - mongos
192.168.90.227: 20000 - mongos
三台服务器上分别添加如下配置文件:
进入配置文件:
vi /topinfo/mongodb/conf/mongos.conf
配置文件内容 # where to write logging data. systemLog: destination: file logAppend: true path: /topinfo/mongodb/mongos/logs/mongos.log # how the process runs processManagement: fork: true # pidFilePath: /var/log/nginx/mongos.pid # network interfaces net: port: 20000 bindIp: 0.0.0.0 #监听的配置服务器,只能有1个或者3个,configs为配置服务器的副本集名字,ip:configs配置服务器的端口 sharding: configDB: configs/192.168.90.225:21000,192.168.90.226:21000,192.168.90.227:21000
启动三台服务器的mongos server
mongos -f /topinfo/mongodb/conf/mongos.conf
目前已经搭建好配置服务器、数据分片服务器、路由服务器,下面进行分片启用,使得app链接到路由服务器时可使用分片机制
登陆任意一台mongos:
mongo --port 20000
使用admin数据库
use admin
串联路由服务器与分片副本集:
#串联路由服务器与分片副本集 sh.addShard("shard1/192.168.90.225:27001,192.168.90.226:27001,192.168.90.227:27001") #sh.addShard("shard2/192.168.90.225:27001,192.168.90.226:27001,192.168.90.227:27001")
查看集群状态:
sh.status()
如图:
目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但咱们的目的是但愿插入数据,数据可以自动分片。链接在mongos上,准备让指定的数据库、指定的集合分片生效。
指定testdb分片生效
use admin # enableSharding只能针对admin数据库运行,适宜选用admin
db.runCommand( { enablesharding :"testdb"});
指定数据库里须要分片的集合和片键:
咱们设置testdb的 testcoll 表须要分片,根据 id 自动分片到 shard1 ,shard2,.. 上面去。
db.runCommand( { shardcollection : "testdb.testcoll",key : {id: "hashed"} } )
要这样设置是由于不是全部mongodb 的数据库和表 都须要分片!!
查看分片状态
db.testcoll.stats()
链接 MongoDB 路由服务:
执行测试语句:
for(i=1;i<=10000;i++){db.testcoll.insert({"id":i,"name":"yangp"})};
查看分片结果:
db.testcoll.stats();
如图:
说明分片成功!
分片配置副本集的执行如下:
#定义副本集配置(键“_id”对应的值必须与配置文件中的replicaction.replSetName一致,priority表明权重[1,100],大的被分配为主服务器,0永久不会变为主服务器) config = { _id : "shard1", members : [ {_id : 0, host : "192.168.90.225:27001", priority : 2 }, {_id : 1, host : "192.168.90.226:27001", priority : 1 }, {_id : 2, host : "192.168.90.227:27001", arbiterOnly :true } ] } #初始化副本集 rs.initiate(config)
This node, 192.168.90.227:27001, with _id 2 is not electable under the new configuration version 1 for replica set shard1",
192.168.90.227这台服务器不能初始化,换一台机器作仲裁,顺利经过。
#定义副本集配置(键“_id”对应的值必须与配置文件中的replicaction.replSetName一致,priority表明权重[1,100],大的被分配为主服务器,0永久不会变为主服务器) config = { _id : "shard1", members : [ {_id : 0, host : "192.168.90.225:27001", priority : 2 }, {_id : 1, host : "192.168.90.226:27001", arbiterOnly :true }, {_id : 2, host : "192.168.90.227:27001", priority : 1 } ] } #初始化副本集 rs.initiate(config) #查看分区状态 rs.status();
mongod -shutdown -dbpath=/usr/local/mongodb/data
或
use admin db.shutdownServer()