Skip to content

MongoDB BI Connector 参考指南

1. 概述

2. 安装

  • 系统: 本文档基于 Centos 7.x 安装
  • mongodb bi connector 版本: mongodb-bi-linux-x86_64-rhel70-v2.14.2.tgz

2.1 安装要求

安装 mongodb bi connector 需要系统已经安装了 openssl,如未安装,可以使用 yum 命令安装

bash
yum -y install openssl

2.2 安装

安装 mongodb,非常简单,执行下面的命令,解压即可:

bash
tar -xzvf mongodb-bi-linux-x86_64-rhel70-v2.14.2.tgz

2.3 配置

mongosqld 的配置文件使用了 yaml 格式,大部分参数也有对应的命令行参数。

2.3.1 日志参数

yml
systemLog:
  logAppend: <boolean>
  logRotate: "rename" 或 "reopen"
  path: <string>
  quiet: <boolean>
  verbosity: <integer>

参数说明:

参数类型默认值对应的命令行参数说明
systemLog.logAppendboolean--logAppend输出日志到systemLog.path指定的日志文件, 且必须设置systemLog.logRotate
systemLog.pathstringrename--logRotate指定日志该怎样 rotate, 有两个选项:
rename : 关闭已有的文件,并重命名,在文件名后面追加一个RFC3339格式的时间戳。同时生成一个新的日志文件。
reopen : 关闭文件后后再打开。
systemLog.pathstring--logPath指定存储输出日志的文件
systemLog.quietboolean--quiet隐藏所有的日志输出
systemLog.verbosityinteger--verbose / -v设置该选项,会输出更详细的日志

2.3.2 schema 参数

yml
schema:
  path: <string>
  maxVarcharLength: <integer>

参数说明:

参数类型默认值对应的命令行参数说明
schema.pathstring--schema指定 schema 文件或目录
schema.maxVarcharLengthinteger--maxVarcharLength指定 varchar 字段的最大字符长度,如果超出长度,会截取到指定的长度,并打印一条警告日志

2.3.2 数据样例参数

yml
schema:
  sample:
    size: <integer>
    prejoin: <boolean>
    namespaces: <array of strings>
    uuidSubtype3Encoding: <[old|csharp|java]>
  stored:
    mode: <[custom|auto]>
    source: <string>
    name: <db-name>
  refreshIntervalSecs: <integer>

参数说明:

参数类型默认值对应的命令行参数说明
schema.stored.modeintegercustom--schemaMode配置 mongosqld 的样例模型,必须与schema.stored.source一起使用,有两个选项:
custom : mongosqld 从 MongoDB 数据库中读取以存储的 schema
auto : mongosqld 对 schema 进行取样,并写到 MongoDB 数据库
schema.stored.sourcestring--schemaSource指定存储 schema 信息的数据库
schema.stored.namestringdefaultSchema--schemaName用于读写的 schema 名称
schema.sample.sizeinteger1000--sampleSize收集 schema 信息时,每个数据库取样的文档数量
schema.sample.prejoinboolean--prejoinschema 选项,用于将数组和非数组数据组合到单个表中
schema.sample.namespacesstring 或者 string array--sampleNamespaces指定数据库和集合,用于包含或排除创建 schema 的数据抽样过程
schema.sample.uuidSubtype3Encodingstring--uuidSubtype3Encoding / -b指定用于生成 UUID 二进制子类型的编码,包含:
old : 旧 BSON 二进制子类型表示
csharp : C#或.NET 遗留 UUID 表示
java : Java 旧版 UUID 表示
schema.refreshIntervalSecsinteger0--schemaRefreshIntervalSecsmongosqld 重新取样创建 schema 的间隔秒数,默认为0,表示连接期间,初始化时取样后,不再取样。值必须是正整数

2.3.3 Runtime 参数

yml
runtime:
  memory:
    maxPerStage: <integer>
    maxPerServer: <integer>
    maxPerConnection: <integer>

参数说明:

参数类型默认值对应的命令行参数说明
runtime.memory.maxPerStageinteger指定查询执行阶段可以使用的最大内存(单位: Byte)
runtime.memory.maxPerServerinteger指定 mongosqld 进程可以使用的最大内存(单位: Byte)
runtime.memory.maxPerConnectioninteger指定 mongosqld 客户端连接可以使用的最大内存(单位: Byte)

2.3.4 网络参数

yml
net:
  bindIp: <string>
  port: <integer>
  unixDomainSocket:
    enabled: <boolean>
    pathPrefix: <string>
    filePermissions: <string>
  ssl:
    mode: <string>
    allowInvalidCertificates: <boolean>
    PEMKeyFile: <string>
    PEMKeyPassword: <string>
    CAFile: <string>
    minimumTLSVersion: <string>

参数说明:

参数类型默认值对应的命令行参数说明
net.bindIpstring127.0.0.1--addr 的主机部分指定监听的主机地址,多个地址以","分隔
net.portinteger3307--addr 的端口部分指定监听的端口
net.unixDomainSocket.enabledbooleantrue : 表示监听 unix 域套接字
false表示禁用监听域套接字,等同于命令行参数--noUnixSocket
net.unixDomainSocket.pathPrefixstring/tmp--unixSocketPrefix指定 mongosqld Unix 域套接字的目录,mongosqld 会在该路径下创建一个 mysql.sock 套接字,如果未指定,则会创建 /tmp/mysql.sock 套接字
net.unixDomainSocket.filePermissionsstring448--filePermissions指定 Unix 域套接字文件的权限
net.ssl.allowInvalidCertificatesboolean--sslAllowInvalidCertificates允许 MySQL 客户端提供无效的客户端 TLS/SSL 证书
net.ssl.modestringdisabled--sslMode启用或者禁用 TLS/SSL 连接 mongosqld。包括以下3个选项:
disabled : mongosqld 不接受使用 TLS/SSL 保护的连接
allowSSL : mongosqld 接受使用 TLS/SSL 保护的连接(意味着也接收不使用 TLS/SSL 的连接)
requireSSL : mongosqld接受使用 TLS/SSL 保护的连接
net.ssl.PEMKeyFilestring--sslPEMKeyFile指定包含了 TLS/SSL 证书和 MySQL 客户端 key 的.pem文件,可以使用相对或者绝对路径指定
net.ssl.PEMKeyPasswordstring--sslPEMKeyPassword指定密码,用于解密net.ssl.PEMKeyFile指定的私钥
net.ssl.CAFilestring--sslCAFile指定 mongosqld .pem文件,该文件包含了证书颁发机构的根证书链。可以使用相对路径或绝对路径指定
net.ssl.minimumTLSVersionstringTLS1_1--minimumTLSVersion指定 TLS 的最小版本,有3个选项: TLS1_0TLS1_1TLS1_2

2.3.5 安全参数

yml
security:
  enabled: <boolean>
  defaultMechanism: <string>
  defaultSource: <string>
  gssapi:
    hostname: <string>
    serviceName: <string>

参数说明:

参数类型默认值对应的命令行参数说明
security.enabledboolean--auth要求对客户端请求进行认证
security.defaultMechanismstringSCRAM-SHA-1--defaultAuthMechanism指定默认的认证机制,包括 SCRAM-SHA-1SCRAM-SHA-256PLAINGSSAPI
security.defaultSourcestringadmin--defaultAuthSource指定 MongoDB 认证的默认 source
security.gssapi.hostnamestringnet.bindIp指定的第一个 IP--gssapiHostname配置 Kerberos 认证的 FQDN
security.gssapi.serviceNamestringmongosql--gssapiServiceName使用 Kerberos 注册的服务名
security.gssapi.constrainedDelegationstringFalse--gssapiConstrainedDelegation使用代理 credential 进行 Kerberos 授权,启用 constrained delegation

2.3.6 MongoDB 主机参数

yml
mongodb:
  versionCompatibility: <string>
  net:
    uri: <string>
    ssl:
      enabled: <boolean>
      allowInvalidCertificates: <boolean>
      allowInvalidHostnames: <boolean>
      PEMKeyFile: <string>
      PEMKeyPassword: <string>
      CAFile: <string>
      CRLFile: <string>
      FIPSMode: <boolean>
    auth:
      username: <username>
      password: <password>
      source: <auth-db-name>
      mechanism: <auth-mechanism>
      gssapiServiceName: <service>

参数说明:

参数类型默认值对应的命令行参数说明
mongodb.versionCompatibilitystring--mongo-versionCompatibility根据给定的 MongoDB 的版本,限制 mongosqld 所能提供的功能。只有当副本集和各个成员使用了不同的版本,或者滚动升级 MongoDB 时才有必要
mongodb.net.uristringmongodb://localhost:27017--mongo-uri指定 MongoDB 的连接字符串
mongodb.net.ssl.enabledbooleanFalse表示是否使用 TLS/SSL 连接 MongoDB 实例
mongodb.net.ssl.allowInvalidCertificatesboolea--mongo-sslAllowInvalidCertificates允许 MongoDB 提供无效的 TLS/SSL 证书
mongodb.net.ssl.allowInvalidHostnamesboolean--mongo-sslAllowInvalidHostnames允许 mongosqld 使用不同于 TLS/SSL 证书中的 hostname 连接 MongoDB
mongodb.net.ssl.PEMKeyFilestring--mongo-sslPEMKeyFile指定包含了 TLS/SSL 证书和 mongosqld 连接 MongoDB 时的 key 的.pem文件。可以使用相对路径和绝对路径
mongodb.net.ssl.PEMKeyPasswordstring--mongo-sslPEMKeyPassword指定包含连接 MongoDB 的证书和私钥的文件路径
mongodb.net.ssl.CAFilestring--mongo-sslCAFile指定 MongoDB 的.pem文件,该文件包含了证书颁发机构的根证书链。可以使用相对路径或绝对路径指定
mongodb.net.ssl.CRLFilestring--mongo-sslCRLFile指定包含了废除证书列表的 MongoDB.pem文件
mongodb.net.ssl.FIPSModeboolean--mongo-sslFIPSMode在安装的 OpenSSL 库中启用 FIPS 模式
mongodb.net.ssl.minimumTLSVersionstring--mongo-minimumTLSVersion指定 TLS 的最小版本,有3个选项: TLS1_0TLS1_1TLS1_2
mongodb.net.auth.usernamestring--mongo-username / -u指定用户名,用于发现模式,只有在启用了--auth 的情况下才需要。必须是有效的 MongoDB 用户,且具有listDatabases权限
mongodb.net.auth.passwordstring--mongo-password / -p指定用户密码
mongodb.net.auth.sourcestringadmin--mongo-authenticationSource指定用于认证的数据库
mongodb.net.auth.mechanismstringSCRAM-SHA-1--mongo-authenticationMechanism指定认证机制,包括 SCRAM-SHA-1SCRAM-SHA-256PLAINGSSAPI
mongodb.net.auth.gssapiServiceNamestringmongodb--mongo-gssapiServiceName设置 Kerberos SPN,用于 Kerberos 认证

2.3.7 进程管理参数

yml
processManagement:
  service:
    name: <string>
    displayName: <string>
    description: <string>

参数说明:

参数类型默认值对应的命令行参数说明
processManagement.service.namestring--serviceName运行 mongosqld 的系统服务名
processManagement.service.displayNamestring--serviceDisplayName运行 mongosqld 的系统服务的显示名称
processManagement.service.descriptionstring--serviceDescription运行 mongosqld 的系统服务的描述

2.4 配置文件示例

下面是一个配置文件的样例:

yml
systemLog:
  logAppend: false
  path: "/var/log/mongosqld/mongosqld.log"
  verbosity: 2

security:
  enabled: true

mongodb:
  net:
    uri: "mongo.example.com:27017"
    auth:
      username: "root"
      password: "changeme"

net:
  bindIp: 192.0.2.14
  port: 3307
  ssl:
    mode: "allowSSL"
    PEMKeyFile: "/vagrant/certificates/mongosqld-server.pem"
    CAFile: "/vagrant/certificates/ca.crt"

schema:
  sample:
    namespaces: "inventory.*"

processManagement:
  service:
    name: mongosqld
    displayName: mongosqld
    description: "BI Connector SQL proxy server"

3. 启动

  1. 使用命令行参数的方式启动
bash
bin/mongosqld --mongo-uri "mongodb://127.0.0.1:27017" --auth  -u root -p 123456 --addr "0.0.0.0:3307"
  1. 使用配置文件的方式启动
bash
bin/mongosqld --config <pathToConfigFile>/mongosqld.conf

4. 容器化

4.1 制作镜像

  1. 编写 dockerfile
dockerfile
FROM ubuntu:xenial

COPY mongo* /usr/local/bin/

RUN apt-get update \
 && apt-get install -y --no-install-recommends ca-certificates numactl procps gnupg dirmngr gnupg-curl \
 && apt-get install -y rsyslog \
 && service rsyslog start

EXPOSE 3307

ENTRYPOINT ["mongosqld"]
  1. 编写 build.sh 脚本
bash
#! /bin/sh

cd $(dirname $0)


set -ex

DOCKER_FILE=mongodb-bi.Dockerfile

IMAGE_NAME=mongodb-bi-connector
IMAGE_VERSION=2.14.2


MONGODB_BI="mongodb-bi-linux-x86_64-ubuntu1604-v${IMAGE_VERSION}"
MONGODB_BI_URL="https://info-mongodb-com.s3.amazonaws.com/mongodb-bi/v2/${MONGODB_BI}.tgz"

wget -N ${MONGODB_BI_URL}

tar -xzvf ${MONGODB_BI}.tgz

docker build -f $DOCKER_FILE -t ${IMAGE_NAME}:${IMAGE_VERSION} ${MONGODB_BI}/bin/
  1. 创建镜像 执行如下命令
bash
sh build.sh

4.2 启动

假设已经安装了一个 mongodb,其安装信息如下

配置
地址192.16.1.10
端口27017
用户名mongodb
密码mongodb

则启动命令如下

bash
docker run --name mongodb-bi -i -t -p 3307:3307 -d  mongodb-bi-connector:2.l4.2 --mongo-uri "mongodb://192.168.1.10:27017" --auth -u mongodb -p mongodb --addr "0.0.0.0:3307"

附录

官方网站

https://docs.mongodb.com/bi-connector/current/local-quickstart/

衡石分析平台使用手册