一、该文档仅为了总结经验,方便下次部署时跳过踩过的坑。其中MongoDB的复制原理、特点等参照的菜鸟教程,附地址:https://www.runoob.com/mongodb/mongodb-replication.html

二、背景:4台服务器,dn11,dn22,dn33,dn44

  1)dn11:主服务器;

  2)dn22,dn33:从服务器,用来备份;

  3)dn44:仲裁节点,用来当主服务挂掉,从服务器是偶数个时投票产生一个新的主服务器。

三、副本集搭建过程(直接在root下操作的):

  1、停掉正在运行的mongodb服务(在每一台上执行):

    1)已添加服务的停止方式:   

    systemctl stop mongodb.service;

    2)命令停止方式:

    mongod --shutdown --config /etc/mongodb/mongodb.conf

  2、修改配置文件(在每一台上执行):vim /etc/mongodb/mongodb.conf,修改后如下:

dbpath=/usr/local/mongodb/data
logpath=/usr/local/mongodb/logs/mongo.log
logappend=true
journal=true
quiet=true
port=27017
fork=true #后台运行
bind_ip=0.0.0.0 #允许任何IP进行连接
auth=true #是否授权连接
keyFile=/usr/local/mongodb/db/keyfile #keyFile
oplogSize=512 #oplog大小
replSet=wetest #集群名称

  重要提示:使用主从(这里不做介绍)或副本集时,如果需要开启安全认证方式登录,那么必须配置keyFile属性,并且每台服务器的keyFile必须相同

  3、生成keyfile(主服务器上执行),然后将keyfile拷贝到上面配置文件所在路径:

  1)生成90个字节大小的keyfile命令:具体设置多大看你喜欢了

  openssl rand -base64 90 > /usr/local/mongodb/db/keyfile;

  2)更改keyfile权限:

  chmod 600 keyfile

  3)将keyfile拷贝到从服务器:  

  scp  /usr/local/mongodb/db/keyfile root@dn22: /usr/local/mongodb/db/keyfile;

  scp  /usr/local/mongodb/db/keyfile root@dn33: /usr/local/mongodb/db/keyfile;

  scp  /usr/local/mongodb/db/keyfile root@dn44: /usr/local/mongodb/db/keyfile;

  4、启动mongodb服务(在每一台上执行):

    1)已添加服务的启动方式:   

    systemctl start mongodb.service;

    2)命令启动方式:

    mongod -f /etc/mongodb/mongodb.conf

 四、副本集操作过程(主服务器上执行):

  1、执行mongo命令;

  2、副本集初始化:

    1)直接初始化:

    > rs.initiate();

    2)先配置,再初始化,该方式不需要再添加从节点

    > rsConfig = { _id:"fleet", members:[{ _id:0, host:"dn22:27017" }, { _id:1, host:"dn33:27017" }] };
    > rs.initiate(rsConfig);

  初始化几秒过后> 变为wetest:PRIMARY> ,由于是总结性文档,我的截图并不连贯,变化过程如下面两图:

  

   

  3、添加从节点:

  wetest:PRIMARY> rs.add("dn22:27017");
  wetest:PRIMARY> rs.add("dn33:27017");

  

  添加完成后从服务器上> 变为wetest:SECONDARY>

  

  4、添加仲裁节点:  

  wetest:PRIMARY> rs.addArb("dn44:27017");

  添加完成后仲裁服务器上> 变为wetest:ARBITER>

  

  5、设置优先级:如果副本集只有一主一从,该操作可以避免重启服务后主从关系调换(血的教训)

    1)先将配置文件保存;

wetest:PRIMARY> cfg=rs.conf();
{
"_id" : "wetest",
"version" : 7,
"protocolVersion" : NumberLong(1),
"writeConcernMajorityJournalDefault" : true,
"members" : [
{
"_id" : 0,
"host" : "dn11:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : { },
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "dn22:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : { },
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "dn33:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : { },
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 3,
"host" : "dn44:27017",
"arbiterOnly" : true,
"buildIndexes" : true,
"hidden" : false,
"priority" : 0,
"tags" : { },
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : -1,
"catchUpTakeoverDelayMillis" : 30000,
"getLastErrorModes" : { },
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("5ee9e542473bf3ef79612476")
}
}

    2)设置优先级:

    wetest:PRIMARY> cfg.members[0].priority = 2;
    wetest:PRIMARY> cfg.members[0].priority = 1;
    wetest:PRIMARY> cfg.members[0].priority = 1;
    wetest:PRIMARY> cfg.members[0].priority = 0;

    3)重新加载配置项:

    wetest:PRIMARY> rs.reconfig(cfg);

    4)查看配置是否生效:

wetest:PRIMARY> cfg=rs.conf();
{
"_id" : "wetest",
"version" : 7,
"protocolVersion" : NumberLong(1),
"writeConcernMajorityJournalDefault" : true,
"members" : [
{
"_id" : 0,
"host" : "dn11:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 2,
"tags" : { },
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "dn22:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : { },
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "dn33:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : { },
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 3,
"host" : "dn44:27017",
"arbiterOnly" : true,
"buildIndexes" : true,
"hidden" : false,
"priority" : 0,
"tags" : { },
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : -1,
"catchUpTakeoverDelayMillis" : 30000,
"getLastErrorModes" : { },
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("5ee9e542473bf3ef79612476")
}
}

    可以看到主服务器的优先级变为了2。

    5)接下来就是执行一些创建用户、数据库、表等操作,详细可以看菜鸟教程,有需要也可以在评论区留言。

    6)在从服务器和仲裁服务器需要执行的操作:设置slave为true    

    wetest:ARBITER> rs.slaveOk();

  

mongodb副本集群使用总结的更多相关文章

  1. mongodb副本集群搭建

    一.环境介绍 1.机器信息 10.40.6.68 10.40.6.108 10.40.6.110 软件环境为centos 6.x 2.mongodb 下载链接地址 https://www.mongod ...

  2. MongoDB副本集学习(一):概述和环境搭建

    MongoDB副本集概述 以下图片摘自MongoDB官方文档:http://docs.mongodb.org/manual/core/replication-introduction/ Primary ...

  3. Mongodb副本集+分片集群环境部署记录

    前面详细介绍了mongodb的副本集和分片的原理,这里就不赘述了.下面记录Mongodb副本集+分片集群环境部署过程: MongoDB Sharding Cluster,需要三种角色: Shard S ...

  4. mongodb 搭建集群(分片+副本集)

    mongodb  搭建集群(分片+副本集) 一.搭建结构图: 二.搭建步骤:

  5. Mongodb副本集+分片集群环境部署

    前面详细介绍了mongodb的副本集和分片的原理,这里就不赘述了.下面记录Mongodb副本集+分片集群环境部署过程: MongoDB Sharding Cluster,需要三种角色: Shard S ...

  6. MongoDB和Java(6):Spring Data整合MongoDB副本集、分片集群

    最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...

  7. elasticsearch与mongodb分布式集群环境下数据同步

    1.ElasticSearch是什么 ElasticSearch 是一个基于Lucene构建的开源.分布式,RESTful搜索引擎.它的服务是为具有数据库和Web前端的应用程序提供附加的组件(即可搜索 ...

  8. MongoDB副本集学习(三):性能和优化相关

    Read Preferences/读写分离 有时候为了考虑应用程序的性能或响应性,为了提高读取操作的吞吐率,一个常见的措施就是进行读写分离,MongoDB副本集对读写分离的支持是通过Read Pref ...

  9. MongoDB 副本集的原理、搭建、应用

    概念: 在了解了这篇文章之后,可以进行该篇文章的说明和测试.MongoDB 副本集(Replica Set)是有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组 ...

  10. MongoDB副本集学习(二):基本测试与应用

    简单副本集测试 这一节主要对上一节搭建的副本集做一些简单的测试. 我们首先进入primary节点(37017),并向test.test集合里插入10W条数据: . rs0:PRIMARY> ;i ...

随机推荐

  1. VSCODE远程调试中如何开启X11转发实现APP屏幕转发

    本文所要做的事情不做过多解释,本文前提是使用本地window10上的VScode远程调试Ubuntu上的代码,在该过程中我们需要查看可视化显示,为此我们使用VSCODE插件来实现X11转发. VSco ...

  2. LVS-TUN隧道模式

    当然可以.以下是按照您的要求整理的表格形式的实验手册: 主机名称 网卡信息 安装应用 系统 Client客户端 192.168.2.101 无 RHEL8/CentOS8 Lvs服务器(DR) DIP ...

  3. [考试记录] 2024.7.15 csp-s模拟赛4

    2024.7.15 csp-s模拟赛4 T1 传送带 题面翻译 有一个长度为 \(n\) 的一维网格.网格的第 \(i\) 个单元格包含字符 \(s_i\) ,是"<"或&q ...

  4. Blazor开发框架Known-V2.0.8

    V2.0.8 Known是基于Blazor的企业级快速开发框架,低代码,跨平台,开箱即用,一处代码,多处运行.目前已有部分客户在使用,最近客户的项目和产品,有的在Docker中运行,有的在重新升级改造 ...

  5. Implicit Autoencoder for Point-Cloud Self-Supervised Representation Learning论文阅读

    Implicit Autoencoder for Point-Cloud Self-Supervised Representation Learning 2023 ICCV *Siming Yan, ...

  6. stm32学习之调试篇踩坑记录

    如何下载fml文件 找不到64k的fml文件 could not stop cortex-m device:无法连接,我当时是在程序中的一些初始化函数中,有几条语句禁用了(JTAG+SW) 接线顺序, ...

  7. 【Python + yaml】之yaml文件数据驱动(包括DDT驱动)

    写自动化测试代码中,数据驱动传递参数比较方便一些,也便于后期维护,下面介绍两种数据驱动: 下面是test.yaml文件: start_HRApp: ip: 127.0.0.1 port: 4723 i ...

  8. Docker网络上篇-网络介绍

    通过前面的学习,我们已经可以把自己写的微服务项目通过dockerfile文件方式部署到docker上面了.那么微服务之间通信,怎么通信的?是在同一个网络还是在不同的网络环境下?docker中怎么配置网 ...

  9. Nuxt Kit 的使用指南:模块创建与管理

    title: Nuxt Kit 的使用指南:模块创建与管理 date: 2024/9/11 updated: 2024/9/11 author: cmdragon excerpt: 摘要:本文是关于N ...

  10. ZEGO 教程 | RTC + AI 视觉的最佳实践(移动端)

    ​  ​摘要:帮助开发者在音视频场景中快速获得 AI 视觉功能 -- 美颜.滤镜.背景抠图等. 文|即构 Native SDK 开发团队 Z世代作为社会新的消费主力,追求个性.热爱新奇事物,青睐与酷炫 ...