MongoDB副本集Command failed with error 10107 (NotMaster):on server

问题

通过DataGrip连接的MongoDB节点,之前可以新增或更新数据。某天突然不能新增或更新数据,报错信息如下:
在这里插入图片描述
具体的报错信息:

Command failed with error 10107 (NotMaster): 'not master' on server 10.19.21.11:30386. The full response is {"operationTime": {"$timestamp": {"t": 1677831692, "i": 1}}, "ok": 0.0, "errmsg": "not master", "code": 10107, "codeName": "NotMaster", "$clusterTime": {"clusterTime": {"$timestamp": {"t": 1677831692, "i": 1}}, "signature": {"hash": {"$binary": {"base64": "lHLZvy4mhv1/eWxsjPzI4Fo8fwg=", "subType": "00"}}, "keyId": 7191419147941576705}}}

排查

通过排查,得知k8s是1master + 3node节点,通过k8s安装部署的MongoDB副本集,一主两从:

[root@k8s-master01 ~]# kubectl get nodes -o wide
NAME           STATUS   ROLES    AGE      VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION              CONTAINER-RUNTIME
k8s-master01   Ready    master   3y153d   v1.15.1   10.19.1.123   <none>        CentOS Linux 7 (Core)   5.1.0-1.el7.elrepo.x86_64   docker://18.9.6
k8s-node01     Ready    <none>   2y66d    v1.15.1   10.19.2.12    <none>        CentOS Linux 7 (Core)   3.10.0-1062.el7.x86_64      docker://18.9.6
k8s-node02     Ready    <none>   3y153d   v1.15.1   10.19.2.11    <none>        CentOS Linux 7 (Core)   3.10.0-1062.el7.x86_64      docker://18.9.6
k8s-node03     Ready    <none>   3y153d   v1.15.1   10.19.2.13    <none>        CentOS Linux 7 (Core)   3.10.0-1062.el7.x86_64      docker://18.9.6

[root@k8s-master01 ~]# kubectl get pod -n aba-stg-public | grep mongo
mongodb-replicaset-0                                   1/1     Running   6          353d
mongodb-replicaset-1                                   1/1     Running   3          263d
mongodb-replicaset-2                                   1/1     Running   3          262d

进入指定命名空间下的指定容器:
kubectl exec -it -n <ns> <pod> /bin/bash
执行mong命令,即可连接mongod服务,执行rs.status()命令查看Replica Set的状态:
在这里插入图片描述
报错:there are no users authenticated。

解决方法:
因为是在 admin这个数据库下添加的账号,故而需要在 admin 库下输入正确的用户名和密码进行验证:

use admin
db.auth('root','root')

再次执行命令rs.status();即可得到正常输出:

{
        "set" : "rs0",
        "date" : ISODate("2023-03-10T14:08:01.694Z"),
        "myState" : 1,
        "term" : NumberLong(117),
        "syncingTo" : "",
        "syncSourceHost" : "",
        "syncSourceId" : -1,
        "heartbeatIntervalMillis" : NumberLong(2000),
        "optimes" : {
                "lastCommittedOpTime" : {
                        "ts" : Timestamp(1678457277, 1),
                        "t" : NumberLong(117)
                },
                "readConcernMajorityOpTime" : {
                        "ts" : Timestamp(1678457277, 1),
                        "t" : NumberLong(117)
                },
                "appliedOpTime" : {
                        "ts" : Timestamp(1678457277, 1),
                        "t" : NumberLong(117)
                },
                "durableOpTime" : {
                        "ts" : Timestamp(1678457277, 1),
                        "t" : NumberLong(117)
                }
        },
        "members" : [
                {
                        "_id" : 0,
                        "name" : "mongodb-replicaset-0.mongodb-replicaset.aba-stg-public.svc.cluster.local:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 1226572,
                        "optime" : {
                                "ts" : Timestamp(1678457277, 1),
                                "t" : NumberLong(117)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1678457277, 1),
                                "t" : NumberLong(117)
                        },
                        "optimeDate" : ISODate("2023-03-10T14:07:57Z"),
                        "optimeDurableDate" : ISODate("2023-03-10T14:07:57Z"),
                        "lastHeartbeat" : ISODate("2023-03-10T14:08:00.747Z"),
                        "lastHeartbeatRecv" : ISODate("2023-03-10T14:08:00.736Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "mongodb-replicaset-2.mongodb-replicaset.aba-stg-public.svc.cluster.local:27017",
                        "syncSourceHost" : "mongodb-replicaset-2.mongodb-replicaset.aba-stg-public.svc.cluster.local:27017",
                        "syncSourceId" : 2,
                        "infoMessage" : "",
                        "configVersion" : 3
                },
                {
                        "_id" : 1,
                        "name" : "mongodb-replicaset-1.mongodb-replicaset.aba-stg-public.svc.cluster.local:27017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 1226592,
                        "optime" : {
                                "ts" : Timestamp(1678457277, 1),
                                "t" : NumberLong(117)
                        },
                        "optimeDate" : ISODate("2023-03-10T14:07:57Z"),
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "electionTime" : Timestamp(1677230706, 1),
                        "electionDate" : ISODate("2023-02-24T09:25:06Z"),
                        "configVersion" : 3,
                        "self" : true,
                        "lastHeartbeatMessage" : ""
                },
                {
                        "_id" : 2,
                        "name" : "mongodb-replicaset-2.mongodb-replicaset.aba-stg-public.svc.cluster.local:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 1226585,
                        "optime" : {
                                "ts" : Timestamp(1678457277, 1),
                                "t" : NumberLong(117)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1678457277, 1),
                                "t" : NumberLong(117)
                        },
                        "optimeDate" : ISODate("2023-03-10T14:07:57Z"),
                        "optimeDurableDate" : ISODate("2023-03-10T14:07:57Z"),
                        "lastHeartbeat" : ISODate("2023-03-10T14:08:00.747Z"),
                        "lastHeartbeatRecv" : ISODate("2023-03-10T14:08:00.736Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "mongodb-replicaset-1.mongodb-replicaset.aba-stg-public.svc.cluster.local:27017",
                        "syncSourceHost" : "mongodb-replicaset-1.mongodb-replicaset.aba-stg-public.svc.cluster.local:27017",
                        "syncSourceId" : 1,
                        "infoMessage" : "",
                        "configVersion" : 3
                }
        ],
        "ok" : 1,
        "operationTime" : Timestamp(1678457277, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1678457277, 1),
                "signature" : {
                        "hash" : BinData(0,"Er9WM7g3xmePUgTZwjC4dWIJ++w="),
                        "keyId" : NumberLong("7191419147941576705")
                }
        }
}

health为1表明服务器正常,0表明服务器down
state为1表明是Primary,2表明是Secondary,3是Recovering,7是Arbiter,8是Down

另外执行db.isMaster()可返回副本集节点状态信息。
在这里插入图片描述
排查后得知,MongoDB副本集发生Master选举,现在节点1变成Master,之前节点0才是Master。

并且发现,在命令行执行新增或更新命令:
db.getSiblingDB("sms").getCollection("aba_sms_history").updateOne({_id: new ObjectId("605449f67ed85700083fcdec")}, {"$set": {channel: "ALIYUN"}})

在Master节点,是可以执行成功的:
在这里插入图片描述
在从节点执行失败:
在这里插入图片描述
也就是说副本集状态是正常的?

DataGrip复制数据源,分别对应3个节点,之前11这个节点是Master节点:
在这里插入图片描述
现在Master节点变成12,但是也执行失败:
在这里插入图片描述
另外13节点不出意料也是失败:
在这里插入图片描述

总结

在pod里执行mongo命令连接mongod server成功,然后执行db.isMaster(),或rs.status(),打印信息看起来都是正常的。节点1之前是secondary的节点现在变成primary,并且只有primary节点可以写入数据,secondary节点写入数据时报错not master。所以副本集状态是正常的。

但是通过DataGrip连接这3个节点,所有节点都报错not master。

解决

[root@k8s-master01 ~]# kubectl get svc -A -o wide | grep mongo
aba-stg-public mongodb-replicaset           ClusterIP      None             <none>  27017/TCP  		2y127d   app=mongodb-replicaset,release=mongodb-replicaset
aba-stg-public mongodb-replicaset-client    ClusterIP      None             <none>  27017/TCP 		2y127d   app=mongodb-replicaset,release=mongodb-replicaset
aba-stg-public mongodb-replicaset-service   NodePort       10.104.187.101   <none>  27017:30386/TCP 2y128d   statefulset.kubernetes.io/pod-name=mongodb-replicaset-1

可知其中mongodb-replicaset-service是提供服务的svc,我们查看一下这个svc:

[root@k8s-master01 ~]# kubectl describe svc mongodb-replicaset-service -n aba-stg-public
Name:                     mongodb-replicaset-service
Namespace:                aba-stg-public
Labels:                   app=mongodb-replicaset
Annotations:              field.cattle.io/publicEndpoints:
                            [{"addresses":["10.19.2.11"],"port":30386,"protocol":"TCP","serviceName":"aba-stg-public:mongodb-replicaset-service","allNodes":true}]
                          kubectl.kubernetes.io/last-applied-configuration:
                            {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"mongodb-replicaset"},"name":"mongodb-replicaset-service"...
Selector:                 statefulset.kubernetes.io/pod-name=mongodb-replicaset-0
Type:                     NodePort
IP:                       10.104.187.101
Port:                     mongodb-replicaset  27017/TCP
TargetPort:               27017/TCP
NodePort:                 mongodb-replicaset  30386/TCP
Endpoints:                10.244.86.172:27017
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

发现其Selector不正确,修改svc:kubectl edit svc mongodb-replicaset-service -n aba-stg-public

理论基础:kubectl管控(操作)的所有对象都是一个个yml文件,编辑对象就是编辑一个yml文件,也就是说kubectl edit命令实际上会调用类似vivim这些编辑命令,进入编辑模式,然后和操作vi命令一样,保存退出,kubectl会自动检查yml文件格式是否有语法问题,没有语法问题,会尝试自动重启svc。如果启动失败则说明编辑后的yml文件有误。

如果没有做任何修改,则会提示:Edit cancelled, no changes made.

另外,我们使用Rancher来管理k8s集群资源。也就是说绝对大多数命令行操作都可以通过Rancher来实现。

上述操作步骤对应页面截图:

  1. 先切换到服务发现Tab页:搜索框搜索mongo:
    在这里插入图片描述
    如上截图所示,会看到3个svc,我们需要操作的是第三个,页面上能看到选择器,即Selector。
    注:上面截图的选择器已经是修改后的正确的目标。
  2. 点击右侧的三个点,然后点击升级,即会触发kubectl edit命令:
    在这里插入图片描述
  3. 如下图所示,修改标签值,点击保存即可
    在这里插入图片描述

后续

关于kubect 标签Selector,请扩展阅读学习。

参考

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HNU-电路与电子学-实验3

实验三 模型机组合部件的实现&#xff08;二&#xff09;&#xff08;实验报告格式案例&#xff09; 班级 计XXXXX 姓名 wolf 学号 2021080XXXXX 一、实验目的 1&#xff0e;了解简易模型机的内部结构和工作原理。 2&#xff0e;分析模型机的功能&am…

【Linux】LVM与磁盘配额

文章目录1.LVM1.1 LVM概述1.2 LVM机制1.3 LVM管理命令1.4 LVM应用实例2. 磁盘配额2.1 磁盘配额概述2.2 磁盘配额管理2.3 启用磁盘配额支持2.4 磁盘配额应用实例1.LVM 1.1 LVM概述 Logical Volume Manager&#xff0c;逻辑卷管理 ● 能够在保持现有数据不变的情况下动态调整磁盘…

43掌握自动化运维工具 Puppet 的基本用法,包括模块编写、资源管理

Puppet是一种自动化配置管理工具&#xff0c;可以自动化地部署、配置和管理大规模服务器环境。本教程将介绍Puppet的基本用法&#xff0c;包括模块编写和资源管理。 模块编写 在Puppet中&#xff0c;模块是一组相关的类、文件和资源的集合。模块可以用于部署和配置应用程序、服…

图形编辑器:排列移动功能的实现

大家好&#xff0c;我是前端西瓜哥。这次来实现一下图形编辑器排列&#xff08;arrange&#xff09;功能的实现。 先看效果。 有四种移动方式&#xff1a; 置顶&#xff08;Front&#xff09;&#xff1a;将指定的图形移动到顶部&#xff1b;置底&#xff08;Back&#xff09…

嵌入式学深度学习:1、Pytorch框架搭建

嵌入式学深度学习&#xff1a;1、Pytorch框架搭建1、介绍2、Pytorch开发环境搭建2.1、查看GPU是否支持CUDA2.2、安装Miniconda2.3、使用Conda安装pytorch2.4、安装常用库3、简单使用验证1、介绍 深度学习是机器学习的一种&#xff0c;如下图&#xff1a; 目前深度学习应用场景…

MySQL-四大类日志

目录 &#x1f341;MySQL日志分为4大类 &#x1f341;错误日志 &#x1f343;修改系统配置 &#x1f341;二进制日志 &#x1f343;查看二进制日志 &#x1f343;删除二进制日志 &#x1f343;暂时停止二进制日志的功能 &#x1f341;事务日志(或称redo日志) &#x1f341;慢查…

chatgpt3中文辅助写作-gpt2中文文本生成

GPT-3是一种深度学习模型&#xff0c;具有潜在的巨大计算成本和训练麻烦。根据OpenAI公司的官方消息&#xff0c;训练GPT-3是一项昂贵的和耗时的过程&#xff0c;在OpenAI公司&#xff0c;训练GPT-3的成本已经超过了10亿美元。考虑到GPT-3的架构、规模和训练时间&#xff0c;这…

高分子PEG磷酸盐mPEG-phosphoric acid,Phosphate PEG,甲氧基聚乙二醇磷酸,可用于修饰金属氧化物表面

规格单位&#xff1a;g |货期&#xff1a;按照具体的库存进行提供 | 端基取代率&#xff1a;95% 中英文名&#xff1a;mPEG-phosphoric acid|Phosphate PEG|甲氧基聚乙二醇磷酸​ 一、Phosphate PEG化学结构式&#xff1a; 二、产品详情&#xff1a; 外观&#xff1a;灰白…

[oeasy]python0123_中文字符_文字编码_gb2312_激光照排技术_王选

中文编码GB2312 回忆上次内容 上次回顾了 日韩各有 编码格式 日本 有假名 五十音一字节 可以勉强放下 有日本汉字 字符数量超过20000 韩国 有谚文 数量超过500一个字节 放不下 有朝鲜汉字 字符数量超过20000 作为 汉字源头的中国 究竟应该 如何对汉字 进行编码 呢&#x…

操作系统-AOSOA

一、个人感受 1.1 权衡 在我写这份报告的时候&#xff0c;已经是 6 月 30 号了&#xff0c;经历了一个学期的“折磨”&#xff0c;我面对终点&#xff0c;已经没啥感觉了&#xff0c;就想着赶快呼噜完了就完事了。其实做这个项目最大的体会就是“人力有穷&#xff0c;一切皆权…

视频剪辑:教你如何调整视频画面的大小。

大家应该都会调整图片的大小吧&#xff0c;那你们会调整视频画面的大小吗&#xff1f;我想&#xff0c;应该会有人不还不知道要调整的吧&#xff0c;今天就让小编来教大家一个方法怎样去调整视频画面的大小尺寸。 首先&#xff0c;我们要有以下材料&#xff1a; 一台电脑 【…

列的类型定义——整形类型

文章目录 前言一、整数类型的附带属性 类型名称后面的小括号unsignedauto_increment总结前言 1&#xff09;采用26字母和0-9的自然数加上下互相 ‘_’ 组成&#xff0c;命名简洁明确&#xff0c;多个单词用下划线 ‘_’ 隔开 2&#xff09;全部小写命名&#xff0c;尽量避免…

【SpringBoot】自定义Starter

&#x1f6a9;本文已收录至专栏&#xff1a;Spring家族学习之旅 &#x1f44d;希望您能有所收获 一.概述 在使用SpringBoot进行开发的时候&#xff0c;我们发现使用很多技术都是直接导入对应的starter&#xff0c;然后就实现了springboot整合对应技术&#xff0c;再加上一些简…

【论文导读】Inferring deterministic causal relations

前段时间看Scholkopf教授的《Towards Causal Representation Learning》&#xff0c;看到这篇挺有意思来读读。 这一篇只在Arxiv上挂着&#xff0c;重点主要是研究发掘两变量之间的因果关系&#xff08;无法应用独立性检验等方法&#xff09;&#xff0c;引入了信息论中的正则…

Elasticsearch:配置选项

Elasticsearch 带有大量的设置和配置&#xff0c;甚至可能让专家工程师感到困惑。 尽管它使用约定优于配置范例并且大部分时间使用默认值&#xff0c;但在将应用程序投入生产之前自定义配置是必不可少的。 在这里&#xff0c;我们将介绍属于不同类别的一些属性&#xff0c;并讨…

2023年泰迪杯数据挖掘挑战赛B题--产品订单数据分析与需求预测(2.数据探索性分析)

前言 继续上一片数据预处理进行续写&#xff0c;利用预处理之后的数据进行数据分析并且解决问题一相关的问题。问题一主要目的是让研究各种因素对于需求量的影响&#xff0c;然后找到确定影响需求量的主要因素并且进行数据分析和主要特征抽取。 对于问题提出的八个小问&#…

解决云服务器ssh经常断开的问题

问题描述&#xff1a;无论是腾讯云服务器还是阿里云服务器等&#xff0c;在使用MobaXterm或者Xshell连接云服务器时&#xff0c;如果十分钟左右无任何操作&#xff0c;ssh就会自动断开&#xff0c;非常烦人&#xff0c;下面提供几种方法来解决该问题。 MobaXterm的报错如下&am…

Cookie和Session的工作流程及区别(附代码案例)

目录 一、 HTTP协议 1.1 为什么HTTP协议是无状态的&#xff1f; 1.2 在HTTP协议中流式传输和分块传输编码的区别 二、Cookie和Session 2.1 Cookie 2.2 Session 2.3 Cookie和Session的区别 三、servlet中与Cookie和Session相关的API 3.1 HttpServletRequest 类中的相关方…

mysql与redis区别

一、.redis和mysql的区别总结 &#xff08;1&#xff09;类型上 从类型上来说&#xff0c;mysql是关系型数据库&#xff0c;redis是缓存数据库 &#xff08;2&#xff09;作用上 mysql用于持久化的存储数据到硬盘&#xff0c;功能强大&#xff0c;但是速度较慢 redis用于存储使…

【新2023Q2押题JAVA】华为OD机试 - 挑选字符串

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:挑选字符串 题目 给定a-z,…