前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mongodb 副本集安装配置

Mongodb 副本集安装配置

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

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

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

mark
mark

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

来看一下具体的流程图:
mark
mark

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

二、服务配置搭建

主机名

(角色)作用

zhdy01 192.168.96.129

Primary

zhdy02 192.168.96.135

Secondary

zhdy03 192.168.96.136

Secondary

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

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

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

代码语言:javascript
复制
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

重启服务生效

代码语言:javascript
复制
systemctl restart mongod
在主上(zhdy01)运行命令:
代码语言:javascript
复制
> 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> 

再次查看下状态:
mark
mark
三、测试

主上建库,建集合

代码语言:javascript
复制
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

从上查看

代码语言:javascript
复制
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

mark
mark

在主上执行:

代码语言:javascript
复制
iptables -I INPUT -p tcp --dport 27017 -j DROP

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

mark
mark

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

mark
mark

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

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

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

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

代码语言:javascript
复制
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 }

状态检测:

代码语言:javascript
复制
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> 

之前挂掉的主 经过配置 故障恢复后再次成为了主 继续服务!
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016/10/19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、基础了解
    • 来看一下架构图:
      • 来看一下具体的流程图:
      • 二、服务配置搭建
        • 在主上(zhdy01)运行命令:
        • 三、测试
          • 3.2 权重的更改:
          相关产品与服务
          云数据库 SQL Server
          腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档