[Mongodb 5.0]从Replica Set删除节点

本文介绍了如何在MongoDB的PSS副本集中,通过rs.remove()和rs.reconfig()方法分别删除节点,包括关闭节点、确认Primary、配置操作和验证步骤。重点讲解了投票节点的概念及其在reconfig方法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:

通过3台虚拟机构建的一个Primary-Secondary-Secondary的副本集,如下表格

PSS模式(还有PSA模式)地址别名
Primary192.168.40.128节点1
Secondary192.168.40.129节点2
Secondary192.168.40.130节点3

现在想要副本集中删除掉一个节点,例如删除掉节点3.

本章节对应于官网Remove Members from Replica Set — MongoDB Manualhttps://www.mongodb.com/docs/manual/tutorial/remove-replica-set-member/#remove-members-from-replica-set

 要从副本集中删除掉节点有两种方式:

  • 通过rs.remove()的方式
    步骤:
    第一步:先关闭你想要删除的mongodb,关闭方式可以通过db.shutdownServer()方法
    第二步:在Primary节点上(我这是是表格中的节点1)上通过mongosh连接上到mongodb(如果不知道那个节点是Primary,随便用一个在副本集中的节点,然后通过db.hello()方法就可知道那个是Primary节点了。)


    第三步:使用rs.remove()方法来删除掉想要移除的节点。

    此时如果在通过rs.config()或者rs.status()或者db.hello()就看不到删除的这个节点了。
     
  • 通过rs.reconfig()的方式

    注:从mongodb4.4开始,通过rs.reconfig()的方式每次只能删除一个可以投票的节点(何为投票节点,文章最后给解释),如果想删除多个节点,那么就要多次执行rs.reconfig()方法。

    步骤:
    第一步:先关闭你想要删除的mongodb,关闭方式可以通过db.shutdownServer()方法
    第二步:在Primary节点上(我这是是表格中的节点1)上通过mongosh连接上到mongodb(如果不知道那个节点是Primary,随便用一个在副本集中的节点,然后通过db.hello()方法就可知道那个是Primary节点了。)
    第三步:通过rs.conf()方法查看想要删除的节点在配置文件中的索引位置


    第四步:在mongosh中执行如下js,上面的配置信息赋值给变量
    cfg = rs.conf()
    第五步:通过这个变量删除配置中的要删除的节点,如下
    cfg.members.splice(2,1) #2表示要删除的192.168.40.129这个节点在members数组中的索引值
    


    第六步:执行下面命令,重新设置配置
    rs.reconfig(cfg)
    

     第七步:验证,在执行rs.config()方法,如果已删除的节点没有出现在里面,就成功了。

 

到此从副本集中删除节点的两种方式的使用就介绍完毕了。

所谓可投票节点,就理解为副本集中的所有节点就行了,mongodb中可以设定节点是否参与选举,但是所有的节点都可以进行投票。

在 Kubernetes (k8s) 中部署 MongoDB 5.0节点,通常涉及创建 Deployment 和 Service 来管理和暴露你的MongoDB服务。以下是基本步骤: 1. **准备镜像**: 首先需要下载官方 MongoDB 的 Docker 镜像。例如,你可以从 Docker Hub 获取 `mongo:5.0` 或者特定版本。 ```yaml FROM mongo:5.0 ``` 2. **创建 Deployment**: 编辑一个名为 `mongodb-deployment.yaml` 的文件,定义Deployment配置,指定容器镜像、端口映射和所需的资源限制(如内存和CPU)。 ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: mongodb spec: replicas: 1 selector: matchLabels: app: mongodb template: metadata: labels: app: mongodb spec: containers: - name: mongodb image: mongo:5.0 ports: - containerPort: 27017 volumeMounts: - mountPath: /data/db name: mongodata volumes: - name: mongodata persistentVolumeClaim: claimName: mongodb-pvc ``` 这里的 `replicas: 1` 表示单节点。 3. **创建 Persistent Volume Claim (PVC)**: PVC用于申请持久化存储空间给MongoDB数据卷。 ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mongodb-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi # 根据实际需求调整 ``` 4. **创建 Service**: 为了能够从集群外部访问,还需要创建一个 Service。 ```yaml apiVersion: v1 kind: Service metadata: name: mongodb-service spec: selector: app: mongodb ports: - protocol: TCP port: 27017 targetPort: 27017 type: ClusterIP ``` 5. **应用更改**: - 使用 `kubectl apply -f deployment.yaml service.yaml pvc.yaml` 将以上配置文件应用到集群。 6. **验证部署**: - 可以使用 `kubectl get pods,svc,pv,deployments` 检查状态。 - 使用 `kubectl logs <pod-name>` 查看MongoDB日志。 注意:在生产环境中,建议将 MongoDB 部署为更健壮的模式,比如副本集或多主复制,以提高可用性和容错性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值