Logo
配置文件

配置文件 #

集群生态工具配置文件列表 #

SphereEx-Boot

配置文件名位置说明
cluster-template.yaml当前操作目录Boot 安装集群
console_install.yaml当前操作目录Boot 安装 Console 配置文件

SphereEx-Console

配置文件名位置说明
application.ymlconf 目录软件运行内部文件,内的内容不建议修改
application-prod.ymlconf 目录运行参数文件,可以修改
  • application.yml 配置说明
#profiles
spring:
  profiles:
    active: prod # 固定值不可以修改
  servlet:
    multipart:
      enabled: true # 不可以修改
      max-file-size: 10MB # 单个文件最大大小
      max-request-size: 10MB # 单个请求文件总数大小

# mybatis-plus 配置不可以修改
mybatis-plus:
  mapper-locations: classpath:com/sphereex/console/mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
  global-config:
    db-config:
      logic-delete-field: deleted
      logic-delete-value: 1
      logic-not-delete-value: 0
      id-type: auto
      where-strategy: not_empty

# url 白名单不可以修改
secure:
  ignored:
    urls[0]: /
    urls[1]: /**/*.js
    urls[2]: /**/*.css
    urls[3]: /**/*.png
    urls[4]: /**/*.ico
    urls[5]: /**/*.html
    urls[6]: /error
    urls[7]: /static/**
    urls[8]: /api/login
    urls[9]: /api/logout
    urls[10]: /api/**/download
    urls[11]: /api/user/reset
    urls[12]: /api/monitor/config/reset

# zookeeper 默认配置 不可修改
sphereex:
  install:
    zookeeper:
      tick-time: 2000
      init-limit: 10
      sync-limit: 9
      communication-port: 2888
      election-port: 3888

# 线程池配置 不可修改
command:
  thread:
    pool:
      queue-capacity: 100 # 队列长度
      core-pool-size: 4 # 核心线程数
      max-pool-size: 8 # 最大线程数
      keep-alive-seconds: 600 # 空闲线程存活时间
  • application-prod.yml 配置说明
server:
  port: 8088 # 启动端口 可修改

software:
  home: /opt/software # 软件安装包目录 可修改

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/console?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true # 数据库连接地址 可修改
    username: root # 数据库用户 可修改
    password: 123456 # 数据库密码 可修改
    driverClassName: com.mysql.jdbc.Driver #数据库驱动固定值 不可修改

jwt:
  header: token # token 属性名称 不可修改
  secret: your_secret # token 签名秘钥(字符串) 可修改
  expiration: 30000000000 # token 过期时间毫秒 可修改

# console 连接 engine 线程池配置 不建议修改
sphereex:
  proxy:
    datasource:
      hikari:
        maximum-pool-size: 4 # 连接池中可以保留连接的最大数量
        connection-timeout: 3000 # 从连接池获取连接时最大等待时间, 单位毫秒
        minimum-idle: 2 # 最小空闲连接数量
        idle-timeout: 500000 # 连接可以在池中的最大闲置时间, 单位毫秒,
        max-lifetime: 540000 # 连接最大存活时间, 单位毫秒
  • cluster-template.yaml
通过 SphereEx-Boot 部署集群时,需要提供一份 yaml 格式的集群拓扑配置文件,配置数据如下。
cluster_name: 集群名字
install_user: 登录部署机用户名
install_password: 登录部署机用户密码
proxy: ShardingSphere-Proxy 配置
version: ShardingSphere-Proxy 版本标识
file: 主控机 ShardingSphere-Proxy 安装包文件路径
conf_dir:主控机 ShardingSphere-Proxy 业务配置文件目录
depend_files:主控机 ShardingSphere-Proxy 驱动 jar 包文件路径
install_dir:部署机 ShardingSphere-Proxy 部署目录
port:部署机 ShardingSphere-Proxy 启动端口
overwrite:如果部署机安装目录已经存在,是否重新安装。默认 true
servers: 部署机信息列表
host:部署机 IP 地址
port:部署机 ShardingSphere-Proxy 启动端口。(非必要,不配置时以 proxy 中配置为准)
install_dir:部署机 ShardingSphere-Proxy 安装目录(非必要,不配置时以 proxy 中配置为准)
agent_conf_file:主控机 ShardingSphere-Proxy  agent 配置文件路径(非必要,不配置时以 proxy 中配置为准)
overwrite:如果部署机安装目录已经存在,是否重新安装,默认 true(非必要,不配置时以 proxy 中配置为准)
zookeeperZooKeeper 配置 (如果不需要 ZooKeeper 时可以不配置)
versionZooKeeper 版本标识
file:主控机 ZooKeeper 安装文件路径
conf_file:主控机 ZooKeeper zoo.cfg 配置文件路径
install_dir:部署机 Zookeeper 安装目录
data_dir:部署机 ZooKeeper 配置文件 zoo.cfg  dataDir 配置值
port:部署机 ZooKeeper 启动端口
overwrite:如果部署机安装目录已经存在,是否重新安装,默认 true
serversZooKeeper 部署机列表
host:部署机 IP 地址
myidZooKeeper 集群 myid 
port:部署机 ZooKeeper 启动端口(非必要,不配置时以 ZooKeeper 中配置为准)
install_dir:部署机 ZooKeeper 安装目录(非必要,不配置时以 ZooKeeper 中配置为准)
conf_file:主控机 Zookeeper zoo.cfg 配置文件路径(非必要,不配置时以 ZooKeeper 中配置为准)
data_dir:部署机 ZooKeeper 配置文件 zoo.cfg  dataDir 配置值(非必要,不配置时以 ZooKeeper 中配置为准)
overwrite:如果部署机安装目录已经存在,是否重新安装,默认 true(非必要,不配置时以 ZooKeeper 中配置为准)

集群组件配置文件列表 #

组件类型组件名称配置文件名位置说明
存储节点不做管理
治理中心Zookeeperzoo.cfgzookeeper安装目录/confSphereEx-Console 安装日志中心的配置文件
监控中心Prometheusprometheus.yml安装目录SphereEx-Console 安装监控中心的配置文件
监控插件mysql_exportermysql_exporter_conf.cnf安装目录SphereEx-Console 安装My SQL 监控插件配置文件
Zookeeper_exporterzoo.cfgzookeeper的安装目录/confSphereEx-Console 安装 Zookeeper 监控插件配置文件
日志中心Elasticsearchelasticsearch.yml安装目录/configSphereEx-Console 安装日志中心的配置文件
Logstashlogstash.confz安装目录/configSphereEx-Console 安装日志中心的配置文件
日志插件Filebeatfilebeat.yml安装目录/configSphereEx-Console 安装计算节点日志插件配置文件
  • zoo.cfg
tickTime={{zoo_tick_time}}
initLimit={{zoo_init_limit}}
syncLimit={{zoo_sync_limit}}
dataLogDir={{zoo_data_dir}}  # 数据日志路径
dataDir={{zoo_data_dir}}  # 数据路径
clientPort={{zoo_client_port}}
autopurge.snapRetainCount=500
autopurge.purgeInterval=24
4lw.commands.whitelist=*  # 允许命令
admin.enableServer=false
{{zoo_server}}   # server.1=192.168.1.148:2888:3888 集群其他服务
  • prometheus.yml
global:
  scrape_interval:     15s
  evaluation_interval: 15s
scrape_configs:
- job_name: prometheus  # 自身监控  后续添加修改监控 也只会修改这个字段下的配置
  static_configs:
  - targets:
    - 10.211.55.3:9090
  • mysql_exporter
"[client]
host={host}  # 监控数据库host
port={port}  # 监控数据库port
user={user}  # 监控数据库user
password={password}"  # 监控数据库password

Zookeeper_exporter zoo.cfg

4lw.commands.whitelist=*  # 如果目标文件内没有开启允许监控会添加 已有不会添加
  • Elasticsearch.yml
"cluster.name" # 集群名
"node.name"# 节点名
"node.master" # 主节点
"node.data" # 数据节点
"network.host"  # host
"http.port"  # 监听端口
"transport.tcp.port"  # 集群通信端口
"discovery.seed_hosts"  # 集群通信列表
"path.data"  # 数据目录
"path.logs"  # 日志目录
  • logstash.conf
input {
  beats {
    host => "{{input_host}}"  # filebeat的host
    port => {{input_port}}  # filebeat的port
  } 
}

filter {
    if [log_type] == "general" {
        if [message] =~ "GENERAL-QUERY"  {
            grok {
                match => {
                    "message" => "^\[(?<log_level>.+)\]\s(?<timestamp>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3})\s\[(?<thread>.+)\]\s?(?<logger>.+)\s-\sdb:\s(?<db>.+)\suser:\s(?<user>.+)\shost:\s(?<host>.+)\squery_time:\s(?<query_time>\d+)\ssql_type:\s(?<sql_type>.+)\n(?<sql>(.|\r|\n)*)"
                }
            }
            mutate { convert => {"query_time" => "integer" } }
        } else  {
            grok {
                match => {
                    "message" => "^\[(?<log_level>.+)\]\s(?<timestamp>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3})\s\[(?<thread>.+)\]\s(?<logger>.+)\s-\s(?<msg>.*)"
                }
            }
        }
        date { match => ["timestamp","yyyy-MM-dd HH:mm:ss.SSS"] timezone => "Asia/Shanghai" target => "@timestamp"}
        mutate {
            add_field => { "[@metadata][log_type]" => "general" }
            remove_field => ["@version", "tags","log_type"]
            strip => ["log_lelev"]
            convert => {"query_time" => "integer"}
        }
    } else if [log_type] == "slow" {
         grok {
            match => { "message" => "^timestamp:\s(?<timestamp>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3})\sdb:\s(?<db>.+)\suser:\s(?<user>.+)\shost:\s(?<host>.+)\squery_time:\s(?<query_time>\d+)\ssql_type:\s(?<sql_type>.+)\n(?<sql>(.|\r|\n)*)" }
         }
         date { match => ["timestamp","yyyy-MM-dd HH:mm:ss.SSS"] timezone => "Asia/Shanghai" target => "@timestamp"}
         mutate {
            add_field => { "[@metadata][log_type]" => "slow" }
            remove_field => ["@version", "tags","log_type"]
            convert => {"query_time" => "integer"}
         }
    } else {
       drop { }
    }
}

output {
    elasticsearch {
        hosts => {{output}}  # elasticsearch host
        index => "cluster-%{[@metadata][log_type]}@%{cluster_id}-%{+YYYY.MM.dd}"
  }
}
  • filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - {{general_log_path}}  # 运行日志路径
  multiline.pattern: '^\['
  multiline.negate: true
  multiline.match: after
  fields_under_root: true
  fields:
    cluster_id: {{cluster_id}}  # 集群id 
    cluster_name: {{cluster_name}}  # 集群名
    node_id: {{node_id}}  # 节点id 
    node_name: {{node_name}}  # 节点名
    log_type: general #  general slow
- type: log
  enabled: true
  paths:
    - {{slow_log_path}}  # 慢日志路径
  multiline.pattern: '^timestamp:'
  multiline.negate: true
  multiline.match: after
  fields_under_root: true
  fields:
    cluster_id: {{cluster_id}}  # 集群id
    cluster_name: {{cluster_name}}  # 集群名
    node_id: {{node_id}}  # 节点id
    node_name: {{node_name}}  # 节点名
    log_type: slow #  general slow

output.logstash:
  hosts: ["{{output_host}}"]  # logstash的host port

processors:
- drop_fields:
   fields: ["log","host","input","agent","ecs"]

集群配置文件列表 #

集群配置文件即计算节点的配置文件。

yaml 支持大于 3M。

配置文件名位置说明
global.yamlconf 目录初始化参数文件
logback.xmlconf 目录日志参数配置文件
agent.yamlconf 目录计算节点的 agent 参数文件
start.shbin 目录启动参数运行时配置的配置文件

global.yaml 配置说明

  • 权限

用于配置登录计算节点的初始用户,和存储节点数据授权。

配置项说明

authority:
  users:
    - user: # 用于登录计算节点的用户名和授权主机,格式:<username>@<hostname>,hostname 为 % 或空字符串表示不限制授权主机password: # 用户密码privilege:
    type: # 权限提供者类型,缺省值为 ALL_PERMITTED

配置示例

authority:
  users:
    - user: root@localhost
      password: root
    - user: my_user
      password: pwd
  privilege:
    type: ALL_PERMITTED

以上配置表示:

  • 用户 root,仅可从 localhost 连接 Proxy,密码为 root

  • 用户 my_user,可以从任意主机连接 Proxy,密码为 pwd

  • privilege 类型为 ALL_PERMITTED,表示对用户授予所有权限,不鉴权。

DATABASE_PERMITTED

authority:
  users:
    - user: root@localhost
      password: root
    - user: my_user
      password: pwd
  privilege:
    type: DATABASE_PERMITTED
    props:
      user-database-mappings: root@localhost=sharding_db, root@localhost=test_db, my_user@=sharding_db

以上配置表示:

  • privilege 类型为 DATABASE_PERMITTED,表示对用户授予库级别权限,需要配置;

  • 用户 root 仅可从 localhost 主机连接,可访问 sharding_dbtest_db

  • 用户 my_user 可从任意主机连接,可访问 sharding_db

  • 登录认证

密码认证

DBPlusEngine-Proxy 默认使用密码认证方式,配置格式如下:

authority:
  users:
    - user: root@root
      password: root
    - user: sharding
      password: sharding

该配置中为 DBPlusEngine 指定了两个用户:

  • root: @% 表示该用户可以通过任意 host 访问 DBPlusEngine,password 指定了密码为 root。

  • sharding: 该用户没有指定 host 配置,默认值同样为 @%,password 指定了密码为 sharding。

当管理员需要限制特定用户的登录主机时,可以通过 username@host 这样的方式来指定,如:

- user: user1@192.168.1.111password: user1_password

表示 user1 用户只能通过 192.168.1.111 这个地址访问 DBPlusEngine,认证密码是 user1_password

LDAP 认证

说明:

  • 在启用 LDAP 认证之前,用户应先行部署 LDAP 服务器,如 OpenLDAP

  • 当使用 MySQL 客户端时,需显示开启 cleartext-plugin,如: mysql -h 127.0.0.1 -P 3307 -u root -p –enable-cleartext-plugin

在 DBPlusEngine 中配置 LDAP 的方式如下:

示例 1

每个用户都需要经过 LDAP 认证,且使用相同的 DN 模板。

authority:
  users:
    - user: root@%
    - user: sharding
  authenticators:
    auth_ldap:
      type: LDAP
      props:
        ldap_server_url: ldap://localhost:389ldap_dn_template: cn={0},ou=users,dc=example,dc=org
  defaultAuthenticator: auth_ldap

该配置指定了一个身份认证器 auth_ldap,它的类型为 LDAP,props 中给出了必要的配置:

  • ldap_server_url: LDAP 服务器的访问地址

  • ldap_dn_template:用户 DN 模板

在使用以上配置时,用户 rootsharding 对应的用户 DN 分别是:

  • root:cn=root,ou=users,dc=example,dc=org

  • sharding:cn=sharding,ou=users,dc=example,dc=org

示例2

每个用户都需要经过 LDAP 认证,但使用不同的 DN 模板。

authority:
  users:
    - user: root@%
      props:
        ldap_dn: cn=root,ou=admin,dc=example,dc=org
    - user: sharding
  authenticators:
    auth_ldap:
      type: LDAP
      props:
        ldap_server_url: ldap://localhost:389ldap_dn_template: cn={0},ou=users,dc=example,dc=org
  defaultAuthenticator: auth_ldap

示例1 的区别是: 用户 root 与其他用户不在同一个 ou 中,因此为 root 单独指定了明确的用户 DN。 在使用以上配置时,用户 rootsharding 对应的用户 DN 分别是:

  • root:cn=root,ou=admin,dc=example,dc=org

  • sharding:cn=sharding,ou=users,dc=example,dc=org

混合认证

混合认证意味着部分用户使用密码认证方式,另一部分用户使用 LDAP 认证方式,这是一种非常灵活的搭配,可满足特定安全场景的需要。

混合认证配置格式如下:

authority:
  users:
    - user: root@%
      auth: auth_ldap
    - user: sharding
      password: sharding
    - user: user1
      password: password_user1
  authenticators:
    auth_ldap:
      type: LDAP
      props:
        ldap_server_url: ldap://localhost:389ldap_dn_template: cn={0},ou=users,dc=example,dc=org

在以上配置中,没有指定 defaultAuthenticator,默认为使用密码认证方式。与此同时,通过显示配置 auth: auth_ldap,为用户 root 指定了身份认证器,要求该用户通过 LDAP 认证进行登录。 在使用以上配置时,用户 rootshardinguser1 对应的认证方式分别是:

  • root:LDAP

  • sharding:密码

  • user1:密码

说明:在混合认证场景中,管理员也可以通过默认启用 LDAP 认证,并使用 auth: password 将少部分用户设置为密码认证。

logback.xml 配置说明

参考日志配置

agent.yaml 配置说明

参考Agent管理部分