当前位置: 首页 > news >正文

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

       如果运行上述命令后,mongodb容器处于退出状态,请排查数据挂载目录权限、配置文件问题、keyFile文件问题、27017端口没有开放、容器占用系统太多资源导致系统资源不足等问题,可通过docker logs mongo查看具体原因。

5.查看mongodb存储引擎和发行版本

# 查看mongodb版本
db.version()
# 查看当前数据库的存储引擎(需要root角色用户)
db.serverStatus().storageEngine

6.初始化副本集和创建用户

# 进入MongoDB容器
docker exec -it mongo mongosh
# 初始化副本集
rs.initiate()
# 创建管理员用户
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.Flask-MongoEngine使用事务

       在 MongoDB 中,事务是通过会话(Session)来管理的。Flask-MongoEngine 本身不直接提供事务管理,但可以通过 PyMongo 的会话功能来实现。

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.xdnf.cn/news/541459.html

相关文章:

  • XTDrone配置ALOAM三维激光SLAM环境
  • GitLab部署
  • std::chrono类的简单使用实例及分析
  • 传输层协议:UDP和TCP
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: 如何获取目录大小?
  • 从Cookie到Token:Web开发认证机制演进史(保姆级拆解)
  • 深入解析MATLAB codegen生成MEX文件的原理与优势
  • PostgreSQL初体验
  • 深入解析 HTTP 中的 GET 请求与 POST 请求​
  • LinkedList源码分析
  • Kotlin与物联网(IoT):Android Things开发探索
  • Ubuntu 22.04安装zabbix7.0.0图形中文乱码
  • ubuntu chrome无法使用搜狗拼音输入法,无法输入中文
  • python打卡训练营打卡记录day31
  • 使用 LibreOffice 实现各种文档格式转换(支持任何开发语言调用 和 Linux + Windows 环境)[全网首发,保姆级教程,建议收藏]
  • 微软开放代理网络愿景
  • JVM 性能问题排查实战10连击
  • 微软宣布的五大重要事项|AI日报0520
  • mac上安装 Rust 开发环境
  • macOS 效率工具对比分析:Raycast、Alfred、uTools、Spotlight
  • 日志根因分析:Elastic Observability 的异常检测与日志分类功能
  • 游戏引擎学习第298天:改进排序键 - 第1部分
  • 从零开始创建React项目及制作页面
  • Android 绘制折线图
  • Java期末总复习 编程题(偏基础)
  • OSI 网络七层模型中的物理层、数据链路层、网络层
  • 利用basee64特性 -- BYUCTF 2025 JWTF
  • 数据库(二):ORM技术
  • 大模型(3)——RAG(Retrieval-Augmented Generation,检索增强生成)
  • 【SPIN】PROMELA数据与程序结构详解(SPIN学习系列--7)