从这一篇开始咱们主要讨论mongodb的部署技术。sql
咱们知道sql server可以作到读写分离,双机热备份和集群部署,固然mongodb也能作到,实际应用中咱们不但愿数据库采用单点部署,mongodb
若是碰到数据库宕机或者被毁灭性破坏那是多么的糟糕。数据库
一:主从复制服务器
1: 首先看看模型图架构
2: 从上面的图形中咱们能够分析出这种架构有以下的好处:app
<1> 数据备份。性能
<2> 数据恢复。测试
<3> 读写分离。3d
3:下面咱们就一一实践日志
实际应用中咱们确定是多服务器部署,限于本身懒的装虚拟机,就在一台机器上实践了。
第一步:咱们把mongodb文件夹放在D盘和E盘,模拟放在多服务器上。
第二步:启动D盘上的mongodb,把该数据库指定为主数据库,其实命令很简单:>mongodb --dbpath='XXX' --master,
端口仍是默认的27017.
第三步:一样的方式启动E盘上的mongodb,指定该数据库为从属数据库,命令也很简单,固然咱们要换一个端口,好比:8888。
source 表示主数据库的地址。
>mongod --dbpath=xxxx --port=8888 --slave --source=127.0.0.1:27017
第四步:从图中的红色区域咱们发现了一条:“applied 1 operations"这样的语句,而且发生的时间相隔10s,也就说明从属数据库每10s
就向主数据库同步数据,同步依据也就是寻找主数据库的”OpLog“日志,能够在图中红色区域内发现”sync_pullOpLog“字样。
接下来咱们要作的就是测试,惊讶的发现数据已经同步更新,爽啊。
4: 若是我还想增长一台从属数据库,可是我不想在启动时就指定,而是后期指定,那么mongodb能否作的到呢?答案确定是能够的。
咱们的主或者从属数据库中都有一个叫作local的集合,主要是用于存放内部复制信息。
好,那么咱们就试一下,我在F盘再拷贝一份mongodb的运行程序,cmd窗口好多啊,你们不要搞乱了。
看上面的log,提示没有主数据库,不要紧,某一天咱们良心发现,给他后期补贴一下,哈哈,再开一个cmd窗口,语句也就是
在sources中add一个host地址,最后发现数据也同步到127.0.0.1:5555这台从属数据库中....
5: 读写分离
这种手段在大一点的架构中都有实现,在mongodb中其实很简单,在默认的状况下,从属数据库不支持数据的读取,可是不要紧,
在驱动中给咱们提供了一个叫作“slaveOkay"来让咱们能够显示的读取从属数据库来减轻主数据库的性能压力,这里就不演示了。
二:副本集
这个也是很牛X的主从集群,不过跟上面的集群仍是有两点区别的。
<1>: 该集群没有特定的主数据库。
<2>: 若是哪一个主数据库宕机了,集群中就会推选出一个从属数据库做为主数据库顶上,这就具有了自动故障恢复功能,很牛X的啊。
好,咱们如今就来试一下,首先把全部的cmd窗口关掉从新来,清掉db下的全部文件。
第一步: 既然咱们要创建集群,就得取个集群名字,这里就取咱们的公司名shopex, --replSet表示让服务器知道shopex下还有其余数据库,
这里就把D盘里面的mongodb程序打开,端口为2222。指定端口为3333是shopex集群下的另外一个数据库服务器。
第二步: 既然上面说3333是另外一个数据库服务器,不要急,如今就来开,这里把E盘的mongodb程序打开。
第三步: ok,看看上面的日志红色区域,彷佛咱们尚未作完,是的,log信息告诉咱们要初始化一下“副本集“,既然日志这么说,那我也就
这么作,随便链接一下哪一个服务器都行,不过必定要进入admin集合。
第四步: 开启成功后,咱们要看看谁才能成为主数据库服务器,能够看到端口为2222的已经成为主数据库服务器。
第五步:咱们知道sql server里面有一个叫作仲裁服务器,那么mongodb中也是有的,跟sql server同样,仲裁只参与投票选举,这里咱们
把F盘的mongodb做为仲裁服务器,而后指定shopex集群中的任一个服务器端口,这里就指定2222。
而后咱们在admin集合中使用rs.addArb()追加便可。
追加好了以后,咱们使用rs.status()来查看下集群中的服务器状态,图中咱们能够清楚的看到谁是主,仍是从,仍是仲裁。
不是说该集群有自动故障恢复吗?那么咱们就能够来试一下,在2222端口的cmd服务器按Ctrl+C来KO掉该服务器,立马咱们发现
在3333端口的从属服务器便可顶上,最后你们也能够再次使用rs.status()来看下集群中服务器的状态。