热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB数据库中安装配置复制集与sharding

MongoDB的官方文档相当不错,而且还有中文手册,虽然有些还没有被翻译完整:)建议大家多阅读在线手册,省掉一些网上信息不准确产生的痛苦,呵呵一,安装:在各种操作系统上的安装非常简单,从网上下载相应操作系统上的MongoDB的Binaries然后直接就可以运行
MongoDB的官方文档相当不错,而且还有中文手册,虽然有些还没有被翻译完整:)建议大家多阅读在线手册,省掉一些网上信息不准确产生的痛苦,呵呵

一,安装:
    在各种操作系统上的安装非常简单,从网上下载相应操作系统上的MongoDB的Binaries然后直接就可以运行,这里不会浪费笔墨,请参考官方中文安装文档http://cn.docs.mongodb.org/manual/tutorial/install-mongodb-on-linux/。
   FQA:
    1.注意各操作系统的OS Architecture也就是是多少位的操作系统。要下载对应的MongoDB程序运行文件。Widows上可以用 wmic os get osarchitecture命令查看

二,复制集(Replica Sest):
    a.安装配置:
    创建测试环境下的三个MongoDB的存贮数据的目录:
    mkdir -p /var/database/mongodb/rs0-0 /var/database/mongodb/rs0-1 /var/database/mongodb/rs0-2
    起动三个数据库服务Instances(约定为一个复制集合)   
    mongod --port 27017 --dbpath /var/database/mongodb/rs0-0 --replSet rs0
    mongod --port 27018 --dbpath /var/databasemongodb/rs0-1 --replSet rs0
    mongod --port 27019 --dbpath /var/database/mongodb/rs0-2 --replSet rs0
    用Mongodb的管理客户端,并联接到在27017端口的Mongodb服务,启动后进行复制集操作:
    mongo --port 27017  
    >rscOnf= {
           _id: "rs0",
members: [
{ _id: 0,
host: ":27017"
}
]
         }
     >rs.initiate( rsconf )
    >rs.add(":27018")
    >rs.add(":27019")
当然也可以直接用configuration方式创建:
   >cOnfig={_id: 'setA', members:[{_id: 0,host:'127.0.0.1:10000'},{_id:1,host:'127.0.0.1:10001'},{_id:2,host:'       127.0.0.1:10002'}]}
  >rs.initiate( rsconf )
    配置完成后,验证查看一下当前复制集的状态:
   >rs.status()
   如果你在代码中使用,在创建MongoDB的对象时,把这三个MongoDB全部做为实例化参数即可,MongoDB的driver会自动判断哪个为Primiary 节点,哪几个为Slave 节点,Driver缺省情况下,会让connection读写同一个节点(一般为Primary),同时也可以设置这个复制集的读写分离,或者设置复制集的读写严格一致性:)。这里提供Java的代码例子:
   MongoClient mOngoClient= new MongoClient(Arrays.asList(
   new ServerAddress("localhost", 27017),
   new ServerAddress("localhost", 27018),
   new ServerAddress("localhost", 27019)));
  或者:
   Mongo mOngo= new Mongo(Arrays.asList(
   new ServerAddress("localhost", 27017),
   new ServerAddress("localhost", 27018),
   new ServerAddress("localhost", 27019)));
 建议大家使用第一种MongoClient类,因为Mongo类将来会被MongoClient所替代。
    b.FAQ:
    复制集合中的节点选举策略
    复制集中的集点属性。
   对读写分离(Tag定向/非定向),写关注(Write concern)即读写一致性
    c.工作机制:
    MongoDB的客户端识别这个集群的主节点(Primary Node)然后进行读写到主节点上,如果想分离读写,可以进行设置,进行读写分离,但写一直是写到PrimaryNode上,在写到的主节点同时,其它Slave节点通过oplog复制主节点数据,当然,也可以设置Chained Replica 模式,一个slave从主节点复节数据,另一个slave节点从这个slave节点再复制数据,一般建议一个replica set上不少于3台节点,因为如果一台失败,另一台就要作为恢复的数据源,影响正常数据访问,所以至少有三台。

三,分片(Sharding)
   a.安装配置:
   1.首先创建复制集,但每一台数据库要以sharding srever 方式启动。如下:
    $mongod  --shardsvr --port 27017 --dbpath /srv/mongodb/rs0-0 --replSet rs0
    $mongod --shardsvr --port 27018 --dbpath /srv/mongodb/rs0-1 --replSet rs0
    $mongod --shardsvr --port 27019 --dbpath /srv/mongodb/rs0-2 --replSet rs0
    $mongo --port 27017  
    >rscOnf= {            _id: "rs0",            members: [ {_id: 0, host: ":27017" } ]          }
     >rs.initiate( rsconf )
    >rs.add(":27018")     >rs.add(":27019")
    2.再创建同个类似的复制集
     $mongod  --shardsvr --port 37017 --dbpath /srv/mongodb/rs1-0 --replSet rs1     $mongod --shardsvr --port 37018 --dbpath /srv/mongodb/rs1-1 --replSet rs1     $mongod --shardsvr --port   37019 --dbpath /srv/mongodb/rs1-2 --replSet rs1
    $mongo --port 27017 
    >rscOnf= {            _id: "rs1",            members: [ {_id: 0, host: ":37017"                       }                     ]          }
     >rs.initiate( rsconf )
    >rs.add(":37018")     >rs.add(":37019")
   3.启动三个配置服务节点Configsvr
从命令行分别执行如下命令,配置三个Configsvr
 mongod.exe --configsvr  --dbpath d:/data/configsvr/r0 --port 40000 --shardsvr
 mongod.exe --configsvr  --dbpath d:/data/configsvr/r0 --port 40001 --shardsvr
 mongod.exe --configsvr  --dbpath d:/data/configsvr/r0 --port 40002 --shardsvr
 4.启动两个路由节点mongos
 mongos.exe --configdb 127.0.0.1:40000,127.0.0.1:40001,127.0.0.1:40002 --port 50000
mongos.exe --configdb  127.0.0.1:40000,127.0.0.1:40001,127.0.0.1:40002 --port 60000
5.配置分片
call mongo.exe 127.0.0.1:50000
MongoDB shell version: 1.8.0
connecting to: 127.0.0.1:50000
> use admin
switched to db admin
> db.runCommand({addshard:"rs0/127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019",name:"ShardSetA"})
{ "shardAdded" : "ShardSetA", "ok" : 1 }
> db.runCommand({addshard:"rs1/127.0.0.1:37017,127.0.0.1:37018,127.0.0.1:37019",name:"ShardSetB"})
{ "shardAdded" : "ShardSetB", "ok" : 1 }
集群到此已配置完成。
你可以通过客户端使用这个集群了这里只列出Java客户端代码:
 MongoClient mOngoClient= new MongoClient(Arrays.asList(
   new ServerAddress("localhost", 50000),
   new ServerAddress("localhost", 60000)));
这里你会发现用的是两个mongos路由服务器的端口
在用这个集群之前,你要对你打算Sharding的数据库进行enable一下。
用客户端连接Mongos
Mongo --port 50000
>sh.enableSharding("database name")
或者
>db.runCommand( { enableSharding: } )
这样即可。
如果你想对一个大的collection进行sharding可以执行如下命令
sh.shardCollection("people.addresses", { "state": 1, "_id": 1 } )
一切OK可以使用了,不过我拷贝的仓促,有的地方如果有漏copy的地方,大家不要骂我,可以在线问我,也可以加我QQ一齐探讨。
   b.FAQ:
   c.工作机制:
   工作机制,客户端代码,通过mongodb的driver连接mongos(一个connection(一般是源于driver提供的一个连接池)选一个mongos服务)mongos只是一个路由服务器,相当于访问代理
  当一个操作到达mongos时,mongos会根据config server上的信息,把操作转发给对应的mongod服务器,为了提高效率,mongos配置完成后,mongo configservers上的信息已缓存在mongs
 服务器上,所以你此时关掉mongo config server也暂时影响不大,除非集群进行了balance 操作,或者有新的trunck变化。

推荐阅读
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • centos php部署到nginx 404_NodeJS项目部署到阿里云ECS服务器全程详解
    本文转载自:http:www.kovli.com20170919ecs-deploy作者:Kovli本文详细介绍如何部署NodeJS项目到阿里云ECS上, ... [详细]
  • Abp+MongoDb改造默认的审计日志存储位置
    一、背景在实际项目的开发当中,使用AbpZero自带的审计日志功能写入效率比较低。其次审计日志数据量中后期十分庞大,不适合与业务数据存放在一起。所以我们可以重新实现A ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
author-avatar
围脖上的博博_771
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有