Caused by: com.mongodb.MongoQueryException: Command failed with error 20 (IllegalOperation): 'Transaction numbers are only allowed on a replica set member or mongos' on server 47.1.166.2:27017. The full response is {"ok": 0.0, "errmsg": "Transaction numbers are only allowed on a replica set member or mongos", "code": 20, "codeName": "IllegalOperation"}
遇到 MongoQueryException: Command failed with error 20 (IllegalOperation)
错误,表明您正在尝试在一个非副本集(standalone)MongoDB 实例上执行事务,而事务只能在副本集或 MongoDB Sharded 集群(mongos)上使用。
由于您是通过 yum
安装 MongoDB,下面是将您的 MongoDB 实例配置为副本集的步骤:
将 MongoDB 配置为副本集
-
停止 MongoDB 服务 :
首先,您需要停止当前的 MongoDB 服务。可以使用以下命令:
bash
Copy
sudo systemctl stop mongod
-
编辑配置文件 :
找到您的 MongoDB 配置文件,通常位于
/etc/mongod.conf
。使用文本编辑器打开该文件:bash
Copy
sudo vi /etc/mongod.conf
在配置文件中,您需要添加或修改以下行以启用副本集:
yaml
Copy
replication: replSetName: "rs0"
确保您在文件中添加了
replication
部分,且缩进正确。 -
重启 MongoDB 服务 :
保存并关闭配置文件后,重新启动 MongoDB 服务:
bash
Copy
sudo systemctl start mongod
-
初始化副本集 :
使用
mongo
shell 连接到 MongoDB 实例,并初始化副本集:bash
Copy
mongo
然后在
mongo
shell 中运行:javascript
Copy
rs.initiate()
这将初始化您的副本集。
-
检查副本集状态 :
您可以使用以下命令检查副本集的状态:
javascript
Copy
rs.status()