MongoDB环境搭建
来源:互联网 发布:redis做数据库 编辑:程序博客网 时间:2024/05/21 22:23
MongoDB环境搭建
实验目的
为5台主机搭建MangoDB环境。
实验原理就不再赘述了,课上都讲过,网上博客也都不错。
实验步骤:
0x01硬件条件:
5台centos7主机,IP地址:x.x.x.46~50。机器的名称分别为lk,node1,node2,node3,node4(后来时间紧,任务重,就稍微缩水一下,只配了lk,node1,node2)。
实验条件默认使用root账户,有需要切回普通用户的情况我会提到。
0x02材料准备:
MongoDB安装包:去官网上随便找一个包即可,我是3.0.6的版本
0x03环境搭建:
首先创建目录:
#存放整个mongodb文件mkdir -p /data/mongodbtest/single #存放mongodb数据文件mkdir -p /data/mongodbtest/single/data#进入mongodb文件夹cd /data/mongodbtest
之后解压缩:tar xvzf mongodb-linux-x86_64-3.0.6.tgz
进入程序执行文件夹:cd mongodb-linux-x86_64-3.0.6/bin/
然后启动单实例mongod:./mongod --dbpath /data/mongodbtest/single/data
反馈信息如下:
MongoDB starting : pid=12632 port=27017 dbpath=/data/mongodbtest/single/data 64-bit host=lk** WARNING: You are running this process as the root user, which is not recommended.** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.** We suggest setting it to 'never'WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.** We suggest setting it to 'never'db version v3.0.6git version: 1ef45a23a4c5e3480ac919b28afcba3c615488f2build info: Linux build6.ny.cbi.10gen.cc 2.6.32-431.3.1.el6.x86_64 #1 SMP Fri Jan 3 21:39:27 UTC 2014 x86_64 BOOST_LIB_VERSION=1_49allocator: tcmallocoptions: { storage: { dbPath: "/data/mongodbtest/single/data" } }waiting for connections on port 27017
然后本机另起一个终端,在相同的目录下执行mongo:./mongo
MongoDB shell version: 3.0.6connecting to: test>
出现以下字样说明已经连接上本机的MongoDB数据库test,然后可以试着执行一些操作如show等等,验证mongodb是否正常工作。
> show dbslocal 0.078GB> 1+23>
运行结果如下:
至此单机环境搭建完毕。
之后开始搭建分片环境:
- 首先在mongodb外建立文件夹:
分别在lk,node1,node2 三台机器上执行以下命令:#建立mongos及日志目录sudo mkdir -p /data/mongodbtest/mongos/log#建立config server 数据文件存放目录sudo mkdir -p /data/mongodbtest/config/data#建立config server 日志文件存放目录sudo mkdir -p /data/mongodbtest/config/log#建立shard1 数据文件存放目录sudo mkdir -p /data/mongodbtest/shard1/data#建立shard1 日志文件存放目录sudo mkdir -p /data/mongodbtest/shard1/log#建立shard2 数据文件存放目录sudo mkdir -p /data/mongodbtest/shard2/data#建立shard2 日志文件存放目录sudo mkdir -p /data/mongodbtest/shard2/log#建立shard3 数据文件存放目录sudo mkdir -p /data/mongodbtest/shard3/data#建立shard3 日志文件存放目录sudo mkdir -p /data/mongodbtest/shard3/log
规划5个组件对应的端口号,由于一个机器需要同时部署 mongos、config server 、shard1、shard2、shard3,所以需要用端口进行区分。
这个端口可以自由定义,在本文 mongos为 20000, config server 为 21000, shard1为 22001 , shard2为22002, shard3为22003.
为了统一管理,我把mongodb主程序放在了
/usr/local/mongodb/
中。当准备工作都做好之后,分别在lk,node1,node2三台机器上执行下面命令:sudo /usr/local/mongodb/bin/mongod --configsvr --dbpath /data/mongodbtest/config/data --port 21000 --logpath /data/mongodbtest/config/log/config.log —fork
运行结果如下:
- 然后连接一下mongodb服务器(任一台):
./mongo --host lk --port 21000
- 输入以下语句:
rs.initiate({members:[{_id:0,host:"lk:21000"}, {_id:1,host:"node1:21000"}, {_id:2,host:"node2:21000"}]})
结果如图:
- 在每一台服务器分别启动分片及副本集。在每一台服务器分别以副本集方式启动分片,执行以下命令:
./mongod --shardsvr --replSet shard1ReplSet --port 22001 --dbpath /data/mongodbtest/shard1/data --logpath /data/mongodbtest/shard1/log/shard1.log --fork --nojournal./mongod --shardsvr --replSet shard2ReplSet --port 22002 --dbpath /data/mongodbtest/shard2/data --logpath /data/mongodbtest/shard2/log/shard2.log --fork --nojournal./mongod --shardsvr --replSet shard3ReplSet --port 22003 --dbpath /data/mongodbtest/shard3/data --logpath /data/mongodbtest/shard3/log/shard3.log --fork --nojournal
结果如图:
- 找一台机器连接任一台服务器,然后执行以下3条命令:
./mongo --host lk --port 22001 rs.initiate({_id:"shard1ReplSet", members:[{_id:0,host:"lk:22001"}, {_id:1,host:"node1:22001"}, {_id:2,host:"node2:22001"}]})
./mongo --host lk --port 22002 rs.initiate({_id:"shard2ReplSet", members:[{_id:0,host:"lk:22002"}, {_id:1,host:"node1:22002"}, {_id:2,host:"node2:22002"}]})
./mongo --host lk --port 22003 rs.initiate({_id:"shard3ReplSet", members:[{_id:0,host:"lk:22003"}, {_id:1,host:"node1:22003"}, {_id:2,host:"node2:22003"}]})
结果如图:
- 之后需要选择一台机器作为路由服务:
./mongos --configdb lk:21000,node1:21000,node2:21000 --port 20000 --logpath /data/mongodbtest/mongos/log/mongos.log --fork./mongos --configdb 10.113.10.46:21000,10.113.10.47:21000,10.113.10.48:21000 --port 20000 --logpath /data/mongodbtest/mongos/log/mongos.log --fork
- 如果配置过host就用上面的命令,否则需要手动把计算机名替换成ip(下面的命令)
结果如图:
如果报这样的错:
2017-11-19T02:16:55.288+0800 E - [mongosMain] error upgrading config database to v6 :: caused by :: all config servers must be reachable for initial config database creation :: caused by :: node1:21000 (10.113.10.47) failed:10276 DBClientBase::findN: transport error: node1:21000 ns: admin.$cmd query: { getlasterror: 1, fsync: 1 } node2:21000 (10.113.10.48) failed:10276 DBClientBase::findN: transport error: node2:21000 ns: admin.$cmd query: { getlasterror: 1, fsync: 1 }
就说明是host没有配,主机找不到其他主机的位置,换成下面的语句就好:
P.S:这里有可能会出问题:
只看最后一句话:
2017-11-19T02:06:41.799+0800 E - [mongosMain] error upgrading config database to v6 :: caused by :: DistributedClockSkewed clock skew of the cluster lk:21000,node1:21000,node2:21000 is too far out of bounds to allow distributed locking.
问题出在几台主机时间差太大,使用date -s
+秒表可手动解决。
- 之后任一台机器连接路由服务
./mongo --host lk --port 20000
如图所示:
只要出现了mongos>
就说明基本配置成功了
- 之后在当前mongos中执行下面几条命令:
执行以下命令,添加分片到集群sh.addShard("shard1ReplSet/lk:22001,node1:22001,node2:22001")sh.addShard("shard2ReplSet/lk:22002,node1:22002,node2:22002") sh.addShard("shard3ReplSet/lk:22003,node1:22003,node2:22003")
如图所示:
- 之后就可以进行测试了,这里mongos的命令格式与mongodb基本相同,我们主要来测试下分片成果:
- 首先新建数据库mdb并分片:
sh.enableSharding("mdb")sh.shardCollection("mdb.Log",{id:1})use mdbshow dbs
结果如下图:
然后插入10w个数据:
mongos> for(var i=1;i<=100000;i++){... db.Log.save({id:i,"message":"message"+i});... }db.Log.stats();
结果如下:
主要看每个分片的count:
"shard1ReplSet" : { "count" : 99991,}"shard2ReplSet" : { "count" : 1,}"shard3ReplSet" : { "count" : 8,}
- 这个分了还不如不分,肯定是打开方式不对,于是做一下修改:
db.Log.drop();//删掉上次插入的数据 sh.shardCollection("mdb.Log",{id:"hashed"}) { "collectionsharded" : "mdb.Log", "ok" : 1 }mongos> for(var i=1;i<=100000;i++){... db.Log.save({id:i,"message":"message"+i});... }db.Log.stats();
结果如图:
查看每个分片的count:
"shard1ReplSet" : { "count" : 33755,}"shard2ReplSet" : { "count" : 33143,} "shard3ReplSet" : { "count" : 33102,}
这里分片就正常了,修改在于把id为1改为了hash。
实验到这里环境算是搭成功了,当然可能会在有些地方报错,注意多查看log日志就好,网上相关解答不少。
- mongodb环境搭建
- Mongodb 环境搭建
- mongodb的环境搭建
- Node+Mongodb环境搭建
- MongoDb环境搭建
- mongodb环境搭建
- MongoDB安装环境搭建
- mongoDB CentOS7环境搭建
- MongoDB 环境搭建
- MongoDB环境搭建
- MongoDb(一)--环境搭建
- 【MongoDB】 MongoDB环境的搭建(Windows)
- MongoDB与PHP -- 环境搭建
- 初学mongodb笔记-搭建环境
- MongoDB C++开发环境搭建
- mongoDb c++ 开发环境搭建
- MongoDB C++ 开发环境搭建
- Spring Data MongoDB 环境搭建
- python 学习心得
- angularjs(ng-repeat和filter)生成多级菜单
- 软件更新,是不是太频繁了?
- JXL基础应用
- 学习笔记DL003:神经网络第二、三次浪潮,数据量、模型规模,精度、复杂度,对现实世界冲击
- MongoDB环境搭建
- POI相关
- Mysql 常用函数
- 第十章 登录与验证码处理
- 向linux服务器上传下载文件
- 行走在开发工程师的路上
- 使用插入迭代器(inserter)和流迭代器(stream iterators)
- 关于值对象及相关概念的梳理
- Angular 4入门教程系列:16:NG-ZORRO:ICON/Button/Grid