最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

docker搭建mongodb單節(jié)點副本集的實現(xiàn)

 更新時間:2022年05月07日 14:58:54   作者:ysj  
本文主要介紹了docker搭建mongodb單節(jié)點副本集的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

背景

在開發(fā)中,我們很容易通過docker啟動一個普通的mongodb數(shù)據(jù)庫服務(wù)。但是有時候為了保持與線上環(huán)境一致,或者為了利用mongodb副本集的某些特性,我們需要在本地部署mongodb副本集。副本集往往需要啟動多個mongodb服務(wù)作為副本集成員,而通常用于開發(fā)的筆記本資源比較有限。鑒于此,官方文檔給了解決辦法,可以直接將一個單節(jié)點mongodb服務(wù)轉(zhuǎn)換為單節(jié)點副本集(standlone replica set)(https://www.mongodb.com/docs/manual/tutorial/convert-standalone-to-replica-set/)

啟動步驟

按照官方文檔的說明,如果利用docker部署服務(wù),那么依次有如下步驟:

  • 第一步, 假如已經(jīng)存在一個運行中的普通mongodb容器服務(wù)。此時,需要關(guān)閉服務(wù),并通過指定--replSet參數(shù)重啟該服務(wù)或者重新啟動一個新的mongodb容器。

    假如mongodb的服務(wù)名及容器名均為mongodb_rs,運行端口映射為27017:27017,副本集名稱為rs0,數(shù)據(jù)存儲目錄指定為/srv/mongodb/db0,數(shù)據(jù)卷掛載目錄為./data:/srv/mongodb/db0。那么docker-compose.yaml 文件可編寫如下:

    version: "3"
    services:  
      mongodb_rs:
        network_mode: bridge
        container_name: mongodb_rs
        image: mongo:latest
        ports:
          - "27017:27017"
        restart: always
        # environment:
        #   MONGO_INITDB_ROOT_USERNAME: username
        #   MONGO_INITDB_ROOT_PASSWORD: pwd
        command: mongod --port 27017 --replSet rs0 --dbpath /srv/mongodb/db0
        volumes:
          - ./data:/srv/mongodb/db0
  • 第二步,執(zhí)行如下命令啟動mongodb服務(wù)

    docker-compose up -d mongodb_rs
  • 第三步,進(jìn)入容器mongosh,執(zhí)行初始化副本集命令

    docker exec -it mongodb_rs mongo
    # mongosh
    rs.initiate()
    
    # ---
    # > rs.initiate()
    # {
    #	 "info2" : "no configuration specified. Using a default configuration for the set",
    #	 "me" : "f76081e20602:27017",
    #	 "ok" : 1
    # }
    # rs0:SECONDARY>
    # rs0:PRIMARY>|
  • 第四步,退出容器,容器服務(wù)正常運行

可能遇到的問題

按照上述步驟執(zhí)行后,通常情況下容器服務(wù)可以正常運行,應(yīng)用程序可以正常進(jìn)行連接,到這里基本就成功了。以golang代碼測試:

package main

import (
	"context"
	"fmt"
	"log"

	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
)

func main() {
	clientOpts := options.Client().ApplyURI("mongodb://localhost:27017/?replicaSet=rs0")
	client, err := mongo.Connect(context.TODO(), clientOpts)
	if err != nil {
		log.Fatal(err)
	}
	colls, _ := client.Database("admin").ListCollectionNames(context.TODO(), bson.M{})
	fmt.Printf("colls: %v\n", colls)
}
// colls: [system.keys system.version]

但是有時候可能會出現(xiàn)本地程序代碼無法連接副本集服務(wù),控制臺會報類似連接錯誤的問題,報錯的原因在于副本集無法識別成員host。

在單節(jié)點副本集下,本機(jī)既是主也是從,在容器的mongo shell中可進(jìn)行查看, members只有一個成員,其name"f76081e20602:27017", 所以如果你遇到無法連接或者其他類似錯誤,根本原因在于本地啟動的這個副本集無法識別f76081e20602這個host。

rs.status()
---
rs0:PRIMARY> rs.status()
{
	"set" : "rs0",
	"date" : ISODate("2022-05-06T18:59:21.417Z"),
# ...	
	"members" : [
		{
			"_id" : 0,
			"name" : "f76081e20602:27017",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 1433,
			"optime" : {
				"ts" : Timestamp(1651863555, 1),
				"t" : NumberLong(1)
			},
		# ...
		}
	],
# ...
}

解決辦法

曾經(jīng)遇到上述問題,百度csdn上有多篇內(nèi)容一樣的文章,都說這種情況需要將應(yīng)用程序也通過容器進(jìn)行啟動,并將應(yīng)用程序與mongdb副本集服務(wù)置于同一個docker網(wǎng)絡(luò)中,就可以正常連接了。這樣做確實也可行,但似乎過于麻煩了,有點走歪路的感覺。

從上述內(nèi)容已經(jīng)知道是副本集成員host的識別問題,那么在初始化mongodb副本集時,我們可以顯式的去指定成員host,不使用默認(rèn)的副本集配置。具體而言,將啟動步驟中的第三步更改為:

  • 進(jìn)入mongosh

    docker exec -it mongodb_rs mongo
  • 自定義配置

    # mongosh
    conf = {
       _id : "rs0",
       members: [
          { _id: 0, host: "<本機(jī)ip地址>:27017" },
       ]
    }
  • 初始化副本集

    # mongosh
    rs.initiate(conf)

如此,通過指定成員ip,mongo單節(jié)點副本集就可以準(zhǔn)確的識別到副本集成員,對于多節(jié)點副本集如果出現(xiàn)連接問題,此方法同樣適用。

到此這篇關(guān)于docker搭建mongodb單節(jié)點副本集的實現(xiàn)的文章就介紹到這了,更多相關(guān)docker搭建mongodb單節(jié)點副本集內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用 Azure Container Registry 儲存鏡像的問題

    使用 Azure Container Registry 儲存鏡像的問題

    Azure Container Registry(容器注冊表)是基于 Docker Registry 2.0規(guī)范的托管專用 Docker 注冊表服務(wù)。這篇文章主要介紹了使用 Azure Container Registry 儲存鏡像,需要的朋友可以參考下
    2021-05-05
  • 對Docker-java項目進(jìn)行jvm調(diào)優(yōu)-內(nèi)存方式

    對Docker-java項目進(jìn)行jvm調(diào)優(yōu)-內(nèi)存方式

    本文詳細(xì)介紹了如何進(jìn)入Docker容器并分析Java進(jìn)程的內(nèi)存使用情況,通過使用jps和jstat工具,可以查看java進(jìn)程列表及內(nèi)存池容量,討論了設(shè)置JVM參數(shù)-Xmx和-Xms相等的重要性,以避免堆內(nèi)存的頻繁調(diào)整,此外,還探討了FullGC觸發(fā)條件和元空間的配置
    2024-09-09
  • Ubuntu系統(tǒng)下docker?Pull鏡像錯誤timeout解決辦法

    Ubuntu系統(tǒng)下docker?Pull鏡像錯誤timeout解決辦法

    最近在用docker搭個開發(fā)環(huán)境,發(fā)現(xiàn)在拉取鏡像的時候有點問題,這篇文章主要給大家介紹了關(guān)于Ubuntu系統(tǒng)下docker?Pull鏡像錯誤timeout的解決辦法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • docker 無法釋放端口的解決方案

    docker 無法釋放端口的解決方案

    這篇文章主要介紹了docker 無法釋放端口的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • docker-compose限制容器cpu和內(nèi)存方式

    docker-compose限制容器cpu和內(nèi)存方式

    這篇文章主要介紹了docker-compose限制容器cpu和內(nèi)存方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 如何在?Docker?中運行?Mongodb

    如何在?Docker?中運行?Mongodb

    本文詳細(xì)介紹了如何在Docker中安裝并運行MongoDB,包括安裝Docker,下載Mongo鏡像,創(chuàng)建容器,連接數(shù)據(jù)庫和數(shù)據(jù)持久化的方法,通過具體的命令和步驟,使用戶能夠順利在Docker中部署MongoDB服務(wù)
    2024-01-01
  • 使用Docker部署前后端分離項目的完整步驟

    使用Docker部署前后端分離項目的完整步驟

    剛剛接觸基礎(chǔ)的運維工作,采用的是docker部署的方式,下面這篇文章主要給大家介紹了關(guān)于使用Docker部署前后端分離項目的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • Docker?exec?的實現(xiàn)原理介紹

    Docker?exec?的實現(xiàn)原理介紹

    這篇文章主要介紹了Docker?exec的實現(xiàn)原理,詳細(xì)解讀了docker?exec這個操作背后,Linux?Namespace更具體的工作原理,這種通過操作系統(tǒng)進(jìn)程相關(guān)的知識,逐步剖析Docker容器的方法,需要的朋友可以參考一下
    2022-04-04
  • docker如何部署eureka-server

    docker如何部署eureka-server

    這篇文章主要介紹了docker如何部署eureka-server問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • docker run和start的區(qū)別說明

    docker run和start的區(qū)別說明

    這篇文章主要介紹了docker run和start的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評論

洞头县| 镇宁| 买车| 济源市| 昌吉市| 怀化市| 阳泉市| 穆棱市| 博爱县| 革吉县| 东方市| 汉阴县| 西昌市| 绵阳市| 靖安县| 视频| 丽江市| 定结县| 甘南县| 华宁县| 穆棱市| 枣强县| 白沙| 巴中市| 泰来县| 南部县| 桓台县| 社旗县| 大足县| 威宁| 清丰县| 兴义市| 鄂温| 肃南| 大田县| 海伦市| 涪陵区| 绥滨县| 同江市| 威信县| 嵊州市|