mongodb升级、改单节点模式

目前我有三个节点的mongodb,A:主节点,B:此节点,C:投票节点,目前版本号为5.0.16,后续需要把C节点改为单节点mongodb,保留原来集群的数据,并升级到5.0.31版本。

升级版本

这部分较为顺利,直接通过这篇文章就升级完成了

投票节点改为副本节点

由于之前C节点设置了arbiterOnly参数,使得该节点仅能投票,而没有保存数据,所以需要先将该节点升级为副本节点

在主节点执行:

b 复制代码
rs0:PRIMARY> rs.remove("10.6.212.87:27017")
{
	"ok" : 1,
	"$clusterTime" : {
		"clusterTime" : Timestamp(1746699523, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1746699523, 1)
}

rs0:PRIMARY> rs.add({
...   host: "10.6.212.87:27017",
...   priority: 0,      // 表示不会成为 primary
...   votes: 1          // 正常参与投票
... })
{
	"ok" : 1,
	"$clusterTime" : {
		"clusterTime" : Timestamp(1746699594, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1746699594, 1)
}

rs0:PRIMARY> rs.status()
......
		{
			"_id" : 2,
			"name" : "10.6.212.87:27017",
			"health" : 1,
			"state" : 5,
			"stateStr" : "STARTUP2",
			"uptime" : 3,
			"optime" : {
				"ts" : Timestamp(0, 0),
				"t" : NumberLong(-1)
			},
			"optimeDurable" : {
				"ts" : Timestamp(0, 0),
				"t" : NumberLong(-1)
			},
			"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
			"optimeDurableDate" : ISODate("1970-01-01T00:00:00Z"),
			"lastAppliedWallTime" : ISODate("1970-01-01T00:00:00Z"),
			"lastDurableWallTime" : ISODate("1970-01-01T00:00:00Z"),
			"lastHeartbeat" : ISODate("2025-05-08T10:20:00.987Z"),
			"lastHeartbeatRecv" : ISODate("2025-05-08T10:20:00.043Z"),
			"pingMs" : NumberLong(17),
			"lastHeartbeatMessage" : "",
			"syncSourceHost" : "10.11.206.4:27017",
			"syncSourceId" : 0,
			"infoMessage" : "",
			"configVersion" : 4,
			"configTerm" : 201
		}
......

显示该节点"stateStr" : "STARTUP2",表示该节点正在同步数据,过一会就会变为"stateStr" : "SECONDARY",此时就完成升级为副本节点的工作。

改为单节点

将所有节点终止,再启动

yml 复制代码
version: "3.8"
services:
  mongo:
    container_name: mongo
    #image: mongo:5.0.16
    image: mongo:5.0.31
    expose:
      - 27017
    ports:
      - 27017:27017
    volumes:
      - mongo2:/data/db
    restart: always
    entrypoint:
      [
        "/usr/bin/mongod",
        "--bind_ip_all",
        "--journal"
      ]
    networks:
      - mongo

volumes:
  mongo2:
networks:
  mongo:
    name: mongo

设置账号密码

bash 复制代码
>>> docker exec -it mongo mongo
use admin
db.createUser({
  user: "admin",
  pwd: "your_password",
  roles: [ { role: "root", db: "admin" } ]
})
yaml 复制代码
version: "3.8"
services:
  mongo:
    container_name: mongo
    #image: mongo:5.0.16
    image: mongo:5.0.31
    expose:
      - 27017
    ports:
      - 27017:27017
    volumes:
      - mongo2:/data/db
    restart: always
    entrypoint:
      [
        "/usr/bin/mongod",
        "--bind_ip_all",
        "--journal",
        "--auth"
      ]
    networks:
      - mongo

volumes:
  mongo2:
networks:
  mongo:
    name: mongo
bash 复制代码
>>> docker compose down
>>> docker compose up -d
相关推荐
AllData公司负责人4 分钟前
AllData数据中台-数据同步平台【Seatunnel-Web】整库同步MySQL同步Doris能力演示
大数据·数据库·mysql·开源
加油,小猿猿11 分钟前
Java开发日志-双数据库事务问题
java·开发语言·数据库
山岚的运维笔记35 分钟前
SQL Server笔记 -- 第20章:TRY/CATCH
java·数据库·笔记·sql·microsoft·sqlserver
Gain_chance37 分钟前
33-学习笔记尚硅谷数仓搭建-DWS层交易域用户粒度订单表分析及设计代码
数据库·数据仓库·hive·笔记·学习·datagrip
未来之窗软件服务1 小时前
计算机等级考试—高频英语词汇—东方仙盟练气期
数据库·计算机软考·东方仙盟
lekami_兰1 小时前
MySQL 长事务:藏在业务里的性能 “隐形杀手”
数据库·mysql·go·长事务
JQLvopkk1 小时前
C# 轻量级工业温湿度监控系统(含数据库与源码)
开发语言·数据库·c#
devmoon3 小时前
在 Polkadot Runtime 中添加多个 Pallet 实例实战指南
java·开发语言·数据库·web3·区块链·波卡
认真的薛薛3 小时前
数据库-sql语句
数据库·sql·oracle
爱学英语的程序员3 小时前
面试官:你了解过哪些数据库?
java·数据库·spring boot·sql·mysql·mybatis