写在前面的话

对于生产环境而言,除非是非常不重要的业务,且该业务允许我们出现一定时间的停机,我们一般才会使用单节点,且该单节点必须要有完善的备份手段。

RS 复制集

我们这里采取一主两从的方式搭建复制集,在 mongodb 中,其采用 Raft 监控投票机制。如果主库发生宕机,复制集内部会重新选举主库,并通知到客户端,应用就会连接到新的主库。当然,对于应用端应该如何连接,这不是我们该思考的问题,代码里面会有专门针对这种方式的连接方法。

1. 本次准备了 3 台虚拟机搭建该集群,初始配置方法都一样:

# 关闭大页内存机制
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi # 查看设置结果
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag # 初始化目录
mkdir -p /data/{backup,data,logs,packages,services}
mkdir -p /data/packages/mongodb # 将安装包上传到:/data/packages/mongodb 下 # 解压
cd /data/packages/mongodb
tar -zxf mongodb-linux-x86_64-rhel70-4.2.1.tgz
mv mongodb-linux-x86_64-rhel70-4.2.1 /data/services/mongodb # 配置基础目录
cd /data/services/mongodb
rm -f LICENSE-Community.txt MPL-2 README THIRD-PARTY-NOTICES THIRD-PARTY-NOTICES.gotools
mkdir data logs conf

2. 都添加配置文件:

cat > /data/services/mongodb/conf/mongo.conf << EOF
# 系统日志相关
systemLog:
destination: file
path: "/data/services/mongodb/logs/mongodb.log"
logAppend: true # 数据存储相关
storage:
journal:
enabled: true
dbPath: "/data/services/mongodb/data"
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 1
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true # 进程相关
processManagement:
fork: true
pidFilePath: "/data/services/mongodb/logs/mongodb.pid" # 网络配置相关
net:
bindIp: 192.168.200.101,127.0.0.1
port: # 复制集配置相关
replication:
oplogSizeMB: 2048
replSetName: my_mongo_repl
EOF

注意红色配置!

3. 配置 systemd:

cat > /etc/systemd/system/mongod-27000.service <<EOF
[Unit]
Description=mongodb-27000
After=network.target remote-fs.target nss-lookup.target
[Service]
User=root
Type=forking
ExecStart=/data/services/mongodb/bin/mongod --config /data/services/mongodb/conf/mongo.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/data/services/mongodb/bin/mongod --config /data/services/mongodb/conf/mongo.conf --shutdown
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF

启动所有节点:

systemctl start mongod-27000.service

4. 登录任意节点配置:

/data/services/mongodb/bin/mongo --port 27000 admin

配置:

# 添加集合
config = {_id: "my_mongo_repl", members:[
{_id: 0, host: '192.168.200.101:27000'},
{_id: 1, host: '192.168.200.102:27000'},
{_id: 2, host: '192.168.200.103:27000'}
]} # 初始化集群
rs.initiate(config)

执行效果:

成功以后提示符会变!

5. 查看复制集状态:

rs.status()

主要结果如下:

红色部分为主要我们需要了解的,一个是节点的身份,是主还是从,另外一个就是当前的复制状态,在 MySQL 中我们使用指针或者 GTID 表示当前复制到哪里了。而在 mongodb 中则使用时间戳加第几个操作表示当前执行到哪里了。

此外还可以使用:

# 查看当前是否主节点
rs.isMaster() # 查看配置
rs.conf()

当前这是最基础的 RS 复制集架构,还有其它的设计方案!

特殊节点

在 mongodb 中,从节点还存在三种特殊的节点:

arbiter:主要用于监控,这意味着我们只需要一主一从一arbiter,由于该节点不用同步数据,所以可以使用性能差点的机器。

hidden:隐藏节点,不参与选主,不对外服务。

delay:延时节点,由于延时,也不参与选主和提供服务,一般和 hidden 联合使用。

配置 arbiter 节点:

两种情况,一种是集群搭建的时候就初始化为 arbiter 节点,只需要把定义的 config 增加配置即可:

config = {_id: "my_mongo_repl", members:[
{_id: 0, host: '192.168.200.101:27000'},
{_id: 1, host: '192.168.200.102:27000'},
{_id: 2, host: '192.168.200.103:27000', "arbiterOnly": true}
]}

然后再初始化即可!

另外一种情况就是集群已经存在了,但是就是普通的主从环境,就需要修改其中一个节点为 arbiter 节点:

1. 先删除该节点:

# 删除从节点
rs.remove("192.168.200.103:27000") # 增加 arbiter 节点
rs.addArb("192.168.200.103:27000")

如果只是增加普通从节点只需要使用 rs.add() 即可!

2. 查看集群情况:

rs.status()

结果如图:

记得检查该节点是否启动,如果没用启动会报错:Error connecting to 192.168.200.103:27000 :: caused by :: Connection refused 

配置 hidden delay 节点:

首先我们还是一主两从节点,选取一个从节点作为 hidden delay 节点:

# 拷贝原有配置
cfg = rs.conf() # 修改member中角标为2的参数,注意不是id为2
# 设置权重,让它不参与选主
cfg.members[2].priority=0
# 是否隐藏
cfg.members[2].hidden=true
# 延时时间
cfg.members[2].slaveDelay=120 # 重载新配置
rs.reconfig(cfg) # 查看新配置结果
rs.conf()

结果如下:

当然取消只需要反过来将配置改回默认即可!

MongoDB for OPS 02:复制集 RS 配置的更多相关文章

  1. Studio 3T for MongoDB连接51.212复制集

    Studio 3T for MongoDB连接51.212复制集 [ #DirectConection Authentication Mode - Basic(MONGODB-CR or SCEAM- ...

  2. mongodb 3.4分片复制集配置

    1:启动三个实例 mongod -f /home/mongodb/db27017/mongodb27017.conf mongod -f /home/mongodb/db27018/mongodb27 ...

  3. 单机Mongo复制集安装配置(数据库版本:4.x)

      官方文档: https://docs.mongodb.com/manual/tutorial/deploy-replica-set-with-keyfile-access-control/#dep ...

  4. MongoDB之Replica Set(复制集复制)

    MongoDB支持两种复制模式: 主从复制(Master/Slave) 复制集复制(Replica Set) 下面主要记录我在centos虚拟机上安装replica set,主要参考:http://d ...

  5. mongodb使用mongos链接复制集

    我们知道mongodb现在生产环境大部分还是使用的复制集来作为主流,据我了解.很多公司现在都是使用复制集的方式,而我们通过mongos可以巧妙的解决链接的问题,我们先从环境说起: 首先我们要模仿搭建的 ...

  6. Mongo的Replica Sets (复制集)的配置全过程和心得体会

    http://blog.csdn.net/bloggongchang/article/details/7272403 一.MongoDB Replica Sets(副本集)简单的说就是有自动故障恢复功 ...

  7. Mariadb之半同步复制集群配置

    首先我们来了解下在mariadb/mysql数据库主从复制集群中什么是同步,什么是异步,什么是半同步:所谓同步就是指主节点发生写操作事件,它不会立刻返回,而是等到从节点接收到主节点发送过来的写操作事件 ...

  8. Java应用服务器之tomcat会话复制集群配置

    会话是识别用户,跟踪用户访问行为的一个手段,通过cookie(存在客户端)或session(存在服务端)来判断本次请求是那个客户端发送过来:常用的会话保持有绑定会话,就是前边我们聊的在代理上通过算法或 ...

  9. mongodb配置复制集replset

    Mongodb的replication主要有两种:主从和副本集(replica set).主从的原理和mysql类似,主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己 ...

随机推荐

  1. Spring Cloud Alibaba 实战(十一) - Spring Cloud认证授权

    欢迎关注全是干货的技术公众号:JavaEdge 本文主要内容: 如何实现用户认证与授权? 实现的三种方案,全部是通过画图的方式讲解.以及三种方案的对比 最后根据方案改造Gateway和扩展Feign ...

  2. 几种常见的css布局_l流体布局、圣杯布局、双飞翼布局

    1.流体布局: <!DOCTYPE html><html> <head> <meta charset="utf-8"> <ti ...

  3. IT兄弟连 HTML5教程 CSS3揭秘 CSS常见的样式属性和值3

    5  边框属性 边框属性用于设置一个元素的边框风格.边框宽度.边框颜色,可以一起设置4条边的边框,也可对上边框.右边框.下边框和左边框单独设置.分别介绍如下. a.边框风格属性 可以通过边框风格属性b ...

  4. 计算机组成原理——DMA存取方式

    DMA(Direct Memory Access)直接存储器存取 高速大容量存储器和主存之间交换时,若采用程序直接传送或程序中断传送的方式,则会有如下问题发生.    1)采用程序直接传送,主机工作效 ...

  5. IMP-00009: abnormal end of export file解决方案

    一.概述 最近在测试环境的一个oracle数据库上面,使用exp将表导出没有问题,而将导出的文件使用imp导入时却出现了如下错误. IMP-00009: abnormal end of export ...

  6. Hive安装、配置和使用

    Hive概述 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能. Hive本质是:将HQL转化成MapReduce程序. Hive处理的数据存储 ...

  7. Ajax跨域请求,设置content

    在使用Ajax跨域请求时,如果设置Header的ContentType为application/json,会分两次发送请求.第 一次先发送Method为OPTIONS的请求到服务器,这个请求会询问服务 ...

  8. Vulnhub DC-1靶机渗透学习

    前言 之前听说过这个叫Vulnhub DC-1的靶机,所以想拿来玩玩学习,结果整个过程都是看着别人的writeup走下来的,学艺不精,不过这个过程也认识到,学会了很多东西. 所以才想写点东西,记录一下 ...

  9. 【转载】作为Android开发者,你真的熟悉Activity吗?

    学过android的人都知道,activity是最常用的四大组件之一,但你真的了解透彻activity了吗?接下来,本人将从activity的正常和异常生命周期.启动模式.IntentFilter匹配 ...

  10. OPENGL 入门

    检测设备支持版本,判断是否支持opengl 2.0版本 初始化设置OpenGLES2.0 实现接口GLSurfaceView.Renderer 渲染 绘制图形 1.检测设备支持版本,判断是否支持ope ...