mongodb副本集群使用总结
一、该文档仅为了总结经验,方便下次部署时跳过踩过的坑。其中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副本集群使用总结的更多相关文章
- mongodb副本集群搭建
一.环境介绍 1.机器信息 10.40.6.68 10.40.6.108 10.40.6.110 软件环境为centos 6.x 2.mongodb 下载链接地址 https://www.mongod ...
- MongoDB副本集学习(一):概述和环境搭建
MongoDB副本集概述 以下图片摘自MongoDB官方文档:http://docs.mongodb.org/manual/core/replication-introduction/ Primary ...
- Mongodb副本集+分片集群环境部署记录
前面详细介绍了mongodb的副本集和分片的原理,这里就不赘述了.下面记录Mongodb副本集+分片集群环境部署过程: MongoDB Sharding Cluster,需要三种角色: Shard S ...
- mongodb 搭建集群(分片+副本集)
mongodb 搭建集群(分片+副本集) 一.搭建结构图: 二.搭建步骤:
- Mongodb副本集+分片集群环境部署
前面详细介绍了mongodb的副本集和分片的原理,这里就不赘述了.下面记录Mongodb副本集+分片集群环境部署过程: MongoDB Sharding Cluster,需要三种角色: Shard S ...
- MongoDB和Java(6):Spring Data整合MongoDB副本集、分片集群
最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...
- elasticsearch与mongodb分布式集群环境下数据同步
1.ElasticSearch是什么 ElasticSearch 是一个基于Lucene构建的开源.分布式,RESTful搜索引擎.它的服务是为具有数据库和Web前端的应用程序提供附加的组件(即可搜索 ...
- MongoDB副本集学习(三):性能和优化相关
Read Preferences/读写分离 有时候为了考虑应用程序的性能或响应性,为了提高读取操作的吞吐率,一个常见的措施就是进行读写分离,MongoDB副本集对读写分离的支持是通过Read Pref ...
- MongoDB 副本集的原理、搭建、应用
概念: 在了解了这篇文章之后,可以进行该篇文章的说明和测试.MongoDB 副本集(Replica Set)是有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组 ...
- MongoDB副本集学习(二):基本测试与应用
简单副本集测试 这一节主要对上一节搭建的副本集做一些简单的测试. 我们首先进入primary节点(37017),并向test.test集合里插入10W条数据: . rs0:PRIMARY> ;i ...
随机推荐
- mindspore-gpu-2.2.0版本学习笔记
docker镜像拉取: docker pull swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-gpu-cuda11.6:2.2.0 使用 ...
- 8月5日CSP-S模拟赛赛后总结
8月5日CSP-S模拟赛赛后总结 \[8月5日 \ \ CSP-S模拟赛 \ \ 赛后总结 \\ 2024年8月5日 \\ by \ \ \ uhw177po \] 一.做题情况 第一题比赛 \(10 ...
- Linux下如何在程序中获取某个命令执行的结果?【附源码】
在工作中遇到一个问题,就是想获取某个函数执行之后打印的字符串信息. 这个功能应用场景挺多的, 特地整理了一下相关知识点分享给大家. 1. 使用临时文件 1) 使用shell的重定向 将命令输出重定向到 ...
- 使用 preloadRouteComponents 提升 Nuxt 应用的性能
title: 使用 preloadRouteComponents 提升 Nuxt 应用的性能 date: 2024/8/19 updated: 2024/8/19 author: cmdragon e ...
- 麒麟系统ARM架构下MySQL5.7离线安装,搭建主从集群
一.检查本机操作系统 #一定要注意查看本机的操作系统,是amd(x86)还是arm(aarch)架构 $ uname -a Linux Server-58aa6d9e-9412-4ab6-b496-2 ...
- Python正则表达式提取车牌号
在Python中使用正则表达式(Regular Expressions)来提取车牌号是一个常见的任务,尤其是在处理车辆信息或进行图像识别后的文本处理时.中国的车牌号格式多种多样,但通常包含省份简称.英 ...
- 2024年智能革命:HarmonyOS NEXT与盘古大模型5.0的颠覆性融合
引言 2024年,这一年注定在全球智能设备市场的历史上写下浓墨重彩的一笔.作为全球科技巨头,华为再次以其前瞻性的布局,推动了技术与应用的深度融合.在这个充满变革的时代,华为通过不断扩展的鸿蒙生态系统, ...
- Playwright 浏览器窗口最大化
实现方式 浏览器启动时,加参数 args=['--start-maximized']: 创建上下文时,加参数 no_viewport=True. from playwright.sync_api im ...
- 主观与客观,破除DDD凭经验魔咒
本文书接上回<学习真DDD的最佳路径>,关注公众号(老肖想当外语大佬)获取信息: 最新文章更新: DDD框架源码(.NET.Java双平台): 加群畅聊,建模分析.技术实现交流: 视频和直 ...
- python将资源打包进exe
前言 之前py打包的exe一直是不涉及图片等资源的,直到我引入图片后打包,再双击exe发现直接提示未找到资源. 分析 我py代码中的图片引入使用的是项目相对路径,打包时pyinstaller只会引入p ...