问题描述
写入数据至云数据库MongoDB副本集实例时,出现"errmsg": "not master", "code": 10107, "codeName": "NotMaster"
、"errmsg": "not master", "code": 10107, "codeName": "NotWritablePrimary"
或Time out after 30000ms while waiting for a server that matches writableServerSelector.
报错。
常见原因
副本集实例发生了主备切换,导致节点角色发生变化,如果您的业务通过主节点(Primary节点)的地址连接,主备切换后实际连接的节点角色变成了从节点(Secondary节点),所以写入失败。
说明 导致实例发生主备切换的原因有很多种,具体请参见为什么实例会发生主备切换?。
每个副本集实例包含一个主节点、一个或多个从节点、一个隐藏节点(Hidden节点)和可选的一个或多个只读节点(ReadOnly节点)。其中主节点、从节点和隐藏节点合起来统称为“主备节点”。每个节点有自己的属性信息,包括节点角色(Primary、Secondary、Hidden或ReadOnly)、节点ID、节点地址、域名信息和端口等。主备切换会导致节点角色发生变化,而不会改变节点的其他属性。
副本集实例中节点1的角色是主节点,节点2的角色是从节点,如果主备切换前您连接的是主节点地址,即节点1的地址,实例发生主备切换后,节点1变成了从节点,您实际连接的是从节点地址,所以写入失败。