(不知道为何,这里有很多图没有复制进来,需要完整文档的话请在https://download.youkuaiyun.com/download/xiaobai11as/10930623下载,毕竟辛苦4整天才完成的)
五、MongoDB在Windows下本地分布式部署.. 17
一、windows下MongoDB的安装
1.下载安装包
下载地址:https://www.mongodb.com/download-center#community
2.安装MongoDB
MongoDB的安装非常简单,大部分步骤一直点下一步就行。
除了安装路径,还有取消勾选左侧的Install MongoDB Copmpass”选项 外。
3:配置环境变量
右击我的电脑—>属性--->高级属性设置—>环境变量
MONGO_HOME = C:\Program Files\MongoDB\Server\3.4\bin
Path = %MONGO_HOME%
然后检测是否成功:输入mongod --help ,出现如下界面:
4:创建文件夹与文件:
在 D盘的根目录下新建一个名为 mongodb 的文件夹
然后新建一个名为data 和一个名为 log 的文件夹,
最后在 log 文件夹下建立一个名为 mongodb.log 的文件
注意:启动mongodb服务之前必须创建数据库文件的存放文件夹,否则命令不会自动创建,而且不能启动成功。
5: 启动mongod服务
mongod --dbpath d:/mongodb/data --logpath d:/mongodb/log/mongodb.log --fork --port 27017
参数解释:
--dbpath 数据存储目录
--logpath 日志存储位置
--port 运行端口(默认27017)
--fork 后台进程运行
注意:这种启动是在本地windows“服务”中,是没有配置上mongodb 服务的,可以打开“服务”看下
配置服务:
新建配置文件data 文件夹下建立mongo.config 文件
用记事本打开mongo.config,并输入:
dbpath=D:\mongodb\data\db
logpath=D:\mongodb\data\log\mongo.log
用管理员身份打开cmd:(C:\Windows\System32\ccmd.exe)
mongod --config "D:\software\Mongodb\mongo.config" --install --serviceName "MongoDB"
本地windows“服务”就会出现mongodb 服务,省去了手动开启服务的繁琐
net start MongoDB
二、MongoDb基本操作
1.库级操作命令
查看库
show dbs;
创建库
use shop;(隐式创建)
删除库
db.dropDatabase();
查看表
show collections;
创建表
db.goods.insert({name:'zhangsan', age:'25'});(隐式创建)
删除表
db.goods.drop();
2.表级别操作命令
(CURD create/update/read/delete)
增 insert 主要针对json格式
db.students.insert({_id:002, name:'xiaoming', age:'28'})
如果没有写 _id, 系统会自动添加一个 _id
删 remove 查询(条件)表达式
db.stu.remove({sn:'001'}); 删除stu表中,sn属性值为 001 的文档
db.stu.remove(); 全部collection删除
dn.stu.remove({sn:'002', true});只删除一行sn属性值为 002 的数据
改 update 新文档替换就文档(相当于替换文档)
update({查谁},{改成什么样},{可选参数})
改谁, 查询表达式
改成什么样。新值或者复制表达式
//修改整个文档
db.stu.update({sn:'001'},{sn:'0001'}); 修改整个文档
//修改文档某一列
$set 修改某列
db.stu.update({sn:'001'},{$set:{sn:'002'}}); 修改某列的值
$unset 删除某列
$rename 重命名某列
$inc 增长某列
$setOnInsert 当upsert为true时。并且发生了insert操作,可以补充的字段
db.stu.update({sn:'004'},{$set:{sn:'0004'}},{$setOnInsert:{gender:'meal'}, {upsert:true}};
/*
db.stu.update({name:'kong'},
{
$set:{name:'king'}, 修改
$uset:{jinggu:1}, 删除
$rename:{sex:'gender'}, 重命名
$inc:{age:14} 自增长
})
*/
//第三个参数
//修改时的额外参数
mulit 对符合条件的所有数据产生影响
注意:就算查询表达式命中多行,也只能改一行。如果要全部修改。使用multi:true 或者mulit:1 全部修改
db.stu.update({name:'zhangsan'},{$set{name:'lisi'}}, {multi:true}); //把全部的张三改成李四
upsert 如果存在符合条件的文档则修改。如果不存在,则添加
db.stu.update({name:'wuyong'}, {$set{name:'junshiwuyong'}}, {upsert:true});
查 find (查询表达式,查询的列)
//查询所有文档所有内容
db.stu.find();
//查询所有文档的gender属性,(_id属性默认显示)
db.stu.find({},{gender:1})
//查询文档的gender属性,并且不显示 _id 属性
db.stu.find({},{gender:1, _id:0})
//查询所有gender为meal的name属性,并且不显示 _id 属性
db.stu.find({gender:'meal'},{name:1, _id:0})
3:更多操作:
https://blog.youkuaiyun.com/xiao_tommy/article/details/53187498
https://blog.youkuaiyun.com/zhanghongzheng3213/article/details/51556436
三、MongoDB在CentOS下的安装
1:下载
官网地址http://www.mongodb.org/downloads
下载安装包版本:rhel70-3.0.0链接为:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.0.0.tgz
注意:如果是windows下载好后,复制到虚拟机里(不可复制时点击 编辑à装载wmware..)查看压缩包的完整性,有时文件夹会复制不完全。
2:解压
tar -zxvf mongodb-linux-x86_64-rhel70-3.0.0.tgz
出现一下界面
3:移动
一般我们将安装的软件安装在/usr/local目录下,所以将解压后的文件移至/usr/local目录,并重命名,如下
[root@clinton software]# mv mongodb-linux-x86_64-rhel70-3.0.0 /usr/local/mongodb
4:配置路径
MongoDB 的可执行文件位于 bin 目录下,所以可以将其添加到 PATH 路径中:
这里通过修改profile文件:
vim /etc/profile
找到/export PATH /行,添加export PATH=/usr/local/mongodb/bin:$PATH
5:创建文件夹与文件
[root@clinton mongodb]# mkdir data
[root@clinton mongodb]# mkdir log
[root@clinton mongodb]# cd log/
[root@clinton log]# touch mongodb.log
6:启动mongodb
mongod --port 10001 --dbpath data/ --fork --logpath=log/mongodb.log
注意:通过浏览器访问 需要加上参数—httpinterface ,然后浏览器输入网址:http://localhost:11001/(端口号需要加上1000)
7:客户端连接
mongo localhost:10001
然后可以进行操作数据库。
四、MongoDB集群架构
1.框架介绍:
运用MongoDB的复制集(Replica Sets)+分片(Sharding)就能实现MongoDB分布式高可用的集群。 分片(sharding)能够增加更多的机器来应对不断增加的负载和数据,也不影响应用。 复制集(Replica Sets)能确保每个分片节点都具有自动备份、自动故障恢复能力。
1)集群组件——副本集(Replica sets)
副本集通常由至少3个节点组成。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。
mongodb各个节点常见的搭配方式为:一主多从(正常情况下至少3个节点组成副本集)。
主节点记录在其上的所有操作,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
2)集群组件——分片(Sharding)
分片是将一个集合的数据分别存储在不同的shard节点上减轻单机压力
Shard Keys 的选择很重要,MongoDB主要根据Shard Keys来划分数据,Shard Keys可以由文档的一个或者多个物理键值组成,对于分片Key的选定直接决定了集群中数据分布是否均衡、集群性能是否合理。
3)集群组件——路由服务器(mongos)
路由服务器负责把对应的数据请求请求转发到对应的shard服务器上
mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它负责把对应的数据请求请求转发到对应的shard服务器上。在生产环境通常有多mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。
4)集群组件——配置服务器(mongos)
存储所有数据库元信息(路由、分片)的配置。mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。
配置服务器相当与集群大脑,存储所有数据库元信息(路由、分片)的配置。mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。mongos第一次启动或者关掉重启就会从 config server 加载配置信息,以后如果配置服务器信息变化会通知到所有的 mongos 更新自己的状态,这样 mongos 就能继续准确路由。在生产环境通常有多个 config server 配置服务器,因为它存储了分片路由的元数据,这个可不能丢失!就算挂掉其中一台,只要还有存货, mongodb集群就不会挂掉。
5)集群组件——集群架构
客户端程序感觉不到集群的存在,他只需要知道mongos服务器的ip和连接方式,至于它有多少个集群ip 都不需要关注,mongos 会自动选择。
注意:每一个shard包括一个或多个服务和存储数据的mongod进程(mongod是MongoDB数据的核心进程),典型的每个shard开启多个服务来提高服务的可用性
五、MongoDB在Windows下本地分布式部署
1:建立服务器本地路径
D:\mongo\shard11\data
D:\mongo\shard12\data
D:\mongo\shard13\data
D:\mongo\shard11\log\shard11.log
D:\mongo\shard12\log\shard12.log
D:\mongo\shard13\log\shard13.log
D:\mongo\shard11\shard11.conf
D:\mongo\shard12\shard12.conf
D:\mongo\shard13\shard13.conf
D:\mongo\shard21\data
D:\mongo\shard22\data
D:\mongo\shard23\data
D:\mongo\shard21\log\shard21.log
D:\mongo\shard22\log\shard22.log
D:\mongo\shard23\log\shard23.log
D:\mongo\shard21\shard21.conf
D:\mongo\shard22\shard22conf
D:\mongo\shard23\shard23conf
D:\mongo\config\data
D:\mongo\config\log\config.log
D:\mongo\config\config.conf
D:\mongo\route\data
D:\mongo\route\log\route.log
D:\mongo\route\route.conf
2:配置文件
注意:仲裁者(Arbiter),是复制集中的一个MongoDB实例,它并不保存数据。为了确保复制集中有奇数的投票成员(包括primary),需要添加仲裁节点做为投票,否则primary不能运行时不会自动切换primary。简单来说 不存储数据,只参与选举 。
分片服务器配置示例:
dbpath = D:\mongo\shard11\data
port = 10011
auth = false
bind_ip = 0.0.0.0
directoryperdb = true
logpath = D:\mongo\shard11\log\shard11.log
shardsvr=true
replSet=set1
oplogSize=2048
配置服务器配置示例:
dbpath = D:\mongo\config\data
port = 30000
auth = false
bind_ip=0.0.0.0
directoryperdb = true
logpath = D:\mongo\config\log\config.log
configsvr=true
oplogSize=2048
replSet=conf
路由服务器示例:
port = 40000
logpath = D:\mongo\route\log\route.log
configdb=conf/127.0.0.1:30000
注意:configdb属性务必于配置服务器对应 配置服务器副本集名称(replSet)/ip地址:端口:
3:安装windows服务
//分片1(副本集)
D:\mongo\bin\mongod --config D:\mongo\shard11\shard11.conf --serviceName "shard11" --serviceDisplayName "shard11" --install
D:\mongo\bin\mongod --config D:\mongo\shard12\shard12.conf --serviceName "shard12" --serviceDisplayName "shard12" --install
D:\mongo\bin\mongod --config D:\mongo\shard13\shard13.conf --serviceName "shard13" --serviceDisplayName "shard13" --install
//分片2(副本集)
D:\mongo\bin\mongod --config D:\mongo\shard21\shard21.conf --serviceName "shard21" --serviceDisplayName "shard21" --install
D:\mongo\bin\mongod --config D:\mongo\shard22\shard22.conf --serviceName "shard22" --serviceDisplayName "shard22" --install
D:\mongo\bin\mongod --config D:\mongo\shard23\shard23.conf --serviceName "shard23" --serviceDisplayName "shard23" --install
//配置服务器
D:\mongo\bin\mongod --config D:\mongo\config\config.conf --serviceName "config" --serviceDisplayName "servesconfig" --install
//路由服务器
D:\mongo\bin\mongos --config D:\mongo\route\route.conf --serviceName "route" --serviceDisplayName "serveroute" –install
4:启动服务
启动分片服务
net start shard11
net start shard12
net start shard13
net start shard21
net start shard22
net start shard23
5:初始化副本集
如副本集1
进入10001
mongo --port 10001
设置配置变量 config={_id:'rs1',members:[{_id:0,host:'127.0.0.1:10001'},{_id:1,host:'127.0.0.1:10002'},{_id:2,host:'127.0.0.1:10003',arbiterOnly:true}]}
初始化配置
rs.initiate(config)
查询配置状态
rs.status()
6:启动配置服务
开启服务
net start config
进入30000
mongo --port 30000
config={_id:'conf',members:[{_id:0,host:'127.0.0.1:30000'}]}
rs.initiate(config)
7:启动配置路由服务器
管理员启动cmd
开启服务
net start route
进入路由服务器
mongo –port 40000
添加分片
db.runCommand({addshard:’rs1/127.0.0.1:10001,127.0.0.1:10002,127.0.0.1:10003’})
db.runCommand({addshard:’rs2/127.0.0.1:20001,127.0.0.1:20002,127.0.0.1:20003’})
开启分片数据库
db.runCommand({enablesharding:”testdb”})
开启分片集合
db.runCommand({enablesharding:”testcollect”})
配置结束,可以测试了。