配置文件 #
集群生态工具配置文件列表 #
SphereEx-Boot
配置文件名 | 位置 | 说明 |
---|---|---|
cluster-template.yaml | 当前操作目录 | Boot 安装集群 |
console_install.yaml | 当前操作目录 | Boot 安装 Console 配置文件 |
SphereEx-Console
配置文件名 | 位置 | 说明 |
---|---|---|
application.yml | conf 目录 | 软件运行内部文件,内的内容不建议修改 |
application-prod.yml | conf 目录 | 运行参数文件,可以修改 |
- 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 中配置为准)
zookeeper:ZooKeeper 配置 (如果不需要 ZooKeeper 时可以不配置)
version:ZooKeeper 版本标识
file:主控机 ZooKeeper 安装文件路径
conf_file:主控机 ZooKeeper zoo.cfg 配置文件路径
install_dir:部署机 Zookeeper 安装目录
data_dir:部署机 ZooKeeper 配置文件 zoo.cfg 中 dataDir 配置值
port:部署机 ZooKeeper 启动端口
overwrite:如果部署机安装目录已经存在,是否重新安装,默认 true。
servers:ZooKeeper 部署机列表
host:部署机 IP 地址
myid:ZooKeeper 集群 myid 值
port:部署机 ZooKeeper 启动端口(非必要,不配置时以 ZooKeeper 中配置为准)
install_dir:部署机 ZooKeeper 安装目录(非必要,不配置时以 ZooKeeper 中配置为准)
conf_file:主控机 Zookeeper zoo.cfg 配置文件路径(非必要,不配置时以 ZooKeeper 中配置为准)
data_dir:部署机 ZooKeeper 配置文件 zoo.cfg 中 dataDir 配置值(非必要,不配置时以 ZooKeeper 中配置为准)
overwrite:如果部署机安装目录已经存在,是否重新安装,默认 true。(非必要,不配置时以 ZooKeeper 中配置为准)
集群组件配置文件列表 #
组件类型 | 组件名称 | 配置文件名 | 位置 | 说明 |
---|---|---|---|---|
存储节点 | 无 | 无 | 不做管理 | |
治理中心 | Zookeeper | zoo.cfg | zookeeper安装目录/conf | SphereEx-Console 安装日志中心的配置文件 |
监控中心 | Prometheus | prometheus.yml | 安装目录 | SphereEx-Console 安装监控中心的配置文件 |
监控插件 | mysql_exporter | mysql_exporter_conf.cnf | 安装目录 | SphereEx-Console 安装My SQL 监控插件配置文件 |
Zookeeper_exporter | zoo.cfg | zookeeper的安装目录/conf | SphereEx-Console 安装 Zookeeper 监控插件配置文件 | |
日志中心 | Elasticsearch | elasticsearch.yml | 安装目录/config | SphereEx-Console 安装日志中心的配置文件 |
Logstash | logstash.conf | z安装目录/config | SphereEx-Console 安装日志中心的配置文件 | |
日志插件 | Filebeat | filebeat.yml | 安装目录/config | SphereEx-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.yaml | conf 目录 | 初始化参数文件 |
logback.xml | conf 目录 | 日志参数配置文件 |
agent.yaml | conf 目录 | 计算节点的 agent 参数文件 |
start.sh | bin 目录 | 启动参数运行时配置的配置文件 |
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_db
和test_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 模板
在使用以上配置时,用户 root
和 sharding
对应的用户 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。 在使用以上配置时,用户 root
和 sharding
对应的用户 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 认证进行登录。 在使用以上配置时,用户 root
、sharding
和 user1
对应的认证方式分别是:
root:LDAP
sharding:密码
user1:密码
说明:在混合认证场景中,管理员也可以通过默认启用 LDAP 认证,并使用 auth: password 将少部分用户设置为密码认证。
logback.xml 配置说明
参考日志配置
agent.yaml 配置说明