ubuntu下docker安裝mongodb-支持單副本集

1.mogodb支持事務的前提

1) MongoDB 版本:確保 MongoDB 版本大于或等于 4.0,因為事務支持是在 4.0 版本中引入的。

2) 副本集配置:MongoDB 必須以副本集(Replica Set)模式運行,即使是單節點副本集(即只有一個 MongoDB 實例,但以副本集模式啟動)。

2.安裝docker

3.創建目錄和文件

1) 宿主機-mongodb的數據存儲目錄

mkdir /mongo/data
chmod 777 /mongo/data

2) 宿主機-mongodb的配置文件目錄

mkdir /mongo/conf
chmod 777 /mongo/conf

3) 宿主機-mongodb的密鑰文件

cd /mongo
openssl rand -base64 756 > keyFile
chmod 400 keyFile  # 一定是400,不要賦權777
chown 999:999 keyFile

4) 在/mongo/conf目錄下,生成配置文件mongod.conf

# 存儲配置
storage:dbPath: /data/db                 # 數據庫文件存儲路徑engine: wiredTiger              # 存儲引擎(通常為 wiredTiger)wiredTiger:engineConfig:cacheSizeGB: 1               # WiredTiger 緩存大小(單位:GB)directoryForIndexes: true    # 是否為索引使用單獨目錄# 網絡配置
net:port: 27017                      # MongoDB 監聽端口bindIp: 0.0.0.0                  # 綁定 IP 地址(0.0.0.0 表示監聽所有網絡接口)# 安全配置
security:authorization: enabled           # 是否啟用認證keyFile: /data/mongodb/keyFile  # 密鑰文件路徑(用于副本集或分片集群)# 副本集配置(如果使用副本集)
replication:replSetName: "rs0"               # 副本集名稱

4.啟動MongoDB容器

docker run -d --name mongo -p 27017:27017 \
-v /mongo/data:/data/db \
-v /mongo/conf/mongod.conf:/etc/mongod.conf \
-v /mongo/keyFile:/data/mongodb/keyFile \
mongo:latest  mongod --auth --bind_ip_all --config /etc/mongod.conf# -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=123456

? ? ? ?如果運行上述命令后,mongodb容器處于退出狀態,請排查數據掛載目錄權限、配置文件問題、keyFile文件問題、27017端口沒有開放、容器占用系統太多資源導致系統資源不足等問題,可通過docker logs mongo查看具體原因。

5.查看mongodb存儲引擎和發行版本

# 查看mongodb版本
db.version()
# 查看當前數據庫的存儲引擎(需要root角色用戶)
db.serverStatus().storageEngine

6.初始化副本集和創建用戶

# 進入MongoDB容器
docker exec -it mongo mongosh
# 初始化副本集
rs.initiate({_id: "rs0",members: [{ _id: 0, host: "172.12.112.102:27017" }]
})
# 創建管理員用戶
use admin
db.createUser({user: 'admin', pwd: 'admin123456', roles: [{role: 'userAdminAnyDatabase', db: 'admin'}]})
# 創建root用戶
db.createUser({user: "root",pwd: "123456",roles: [{ role: "root", db: "admin" }]
})
# 驗證用戶
db.auth("admin", "admin123456")
db.auth("root", "123456")

7. 創建集合

use biobank
db.createUser({user: "test", pwd: "123456", roles: [{role: "readWrite", db: "printing"}]})
exitdocker exec -it mongo mongosh
use biobank
db.auth("test", "123456")

8.Flask-MongoEngine使用事務

? ? ? ?在 MongoDB 中,事務是通過會話(Session)來管理的。Flask-MongoEngine 本身不直接提供事務管理,但可以通過 PyMongo 的會話功能來實現。

MONGODB_SETTINGS = {'db': 'biobank','host': 'mongodb://test:123456@172.12.112.102:27017/biobank?replicaSet=rs0'
}# 或者
MONGODB_SETTINGS = {'host': '172.12.112.102','port': 27017,'username': 'test','password': '123456','db': 'biobank','authSource': 'biobank',  # 指定身份驗證數據庫'replicaSet': 'rs0','connectTimeoutMS': 5000,  # 設置套接字超時時間(毫秒)。'socketTimeoutMS': 30000,  # 設置套接字超時時間(毫秒)。'serverSelectionTimeoutMS': 5000,  # 設置服務器選擇超時時間(毫秒),當客戶端嘗試連接到 MongoDB 服務器時,如果在此時間內沒有找到可用的服務器,將拋出異常。'retryWrites': True,  # 寫重試'retryReads': True  # 讀重試
}
from flask import Flask
from flask_mongoengine import MongoEngine
from pymongo import MongoClient, ASCENDING
from pymongo.errors import OperationFailureapp = Flask(__name__)# 配置 MongoDB 連接
app.config["MONGODB_SETTINGS"] = {'db': 'your_database_name','host': 'mongodb://localhost:27017/'
}db = MongoEngine(app)# 定義一個簡單的模型
class MyModel(db.Document):name = db.StringField(required=True)value = db.IntField(required=True)@app.route('/transaction_example', methods=['GET'])
def transaction_example():# 獲取 PyMongo 客戶端client = MongoClient(app.config["MONGODB_SETTINGS"]['host'])session = client.start_session()try:with session.start_transaction():# 在事務中執行操作MyModel(name='example', value=1).save(session=session)# 可以在這里執行更多操作,它們將在同一個事務中# 如果任何操作失敗,整個事務將回滾session.commit_transaction()return "Transaction committed successfully."except OperationFailure as e:# 如果事務失敗,回滾session.abort_transaction()return f"Transaction aborted: {e}"finally:session.end_session()if __name__ == '__main__':app.run(debug=True)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81847.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81847.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81847.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【前端開發】Uniapp日期時間選擇器:實現分鐘動態步長設置

技術棧 Uniapp + Vue3 + uView年份顯示前后一年,分鐘動態設置間隔效果圖 主體顯示<view class="uni-row-between selector"><view class="uni-flex-1 left" @click="!props.disabled && openPicker()"><uni-iconscolor=…

iOS 藍牙開發中的 BT 與 BLE

在 iOS 開發者的語境里&#xff0c;大家把 BT 和 BLE 當成兩種不同的藍牙技術在談——它們來自同一個 Bluetooth 規范&#xff0c;但面向的場景、協議棧乃至 Apple 提供的 API 都截然不同。 縮寫全稱 / 技術名稱規范層叫法iOS 支持現狀典型用途BTBluetooth Classic&#xff08…

Flink CEP是什么?

Apache Flink 的 CEP&#xff08;Complex Event Processing&#xff0c;復雜事件處理&#xff09; 是 Flink 提供的一個庫&#xff0c;用于在無界數據流中檢測符合特定模式的事件組合。 &#x1f3af; 一、什么是 CEP&#xff1f; ? 定義&#xff1a; CEP 是一種從連續的數據…

ARM (Attention Refinement Module)

ARM模塊【來源于BiSeNet】&#xff1a;細化特征圖的注意力&#xff0c;增強重要特征并抑制不重要的特征。 Attention Refinement Module (ARM) 詳解 ARM (Attention Refinement Module) 是 BiSeNet 中用于增強特征表示的關鍵模塊&#xff0c;它通過注意力機制來細化特征圖&…

AR0144CSSC20SUKA0-CRBR——1/4英寸 1.0 MP 高性能CMOS圖像傳感器解析

產品概述&#xff1a; AR0144CSSC20SUKA0-CRBR 是一款1/4 英寸&#xff0c;1.0 Mp CMOS 數字圖像傳感器&#xff0c;帶有 1280H x 800V 有效像素陣列 全局快門CMOS數字圖像傳感器&#xff0c;它結合了新型的創新全局快門像素設計&#xff0c;適用于準確快速的移動場景捕捉。該…

深入理解遞歸算法:Go語言實現指南

深入理解遞歸算法&#xff1a;Go語言實現指南 引言 遞歸是編程中一種優雅而強大的算法思想&#xff0c;通過函數自我調用的方式解決復雜問題。本文將使用Go語言演示遞歸的核心原理&#xff0c;并通過典型示例幫助開發者掌握這一重要技術。 一、遞歸基礎概念 1.1 遞歸定義 遞歸…

vue2實現【瀑布流布局】

瀑布流 1. 解釋2. 形成結構和樣式3. 自定義指令 1. 解釋 瀑布流特征&#xff1a; 等寬不等高&#xff1a;元素寬度固定&#xff0c;高度根據內容自適應。錯落排列&#xff1a;元素像瀑布一樣從上到下依次填充&#xff0c;自動尋找最短列插入 體現&#xff1a;圖中第一排1&…

CSS display有幾種屬性值

在 CSS 中&#xff0c;display 屬性是控制元素布局和渲染方式的核心屬性之一。它有多種屬性值&#xff0c;每個值都決定了元素在文檔流中的表現形式。以下是 display 的主要屬性值分類及說明&#xff1a; 1. 塊級和行內布局 塊級元素 (block) 特性&#xff1a;獨占一行&…

基于Java實現可靠傳輸

實現可靠傳輸 1. 結合代碼和 LOG 文件分析針對每個項目舉例說明解決效果。 RDT1.0 對應 Log 日志&#xff1a;Log 1.0.txt&#xff0c;接收文件 recvData 1.0.txt RDT1.0 版本是在可靠信道上進行可靠的數據傳輸&#xff0c;因此沒有過多的內容需要說明&#xff0c;發送方 L…

機器學習10-隨機森林

隨機森林學習筆記 一、隨機森林簡介 隨機森林&#xff08;Random Forest&#xff09;是一種集成學習算法&#xff0c;基于決策樹構建模型。它通過組合多個決策樹的結果來提高模型的準確性和穩定性。隨機森林的核心思想是利用“集成”的方式&#xff0c;將多個弱學習器組合成一…

LeetCode 438. 找到字符串中所有字母異位詞 | 滑動窗口與字符計數數組解法

文章目錄 問題描述核心思路&#xff1a;滑動窗口 字符計數數組1. 字符計數數組2. 滑動窗口 算法步驟完整代碼實現復雜度分析關鍵點總結類似問題 問題描述 給定兩個字符串 s 和 p&#xff0c;要求找到 s 中所有是 p 的**字母異位詞&#xff08;Anagram&#xff09;**的子串的起…

idea中,git的cherry-pick怎么用

背景: A同學在A分支進行開發, B同學在B分支進行開發,B同學開發過程中發現,A同學在A分支上面的某次提交,例如某次提交了一個工具類,B同學也用的到這個工具類,但是B又不想mergeA分支的代碼,此時就可以用到git的chery pick能力.

深入解析:如何基于開源OpENer開發EtherNet/IP從站服務

一、EtherNet/IP協議概述 EtherNet/IP(Industrial Protocol)是一種基于以太網的工業自動化通信協議,它將CIP(Common Industrial Protocol)封裝在標準以太網幀中,通過TCP/IP和UDP/IP實現工業設備間的通信。作為ODVA(Open DeviceNet Vendors Association)組織的核心協議…

當 PyIceberg 和 DuckDB 遇見 AWS S3 Tables:打造 Serverless 數據湖“開源夢幻組合”

引言 在一些大數據分析場景比如電商大數據營銷中&#xff0c;我們需要快速分析存儲海量用戶行為數據&#xff08;如瀏覽、加購、下單&#xff09;&#xff0c;以進行用戶行為分析&#xff0c;優化營銷策略。傳統方法依賴 Spark/Presto 集群或 Redshift 查詢 S3 上的 Parquet/O…

流復備機斷檔處理

文章目錄 環境癥狀問題原因解決方案 環境 系統平臺&#xff1a;UOS&#xff08;海光&#xff09;,UOS &#xff08;飛騰&#xff09;,UOS&#xff08;鯤鵬&#xff09;,UOS&#xff08;龍芯&#xff09;,UOS &#xff08;申威&#xff09;,銀河麒麟svs&#xff08;X86_64&…

【藍橋杯真題精講】第 16 屆 Python A 組(省賽)

文章目錄 T1 偏藍 (5/5)T2 IPv6 (0/5)T3 2025 圖形 (10/10)T4 最大數字 (10/10)T5 倒水 (15/15)T6 拼好數 (0/15)T7 登山 (20/20)T8 原料采購 (20/20) 更好的閱讀體驗 高速訪問&#xff1a;https://wiki.dwj601.cn/ds-and-algo/lan-qiao-cup/16th-python-a/永久鏈接&#xff1…

SpringBoot+Dubbo+Zookeeper實現分布式系統步驟

SpringBootDubboZookeeper實現分布式系統 一、分布式系統通俗解釋二、環境準備&#xff08;詳細版&#xff09;1. 軟件版本2. 安裝Zookeeper&#xff08;單機模式&#xff09; 三、完整項目結構&#xff08;帶詳細注釋&#xff09;四、手把手代碼實現步驟1&#xff1a;創建父工…

Spring的業務層,持久層,控制層的關系

在 Spring 框架中&#xff0c;控制層&#xff08;Controller&#xff09;、業務層&#xff08;Service&#xff09; 和 持久層&#xff08;Repository/Mapper&#xff09; 是分層架構的核心組成部分&#xff0c;職責分離明確&#xff0c;通過依賴注入&#xff08;DI&#xff09…

css實現不確定內容的高度過渡

實現效果&#xff1a;鼠標懸浮按鈕&#xff0c;高度過渡出現如圖所示文本框 代碼&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-widt…

計算機視覺與深度學習 | matlab實現ARIMA-WOA-CNN-LSTM時間序列預測(完整源碼和數據)

以下是一個基于MATLAB的ARIMA-WOA-CNN-LSTM時間序列預測框架。由于完整代碼較長,此處提供核心模塊和實現思路,完整源碼和數據可通過文末方式獲取。 1. 數據準備(示例數據) 使用MATLAB內置的航空乘客數據集: % 加載數據 data = readtable(airline-passengers.csv); data …