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

mongodb使用docker搭建replicaSet集群與變更監(jiān)聽(最新推薦)

 更新時間:2023年03月31日 09:56:49   作者:水中加點糖  
replicaSet和cluster從部署難度相比,replicaSet要簡單許多。如果所存儲的數據量規(guī)模不算太大的情況下,那么使用replicaSet方式部署mongodb是一個不錯的選擇,這篇文章主要介紹了mongodb使用docker搭建replicaSet集群與變更監(jiān)聽,需要的朋友可以參考下

在mongodb如果需要啟用變更監(jiān)聽功能(watch),mongodb需要在replicaSet或者cluster方式下運行。

replicaSet和cluster從部署難度相比,replicaSet要簡單許多。如果所存儲的數據量規(guī)模不算太大的情況下,那么使用replicaSet方式部署mongodb是一個不錯的選擇。

安裝環(huán)境

mongodb版本:mongodb-6.0.5

兩臺主機:主機1(192.168.1.11)、主機2(192.168.1.12)

docker方式mongodb集群安裝

在主機1和主機2上安裝好docker,并確保兩臺主機能正常通信

目錄與key準備

在啟動mongodb前,先準備好對應的目錄與訪問key

#在所有主機都創(chuàng)建用于存儲mongodb數據的文件夾
mkdir -p ~/mongo-data/{data,key,backup}
#設置key文件,用于在集群機器間互相訪問,各主機的key需要保持一致
cd ~/mongo-data
#在某一節(jié)點創(chuàng)建key
openssl rand -base64 123 > key/mongo-rs.key
sudo chown 999 key/mongo-rs.key
#不能是755, 權限太大不行. 
sudo chmod 600 key/mongo-rs.key
#將key復制到他節(jié)點
scp key/mongo-rs.key root@192.168.1.12:/root/mongo-data/key

以上操作在各主機中創(chuàng)建了 ~/mongo-data/{data,key,backup} 這3個目錄,且mongo-rs.key的內容一致。

運行mongodb

執(zhí)行下列命令,啟動mongodb

sudo docker run --name mongo --network=host -p 27017:27017 -v ~/mongo-data/data:/data/db -v ~/mongo-data/backup:/data/backup -v ~/mongo-data/key:/data/key -v /etc/localtime:/etc/localtime -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123456 -d mongo:6.0.5 --replSet haiyangReplset --auth --keyFile /data/key/mongo-rs.key --bind_ip_all

上面主要將27017端口映射到主機中,并設了admin的默認密碼為123456。
–replSet為指定開啟replicaSet,后面跟的為副本集的名稱。

配置節(jié)點

進入某一節(jié)點,進行集群配置

sudo docker exec -it mongo bash
mongosh

初始化集群前先登錄驗證超級管理員admin

use admin
db.auth(“admin”,“123456”)

再執(zhí)行以下命令進行初始化

var config={
     _id:"haiyangReplset",
     members:[
         {_id:0,host:"192.168.1.11:27017"},
         {_id:1,host:"192.168.1.12:27017"},
]};
rs.initiate(config)

執(zhí)行成功后,可以看到一個節(jié)點為主節(jié)點,另一個節(jié)點為從節(jié)點

mongosh

其他相關命令

#查看副本集狀態(tài)
rs.status()
#查看副本集配置
rs.conf()
#添加節(jié)點
rs.add( { host: "ip:port"} )
#刪除節(jié)點
rs.remove('ip:port')

官方客戶端驗證

在mongodb安裝好后,再用客戶端連接驗證一下。
官方mongodb的客戶端下載地址為:https://www.mongodb.com/try/download/compass

下載完畢后,在客戶端中新建連接。
在本例中,則mongodb的連接地址為:

mongodb://admin:123456@192.168.1.11:27017,192.168.1.12:27017/?authMechanism=DEFAULT&authSource=admin&replicaSet=haiyangReplset

mongo-compass

庫與監(jiān)控信息一目了然~

變更監(jiān)聽

對于mongodb操作的api在mongodb的官網有比較完備的文檔,java的文檔連接為:https://www.mongodb.com/docs/drivers/java/sync/v4.9/

這里試一下mongodb中一個比較強悍的功能,記錄的變更監(jiān)聽。
用這項功能來做一些審計的場景則會非常方便。

官方鏈接為:https://www.mongodb.com/docs/drivers/java/sync/v4.9/usage-examples/watch/

這里以java客戶端為例寫個小demo,試一下對于mongodb中集合的創(chuàng)建及watch功能。

package io.github.puhaiyang;

import com.google.common.collect.Lists;
import com.mongodb.client.*;
import org.apache.commons.lang3.StringUtils;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Scanner;
import java.util.concurrent.CompletableFuture;

/**
 * @author puhaiyang
 * @since 2023/3/30 20:01
 * MongodbWatchTestMain
 */
public class MongodbWatchTestMain {

    public static void main(String[] args) throws Exception {
        String uri = "mongodb://admin:123456@192.168.1.11:27017,192.168.1.12:27017/?replicaSet=haiyangReplset";
        MongoClient mongoClient = MongoClients.create(uri);
        MongoDatabase mongoDatabase = mongoClient.getDatabase("my-test-db");
        String myTestCollectionName = "myTestCollection";
        //獲取出collection
        MongoCollection<Document> mongoCollection = initCollection(mongoDatabase, myTestCollectionName);
        //進行watch
        CompletableFuture.runAsync(() -> {
            while (true) {
                List<Bson> pipeline = Lists.newArrayList(
                        Aggregates.match(Filters.in("ns.coll", myTestCollectionName)),
                        Aggregates.match(Filters.in("operationType", Arrays.asList("insert", "update", "replace", "delete")))
                );
                ChangeStreamIterable<Document> changeStream = mongoDatabase.watch(pipeline)
                        .fullDocument(FullDocument.UPDATE_LOOKUP)
                        .fullDocumentBeforeChange(FullDocumentBeforeChange.WHEN_AVAILABLE);

                changeStream.forEach(event -> {
                    String collectionName = Objects.requireNonNull(event.getNamespace()).getCollectionName();
                    System.out.println("--------> event:" + event.toString());
                });
            }
        });

        //數據變更測試
        {
            Thread.sleep(3_000);
            InsertOneResult insertResult = mongoCollection.insertOne(new Document("test", "sample movie document"));
            System.out.println("Success! Inserted document id: " + insertResult.getInsertedId());
            UpdateResult updateResult = mongoCollection.updateOne(new Document("test", "sample movie document"), Updates.set("field2", "sample movie document update"));
            System.out.println("Updated " + updateResult.getModifiedCount() + " document.");
            DeleteResult deleteResult = mongoCollection.deleteOne(new Document("field2", "sample movie document update"));
            System.out.println("Deleted " + deleteResult.getDeletedCount() + " document.");
        }

        new Scanner(System.in).next();
    }

    private static MongoCollection<Document> initCollection(MongoDatabase mongoDatabase, String myTestCollectionName) {
        ArrayList<Document> existsCollections = mongoDatabase.listCollections().into(new ArrayList<>());
        Optional<Document> existsCollInfoOpl = existsCollections.stream().filter(doc -> StringUtils.equals(myTestCollectionName, doc.getString("name"))).findFirst();
        existsCollInfoOpl.ifPresent(collInfo -> {
            //確保開啟了changeStreamPreAndPost
            Document changeStreamPreAndPostImagesEnable = collInfo.get("options", Document.class).get("changeStreamPreAndPostImages", Document.class);
            if (changeStreamPreAndPostImagesEnable != null && !changeStreamPreAndPostImagesEnable.getBoolean("enabled")) {
                Document mod = new Document();
                mod.put("collMod", myTestCollectionName);
                mod.put("changeStreamPreAndPostImages", new Document("enabled", true));
                mongoDatabase.runCommand(mod);
            }
        });
        if (!existsCollInfoOpl.isPresent()) {
            CreateCollectionOptions collectionOptions = new CreateCollectionOptions();
            //創(chuàng)建collection時開啟ChangeStreamPreAndPostImages
            collectionOptions.changeStreamPreAndPostImagesOptions(new ChangeStreamPreAndPostImagesOptions(true));
            mongoDatabase.createCollection(myTestCollectionName, collectionOptions);
        }
        return mongoDatabase.getCollection(myTestCollectionName);
    }
}


輸出結果如下:

--------> event:ChangeStreamDocument{ operationType=insert, resumeToken={"_data": "8264255A0F000000022B022C0100296E5A10046A3E3757D6A64DF59E6D94DC56A9210446645F6964006464255A105A91F005CFB2E6D20004"}, namespace=my-test-db.myTestCollection, destinationNamespace=null, fullDocument=Document{{_id=64255a105a91f005cfb2e6d2, test=sample movie document}}, fullDocumentBeforeChange=null, documentKey={"_id": {"$oid": "64255a105a91f005cfb2e6d2"}}, clusterTime=Timestamp{value=7216272998402097154, seconds=1680169487, inc=2}, updateDescription=null, txnNumber=null, lsid=null, wallTime=BsonDateTime{value=1680169487686}}
Success! Inserted document id: BsonObjectId{value=64255a105a91f005cfb2e6d2}
Updated 1 document.
--------> event:ChangeStreamDocument{ operationType=update, resumeToken={"_data": "8264255A0F000000032B022C0100296E5A10046A3E3757D6A64DF59E6D94DC56A9210446645F6964006464255A105A91F005CFB2E6D20004"}, namespace=my-test-db.myTestCollection, destinationNamespace=null, fullDocument=Document{{_id=64255a105a91f005cfb2e6d2, test=sample movie document, field2=sample movie document update}}, fullDocumentBeforeChange=Document{{_id=64255a105a91f005cfb2e6d2, test=sample movie document}}, documentKey={"_id": {"$oid": "64255a105a91f005cfb2e6d2"}}, clusterTime=Timestamp{value=7216272998402097155, seconds=1680169487, inc=3}, updateDescription=UpdateDescription{removedFields=[], updatedFields={"field2": "sample movie document update"}, truncatedArrays=[], disambiguatedPaths=null}, txnNumber=null, lsid=null, wallTime=BsonDateTime{value=1680169487708}}
--------> event:ChangeStreamDocument{ operationType=delete, resumeToken={"_data": "8264255A0F000000042B022C0100296E5A10046A3E3757D6A64DF59E6D94DC56A9210446645F6964006464255A105A91F005CFB2E6D20004"}, namespace=my-test-db.myTestCollection, destinationNamespace=null, fullDocument=null, fullDocumentBeforeChange=Document{{_id=64255a105a91f005cfb2e6d2, test=sample movie document, field2=sample movie document update}}, documentKey={"_id": {"$oid": "64255a105a91f005cfb2e6d2"}}, clusterTime=Timestamp{value=7216272998402097156, seconds=1680169487, inc=4}, updateDescription=null, txnNumber=null, lsid=null, wallTime=BsonDateTime{value=1680169487721}}
Deleted 1 document.

到此這篇關于mongodb使用docker搭建replicaSet集群與變更監(jiān)聽的文章就介紹到這了,更多相關mongodb搭建replicaSet集群內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Mongodb在UPDATE操作中使用$push向數組中插入數據的方法

    Mongodb在UPDATE操作中使用$push向數組中插入數據的方法

    在update操作中,使用$push操作符向數組中插入新的元素,按照相應的語法,使用$push操作符,下面通過本文給大家分享Mongodb在UPDATE操作中使用$push向數組中插入數據的方法,感興趣的朋友一起看看吧
    2024-06-06
  • MongoDB數據庫插入、更新和刪除操作詳解

    MongoDB數據庫插入、更新和刪除操作詳解

    這篇文章主要介紹了MongoDB數據庫插入、更新和刪除操作詳解,需要的朋友可以參考下
    2014-03-03
  • mongodb使用c#驅動數據插入demo

    mongodb使用c#驅動數據插入demo

    今天小編就為大家分享一篇關于mongodb使用c#驅動數據插入demo,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • MongoDB教程之索引介紹

    MongoDB教程之索引介紹

    這篇文章主要介紹了MongoDB教程之索引介紹,本文講解了索引基礎、唯一索引、使用explain、索引管理等內容,需要的朋友可以參考下
    2015-05-05
  • MongoDB為用戶設置訪問權限

    MongoDB為用戶設置訪問權限

    MongoDB已經使用很長一段時間了,基于MongoDB的數據存儲也一直沒有使用到權限訪問 MongoDB默認設置為無權限訪問限制
    2012-11-11
  • 淺析mongodb中group分組

    淺析mongodb中group分組

    這篇文章主要介紹了淺析mongodb中group分組的實現方法及示例,非常的簡單實用,有需要的小伙伴可以參考下。
    2015-05-05
  • MongoDB數據庫權限管理詳解

    MongoDB數據庫權限管理詳解

    本文詳細講解了MongoDB數據庫權限管理的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • MongoDB聚合group的操作指南

    MongoDB聚合group的操作指南

    這篇文章主要給大家介紹了關于MongoDB聚合group的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • mongoDB中聚合函數java處理示例詳解

    mongoDB中聚合函數java處理示例詳解

    這篇文章主要給大家介紹了關于mongoDB中聚合函數java處理的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用mongoDB具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • MongoDB數據庫基礎操作總結

    MongoDB數據庫基礎操作總結

    這篇文章主要介紹了MongoDB數據庫基礎操作,結合實例形式總結分析了MongoDB數據庫創(chuàng)建、刪除、集合、文檔等基本操作技巧,需要的朋友可以參考下
    2020-06-06

最新評論

从化市| 台东市| 霍林郭勒市| 庆阳市| 武邑县| 刚察县| 吉木萨尔县| 新乐市| 错那县| 德庆县| 泸定县| 含山县| 彩票| 南木林县| 滦南县| 繁峙县| 富顺县| 新巴尔虎右旗| 吉林市| 滦南县| 隆回县| 郓城县| 会昌县| 互助| 云安县| 上高县| 景洪市| 上栗县| 错那县| 乐亭县| 安义县| 丘北县| 宜都市| 正定县| 二连浩特市| 宾阳县| 玉门市| 文化| 永清县| 仙游县| 仙居县|