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.logAppend | boolean | --logAppend | 输出日志到systemLog.path 指定的日志文件, 且必须设置systemLog.logRotate | |
systemLog.path | string | rename | --logRotate | 指定日志该怎样 rotate, 有两个选项: rename : 关闭已有的文件,并重命名,在文件名后面追加一个RFC3339格式的时间戳。同时生成一个新的日志文件。 reopen : 关闭文件后后再打开。 |
systemLog.path | string | --logPath | 指定存储输出日志的文件 | |
systemLog.quiet | boolean | --quiet | 隐藏所有的日志输出 | |
systemLog.verbosity | integer | --verbose / -v | 设置该选项,会输出更详细的日志 |
2.3.2 schema 参数
yml
schema:
path: <string>
maxVarcharLength: <integer>
参数说明:
参数 | 类型 | 默认值 | 对应的命令行参数 | 说明 |
---|---|---|---|---|
schema.path | string | --schema | 指定 schema 文件或目录 | |
schema.maxVarcharLength | integer | --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.mode | integer | custom | --schemaMode | 配置 mongosqld 的样例模型,必须与schema.stored.source 一起使用,有两个选项: custom : mongosqld 从 MongoDB 数据库中读取以存储的 schema auto : mongosqld 对 schema 进行取样,并写到 MongoDB 数据库 |
schema.stored.source | string | --schemaSource | 指定存储 schema 信息的数据库 | |
schema.stored.name | string | defaultSchema | --schemaName | 用于读写的 schema 名称 |
schema.sample.size | integer | 1000 | --sampleSize | 收集 schema 信息时,每个数据库取样的文档数量 |
schema.sample.prejoin | boolean | --prejoin | schema 选项,用于将数组和非数组数据组合到单个表中 | |
schema.sample.namespaces | string 或者 string array | --sampleNamespaces | 指定数据库和集合,用于包含或排除创建 schema 的数据抽样过程 | |
schema.sample.uuidSubtype3Encoding | string | --uuidSubtype3Encoding / -b | 指定用于生成 UUID 二进制子类型的编码,包含: old : 旧 BSON 二进制子类型表示 csharp : C#或.NET 遗留 UUID 表示 java : Java 旧版 UUID 表示 | |
schema.refreshIntervalSecs | integer | 0 | --schemaRefreshIntervalSecs | mongosqld 重新取样创建 schema 的间隔秒数,默认为0,表示连接期间,初始化时取样后,不再取样。值必须是正整数 |
2.3.3 Runtime 参数
yml
runtime:
memory:
maxPerStage: <integer>
maxPerServer: <integer>
maxPerConnection: <integer>
参数说明:
参数 | 类型 | 默认值 | 对应的命令行参数 | 说明 |
---|---|---|---|---|
runtime.memory.maxPerStage | integer | 指定查询执行阶段可以使用的最大内存(单位: Byte) | ||
runtime.memory.maxPerServer | integer | 指定 mongosqld 进程可以使用的最大内存(单位: Byte) | ||
runtime.memory.maxPerConnection | integer | 指定 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.bindIp | string | 127.0.0.1 | --addr 的主机部分 | 指定监听的主机地址,多个地址以","分隔 |
net.port | integer | 3307 | --addr 的端口部分 | 指定监听的端口 |
net.unixDomainSocket.enabled | boolean | true : 表示监听 unix 域套接字 false 表示禁用监听域套接字,等同于命令行参数--noUnixSocket | ||
net.unixDomainSocket.pathPrefix | string | /tmp | --unixSocketPrefix | 指定 mongosqld Unix 域套接字的目录,mongosqld 会在该路径下创建一个 mysql.sock 套接字,如果未指定,则会创建 /tmp/mysql.sock 套接字 |
net.unixDomainSocket.filePermissions | string | 448 | --filePermissions | 指定 Unix 域套接字文件的权限 |
net.ssl.allowInvalidCertificates | boolean | --sslAllowInvalidCertificates | 允许 MySQL 客户端提供无效的客户端 TLS/SSL 证书 | |
net.ssl.mode | string | disabled | --sslMode | 启用或者禁用 TLS/SSL 连接 mongosqld。包括以下3个选项: disabled : mongosqld 不接受使用 TLS/SSL 保护的连接 allowSSL : mongosqld 接受使用 TLS/SSL 保护的连接(意味着也接收不使用 TLS/SSL 的连接) requireSSL : mongosqld只接受使用 TLS/SSL 保护的连接 |
net.ssl.PEMKeyFile | string | --sslPEMKeyFile | 指定包含了 TLS/SSL 证书和 MySQL 客户端 key 的.pem 文件,可以使用相对或者绝对路径指定 | |
net.ssl.PEMKeyPassword | string | --sslPEMKeyPassword | 指定密码,用于解密net.ssl.PEMKeyFile 指定的私钥 | |
net.ssl.CAFile | string | --sslCAFile | 指定 mongosqld .pem 文件,该文件包含了证书颁发机构的根证书链。可以使用相对路径或绝对路径指定 | |
net.ssl.minimumTLSVersion | string | TLS1_1 | --minimumTLSVersion | 指定 TLS 的最小版本,有3个选项: TLS1_0、TLS1_1、TLS1_2 |
2.3.5 安全参数
yml
security:
enabled: <boolean>
defaultMechanism: <string>
defaultSource: <string>
gssapi:
hostname: <string>
serviceName: <string>
参数说明:
参数 | 类型 | 默认值 | 对应的命令行参数 | 说明 |
---|---|---|---|---|
security.enabled | boolean | --auth | 要求对客户端请求进行认证 | |
security.defaultMechanism | string | SCRAM-SHA-1 | --defaultAuthMechanism | 指定默认的认证机制,包括 SCRAM-SHA-1、SCRAM-SHA-256、PLAIN、GSSAPI |
security.defaultSource | string | admin | --defaultAuthSource | 指定 MongoDB 认证的默认 source |
security.gssapi.hostname | string | net.bindIp 指定的第一个 IP | --gssapiHostname | 配置 Kerberos 认证的 FQDN |
security.gssapi.serviceName | string | mongosql | --gssapiServiceName | 使用 Kerberos 注册的服务名 |
security.gssapi.constrainedDelegation | string | False | --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.versionCompatibility | string | --mongo-versionCompatibility | 根据给定的 MongoDB 的版本,限制 mongosqld 所能提供的功能。只有当副本集和各个成员使用了不同的版本,或者滚动升级 MongoDB 时才有必要 | |
mongodb.net.uri | string | mongodb://localhost:27017 | --mongo-uri | 指定 MongoDB 的连接字符串 |
mongodb.net.ssl.enabled | boolean | False | 表示是否使用 TLS/SSL 连接 MongoDB 实例 | |
mongodb.net.ssl.allowInvalidCertificates | boolea | --mongo-sslAllowInvalidCertificates | 允许 MongoDB 提供无效的 TLS/SSL 证书 | |
mongodb.net.ssl.allowInvalidHostnames | boolean | --mongo-sslAllowInvalidHostnames | 允许 mongosqld 使用不同于 TLS/SSL 证书中的 hostname 连接 MongoDB | |
mongodb.net.ssl.PEMKeyFile | string | --mongo-sslPEMKeyFile | 指定包含了 TLS/SSL 证书和 mongosqld 连接 MongoDB 时的 key 的.pem 文件。可以使用相对路径和绝对路径 | |
mongodb.net.ssl.PEMKeyPassword | string | --mongo-sslPEMKeyPassword | 指定包含连接 MongoDB 的证书和私钥的文件路径 | |
mongodb.net.ssl.CAFile | string | --mongo-sslCAFile | 指定 MongoDB 的.pem 文件,该文件包含了证书颁发机构的根证书链。可以使用相对路径或绝对路径指定 | |
mongodb.net.ssl.CRLFile | string | --mongo-sslCRLFile | 指定包含了废除证书列表的 MongoDB.pem 文件 | |
mongodb.net.ssl.FIPSMode | boolean | --mongo-sslFIPSMode | 在安装的 OpenSSL 库中启用 FIPS 模式 | |
mongodb.net.ssl.minimumTLSVersion | string | --mongo-minimumTLSVersion | 指定 TLS 的最小版本,有3个选项: TLS1_0、TLS1_1、TLS1_2 | |
mongodb.net.auth.username | string | --mongo-username / -u | 指定用户名,用于发现模式,只有在启用了--auth 的情况下才需要。必须是有效的 MongoDB 用户,且具有listDatabases 权限 | |
mongodb.net.auth.password | string | --mongo-password / -p | 指定用户密码 | |
mongodb.net.auth.source | string | admin | --mongo-authenticationSource | 指定用于认证的数据库 |
mongodb.net.auth.mechanism | string | SCRAM-SHA-1 | --mongo-authenticationMechanism | 指定认证机制,包括 SCRAM-SHA-1、SCRAM-SHA-256、PLAIN、GSSAPI |
mongodb.net.auth.gssapiServiceName | string | mongodb | --mongo-gssapiServiceName | 设置 Kerberos SPN,用于 Kerberos 认证 |
2.3.7 进程管理参数
yml
processManagement:
service:
name: <string>
displayName: <string>
description: <string>
参数说明:
参数 | 类型 | 默认值 | 对应的命令行参数 | 说明 |
---|---|---|---|---|
processManagement.service.name | string | --serviceName | 运行 mongosqld 的系统服务名 | |
processManagement.service.displayName | string | --serviceDisplayName | 运行 mongosqld 的系统服务的显示名称 | |
processManagement.service.description | string | --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. 启动
- 使用命令行参数的方式启动
bash
bin/mongosqld --mongo-uri "mongodb://127.0.0.1:27017" --auth -u root -p 123456 --addr "0.0.0.0:3307"
- 使用配置文件的方式启动
bash
bin/mongosqld --config <pathToConfigFile>/mongosqld.conf
4. 容器化
4.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"]
- 编写 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/
- 创建镜像 执行如下命令
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/