tar -zxvf mongodb-linux-x86_64-rhel70-3.6.4.tar.gz 先解压 mongodb的客户端
cd mongodb-linux-x86_64-rhel70-3.6.4
mkdir Data 新建一个Data文件夹用于文件的存储操作
mkdir logs 新建一个记录 mongodb的log文件的文件夹
cd bin
./mongod --help 查看帮助文档(使用这个命令可以在启动mongodb的时候查看其帮助文档)
./mongod --dbpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/Data --bind_ip=192.168.159.136 --logpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/logs/mongod.log --logappend --fork
--bind_ip 有这个属性之后才能被外界计算机访问 mongodb这个数据库,因为默认是 127.0.0.1,其他的计算机访问不到
--logpath 设置日志文件路径
---logappend 添加日志文件
--fork 默认是后台启动
也可以使用指定配置文件的方式启动,到 /usr/local/mongodb-linux-x86_64-rhel70-3.6.4 这个目录下:
vi mongodb.cfg
dbpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/Data
logpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/logs/mongodb.log
logappend=true
fork=true
bind_ip=192.168.159.136
port=27017
cd bin
./mongod -f ../mongodb.cfg
这样也可以启动mongodb
使用其它计算机连接到远程的 mongodb的命令:
./mongo --host 192.168.159.136
-------------------------------------------------------------------------------------------------------------
接下来介绍 mongodb集群环境的搭建:
集群机器环境:
master机器: 192.168.159.136
slaver机器: 192.168.159.136
arbiter机器: 192.168.159.136
首先来到mongodb的根路径下( /usr/local/mongodb-linux-x86_64-rhel70-3.6.4)创建几个文件夹
mkdir -p replset/master/data
mkdir -p replset/master/logs
mkdir -p replset/slaver/data
mkdir -p replset/slaver/logs
mkdir -p replset/arbiter/data
mkdir -p replset/arbiter/logs
然后在刚刚创建的 replset/master/ 这个目录下 创建一个文件,文件如下:
vi mongodb.cfg
dbpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/replset/master/data
logpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/replset/master/logs/mongodb.log
logappend=true
fork=true
bind_ip=192.168.159.136
port=27017
replSet=shard002
然后在刚刚创建的 replset/slaver/ 这个目录下创建一个文件,文件如下(注意dbpath、logpath和bind_ip参数的变化):
vi mongodb.cfg
dbpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/replset/slaver/data
logpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/replset/slaver/logs/mongodb.log
logappend=true
fork=true
bind_ip=192.168.159.135
port=27017
replSet=shard002
然后在刚刚创建的 replset/arbiter/ 这个目录下创建一个文件,文件如下(注意dbpath、logpath和bind_ip参数的变化):
vi mongodb.cfg
dbpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/replset/arbiter/data
logpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/replset/arbiter/logs/mongodb.log
logappend=true
fork=true
bind_ip=192.168.159.137
port=27017
replSet=shard002
然后执行下面的命令将 刚刚配置的 slaver和arbiter 节点转移到下面的路径上,在/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/replset目录下执行:
scp -r ./slaver root@192.168.159.135:/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/replset/slaver
scp -r ./arbiter root@192.168.159.137:/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/replset/arbiter
然后分别在 master、slaver、arbiter 三台机器的 mongodb的bin目录下分别执行下面的开启命令
192.168.159.136上:
./mongod -f ../replset/master/mongodb.cfg
192.168.159.135上:
./mongod -f ../replset/slaver/mongodb.cfg
192.168.159.137上:
./mongod -f ../replset/arbiter/mongodb.cfg
这个时候需要加上一个配置让集群的环境真正搭建成功:
配置 mongodb 主、备、仲裁 节点,也可以直接在三个节点中选择一个连接 mongodb
先连接上一个 mongodb的数据库
./mongo --host 192.168.159.136
执行下面的命令
cfg={_id:"shard002",members:[
{ _id:0,host:'192.168.159.136:27017',priority:9},
{ _id:1,host:'192.168.159.135:27017',priority:1},
{ _id:2,host:'192.168.159.137:27017',arbiterOnly:true}
]};
arbiterOnly:这个属性的含义是它是一个仲裁节点
注意里面的_id:"shard002" 要和刚刚配置文件 replSet=shard002 的参数相同
执行完命令之后出现下面的信息则说明执行正确:
然后再执行:
rs.initiate(cfg); 这句命令的作用是使得配置生效,出现下面的状态则说明已经配置成功。
使用 rs.status() 这个命令可以查看三个节点的状态,可以看到三个members状态分别是 PRIMARY、SECONDARY、ARBITER
可以在集群中的主机器执行下面的添加指令
db.t_member.insert({name:'lxh',age:15})
然后来连接一台从机,执行 ./mongo --host 192.168.159.135
连接上之后执行 rs.slaveOk();
然后即可看到在主节点上插入的数据 db.t_member.find();
三台机器的状态如下图所示:
因为仲裁节点在集群当中不存储数据,也不做任何操纵等,所以不推荐使用这样的集群策略。
-------------------------------------------------------------------------------------------------------------
接下来再玩一个伪分布式:
在 /usr/local/mongodb-linux-x86_64-rhel70-3.6.4 路径下执行下面的命令新建一些文件夹:
mkdir -p shard/replset/replica1/data
mkdir -p shard/replset/replica1/logs
mkdir -p shard/replset/replica2/data
mkdir -p shard/replset/replica2/logs
mkdir -p shard/replset/replica3/data
mkdir -p shard/replset/replica3/logs
然后再在 shard/replset/replica1 、 shard/replset/replica2 、shard/replset/replica3 这三个目录下创建mongodb.cfg文件,内容如下:
dbpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/shard/replset/replica1/data
logpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/shard/replset/replica1/logs/mongodb.log
logappend=true
fork=true
bind_ip=192.168.239.144
port=27001
replSet=shard001
dbpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/shard/replset/replica2/data
logpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/shard/replset/replica2/logs/mongodb.log
logappend=true
fork=true
bind_ip=192.168.239.144
port=27002
replSet=shard001
dbpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/shard/replset/replica3/data
logpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/shard/replset/replica3/logs/mongodb.log
logappend=true
fork=true
bind_ip=192.168.239.144
port=27003
replSet=shard001
结构如下:
设置一个变量
cfg={_id:"shard001",members:[
{ _id:0,host:'192.168.159.136:27001'},
{ _id:1,host:'192.168.159.136:27002'},
{ _id:2,host:'192.168.159.136:27003'}
]};
注意 _id 变成了和前面一样的 shard001
rs.initiate(cfg);
可以测试吧 27001端口的停掉,这个时候会冲洗选举出新的 mongodb 的主机,注意登录其他从机的时候需要执行这个指令 rs.slaveOk();
-------------------------------------------------------------------------------------------------------------
到现在为止有了一组伪分布式的数据库(M-S-S)和另外一组真分布式的数据库(M-S-A)
mongodb
接下来我们搭建 路由服务器 Route Server 和 config服务器 Config Server
先配置config服务器,创建一个目录
mkdir -p shard/configsvr/config1/data
mkdir -p shard/configsvr/config1/logs
mkdir -p shard/configsvr/config2/data
mkdir -p shard/configsvr/config2/logs
mkdir -p shard/configsvr/config3/data
mkdir -p shard/configsvr/config3/logs
vi ./shard/configsvr/config1/mongodb.cfg
进行config的配置
dbpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/shard/configsvr/config1/data
logpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/shard/configsvr/config1/logs/mongodb.log
logappend=true
fork=true
bind_ip=192.168.159.136
port=28001
replSet=configrs
configsvr=true
注意配置里的端口号改成了 28001 还有 replSet的设置变成了 configrs 还有一个 configsvr这个属性是true,表示的含义是当前这个 mongodb的配置是一台 mongodb的配置服务器
vi ./shard/configsvr/config2/mongodb.cfg
dbpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/shard/configsvr/config2/data
logpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/shard/configsvr/config2/logs/mongodb.log
logappend=true
fork=true
bind_ip=192.168.159.136
port=28002
replSet=configrs
configsvr=true
vi ./shard/configsvr/config3/mongodb.cfg
dbpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/shard/configsvr/config3/data
logpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/shard/configsvr/config3/logs/mongodb.log
logappend=true
fork=true
bind_ip=192.168.159.136
port=28003
replSet=configrs
configsvr=true
然后再把 三个配置节点的mongodb启动。来到 mongodb的 bin 目录下:
./mongod -f ../shard/configsvr/config1/mongodb.cfg
./mongod -f ../shard/configsvr/config2/mongodb.cfg
./mongod -f ../shard/configsvr/config3/mongodb.cfg
执行这个命令即可启动mongodb的三台配置服务器
可以开启另外一台shell终端,然后在mongodb的终端执行下面的指令:
./mongo --host 192.168.159.136:28001
进来之后初始化一下:
cfg={_id:"configrs",members:[
{ _id:0,host:'192.168.159.136:28001'},
{ _id:1,host:'192.168.159.136:28002'},
{ _id:2,host:'192.168.159.136:28003'}
]};
rs.initiate(cfg);
rs.status(); 可以查看节点的配置信息
接下来来配置路由服务器,来到mongodb的根目录中:
mkdir -p shard/routesvr/data
mkdir -p shard/routesvr/logs
vi shard/routesvr/mongodb.cfg
configdb=configrs/192.168.159.136:28001,192.168.159.136:28002,192.168.159.136:28003
port=30000
fork=true
logpath=/usr/local/mongodb-linux-x86_64-rhel70-3.6.4/shard/routesvr/logs/mongodb.log
logappend=true
bind_ip=192.168.159.136
注意这里添加了 configdb这个属性,其中属性值开头 configrs是取自 配置服务器中的 replSet这个属性,还要注意路由服务器去掉了 dbpath、replSet、configsvr 这三个属性。
其中configdb属性的值里面跟上了三台配置服务器的地址和端口号
来到mongodb的bin目录下
然后在mongodb的根目录的bin路径下执行下面的语句
./mongos -f ../shard/routesvr/mongodb.cfg
这样就启动了配置路由服务器
然后再使用下面的命令连接上mongodb的服务
./mongo 192.168.159.136:30000
连接成功会看到下面的信息:
小知识:
mongodb当中的bin目录下的三个 文件有什么区别(mongo、mongod、mongos)
答:mongos是路由,mongod是连接副本集的数据库,mongo是客户端
-------------------------------------------------------------------------------------------------------------
接下来的内容是mongodb的数据切片如何来做,mongodb的最大亮点就在于数据切片上。
使用 ./mongo 192.168.159.136:30000 命令连接到路由服务器上.
show dbs可以看到下面的信息:
db.shards.find()
db.chunks.find()
db.mongos.find()
怎么把切片和路由服务器关联上:
shard001和 shard002的配置我们知道 shard001是一个 伪分布式,shard002是一个真分布式
使用下面的命令把其中一个切片添加到路由当中去:
sh.addShard("shard001/192.168.159.136:27001"); 返回的 ok值等于1表示添加成功
执行 use config、show collections、
db.shards.find() 这个时候可以看到三个节点已经被都有了
在配置路由以前,所有的副本集是可以相互通信的,也就是彼此知道对方是谁,而且他们之间都是能够通信的。
只要找到其中一台,就能把副本集集群添加进来。
可以在执行
sh.addShard("shard002/192.168.159.136:27017");
然后再执行 db.shards.find() 这个命令把两个副本集都添加进来。
mongodb集群环境当中一个副本集是由多个副本组成,一个副本是由多个块组成,多个副本集组成了一个mongodb的集群
块和副本的关系如下所示:
mongodb集群当中的几个名词:
RouteServer(路由服务器)、
ConfigServer(配置服务器)、
Replica Set (副本集)
Shard(切块)
Chunk(分块)
在 ./mongo 192.168.159.136:30000 连接的端口上执行下面的命令。
使用testdb库
use testdb
使用testdb这个分片
sh.enableSharding("testdb");
把集合切开
sh.shardCollection("testdb.testcon",{name:"hashed"});
给testdb当中添加数据
for(var i=0;i<100;i++) db.testcon.insert({name:"tom",age:i});