Mongodb 副本集安装配置

一、基础了解

  • 早期版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主。
  • 目前已经淘汰master-slave模式,改为副本集,这种模式下有一个主(primary),和多个从(secondary),只读。支持给它们设置权重,当主宕掉后,权重最高的从切换为主。
  • 在此架构中还可以建立一个仲裁(arbiter)的角色,它只负责裁决,而不存储数据。
  • 再此架构中读写数据都是在主上,要想实现负载均衡的目的需要手动指定读库的目标server。
来看一下架构图:

Primary至少需要一个,从的话可以一个或者多个!

除了增加多个Secondary之外,我们还可以在集群架构中增加一个Arbiter(仲裁):

其主要目的是,当主挂掉之后,我们的Arbiter会决定根据权重选择出来一个从接替主的位置继续服务!(也是为了防止脑裂这种情况的发生!)

来看一下具体的流程图:

当主挂掉后,其中的一个Secondary自动的变成了新的Primary并行驶主的权利!

二、服务配置搭建

主机名

(角色)作用

zhdy01 192.168.96.129

Primary

zhdy02 192.168.96.135

Secondary

zhdy03 192.168.96.136

Secondary

三台机器均需要安装MongoDB服务! 关闭firewall规则!

replication://把此行前面的#删除
 
 ##oplog大小
 oplogSizeMB: 20    //前面有两个空格
 
 ##复制集名称
 replSetName: aminglinux    //前面有两个空格

三台机器均配置如下,bindIp处配置改成本机自身的IP(修改如下两个地方):

net:
  port: 27017
  bindIp: 127.0.0.1,192.168.96.129  # Listen to local interface only, comment to listen on all interfaces.

replication:
  oplogSizeMB: 20
  replSetName: zhdya

重启服务生效

systemctl restart mongod
在主上(zhdy01)运行命令:
> use admin

> config={_id:"zhdya",members:[{_id:0,host:"192.168.96.129:27017"},{_id:1,host:"192.168.96.135:27017"},{_id:2,host:"192.168.96.136:27017"}]}

配置副本集id为zhdya id分别为0 1 2

> rs.initiate(config)
{ "ok" : 1 }

然后我们再次去登录其它两台server(其实等待个2分钟左右就会自动配置好主和从,一般主的话是你在哪台机器上面设置如上的conf) 显示:

zhdya:SECONDARY> 

再次查看下状态:

三、测试

主上建库,建集合

zhdya:PRIMARY> use mydb

zhdya:PRIMARY> db.acc.insert({AccountID:1,UserName:"asd",password:"asd9577"})

zhdya:PRIMARY> show dbs

zhdya:PRIMARY> use mydb
switched to db mydb

zhdya:PRIMARY> show tables
acc

从上查看

zhdya:SECONDARY> show dbs
2017-10-19T22:05:18.642+0800 E QUERY    [thread1] Error: listDatabases failed:{
	"ok" : 0,
	"errmsg" : "not master and slaveOk=false",
	"code" : 13435,
	"codeName" : "NotMasterNoSlaveOk"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:769:19
shellHelper@src/mongo/shell/utils.js:659:15
@(shellhelp2):1:1


出现错误Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" },需要执行

zhdya:SECONDARY> rs.slaveok()

zhdya:SECONDARY> use mydb
switched to db mydb

zhdya:SECONDARY> show tables
acc

然后就可以发现我们刚刚在主上面创建的集合!
3.2 权重的更改:

默认三台机器权重都为1,如果任何一个权重设置为比其他的高,则该台机器马上切换为primary角色,所以我们预设三台机器的权重分别为:129:3,135:2,136:1

在主上执行:

iptables -I INPUT -p tcp --dport 27017 -j DROP

(稍等个30秒,我们再次进入去查看状态)由于权重都是1所以轮序着来。

这样的话,第二个节点将会成为候选主节点。

试想一下,如果我们删除了iptables规则,默认的zhdy01主还会自动回来吗?

答案:肯定不会的,因为大家权重都是1。

针对这种情况我们就需要设置不同的权重值,去区分!当故障恢复后依然会恢复到主的身份!

下面我们来这个新的主zhdy02上面来操作:

zhdya:PRIMARY> cfg = rs.conf()

zhdya:PRIMARY> cfg.members[0].priority = 3
3
zhdya:PRIMARY> cfg.members[1].priority = 2
2
zhdya:PRIMARY> cfg.members[2].priority = 1
1
zhdya:PRIMARY> rs.reconfig(cfg)
{ "ok" : 1 }

状态检测:

zhdya:SECONDARY> 
2017-10-19T22:36:00.827+0800 I NETWORK  [thread1] Socket say send() Broken pipe 127.0.0.1:27017
2017-10-19T22:36:00.833+0800 I NETWORK  [thread1] trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed
2017-10-19T22:36:00.835+0800 I NETWORK  [thread1] reconnect 127.0.0.1:27017 (127.0.0.1) ok
zhdya:SECONDARY> 
zhdya:PRIMARY> 
zhdya:PRIMARY> 

之前挂掉的主 经过配置 故障恢复后再次成为了主 继续服务!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏潇涧技术专栏

Mou and StackEdit and Mathjax

本文记录使用Mou和Stackedit中出现的一些问题,使其能够正常渲染带数学公式的文章

10610
来自专栏我的博客

使用Jpgraph画折线图(一)

首先下载jpgraph扩展类[点击下载][下载],开启gd库支持 第一步:先画一个简单的 <?php require_once (‘jpgraph/jpgra...

28960
来自专栏雪胖纸的玩蛇日常

python3.6+django2.0 一小时学会开发一套学员管理系统demo

55150
来自专栏BinarySec

mmap及linux地址空间随机化失效漏洞

Linux下动态库是通过mmap建立起内存和文件的映射关系。其定义如下void* mmap(void* start,size_t length,int prot...

31110
来自专栏24K纯开源

一款批量修改AE模板的工具

一、需求分析      对于视频后期剪辑及相关从业人员来说,AE(After Effects)模板效果是一个不错的开始点。在模板效果的基础上,可以很快的做出各种...

41170
来自专栏移动端开发

环信SDK 头像、昵称、表情自定义和群聊设置的实现 一(附源码)

前言: 环信的SDK在公司的项目中有用到,现在用到的是群聊的部分,这里我们分析总结一下自己对环信给的DEMO大概的拆解一下,说说我们怎么样充分的利用这个de...

37580
来自专栏挖掘大数据

Cobub无码埋点关键技术实现流程(附图)

随着大数据时代的到来,数据采集也已经变的越来越重要。前端埋点作为一个比较成熟的数据接入手段被广泛应用着。目前埋点分为两种方式,有码与无码埋点。有码埋点比较容易理...

27460
来自专栏生信宝典

Cytoscape制作带bar图和pie图节点的网络图

本教程旨在告诉大家如何使用cytoscape根据Node信息表格制作带有barplot信息节点的网络图。以安装文件夹下的样例数据为例。

35430
来自专栏雪胖纸的玩蛇日常

Vue+koa2开发一款全栈小程序(9.图书详情页)

24710
来自专栏逸鹏说道

样式问题-如何一次性设置网站英文字体样式,中文字体等样式

异常处理汇总-前端系列 http://www.cnblogs.com/dunitian/p/4523015.html 今天才发现,CSS 的 font-fami...

33260

扫码关注云+社区

领取腾讯云代金券