Mongodb集群

1) 集群中有三个角色,一个主两个从
180416_ROCz_613887.png
  
2) 还可以增加一个角色arbiter(仲裁),它只负责仲裁,不会存储任何数据
180438_AIvh_613887.png

  
3) 坏掉主后,其中一个从会接管主的角色
180447_jHHj_613887.png
  
三台机器: 
192.168.184.5(primary)  192.168.184.5
 172.7.15.112(secondary)    192.168.184.11
172.7.15.101(secondary)    192.168.184.14
编辑三台机器的配置文件,增加:
replication:
##oplog大小
oplogSizeMB: 20 【mysql binlog】
##复制集名称
replSetName: aminglinux
[注意:]bind_ip :留为空,不然在config的时候会出现:
"errmsg" : "No host described in new configuration 1 for replica set aminglinux maps to this node",
的错误。
分别重启后,连接primary机器
mongo 
>use admin
>config={_id:"chengyuegroup",members:[{_id:0,host:"192.168.184.5:27017"},{_id:1,host:"192.168.184.11:27017"},{_id:2,host:"192.168.184.14:27017"}]}
>rs.initiate(config)
>rs.add("192.168.184.11")
>rs.add("192.168.184.14")
查看状态:
>rs.status()
{
"set" : "aminglinux",
"date" : ISODate("2015-10-19T06:32:09.200Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "localhost.localdomain:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1381,
"optime" : Timestamp(1445235074, 1),
"optimeDate" : ISODate("2015-10-19T06:11:14Z"),
"electionTime" : Timestamp(1445234949, 1),
"electionDate" : ISODate("2015-10-19T06:09:09Z"),
"configVersion" : 3,
"self" : true
},
{
"_id" : 1,
"name" : "172.7.15.112:27017",
"health" : 1,
"state" : 0,
"stateStr" : "STARTUP",
"uptime" : 1268,
"optime" : Timestamp(0, 0),
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2015-10-19T06:32:07.764Z"),
"lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
"pingMs" : 1,
"configVersion" : -2
},
{
"_id" : 2,
"name" : "172.7.15.101:27017",
"health" : 1,
"state" : 0,
"stateStr" : "STARTUP",
"uptime" : 1255,
"optime" : Timestamp(0, 0),
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2015-10-19T06:32:07.930Z"),
"lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
"pingMs" : 1,
"configVersion" : -2
}
],
"ok" : 1
}
或者使用命令:rs.config();

这个状态是不对的,正常从节点上应该是SECONDARY,而不是STARTUP
解决该问题,需要在主节点执行
> var config={_id:"aminglinux",members:[{_id:0,host:"172.7.15.111:27017"},{_id:1,host:"172.7.15.112:27017"},{_id:2,host:"172.7.15.101:27017"}]}
>rs.reconfig(config)
再次执行
>rs.status() 
发现状态好了


测试:
主上建库,建集合
>use mydb
>db.acc.insert({AccountID:1,UserName:"123",password:"123456"})
>show tables

从上测试
首先要:
>rs.slaveOk();
【注意:】如果没有rs.slaveOK(); 执行
shwo dbs的时候,会出现:

Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" }

 

>show dbs    //也出现mydb库了。

更改primary和secondary的权重,会引起主从切换
cfg = rs.conf()
cfg.members[0].priority = 1
cfg.members[1].priority = 2
cfg.members[2].priority = 1
rs.reconfig(cfg)
这样第二个机器会自动切换到主,权重最高的机器会担任主角色。
在生成环境中,我们需要找一个从节点作为自动切换节点,当主节点宕机后,它会自动接管主的服务,成为主节点,当主恢复后还会自动切换回原来的身份。所以,我们应该这样配置:
【注意:】执行下面的配置的时候,必须要在主节点上执行:

不然会出现:

    "errmsg" : "replSetReconfig should only be run on PRIMARY, but my state is SECONDARY; use the \"force\" argument to override",

 

cfg = rs.conf()
cfg.members[0].priority = 3
cfg.members[1].priority = 2
cfg.members[2].priority = 1
rs.reconfig(cfg)这样的话,第二个节点将会成为候选主节点。

候选主节点,当主节点恢复以后,主会自动恢复当候选主节点为主的时候写入的数据。也就是说和其他
的节点的数据保持同步。
测试:

本机上连接不上mongodb ,在从上,就会出现:
 

转载于:https://my.oschina.net/linuxphp/blog/713989

### MongoDB集群的搭建与管理 #### 一、实验环境准备 为了成功搭建MongoDB集群,需先准备好相应的实验环境。通常情况下,可以采用虚拟机或者容器化技术来模拟多节点部署场景[^1]。 对于Windows环境下,具体的操作流程包括但不限于以下几个方面:下载并安装适合版本的MongoDB软件包;创建必要的数据存储路径以及日志记录位置等基础准备工作[^2]。 #### 二、构建集群架构 在规划阶段明确所需实现的功能特性之后,就可以着手设计具体的物理拓扑结构了——比如副本集(replica set)还是分片(sharding),这取决于业务需求对高可用性和扩展性的不同侧重程度。 当决定使用Docker作为运行平台时,则需要定义好各个容器之间的网络连接关系,并通过Compose文件统一管理和编排整个系统的生命周期过程。 #### 三、配置细节说明 无论是在本地主机上手动操作还是利用自动化工具完成初始化工作,在每台服务器实例中都需要单独指定其角色定位(Primary/Secondary/Mongos Config Server etc.)及相关参数选项设置,例如端口号监听范围、身份验证机制启用与否等等重要属性值设定均应在对应的.conf文档里体现出来。 另外值得注意的是,在实际生产环境中还应该考虑安全性方面的因素,如IP白名单限制访问来源地址列表、SSL/TLS加密通信保护敏感信息传输安全等问题也需要提前做好相应安排措施。 #### 四、启动服务进程 一旦上述各项前期筹备事项均已妥善处理完毕后即可依次执行命令行指令分别激活各组成部分的服务程序,确保它们能够正常运转起来形成完整的分布式数据库解决方案体系。 最后一步就是按照官方指南指引逐步引导系统进入预期的工作状态之中去,期间可能涉及到一些额外的手动干预动作才能顺利完成全部上线前后的过渡转换环节任务目标达成情况确认验收等工作内容项清单核查表单填写提交审批流程走完才算真正意义上的大功告成啦! ```bash docker-compose up -d mongosh --host <hostname>:<port> rs.initiate({...}) sh.addShard(...) db.runCommand({enableSharding:"test"}) ``` #### 五、维护与监控 日常运维过程中要定期检查硬件资源消耗状况图表趋势分析报告生成导出存档备份恢复演练计划制定实施效果评估反馈意见收集采纳改进方案讨论决策会议纪要编写发布通知公告邮件提醒订阅推送功能开发测试上线运营支持服务体系建立完善优化升级迭代更新周期规律总结经验教训吸取成长进步空间探索发现新机遇挑战应对策略研究探讨交流学习分享心得体会感悟收获成果展示宣传推广品牌价值塑造提升影响力扩大市场份额占有率提高经济效益最大化追求可持续发展目标愿景使命宣言承诺践行责任担当意识增强社会责任感培养公民道德素质修养提高文明礼貌待人接物行为准则规范树立良好社会形象声誉口碑传播正能量影响更多人群加入公益事业行列共同创造美好未来世界贡献力量。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值