<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      使用StatefulSet搭建MongoDB集群

       

      1.目的 

      為每一個MongoDB實例在共享存儲(本例使用GlusterFS)中都申請一片存儲空間,以實現一個無單點故障,高可用,可動態發展的MongoDB集群,架構圖如下

       

      2.前提條件

      在創建statuefulSet之前,需要確保在kubenetes集群中管理員已經創建好共享存儲,并能夠與StorageClass對接,以實現動態存儲供應的模式,使用GlusterFS作為共享存儲

      3.部署StatufulSet

      為了完成MongoDB集群的搭建,需要部署以下三個資源對象

      1)一個StoragerClass:用于StatefulSet自動為各個應用pod申請pvc

      2)一個Headless Service:用于設置MongoDB實例的域名

      3)一個StatefulSet

      首先創建StorageClass 的配置文件

      apiVersion: storage.k8s.io/v1
      kind: SrorageClass
      metadata:
        name: fast
      provisioner: kubenetes.io/glusterfs
      parameters:
        resturl:  "http://<heketi-rest-url>"
      運行kubectl create命令創建該StorageClass: 
       
      接下來,創建對應的Headless Service。mongo-sidecar作為MongoDB集群的管理者,將使用此Headless Service來維護各個MongoDB實例之間
      的集群關系,以及集群規模變化時的自動更新。mongo-headless-service.yaml文件的內容如下
      apiVersion: v1
      kind: Service
      metadata:
        name: mongo
        labels:
          name: mongo
      spec:
        ports:
        - port: 27017
          targePort: 27017
        clusterIP: None
        selector:
          role: mongo
      

        運行kubectl create -f  mongo-headless-service.yaml創建Headless Service

      最后創建MongoDB ,StatuefulSet,statuefulSet-mongo.yaml文件的內容

      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: mongo
      spec:
        serviceName: "mongo"
        replicas: 3
        template:
          metadata:
            labels:
              role: mongo
              environment: test
          spec:
            terminationGracePeriodSeconds: 10
            containers:
            - name: mongo
              image: mongo
              command:
              - mongod
              - "--replset"
              - rs0
              - "--smallfiles"
              - "--noprealloc"
              ports:
              - containerPort: 27017
              volumeMounts:
               -  name: mongo-persistent-storage
                   mountpath: /data/db
            - name: mongo-sidecar
               iamge: cvallance/mongo-k8s-sidecar
               env: 
               - name: MONGO_SIDECAR_POD_LABELS
                  value: "role=mongo, environment=test"
               - name: KUBERNETES_MONGO_SERVICE_NAME
                  value: "mongo"
        volumeClaimTemplates:
        - metadata: 
             name: mongo-persistent-storage
             annotations:
               volume.beta.kubernetes.io/storage-class: "fast"
          spec: 
            accessModes: ["ReadWriteOnce"]
            resources:
              requests:
                storage: 100Gi
      

        

      對其中的主要配置說明如下。
      (1)在該StatefulSet的定義中包括兩個容器:mongo和mongo-sidecar。mongo是主服務程序,mongo-sidecar是將多個mongo實例進行集群設置的工具。mongo-sidecar中的環境變量如下。
      ◎ MONGO_SIDECAR_POD_LABELS:設置為mongo容器的標簽,用于sidecar查詢它所要管理的MongoDB集群實例。
      ◎ KUBERNETES_MONGO_SERVICE_NAME:它的值為mongo,表示sidecar將使用mongo這個服務名來完成MongoDB集群的設置。
      (2)replicas=3表示這個MongoDB集群由3個mongo實例組成。
      (3)volumeClaimTemplates是StatefulSet最重要的存儲設置。在annotations段設置volume.beta.kubernetes.io/storage-class="fast"表示使用名為fast的StorageClass自動為每個mongo
      Pod實例都分配后端存儲。resources.requests.storage=100Gi表示為每個mongo實例都分配100GiB的磁盤空間。
      使用kubectl create命令創建這個StatefulSet:  最終可以看到StatefulSet依次創建并啟動了3個mongo Pod實例,它們的名字依次為mongo-0、mongo-1、mongo-2:
      kubectl get pods -l role=mongo
       
      StatefulSet會用volumeClaimTemplates中的定義為每個Pod副本都創建一個PVC實例,每個PVC實例的名稱都由StatefulSet定義中volumeClaimTemplates的名稱和Pod副本的名稱組合而成,
      查看系統中的PVC便可以驗證這一點: kubectl get pvc         
      至此,一個由3個實例組成的MongoDB集群就創建完成了,其中的每個實例都擁有穩定的名稱(DNS域名格式)和獨立的存儲空間。

      4.查看MongoDB集群的狀態

      登錄任意一個mongo Pod,在mongo命令行界面用rs.status()命令查看MongoDB集群的狀態,可以看到mongo集群已通過sidecar完成了創建。在集群中包含3個節點,
      每個節點的名稱都是StatefulSet設置的DNS域名格式的網絡標識名稱: 
      kubectl  exec -it  mongo-0 -- mongo
      對于需要訪問這個mongo集群的Kubernetes集群內部的客戶端來說,可以通過Headless Service“mongo”獲取后端的所有Endpoints列表,
      并組合為數據庫鏈接串,例如“mongodb://mongo-0.mongo,mongo-1.mongo,mongo-2.mongo:27017/dbname_?”。

      5.StatefulSet的常見應用場景

      下面對MongoDB集群常見的兩種場景進行操作,說明StatefulSet對有狀態應用的自動化管理功能。

      5.1MongoDB集群的擴容

      假設在系統運行過程中,3個mongo實例不足以滿足業務的要求,這時就需要對mongo集群進行擴容,僅需要通過StatefulSet進行scale操作,就能實現在mongo集群中自動添加新的mongo節點

      使用kubectl scale命令將StatefulSet設置為4個實例: kubectl scale --replicas=4 statefulet mongo

      等待一會兒查看實例: kubectl get po -l role=mongo

      進入某個實例查看集群狀態,可以看到第四個節點已經加入 kubectl exec -it mongo-0 -- mongo              rs.status()

      同時,系統也為mongo-3分配了一個新的PVC用于保存數據,此處不再贅述,有興趣的讀者可自行查看系統為mongo-3綁定的Volume設置和后端GlusterFS共享存儲的資源分配情況。

      5.2自動故障恢復(MongoDB高可用)

      假設在系統運行過程中,某個mongo實例或其所在的主機發生故障, 則statefulset將會自動重建該mongo實例, 并保證其身份(id)和使用的數據(pvc)不變

      以mongo-0實例發生故障為例,statefulset將會自動重建mongo-0實例,并為其掛載之前分配的pvc“mongo-persistent-storager-mongo-0”。mongo-0服務在重新啟動后,原數據庫中的數據不會丟失,可繼續使用

      kubectl get po -l role=mongo -o yaml

        

       

      posted @ 2023-07-12 16:55  小-y  閱讀(10)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 制服丝袜中文字幕在线| 国产麻传媒精品国产av| 亚洲天堂在线观看完整版| 成年女人黄小视频| 18禁一区二区每日更新| 亚洲第一综合天堂另类专| 久久热这里只有精品99| 国产亚洲av夜间福利香蕉149| 人人妻人人做人人爽夜欢视频 | 岢岚县| 国产午夜精品久久一二区| 日韩中文字幕有码av| 成人啪精品视频网站午夜| 欧美人与动牲交精品| 日韩av无码精品人妻系列| 大陆一级毛片免费播放| 国产人妻精品无码av在线| 国产精品99区一区二区三| 日韩中文字幕有码av| 日韩V欧美V中文在线| 久久夜色精品国产噜噜亚洲sv| 免青青草免费观看视频在线| 乱码中文字幕| 少妇人妻精品一区二区| 亚欧成人精品一区二区乱| 视频一区视频二区制服丝袜| 日本熟妇XXXX潮喷视频| 内射一区二区三区四区| 中文字幕在线日韩| 国产精品久久久久久亚洲色| 安康市| 性色欲情网站iwww九文堂| 在国产线视频A在线视频| 亚洲AV午夜电影在线观看| 一本久道久久综合中文字幕| 欧美色欧美亚洲高清在线观看| 国内在线视频一区二区三区| 野花社区在线观看视频| 国产精品午夜福利合集| 国产一区精品综亚洲av| 亚洲中文字幕无码专区|