首页 > 数据库 >kubernetes部署mongodb集群原创

kubernetes部署mongodb集群原创

时间:2024-04-10 10:55:22浏览次数:25  
标签:kubernetes 04 mongodb 22 MongoDB 2023 集群 01T03

Kubernetes 是一个开源的容器编排和管理平台,它可以帮助开发者轻松地部署、扩展和管理分布式应用程序。在 Kubernetes 中,可以使用 StatefulSet 来部署 MongoDB 分片集群和副本集。本文将介绍如何使用 Kubernetes 部署 MongoDB 集群。

准备工作

在开始部署 MongoDB 集群之前,需要先准备好以下内容:

  1. 安装 Kubernetes 集群
  2. 安装 kubectl 工具
  3. 安装 Helm 工具

部署 MongoDB 副本集

以下是使用 Kubernetes 部署 MongoDB 副本集的步骤:

  1. 创建 StatefulSet

创建一个 StatefulSet 来部署 MongoDB 副本集。可以使用以下 YAML 文件来创建 StatefulSet:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongodb
spec:
  serviceName: mongodb
  replicas: 3
  selector:
    matchLabels:
      app: mongodb
  template:
    metadata:
      labels:
        app: mongodb
    spec:
      containers:
      - name: mongodb
        image: mongo:4.4
        ports:
        - containerPort: 27017
        volumeMounts:
        - name: data
          mountPath: /data/db
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

该 YAML 文件定义了一个名为 mongodb 的 StatefulSet,该 StatefulSet 包含 3 个 MongoDB 实例。每个 MongoDB 实例都使用 mongo:4.4 镜像,并挂载一个名为 data 的 PVC(持久卷声明)作为数据目录。

  1. 创建 Headless Service

创建一个 Headless Service 来为 MongoDB 实例提供网络访问。可以使用以下 YAML 文件来创建 Headless Service:

apiVersion: v1
kind: Service
metadata:
  name: mongodb
spec:
  selector:
    app: mongodb
  clusterIP: None
  ports:
  - name: mongodb
    port: 27017

该 YAML 文件定义了一个名为 mongodb 的 Headless Service,该服务将 MongoDB 实例暴露在 Kubernetes 集群内部,以便其他容器可以访问它们。

  1. 启动 MongoDB 集群

使用 kubectl apply 命令来创建 StatefulSet 和 Headless Service:

$ kubectl apply -f mongodb-statefulset.yaml
$ kubectl apply -f mongodb-service.yaml

该命令将使用 YAML 文件中定义的配置启动 MongoDB 集群。

  1. 验证 MongoDB 集群

使用 kubectl get pod 命令来检查 MongoDB 实例是否正在运行:

$ kubectl get pod

该命令将列出运行中的 MongoDB 实例。应该会看到类似于以下内容的输出:

NAME        READY   STATUS    RESTARTS   AGE
mongodb-0   1/1     Running   0
  1. 初始化 MongoDB 集群

在部署 MongoDB 副本集之后,需要对其进行初始化。可以使用以下命令在其中一个 MongoDB 实例上进行初始化:

$ kubectl exec -it mongodb-0 mongo

该命令将连接到 mongodb-0 实例并打开 MongoDB 命令行终端。在该终端中,运行以下命令来初始化副本集:

rs.initiate({
   _id : "rs0",
   members: [
      { _id: 0, host: "mongodb-0.mongodb:27017" },
      { _id: 1, host: "mongodb-1.mongodb:27017" },
      { _id: 2, host: "mongodb-2.mongodb:27017" }
   ]
})

该命令将创建一个名为 rs0 的副本集,该副本集包含三个 MongoDB 实例:mongodb-0.mongodb、mongodb-1.mongodb 和 mongodb-2.mongodb。

  1. 验证 MongoDB 副本集

使用 kubectl exec 命令连接到 MongoDB 实例并检查副本集状态:

$ kubectl exec -it mongodb-0 mongo
> rs.status()

该命令将输出 MongoDB 副本集的状态信息。如果一切正常,应该会看到类似于以下内容的输出:

{
   "set" : "rs0",
   "date" : ISODate("2023-04-01T03:22:17.828Z"),
   "myState" : 1,
   "term" : NumberLong(1),
   "syncingTo" : "",
   "members" : [
      {
         "_id" : 0,
         "name" : "mongodb-0.mongodb:27017",
         "health" : 1,
         "state" : 1,
         "stateStr" : "PRIMARY",
         "uptime" : 225,
         "optime" : {
            "ts" : Timestamp(1648826562, 1),
            "t" : NumberLong(1)
         },
         "optimeDurable" : {
            "ts" : Timestamp(1648826562, 1),
            "t" : NumberLong(1)
         },
         "optimeDate" : ISODate("2023-04-01T03:22:42Z"),
         "optimeDurableDate" : ISODate("2023-04-01T03:22:42Z"),
         "lastHeartbeat" : ISODate("2023-04-01T03:22:16.204Z"),
         "lastHeartbeatRecv" : ISODate("2023-04-01T03:22:16.869Z"),
         "pingMs" : NumberLong(0),
         "lastHeartbeatMessage" : ""
      },
      {
         "_id" : 1,
         "name" : "mongodb-1.mongodb:27017",
         "health" : 1,
         "state" : 2,
         "stateStr" : "SECONDARY",
         "uptime" : 214,
         "optime" : {
            "ts" : Timestamp(1648826562, 1),
            "t" : NumberLong(1)
         },
         "optimeDurable" : {
            "ts" : Timestamp(1648826562, 1),
            "t" : NumberLong(1)
         },
         "optimeDate" : ISODate("2023-04-01T03:22:42Z"),
         "optimeDurableDate" : ISODate("2023-04-01T03:22:42Z"),
         "lastHeartbeat" : ISODate("2023-04-01T03:22:16.198Z"),
         "lastHeartbeatRecv" : ISODate("2023-04-01T03:22:16.856Z"),
         "pingMs" : NumberLong(0),
         "syncingTo" : "mongodb-0.mongodb:27017",
         "lastHeartbeatMessage" : ""
      },
      {
         "_id" : 2,
         "name" : "mongodb-2.mongodb:27017",
         "health" : 1,
         "state" : 2,
         "stateStr" : "SECONDARY",
         "uptime" : 204,
         "optime" : {
            "ts" : Timestamp(1648826562, 1),
            "t" : NumberLong(1)
         },
         "optimeDurable" : {
            "ts" : Timestamp(1648826562, 1),
            "t" : NumberLong(1)
         },
         "optimeDate" : ISODate("2023-04-01T03:22:42Z"),
         "optimeDurable
         Date" : ISODate("2023-04-01T03:22:42Z"),
         "lastHeartbeat" : ISODate("2023-04-01T03:22:16.198Z"),
         "lastHeartbeatRecv" : ISODate("2023-04-01T03:22:16.832Z"),
         "pingMs" : NumberLong(0),
         "syncingTo" : "mongodb-0.mongodb:27017",
         "lastHeartbeatMessage" : ""
         }
         ],
      "ok" : 1,
      "$clusterTime" : {
      "clusterTime" : Timestamp(1648826562, 1),
      "signature" : {
      "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
      "keyId" : NumberLong(0)
      }
   },
"operationTime" : Timestamp(1648826562, 1)
}

 

其中,每个成员都有一个名为“health”的字段,如果它的值为1,则表示成员正常运行。如果该字段的值为0,则表示成员出现故障或无法连接到集群。 此外,还有一个“state”字段,用于指示每个成员的当前状态。状态码为0表示该成员不可用,1表示该成员为主节点,2表示该成员为辅助节点。 最后,“optime”字段提供了每个节点的最新操作时间戳,可以用于确保数据同步。如果某个节点的操作时间戳比其他节点早,则该节点可能需要进行同步以确保数据一致性。 在部署MongoDB集群时,可以通过监视每个成员的状态和操作时间戳,来确保集群的可用性和数据一致性。

来源:https://cloud.tencent.com/developer/article/2246466

标签:kubernetes,04,mongodb,22,MongoDB,2023,集群,01T03
From: https://www.cnblogs.com/gaoyanbing/p/18125574

相关文章

  • Shell - [11] 开源Apache Zookeeper集群启停脚本
     一、集群角色部署当前有Zookeeper集群如下主机名ctos79-01ctos79-02ctos79-03Zookeeper○○○ 二、脚本使用 三、脚本内容#!/bin/bash#定义ZooKeeper服务器列表SERVERS=("ctos79-01""ctos79-02""ctos79-03")#定义ZooKeeper安装路径INSTALL_......
  • MongoDB的一次奇妙查询
    这段时间遇到了一个业务需求,我有一些关于书籍的文档数据存储在MongoDB数据中,然后在修复数据之后,需要用一个查询去验证更新是否成功。书籍数据大概长这个样子:{"books":[{"name":"UbuntuMeta","sku_id":"101","price":30.5},{&q......
  • ARM异构集群组建与通信性能测试
    ARM异构集群组建与通信性能测试1介绍本研究以树莓派、飞腾派、米尔海思三款ARM开发板为基础,组建计算集群,在其上运行实时性测试程序,并结合交换机实现板间通信。2系统编译与加载计划在下述开发板+系统上运行编译好的ARM程序:序号开发板系统状况2.1树莓派原生Rasp......
  • kubernetes集群故障恢复
    前提概要:该k8s集群为测试集群故障报错1: 排障:查询kube-apiserver服务状态: 可以看出cni使用了docker和cri-dockerd两种,所以涉及:unix:///run/containerd/containerd.sockunix:///var/run/cri-dockerd.sock两个查询etcd服务状态: etcd的数据文件损坏了,要做数据恢复,而我这......
  • Kubernetes学习笔记13
    K8s集群核心概念:Service我们在之前的学习过程中遇到一个问题,就是如果Pod被误删除,那么Controller重新拉起一个新的Pod时,我们发现PodIP地址是变化着的,我们访问必须更新IP地址。这样对于大量的Pod运行应用来说,我们对Pod完全无法控制的,因此在K8s集群中我们引入另一个概念Service......
  • Kubernetes学习笔记12
    k8s核心概念:控制器:我们删除Pod是可以直接删除的,如果生产环境中的误操作,Pod同样也会被轻易地被删除掉。所以,在K8s中引入另外一个概念:Controller(控制器)的概念,用于在k8s集群中以loop的方式监视pod状态,如果其发现Pod被删除,将会重新拉起一个Pod,以让Pod一直保持在用户期望的状态。......
  • Kubernetes 升级不弃 Docker:KubeKey 的丝滑之道
    作者:尹珉,KubeSphereAmbaasador&Contributor,KubeSphere社区用户委员会杭州站站长。引言随着Kubernetes社区的不断发展,即将迎来Kubernetes1.30版本的迭代。在早先的1.24版本中,社区作出一个重要决策:不再默认集成Docker作为容器运行时,即取消了对Docker的默认支持。这......
  • 丐版pxc集群
    同步systemctlstopfirewalld&&systemctldisablefirewalldsystemctlstopNetworkManager&&systemctldisableNetworkManagersetenforce0sed-is/SELINUX=enforcing/SELINUX=disabled//etc/selinux/configswapoff-ased-ri's/.swap./......
  • MongoDB 中索引的构建阶段
    1.Xlock收到创建索引的请求时,会在集合上获取排他的X锁。该锁会停止该集合上的所有读/写操作{"t":{"$date":"2024-03-13T05:29:35.925+00:00"},"s":"I","c":"INDEX","id":20438,"ctx":"conn15536&quo......
  • 在CentOS7上搭建hadoop集群
    hadoop官方下载地址https://hadoop.apache.org/releases.html用到的命令/root/hadoop-3.4.0/bin/hdfsnamenode-format,start-all.sh,stop-all.sh1.三台虚拟机分别设置静态ip2.设置免密登录(更改主机名、添加映射)3.配置hadoop(添加环境变量)core-site.xmlhdfs-site.......