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.系统环境设置:

系统环境:

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() 查看当前副本集状态

人已赞赏
站长资讯

asp.net core系列 40 Web 应用MVC 介绍与详细示例

2020-11-9 3:42:47

站长资讯

jvm内存

2020-11-9 3:42:49

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索