mongodb副本集实现
1. 简单介绍
MongoDB中的副本集是一组提供冗余和高可用性的mongod进程。副本集主要包含:primary,secondary和arbiter。
primary:
在副本集中只有一个,接收所有写操作,并把这些操作记录到primary的oplog里面,然后secondary将会复制这个oplog,并且将其在自己的数据集中执行一遍。
一个副本集可以有50个成员组成,但是只能有7个成员参与投票。
secondary:
在副本集中有一个或者多个,secondary主要进行对primary的数据进行复制操作,来维持相同的数据。如果primary不可用了,副本集将会进行选举,选择出secondary变成新的primary。
Priority 0 Replica Set Members:
优先级为0的成员不能成为primary,也不能触发选举。Hidden Replica Set Members:
隐藏副本集成员维护主数据集的副本,但对客户机应用程序是不可见的。隐藏成员必须始终是优先级为0的成员,因此不能成为主成员。隐藏成员可以在选举中投票。
在分片群集中,mongos不与隐藏成员交互。Delayed Replica Set Members:
延迟成员包含副本集数据集的副本。但是,延迟成员的数据集反映了该集合的早期或延迟状态。例如,如果当前时间是09:52并且成员有一小时的延迟,则延迟成员没有比08:52更新的操作。
延迟成员是数据集的“滚动备份”或运行“历史”快照,因此它们可以帮助从各种人为错误中恢复。如,延迟成员可以从升级失败和操作员错误(包括删除的数据库和集合)中恢复。
延迟成员:
必须是优先级为0的成员。将优先级设置为0以防止延迟成员成为主要成员。
应该是被隐藏的成员。始终阻止应用程序查看和查询延迟成员。
若members[n].votes设置为1,参与投票选举primary。
arbiter:
arbiter不会进行数据的复制,也不能成为primary,只在选举primary的过程中参加投票。
2.系统环境设置:
系统环境:
- 操作系统:CentOs 6.9
- mongodb:3.6.10
IP地址:
| 服务器名称 | IP |
|---|---|
| mongodb1 | 192.168.1.2 |
| mongodb2 | 192.168.1.3 |
| mongodb3 | 192.168.1.4 |
环境设置:
# tail /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
# echo "never">/sys/kernel/mm/transparent_hugepage/enabled
# echo "never">/sys/kernel/mm/transparent_hugepage/defrag
# 更改用户进程数限制
# cat /etc/security/limits.d/90-nproc.conf
* soft nproc 32768
root soft nproc unlimited
$ ulimit -u 32768
# 增加hosts解析
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
mongodb1 192.168.1.2
mongodb2 192.168.1.3
mongodb3 192.168.1.4
3.安装mongodb
安装mongodb
# tar -xf mongodb-linux-x86_64-3.0.11.gz
# mkdir /usr/local/mongodb
# mv mongodb-linux-x86_64-3.0.11 /usr/local/mogodb
# cd /usr/local/mongodb
# 按照要求创建数据日志配置文件目录
# mkdir data logs conf
# 修改环境变量
$ echo 'export PATH=$PATH:/usr/local/mongodb/bin:' >> ~/.bash_profile
增加配置文件:
# vim conf/mongod.conf
systemLog:
destination: file
path: /data/mongodb/log/mongo.log # 指定日志文件路径
logAppend: true
logRotate: rename
storage:
journal:
enabled: true
dbPath: /data/mongodb/data/ # 指定数据文件路径
directoryPerDB: true
engine: wiredTiger
wiredTiger:
engineConfig:
directoryForIndexes: true
indexConfig:
prefixCompression: true
replication:
oplogSizeMB: 1024
replSetName: "repset" # 指定副本集名称
processManagement:
fork: true # 后台运行
net:
port: 27001 # 端口
bindIp: 192.168.1.2 # 绑定IP
添加启动脚本
在/etc/init.d/下增加mongod启动脚本(/etc/init.d/mongodb):
该脚本是通过yanfa用户来启动mongodb。
#!/bin/bash
#
# chkconfig: - 80 90
# description: Starts, stops mongodb
#
#########################################
#source function library.
. /etc/init.d/functions
# return value
RETVAL=0
USER=yanfa
PROG="mongodb"
MONGODB_DIR=/usr/local/mongodb
MONGODB_CONF=$MONGODB_DIR/conf/mongod.conf
MONGODB_BIN=$MONGODB_DIR/bin/mongod
start(){
status $MONGODB_BIN &>/dev/null
RETVAL=$?
if [ $RETVAL -eq 3 ];then
sudo su - $USER -c "$MONGODB_BIN -f $MONGODB_CONF" &>/dev/null \
&& action "$PROG start..." /bin/true
elif [ $RETVAL -eq 0 ]; then
action "$PROG is running" /bin/true
else
action "$PROG is running" /bin/false
fi
}
stop(){
sudo su - $USER -c "$MONGODB_BIN -f $MONGODB_CONF --shutdown" &>/dev/null
if [ $? -eq 0 ];then
action "$PROG stopped" /bin/true
else
action "$PROG stopped" /bin/false
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $MONGODB_BIN
;;
version)
$MONGODB_BIN -version
;;
*)
echo $"Usage: $0 {start|stop|status|version}"
exit 2
;;
esac
添加执行权限:chmod +x /etc/init.d/mongodb
添加开机自启动:chkconfig --add mongodb
3. 副本集实现:
启动/关闭mongodb:
# 脚本启动mongo:
/etc/init.d/mongodb start
# 脚本关闭mongo:
/etc/init.d/mongodb stop
# 二进制文件启动和关闭
mongod -f /usr/local/mongodb/conf/mongod.conf
mongod -f /usr/local/mongodb/conf/mongod.conf --shutdown
登录mongodb数据库,创建副本集方法一:
$ mongo --host 192.168.1.2 --port 27001
# 切换到admin数据库
> use admin;
# 初始化副本集
> rs.initiate(); #
# 查看当前副本集信息
repset:PRIMARY> rs.conf()
# 添加成员一
repset:PRIMARY> rs.add("192.168.1.3:27001")
# 添加成员一
repset:PRIMARY> rs.add("192.168.1.4:27001")
# 查看副本集的状态
repset:PRIMARY> rs.status()
查看副本集配置:rs.conf()
删除副本集中的成员:rs.remove('host:port')
创建副本集方法二:
> use admin;
> cfg={
... "_id":"repset",
... "members":[
... {"_id":0,"host":"192.168.1.2:27001"},
... {"_id":1,"host":"192.168.1.3:27001"},
... {"_id":2,"host":"192.168.1.4:27001"}
... ]}
> rs.initiate(cfg)
mongo Shell中的复制方法:
| 名称 | 描述 |
|---|---|
| rs.add() | 往副本集中添加成员 |
| rs.addArb() | 往副本集中添加仲裁节点 |
| rs.conf() | 返回副本集的配置文档 |
| rs.freeze() | 阻止现任成员在一段时间内寻求选举。 |
| rs.help() | 返回帮助信息 |
| rs.initiate() | 初始化一个新的副本集 |
| rs.printReplicationInfo() | 从primary的角度中打印副本集的状态报告 |
| rs.printSlaveReplicationInfo() | 从Secondary的角度打印副本集状态的报告。 |
| rs.reconfig() | 通过应用新的副本集配置对象重新配置副本集。 |
| rs.remove() | 从副本集中删除成员 |
| rs.slaveOk() | 设置slaveOk当前连接的属性 |
| rs.status() | 查看当前副本集状态 |
mongodb副本集实现的更多相关文章
- MongoDB副本集的实现与维护实战
1.建立MongoDB副本集 现利用一台机器完成MongoDB副本集的建立 机器1:127.0.0.1:27017 机器2:127.0.0.1:27018 机器3:127.0.0.1:27019 在D ...
- MongoDB副本集学习(三):性能和优化相关
Read Preferences/读写分离 有时候为了考虑应用程序的性能或响应性,为了提高读取操作的吞吐率,一个常见的措施就是进行读写分离,MongoDB副本集对读写分离的支持是通过Read Pref ...
- MongoDB 副本集的原理、搭建、应用
概念: 在了解了这篇文章之后,可以进行该篇文章的说明和测试.MongoDB 副本集(Replica Set)是有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组 ...
- MongoDB副本集学习(一):概述和环境搭建
MongoDB副本集概述 以下图片摘自MongoDB官方文档:http://docs.mongodb.org/manual/core/replication-introduction/ Primary ...
- MongoDB副本集学习(二):基本测试与应用
简单副本集测试 这一节主要对上一节搭建的副本集做一些简单的测试. 我们首先进入primary节点(37017),并向test.test集合里插入10W条数据: . rs0:PRIMARY> ;i ...
- MongoDB副本集搭建及备份恢复
一.MongoDB副本集(repl set)介绍 早起版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主: 目前已经淘汰了ma ...
- java程序连接MongoDB副本集测试
三个节点有一个节点挂掉也不会影响应用程序客户端对整个副本集的读写! public class TestMongoDBReplSet { public static void main(String[] ...
- MongoDB副本集的常用操作及原理
本文是对MongoDB副本集常用操作的一个汇总,同时也穿插着介绍了操作背后的原理及注意点. 结合之前的文章:MongoDB副本集的搭建,大家可以在较短的时间内熟悉MongoDB的搭建和管理. 下面的操 ...
- MongoDB副本集的搭建
副本集是mongodb提供的一种高可用解决方案.相对于原来的主从复制,副本集能自动感知primary节点的下线,并提升其中一个Secondary作为Primary. 整个过程对业务透明,同时也大大降低 ...
- 创建mongodb副本集操作实例
一:概念 相关概念及图片引用自这里 mongodb副本集: 副本集是一组服务器,其中一个是主服务器,用于处理客户请求:还有多个备份服务器,用于保存主服务器的数据副本.如果主服务器崩溃了,备份服务器自动 ...
随机推荐
- 初探Apache Beam
文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/9010748.html 转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点, ...
- 搭建centos7的开发环境2-单机版Hadoop2.7.3配置
最近公司准备升级spark环境,主要原因是生产环境的spark和hadoop版本都比较低,但是具体升级到何种版本还不确定,需要做进一步的测试分析.这个任务对于大数据开发环境配置有要求,这里记录一下配置 ...
- 拾人牙慧篇之———QQ微信的第三方登录实现
一.写在前面 关于qq微信登录的原理之流我就不一一赘述了,对应的官网都有,在这里主要是展示我是怎么实现出来的,看了好几个博客,有的是直接复制官网的,有的不知道为什么实现不了.我只能保证我的这个是我实现 ...
- 如何用plugman编辑和添加cordova插件
1.安装工具 进入nodejs, 安装工具plugman,管理插件,输入命令npm install -g plugman 等待下载安装 2.使用plugman命令生成插件框架 cmd 进入用于生成插件 ...
- RabbitMQ Linux(Redhat6.5)安装(二 )
一.安装erlang 由于RabbitMq的linux运行环境需要erlang环境,所以需要先安装erlang: 1.erlang下载: http://erlang.org/download/(我下载 ...
- spring事务机制
一.Java动态代理 1.定义 Java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理. 默认情况下会采用JDK的动态代理实现AOP . 2. ...
- ubuntu18.04安装搜狗拼音
1.下载好搜狗安装包http://pinyin.sogou.com/linux/ ,注意位数! 2.打开终端安装依赖 sudo apt install libfcitx-qt0 3.提取下载好的 ...
- Python中’__main__’模块的作用
Python不同于C/C++,程序执行并不需要主程序,如main(),而是文件自上而下的执行.但很多Python程序中都有 if __name__ == '__main__': statements ...
- Map集合的便利学习总结
1.Map提供了三种便利方式 1)遍历所有key. Set<K> keySet() 该方法会将当前Map中所有key存入一个Set集合后返回. 2)遍历所有的key-value对 Se ...
- 【Python 】selenium 简介
从源码中可以找到selenium 2.48.0支持的浏览器如下: [python] view plain copy Firefox Chrome ChromeOptions Ie Edge Opera ...