mongodb sharding分片模式的集群数据库,日志治理缺失导致写入数据库报错MongoWriteConcernException的问题总结(下)

一、接着上文

上文介绍了mongodb sharding的分片集群搭建,本文侧重于讲述日志治理。

这里使用linux自带的日志治理工具logrotate,无论是哪个端口的进程,其日志治理方式类似。

查看/data目录下的文件大小,

du -hs *

二、Logrotate配置

在这里插入图片描述

#vi /etc/logrotate.d/mongo12000 
/data/mongodb12000/log/mongo12000.log {daily    copytruncatenotifemptyrotate 21dateextcompressdelaycompressmissingoksharedscriptspostrotateif [ -f /data/mongodb12000/run/mongo12000.pid ]; thenkill -SIGUSR1 `cat /data/mongodb12000/run/mongo12000.pid`fiendscript
}

进程ID文件存储在/data/mongodb12000/run/mongo12000.pid,见下:

在这里插入图片描述
在这里插入图片描述

[root@mongo_test03 ~]# ll /data/mongodb12000/run/mongo12000.pid
-rw-r--r-- 1 mongo mongo 5 Jun 25  2023 /data/mongodb12000/run/mongo12000.pid[root@mongo_test03 ~]# cat /data/mongodb12000/run/mongo12000.pid
1445

关于进程ID,
在这里插入图片描述

[root@mongo_test03 ~]# ps -ef | grep 12000
mongo     1445     1  9  2023 ?        25-05:17:11 /usr/local/mongodb-linux-x86_64-rhel70-4.0.27/bin/mongod -f /data/mongodb12000/cnf/mongo12000.cnf

查看配置文件

cat /data/mongodb12000/cnf/mongo12000.cnf
#日志目录
logpath = /data/mongodb12000/log/mongo12000.log
#进程ID文件
pidfilepath = /data/mongodb12000/run/mongo12000.pid

三、遇到的问题

1、cnf文件里配置的日志文件与logrotate.d配置的进程ID不一致

/data/mongodb40000/cnf/mongo40000.cnf 中的配置错误,
修改前:

#日志目录
logpath = /data/mongodb40000/log/mongo11000.log
#进程ID文件
pidfilepath = /data/mongodb40000/run/mongo11000.pid

在这里插入图片描述

[root@mongo_test03 log]# ll
total 14775004
-rw-r--r-- 1 mongo mongo 15129517397 Mar 29 10:24 mongo11000.log
-rw------- 1 mongo mongo       81082 Mar 29 12:25 mongo40000.log[root@mongo_test03 log]# pwd
/data/mongodb40000/log[root@mongo_test03 log]# cat /data/mongodb40000/run/mongo11000.pid
1221

这种错误,主要还是因为复制mongo40000.cnf的时候,遗漏修改端口号导致。

2、mongos 的日志治理失败

在这里插入图片描述

  • 错误的logrotate配置
[root@mongo_test03 logrotate.d]# cat /etc/logrotate.d/mongo50000 
/data/mongodb50000/log/mongo50000.log {dailycopytruncatenotifemptyrotate 7dateextcompressdelaycompressmissingoksharedscriptspostrotateif [ -f /data/mongodb50000/run/mongo50000.pid ]; thenkill -SIGUSR1 `cat /data/mongodb50000/run/mongo50000.pid`fiendscript
}

而实际上的进程ID文件是 /data/mongodb50000/run/mongos.pid,而非上面的/data/mongodb50000/run/mongo50000.pid。

所以导致logrotate未能对其进行日志治理,文件大小居然都1.6GB了。

在这里插入图片描述

而实际上/data/mongodb50000/run/目录下的进程ID文件名是mongos.pid,见下:
在这里插入图片描述

[root@mongo_test03 logrotate.d]# cat /data/mongodb50000/run/mongos.pid
1683
[root@mongo_test03 logrotate.d]# ps -ef | grep 50000
mongo     1683     1  0  2023 ?        1-15:24:17 /usr/local/mongodb-linux-x86_64-rhel70-4.0.27/bin/mongos -f /data/mongodb50000/cnf/mongo50000.cnf

修改文件/etc/logrotate.d/mongo50000中的mongo50000.pid为mongos.pid。

  • 日志文件的路径错误,导致日志治理失败。

mongos的日志文件路径是在/data/mongodb50000/log/mongos.log, 而非/data/mongodb50000/log/mongo50000.log。需要再次修改/etc/logrotate.d/mongo50000。最终如下:

# 文件名可以是mongo50000,也可以是mongos, 换句话说,日志治理和文件名无关。
[root@mongo_test03 logrotate.d]# cat /etc/logrotate.d/mongo50000 
# 日志文件的路径,需要修改为正确的路径
/data/mongodb50000/log/mongos.log {dailycopytruncatenotifemptyrotate 7dateextcompressdelaycompressmissingoksharedscriptspostrotateif [ -f /data/mongodb50000/run/mongos.pid ]; thenkill -SIGUSR1 `cat /data/mongodb50000/run/mongos.pid`fiendscript
}

四、定期执行治理

# vi /etc/crontab30 2 * * * root /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf

在这里插入图片描述
日志保留21天,最早保存日志的日期是20240308,并且压缩为gz,见上。

至此,mongodb的日志治理就介绍完了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/584143.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始学大模型 | 你必须要知道的三种大模型架构可视化的方法!

引言 大模型架构可视化对于理解、解释和优化这些复杂模型具有重要意义和作用,主要包括以下两个方面: 提高模型透明度和可解释性通过可视化,我们能够直观地观察到模型内部的计算过程、参数分布、特征提取等,从而更好地理解模型是如…

前端学习记录——关于代码规范和代码格式化

代码规范:👉详情 代码格式化:👉详情 如何配置eslint: eslint配置文件:.eslintrc、.eslint.json 。定义代码风格规则和错误检查规则。eslint插件:应用eslint规则,实时检测代码规范…

【漏洞复现】通天星CMSV6弱口令漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

Linux_应用篇(02) 文件 I/O 基础

本章给大家介绍 Linux 应用编程中最基础的知识,即文件 I/O(Input、 Outout) , 文件 I/O 指的是对文件的输入/输出操作,说白了就是对文件的读写操作; Linux 下一切皆文件,文件作为 Linux 系统设计…

【C++】list介绍

个人主页 : zxctscl 如有转载请先通知 文章目录 1. list介绍2. list的构造3. ist iterator的使用4. capacity5. element access6. modifiers7. 迭代器失效8. Operations8.1 reverse8.2 sort8.3 unique8.4 splice 1. list介绍 list是可以在常数范围内在任意位置进行插…

解决pandas的concat表格错位问题。表格拼接错误。

两个表格横向拼接但没拼到一块儿 如图: 图片来源:https://m.163.com/dy/article/HM6T6DRQ0516W3V7.html 拼接错位了。 解决方法:重置左边表格索引。 import pandas as pd df1df1.reset_index(dropTrue) df_newpd.concat([df1,df2],axiis1)…

【算法-PID】

算法-PID ■ PID■ 闭环原理■ PID 控制流程■ PID 比例环节(Proportion)■ PID 积分环节(Integral)■ PID 微分环节(Differential) ■ 位置式PID,增量式PID介绍■ 位置式 PID 公式■ 增量式 PI…

机器学习-生存分析:基于QHScrnomo模型的乳腺癌患者风险评估与个性化预测

一、引言 乳腺癌作为女性常见的恶性肿瘤之一,对女性健康构成威胁。随着医疗技术的不断进步,个性化医疗逐渐成为乳腺癌治疗的重要方向。通过深入研究乳腺癌患者的风险评估和个性化预测,可以帮助医生更准确地制定治疗方案,提高治疗效…

Web框架开发-Form组件和ajax实现注册

一、注册相关的知识点 1、Form组件 我们一般写Form的时候都是把它写在views视图里面,那么他和我们的视图函数也不影响,我们可以吧它单另拿出来,在应用下面建一个forms.py的文件来存放 2、局部钩子函数 1 2 3 4 5 6 7 # 局部钩子函数 def clean_username(self): userna…

【C++】stack、queue和优先级队列

一、前言 二、stack类 2.1 了解stack 2.2 使用stack (1)empty (2)size (3)top (4)push (5)pop 2.3 stack的模拟实现 三、queue类 3.1 了解queue …

什么是工业协议网关软件?有什么作用

在数字化浪潮席卷全球的今天,工业领域正经历着一场深刻的变革。随着工业互联网的不断发展,各种工业设备之间的互联互通变得愈发重要。在这个背景下,工业协议网关软件应运而生,成为连接不同工业设备、实现数据交换和远程控制的关键…

PurpleKeep:提供Azure管道以创建基础设施并执行Atomic测试

关于PurpleKeep PurpleKeep是一款功能强大的安全测试自动化工具,该工具能够通过提供Azure管道以创建基础设施,并帮助广大研究人员执行Atomic测试。 随着攻击技术种类的迅速增加,以及EDR(端点检测和响应)和自定义检测规…