MongoDB测试集群搭建(切片+副本集) 3.4
问题描述
原来公司使用的是 mongodb v3.2.2 版本,在这个版本中发现一个问题在集群环境下,如果有一个节点关机后,前台访问php访问mongodb的性能就会变得超慢,然后就开始各种折腾,没有解决,在升级版本到3.4.2中发现解决完成。
环境准备
首先需要三台服务器,集群模式三台,在网上搜到材料都是切三个片,我没有太理解这样做的原因,我就做了一个切片+副本集,配置见如下表格:
服务器IP | 端口 | 用途 | 备注 |
192.168.1.42 | 29017 | Mongodb切片存储数据端口 |
|
192.168.1.43 | 29017 | Mongodb切片存储数据端口 |
|
192.168.1.44 | 29017 | Mongodb切片存储数据端口 |
|
192.168.1.42 | 20001 | Congfig配置集群负责管理mongodb |
|
192.168.1.43 | 20001 | Congfig配置集群负责管理mongodb |
|
192.168.1.44 | 20001 | Congfig配置集群负责管理mongodb |
|
192.168.1.42 | 30000 | Mongodb路由端口 |
|
192.168.1.43 | 30000 | Mongodb路由端口 |
|
192.168.1.44 | 30000 | Mongodb路由端口 |
|
软件部署
下载地址 推荐官网 下载地址:
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.24.tgz
下载完成解压到opt目录下,重命名为mongodb注意大小写,我们后面要配置环境变量
编译 /etc/profile 在最后面加入:
export MONGODB_HOME=/opt/mongodb
export PATH=$PATH:$MONGODB_HOME/bin
然后执行 #source /etc/profile
在终端直接执行 mongo 会显示出版本号,说明配置成功
创建 mongodb用户,密码也为mongodb执行命令如下:
# useradd mongodb
# passwd mongodb
# chown -R mongodb:mongodb /data/
在/目录下创建 /data目录并创建 两个子目录 /data/r4,/data/ config,将所属修改为mongodb
请保持下服务器时钟一致否则会有问题,然后我们来正式配置数据库
服务配置
- 首先配置29017端口,我没用配置配置方式,直接用命令行参数形式启动命令,分别在三台服务器上执行如下命令:
#opt/mongodb/bin/mongod --shardsvr --replSet r4 --port 29017 --dbpath /data/r4 --logpath /data/r4/r4.log --logappend --nssize 64 --oplogSize 10240 --maxConns 1000 --fork
任意找一台服务器开始数据29017端口切片存储服务器集群,在终端上执行
# mongo --port 29017
>config={_id:'r4',members:[{_id:0,host:'192.168.1.42:29017'},{_id:1,host:'192.168.1.43:29017'}, {_id: 2, host: '192.168.1.44:29017'}]}
>rs.initiate(config)
>exit
在从新登录#mongo --port 29017
>rs.status();
查看那个节点显示的是PRIMARY 即为主节点,请记住这主节点 后面还有用
- 下面开始配置20001端口,编辑配置文件在每个节点上执行 #vim /data/config.conf,填入如下信息:
bind_ip=192.168.1.42,127.0.0.1
dbpath=/data/config
logpath=/data/config/config.log
port=20001
pidfilepath=/data/config.pid
directoryperdb=true
logappend=true
fork=true
configsvr=true
journal=true
replSet = config
注意:bind_ip 是每个节点ip,记得修改
都配置完成后20001配置端口启动mongodb服务端口
# mongod -f /data/config.conf
任意找一台服务器开始数据20001端口管理mongodb服务器集群,在终端上执行
# mongo 127.0.0.1:20001/admin
> configSvr = {_id: 'config', members: [{_id: 0, host: '192.168.1.42:20001', priority:2},{_id: 1, host: '192.168.1.43:20001'},{_id: 2, host: '192.168.1.44:20001'},]};
>rs.initiate(configSvr)
>rs.status()
配置完成后查看 查看那个是congfig主服务,这里需要注意id: 'config' 不能修改名字
- 配置mongos 和 开启 数据切片,编辑配置文件在每个节点上执行
#vim /data/mongs.conf,填入如下信息:
configdb=config/192.168.1.42:20001,192.168.1.43:20001,192.168.1.44:20001
logpath=/data/route.log
port=30000
pidfilepath=/data/route.pid
logappend=true
fork=true
都配置完成后30000配置端口启动mongodb服务端口
#mongos -f /data/mongs.conf
#mongo 127.0.0.1:30000/admin
>db.runCommand({addshard:"r4/192.168.1.42:29017,192.168.1.43:29017,192.168.1.44:29017"});
> db.runCommand({ enablesharding:"adbox" });
> db.runCommand({ enablesharding:"fbbox" });
>exit
数据库整体配置完了,接下来我开始测试会测试一下这个mongodb的性能
Mongodb数据库 基本查询命令
show dbs 询所有数据库列表
show collections 查看库下面有那些集合
db.user.find() 查看user集合有哪些数据