标签: docker

MongoDB 在内存不足时终止

我有以下配置:

  • 一台运行三个 docker 容器的主机:
    • MongoDB
    • Redis
    • 使用前两个容器存储数据的程序

Redis 和 MongoDB 都用于存储海量数据。我知道 Redis 需要将所有数据保存在 RAM 中,我对此没有意见。不幸的是,发生的情况是 mongo 开始占用大量 RAM,一旦主机 RAM 已满(我们在这里谈论的是 32GB),mongo 或 Redis 就会崩溃。

我已经阅读了以下有关此问题的先前问题:

  1. 限制 MongoDB RAM 使用:显然大部分 RAM 已被 WiredTiger 缓存占用
  2. MongoDB 限制内存:这里显然问题是日志数据
  3. 限制 MongoDB 中的 RAM 内存使用:这里他们建议限制 mongo 的内存,以便它使用较少的内存来缓存/日志/数据
  4. MongoDB 使用太多内存:这里他们说它是 WiredTiger 缓存系统,它倾向于使用尽可能多的 RAM 来提供更快的访问。他们还表示it's completely okay to limit the WiredTiger cache size, since it handles I/O operations pretty efficiently
  5. 有没有限制mongodb内存使用的选项?: 再次缓存,他们还添加MongoDB uses the LRU (Least Recently Used) cache algorithm …

mongodb memory limits docker

17
推荐指数
2
解决办法
2万
查看次数

如何限制mysql服务器的内存消耗以防止OOM杀死?

oom_killer由于 mysql 在插入longblob列时大量消耗内存,我的 MySQL 实例被 Linux 杀死。还原包含非常大longblob列的 mysqldump 时会发生这种情况。

我已经浏览过类似这个博客的内容,它建议将各种读/写缓冲区设置为不同的大小以限制内存消耗。但是,尽管提到的脚本在调整后输出了 350MB 的“TOTAL (MAX)”内存,mysql 在最终被杀死之前仍然会很高兴地吞噬千兆字节的内存。

这是通过 Docker 的复制:

docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=foobar -d --name mysql-longblob mysql:5.7

mysql -h 127.0.0.1 -P 3306 -u root --password -e "CREATE DATABASE blobs; USE blobs; CREATE TABLE longblob_test (bigcol LONGBLOB NOT NULL) ENGINE = InnoDB;"

mysql -h 127.0.0.1 -P 3306 -u root --password -e \
 "SET GLOBAL max_allowed_packet=536870912;" # 512MB

mysql -h 127.0.0.1 -P 3306 -u root …
Run Code Online (Sandbox Code Playgroud)

mysql memory docker

13
推荐指数
1
解决办法
138
查看次数

MongoDB:在应用服务器上共同定位 mongos 进程

我想问一个关于本文档中描述的最佳实践的问题:

http://info.mongodb.com/rs/mongodb/images/MongoDB-Performance-Best-Practices.pdf

使用多个查询路由器。使用分布在多个服务器上的多个 mongos 进程。一个常见的部署是将 mongos 进程共置在应用程序服务器上,这允许应用程序和 mongos 进程之间进行本地通信。 mongos 进程的适当数量将取决于应用程序和部署的性质。

只是关于我们部署的一点背景知识。我们有很多应用服务器节点。他们每个人都使用无状态 RESTful WS 运行一个基于 JVM 的进程。正如这个最佳实践所建议的那样,每个应用程序服务器节点都运行自己的mongos进程,这意味着 JVM 进程的数量总是等于进程的数量mongos

所有mongos进程都连接到 3 个配置服务器和几个 mongo 分片(每个分片内都有副本集)。即使我们使用的是分片部署,我们并没有真正对我们的集合进行分片。事实上,我们有大量的数据库,它们在创建期间分布在所有分片上(这是我们目前分片的主要用例)。

由于最佳实践还表明“适当数量的 mongos 进程将取决于应用程序和部署的性质”,因此我开始怀疑我们的使用mongos是否真的合适,或者如果我们拥有多个专用mongos节点并让我们的应用服务器无需在mongos本地运行即可连接到它们。

对于决定多少个mongos实例与应用服务器实例数量或 MongoDB 集群的大小相关的最佳方法,您有什么看法?

最近,我们开始研究无状态 Web 服务的集群管理,我指的是 Docker、Apache Mesos 和 Kubernetes 等工具。如果我们使用 Docker,那么通常不鼓励在容器内运行多个进程的做法。考虑到这一事实,确保应用服务器容器和mongos容器始终位于同一物理节点上并具有相同数量的进程变得非常困难。这让我怀疑这个最佳实践是否仍然适用于我刚刚描述的集群架构。如果没有,您能否建议mongos在此架构中定位和部署流程的更好方法是什么?

mongodb best-practices deployment sharding docker

12
推荐指数
2
解决办法
6911
查看次数

连接到本地主机时,SMO、SSMS 在 Docker 中管理 SQL Server 的速度很慢

TL;DR:当通过解析为 IPv6 环回 ( ::1)的名称连接到我的 SQL Server Docker 容器时,SMO 调用真的很慢。使用时127.0.0.1,它们很快。


我正在尝试学习如何使用 Docker 映像microsoft/mssql-server-windows-developer。根据 Microsoft 的文档,此容器仅公开端口 1433 TCP。

docker run -d -p 1433:1433 -e sa_password=Passw0rd! -e ACCEPT_EULA=Y -v C:\dockerdb:C:\dockerdb microsoft/mssql-server-windows-developer
Run Code Online (Sandbox Code Playgroud)

我在 Windows 10 上运行容器,并已成功启动它,使用 SQL Server 身份验证进行身份验证,并在 Windows 主机上使用 sqlcmd 和 SSMS 17.4(连接到本地主机或“.”)和 SQL 操作对实例运行查询隔壁 Mac 上的 Studio 通过 IP 连接。以这种方式运行查询时,我看不到明显的性能问题。

在 SSMS 中,我也可以浏览对象资源管理器,但是如果我尝试从对象资源管理器中的对象的右键单击菜单中执行某些操作,例如打开实例参数窗口或附加数据库,SSMS 不会显示大约 5 次响应-10 分钟,此时它要么显示我要求的窗口,要么显示以下错误消息:

SSMS 错误信息

我还尝试使用 SMO Scripter object 对该实例执行一些PowerShell 脚本,并查看相同类型的行为。PS 脚本循环遍历数据库中的对象并将它们编写到文件中,虽然它可以相对较快地收集对象列表,但每个单独的对象需要 5-10 分钟来编写脚本 — 太慢而无法使用。

我有一种预感,单个暴露的端口是不够的,SMO 和 …

sql-server ssms smo docker sql-server-2017

9
推荐指数
1
解决办法
2330
查看次数

docker 中 postgres 数据库的 /dev/shm 大小建议

我们在 docker 容器中有 postgresql 11.7 数据库。

我们遇到了一个问题"pq: could not resize shared memory segment "/PostgreSQL.XXX" to XXX bytes: No space left on device"如下所述。

解决方案有所帮助,我们不再有问题了。但是我们应该为 Postgres 的 docker 容器的 shm_size 设置哪个大小呢?

有什么推荐吗?我们如何计算 shm_size 的“最佳大小”?

postgresql docker

8
推荐指数
1
解决办法
1万
查看次数

微服务结构中的mongoDB

我正在使用 docker 构建一个具有微服务结构的游戏。

我开始构建服务的方式是为每个服务提供一个 mongoDB 实例,因此为 mongoDB 实例提供 OneToOne 服务,

Resources ---> resourcesDB (mongoDB instance 1)
Chat      ---> chatDB      (mongoDB instance 2)
Buildings ---> buildingsDB (mongoDB instance 3)
Battle    ---> battleDB    (mongoDB instance 4)
...
Run Code Online (Sandbox Code Playgroud)

这在开始时确实有意义,因为例如这些服务没有任何共同点,并且不需要连接到同一个 mongo 实例,当它们确实有共同点(构建 <-> 资源)时,它们只需发送一个调用到所需的服务,并处理其余的(更新他的数据库)。

但我开始认为这不是正确的方法,因为以下几点:

1 - 例如,resourcesDB 只有 2 个集合,

    Logs      ---> logging every resources change (building built, war lost etc.) 
    Resources ---> 1 document per user holding how much he have.
Run Code Online (Sandbox Code Playgroud)

这意味着这个数据库不会保存任何大量数据(一段时间后日志将被删除),因此为这两个集合设置一个实例看起来像是一个巨大的杀戮,即使这个实例没有自己的服务器并且将共享服务器与服务。

2 - 维护和备份需要一些额外的工作,我不确定在我的情况下是否需要。

每个服务都会经常更新他的数据库,资源每秒都在计算每个用户有多少,所以它会'users amount'每秒更新数据库,除了其他请求,比如建造建筑物(减少资源)和其他更新,聊天服务将在每条私人消息或聊天消息中更新数据库,战斗服务将每秒更新部队位置和统计数据以及正在进行的每场战斗的更多内容。

我正在考虑将该结构用于下一个结构:

  1. 可能只有 1 …

mongodb docker

7
推荐指数
1
解决办法
2036
查看次数

Postgres Docker CPU 消耗过多

我正在使用 Postgres 容器来运行一些小型的非关键应用程序和站点。它已经稳定了一段时间,但是现在容器在运行了很短的一段时间后开始消耗一些严重的 CPU。我已经删除了所有其他使用 Postgres 容器的容器,即使在启动一个新实例后,CPU 使用率仍然过高。在我的主机 ( docker stats) 中,我看到:

CONTAINER ID        NAME                                              
CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS cd553249727d        data_postgresql.1.ft2gof5jci25xs5w5uqw6eezi                
814.52%             22.11MiB / 46.95GiB   0.05%               129kB / 116kB       0B / 692kB          23
Run Code Online (Sandbox Code Playgroud)

还有这个(top):

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
28923 70        20   0  633580  19664    488 S 696.7  0.0   2408:51 Dp2N
Run Code Online (Sandbox Code Playgroud)

在容器 ( top) 中,我看到:

Mem: 42042244K used, 7183656K free, 3622600K …
Run Code Online (Sandbox Code Playgroud)

postgresql docker cpu

7
推荐指数
1
解决办法
2252
查看次数

使用 MariaDB 10.3.4 docker 镜像设置复制

我正在尝试在两个 docker 容器之间设置复制,它们都运行库存的MariaDB 10.3.4 图像(这是目前的最新版本)。当我开始了集装箱,我得到表错误代码1062(重复键)mysql.user的关键localhost-root。从站显然试图mysql.user从主站复制表并失败,因为他们都有root@localhost用户。这似乎与 Docker 无关 - 我想从头开始设置任何主/从对时会出现同样的问题。

如何设置从属设备来复制所有内容?我从头开始,所以我希望奴隶成为(或多或少)主人的完美副本。

这是设置:

我正在从docker-compose.yml文件运行容器:

version: '2'

volumes:
    dbdata:
        external: false

services:

    # the MariaDB database MASTER container
    #
    database:
        image: mariadb:10.3.4
        env_file:
            - ./env/.env.database
        volumes:
            - dbdata:/data/db
            - /etc/localtime:/etc/localtime:ro
            # mount the configuration files in the approriate place
            #
            - ./database/master/etc/mysql/conf.d:/etc/mysql/conf.d:ro
            # mount the SQL files for initialization in a place where the
            # database container will look …
Run Code Online (Sandbox Code Playgroud)

mysql replication mariadb docker

6
推荐指数
1
解决办法
3595
查看次数

MariaDB docker 标签之间的差异

我需要使用 docker 安装 MariaDB 10.5 最新 GA。

以下标签之间的主要区别是什么?

  • 10.5.11-焦点
  • 10.5焦距
  • 10焦
  • 焦点
  • 11.10.5
  • 10.5
  • 10
  • 最新的

mariadb installation docker

6
推荐指数
1
解决办法
1856
查看次数

有没有办法在 M1 Mac 上的 Ubuntu Docker 上使用 Azure SQL Edge 上的标准 CLR 函数?

我有一台配备 M1 芯片的 MacBook,因此(大约)我运行 SQL Server 的唯一选择是将其作为 Docker 容器运行。这对于标准 SQL 来说效果很好,但是我们的应用程序使用了一些 CLR 功能,例如COMPRESS;当我尝试使用它时,它告诉我

消息 50000,级别 16,状态 1,第 45 行 此实例上未启用公共语言运行时 (CLR)。

启用它不起作用:

EXEC sp_configure 'clr enabled', 1;  
RECONFIGURE;  
GO
Run Code Online (Sandbox Code Playgroud)

给出

消息 15392,级别 16,状态 1,过程 sp_configure,第 166
行 此版本的 SQL Server 不支持指定的选项“clrenabled”,并且无法使用 sp_configure 进行更改。

我发现了这篇 Stack Overflow 帖子,但那是关于某人使用自定义 .NET 库的;我正在寻找适用于 Windows 的 SQL Server 中可用的“标准”功能。

sql-clr docker macos azure-sql-edge

6
推荐指数
1
解决办法
4730
查看次数