写在前面的话

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

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. Qt的诞生和本质

    有没有发现,在这个主函数里面没有了消息循环了.消息循环到哪里去了呢? 我们知道,每个GUI应用程序都有消息循环,一般都需要将消息循环while那个函数写到main的最后位置.那既然如此,为了代码复用, ...

  2. windows10 安装win10和ubuntu 16.04双系统

    安装教程如下 亲测可用 https://www.cnblogs.com/masbay/p/10844857.html 镜像路径如下 http://releases.ubuntu.com/16.04/ ...

  3. swoole为什么不能代替nginx

    Swoole不能代替Apache和Nginx这些通用的HTTP服务器. 但基于Swoole开发的PHP应用不依赖Apache和Nginx也能提供生产级别的HTTP服务. 有需要学习交流的友人请加入交流 ...

  4. sublime插件开发教程3

    今天就看下api的使用方法 中文的api文档 https://mux.alimama.com/posts/549.html#sublime.View sublime模块 方法 返回值 描述 set_t ...

  5. linux命令-压缩与打包

    在 Linux 中可以识别的常见压缩格式有十几种,比如".zip"" .gz"" .bz2" ".tar" " ...

  6. sql server报【将截断字符串或二进制数据】错误

    会出现这个错误的原因是因为表设置的列长度小于要插入的数据的长度. 可以从下列的6个方面去排查: 1.表设置的列名长度太短. 2.插入的数据太长. 3.有默认值. 4.有触发器. 5 从char数据类型 ...

  7. sql server 2014 卸载

    遇到一个沙雕工程人员~二话不装给我装了2014的版本,实际开发的时候用的是2012....欸~ 1.打开服务 2.打开控制面板下的程序与功能 3选中红框点击卸载与更改----->选择删除 4.然 ...

  8. CSS 从大图中选取部分区域作为目标图标

    从大图中选取部分区域作为目标图标 by:授客 QQ:1033553122 1.图片素材 图片素材如下(大小:137px * 264px),图中从上到下,连续存放了两张100px * 100px的图   ...

  9. 个人项目开源之Django图书借阅系统源代码

    Django写的模拟图书借阅系统源代码已开源到码云 源代码

  10. 使用Graphviz和Pyreverse绘制Python项目结构图

    使用Graphviz和Pyreverse绘制Python项目结构图 简介 Graphviz开源的图形绘制工具包 Pyreverse分析Python代码和类关系的工具 安装 安装Graphviz 官网下 ...