MongoDB副本集配置
上篇文章我们搭建了MongoDB副本集的环境,验证了数据已经可以成功的复制,本文我们就来看看MongoDB副本集的其他操作。
环境准备
三台服务器,地址分别是:
192.168.248.128
192.168.248.135
192.168.248.136
按照上文介绍的步骤搭建副本集环境,这里不再赘述。
副本集成员添加删除
在副本集环境搭建好之后,我们可以利用如下命令删除一个副本集成员:
rs.remove('192.168.248.128:27017')
上面的命令执行完成后,我们可以通过rs.status()命令来查看是否删除成功,也可以通过如下命令来为副本集添加一个成员:
rs.add('192.168.248.128:27017')
当然,副本集也是可以更新的,使用reconfig命令即可,如下:
首先定义config,如下:
config={_id:"rs",members:[{_id:3,host:"192.168.248.128"},{_id:1,host:"192.168.248.135"}]}
然后执行更新操作:
rs.reconfig(config)
我们也可以利用config=rs.config()获取原始的config文件,然后进行修改,修改之后再执行 rs.reconfig(config),如下:
config=rs.config()
config.members[0].host="192.168.248.136"
rs.reconfig(config)
选举仲裁者
在上文中给小伙伴们演示了主节点挂掉后的情况,和其他的(如Redis)数据库主从复制不同,MongoDB中主节点挂掉之后会自动从备份节点中选出一个新的主节点出来,这是一个选举的过程,投票选举,但是如果备份节点数为偶数的话,可能会出现两台服务器票数相等的情况,为了避免这种问题的出现,我们一般有两种解决方案:
1.数据节点为奇数个,这样就会避免上面描述的问题出现。 2.使用选举仲裁者,这是一种特殊的成员,仲裁者不保存数据,也不为客户端提供服务,只是在选举投票出现僵持时出来投个票,一个副本集中最多只能有一个仲裁者。
选举仲裁者占用的系统资源很小,因此对部署的服务器性能没多大要求,向副本集中添加仲裁者的方式如下:
rs.addArb('192.168.248.128:27017')
也可以利用我们之前说的reconfig来操作:
config=rs.config()
config.members[2]={_id:2,host:'192.168.248.128',arbiterOnly:true}
rs.reconfig(config)
添加完成之后,我们可以通过rs.status()命令来查看是否添加成功,如果看到如下内容,表示添加成功:
{
"_id" : 2,
"name" : "192.168.248.128:27017",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 2,
"lastHeartbeat" : ISODate("2017-11-03T08:56:12.406Z"),
"lastHeartbeatRecv" : ISODate("2017-11-03T08:56:08.417Z"),
"pingMs" : NumberLong(1),
"configVersion" : 8
}
仲裁者的移除和普通节点的移除是一样的,这里不再赘述。
优先级问题
优先级用来描述一个备份节点成为主节点的优先性问题,优先级的取值范围为[0-100],默认为1,数字越大优先级越高,越有可能成为主节点,0表示该节点永远不能成为主节点。 我们可以在添加节点时指定优先级,如下:
rs.add({_id:0,host:'192.168.248.128:27017',priority:2})
也可以为已有的节点设置优先级:
config=rs.config()
config.members[0].priority=99
rs.reconfig(config)
好了,MongoDB中副本集的配置我们就先说到这里,小伙伴们有问题欢迎留言讨论。
参考资料:
1.《MongoDB权威指南第2版》
- 享元模式
- 揭秘:针对中国移动用户的强大网银木马剖析
- 从源代码到Runtime发生的重排序编译器重排序指令重排序内存系统重排序阻止重排序
- 内存屏障保证缓存一致性优化
- 最新XSS 0day漏洞来袭,影响最新版本IE浏览器(含POC)
- Java内存模型—JMMhappens-before规则
- 那些年我们一起用过的Hybrid App
- 来看看美帝人民的安全意识:安全研究人员指责iOS版Outlook存在多处安全隐患
- 不是原配也可以-对接非原生配体
- oj放苹果
- 漏洞追踪:最新IE UXSS漏洞技术分析
- 如何使用Python超参数的网格搜索ARIMA模型
- int string相互转换
- Android 增量更新和升级
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 教你用云开发打造一个双端自动发布的博客体系(下)
- 国科大&中科院提出CANet:用于图像复原的拼接注意力网络
- 【Kubernetes】Octant部署
- 使用注意力机制来做医学图像分割的解释和Pytorch实现
- 用Python写个爬虫小程序,给女朋友每日定时推送睡前小故事
- 数据量大的表建立索引或者修改表结构太慢的解决办法
- Activiti7入门Demo
- mybatis 中#与$的区别
- Spring中的FactoryBean和BeanFactory
- MybatisPlus分页插件无效解决方案
- springboot+mybatis打印sql
- jquery插件与扩展
- CNN一定需要池化层吗?
- RabbitMQ入门Demo,基于springboot
- 收藏|Pandas缺失值处理看这一篇就够了!