【问题标题】:Bitnami MongoDB Replica Set on Google Compute EngineGoogle Compute Engine 上的 Bitnami MongoDB 副本集
【发布时间】:2020-07-14 20:38:30
【问题描述】:

我在 Google Compute Engine (GCE) 上运行了三个 container optimised VMs,每个 Bitnami MongoDB Docker Container,一个应该是主要的 Mongo 数据库实例,两个应该是辅助的。

在创建虚拟机时,我将容器镜像指定为 "bitnami/mongodb:latest" 并根据 bitnami documentation 使用 gce-container-declaration 设置环境变量(也可以通过 UI在“高级容器选项”下)

我可以使用 via MONGODB_ROOT_PASSWORD 定义的密码连接到主 mongodb,并且其他 VM 已启动并正在侦听它们的 27017 端口。虚拟机也可以相互访问,因此 VPC 和防火墙规则可以使用 Port 27017, 22 and 80 INGRESS / EGRESS

但是,当我想在主节点上获取副本集状态 rs.status() 时,我总是收到 "errmsg" : "no replset config has been received" 错误。所以节点不会创建副本集...... 使用 Docker-Compose 可以开箱即用,Bitnami Image 也应该自动初始化副本集,不是吗?

我尝试了很多方法,包括将 MONGODB_ADVERTISED_HOSTNAME 与 custome GCE VM 主机名一起使用,但没有任何效果,而且我不知道如何找到问题。

主节点 - 容器环境。变量:

MONGODB_ROOT_PASSWORD = 'password123'
MONGODB_REPLICA_SET_NAME = 'rep'
MONGODB_REPLICA_SET_MODE = 'primary'
MONGODB_REPLICA_SET_KEY = '321abc123'

Secondary1 节点 - 容器环境。变量:

MONGODB_PRIMARY_ROOT_PASSWORD = 'password123'
MONGODB_REPLICA_SET_NAME = 'rep'
MONGODB_PRIMARY_HOST = '${VPC_LOCAL_IP_PRIMARY_NODE}'
MONGODB_PRIMARY_PORT_NUMBER = '27017'
MONGODB_REPLICA_SET_MODE = 'secondary'
MONGODB_REPLICA_SET_KEY = '321abc123'

Secondary2 节点 - 容器环境。变量:

MONGODB_PRIMARY_ROOT_PASSWORD = 'password123'
MONGODB_REPLICA_SET_NAME = 'rep'
MONGODB_PRIMARY_HOST = '${VPC_LOCAL_IP_PRIMARY_NODE}'
MONGODB_PRIMARY_PORT_NUMBER = '27017'
MONGODB_REPLICA_SET_MODE = 'secondary'
MONGODB_REPLICA_SET_KEY = '321abc123'

【问题讨论】:

  • " 2018 年 10 月 16 日之后发布的所有 MongoDB 版本(3.6.9 或更高版本、4.0.4 或更高版本或 4.1.5 或更高版本)均根据当前不接受的服务器端公共许可证获得许可作为开源倡议 (OSI) 的开源许可证。”我不知道。感谢您提出这个问题!你觉得 Bitnami 怎么样?
  • 您似乎还没有启动副本集,这也意味着您不能拥有任何主节点或辅助节点,因为它们只存在于 您没有的副本集中'似乎没有。
  • 在尝试使用 GCP 之前,先在本地机器上运行它。
  • 未启动是什么意思?以 docker compose 为例,初始化工作开箱即用,因为“bitnami”处理它......
  • 我在以下线程中找到了一个可接受的答案:stackoverflow.com/questions/60822543/…

标签: mongodb docker google-cloud-platform google-compute-engine bitnami


【解决方案1】:

其实这是一个奇怪的错误。我尝试自己启动一个实例,但没有遇到任何问题。

这里有一个我遵循的步骤的列表,以防万一你觉得它可以作为指导:

1 - 在 GCP 中创建一个新的 VM 实例: 为它指定一个名称(在我的例子中为 mongodb-01),并使用您所说的 UI 指定属性。

Enabling VM Container deployment via UI

Specifying environment variables via UI

2 - 在 GCP 中创建第二个 VM 实例: 为其指定一个名称(在我的例子中为 mongodb-02),然后像前面的示例一样继续操作。请记住在为MONGODB_PRIMARY_HOST 提供值时使用分配给mongodb-01 的私​​有地址。

3 - 通过 SSH 连接到 mongodb-01您应该能够列出正在运行的容器并成功执行命令:

$ docker exec -it klt-mongodb-01-xyz mongo -u root -p
$ rep:PRIMARY> rs.status()
{
        "set" : "rep",
        "date" : ISODate("2020-07-22T13:40:15.172Z"),
        ...
        "members" : [
                {
                        "_id" : 0,
                        "name" : "10.XXX.0.29:27017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        ...
                },
                {
                        "_id" : 1,
                        "name" : "10.XXX.0.34:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        ...
                 }

注意:您也可以使用docker logs <container-name> 进一步调查是否存在任何问题。

【讨论】:

    猜你喜欢
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 2018-05-01
    • 2014-01-23
    相关资源
    最近更新 更多