Wenjun Ruan
8 months ago
committed by
GitHub
31 changed files with 603 additions and 428 deletions
@ -0,0 +1,46 @@ |
|||||||
|
/* |
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||||
|
* contributor license agreements. See the NOTICE file distributed with |
||||||
|
* this work for additional information regarding copyright ownership. |
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||||
|
* (the "License"); you may not use this file except in compliance with |
||||||
|
* the License. You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.apache.dolphinscheduler.common.model; |
||||||
|
|
||||||
|
import org.apache.dolphinscheduler.common.enums.ServerStatus; |
||||||
|
|
||||||
|
import lombok.AllArgsConstructor; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.NoArgsConstructor; |
||||||
|
import lombok.experimental.SuperBuilder; |
||||||
|
|
||||||
|
@Data |
||||||
|
@SuperBuilder |
||||||
|
@NoArgsConstructor |
||||||
|
@AllArgsConstructor |
||||||
|
public class BaseHeartBeat implements HeartBeat { |
||||||
|
|
||||||
|
protected int processId; |
||||||
|
protected long startupTime; |
||||||
|
protected long reportTime; |
||||||
|
protected double jvmCpuUsage; |
||||||
|
protected double cpuUsage; |
||||||
|
protected double jvmMemoryUsage; |
||||||
|
protected double memoryUsage; |
||||||
|
protected double diskUsage; |
||||||
|
protected ServerStatus serverStatus; |
||||||
|
|
||||||
|
protected String host; |
||||||
|
protected int port; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,164 @@ |
|||||||
|
# |
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one or more |
||||||
|
# contributor license agreements. See the NOTICE file distributed with |
||||||
|
# this work for additional information regarding copyright ownership. |
||||||
|
# The ASF licenses this file to You under the Apache License, Version 2.0 |
||||||
|
# (the "License"); you may not use this file except in compliance with |
||||||
|
# the License. You may obtain a copy of the License at |
||||||
|
# |
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
# |
||||||
|
# Unless required by applicable law or agreed to in writing, software |
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
# See the License for the specific language governing permissions and |
||||||
|
# limitations under the License. |
||||||
|
# |
||||||
|
spring: |
||||||
|
banner: |
||||||
|
charset: UTF-8 |
||||||
|
jackson: |
||||||
|
time-zone: UTC |
||||||
|
date-format: "yyyy-MM-dd HH:mm:ss" |
||||||
|
cache: |
||||||
|
# default enable cache, you can disable by `type: none` |
||||||
|
type: none |
||||||
|
cache-names: |
||||||
|
- tenant |
||||||
|
- user |
||||||
|
- processDefinition |
||||||
|
- processTaskRelation |
||||||
|
- taskDefinition |
||||||
|
caffeine: |
||||||
|
spec: maximumSize=100,expireAfterWrite=300s,recordStats |
||||||
|
datasource: |
||||||
|
driver-class-name: org.postgresql.Driver |
||||||
|
url: jdbc:postgresql://127.0.0.1:5432/dolphinscheduler |
||||||
|
username: root |
||||||
|
password: root |
||||||
|
hikari: |
||||||
|
connection-test-query: select 1 |
||||||
|
minimum-idle: 5 |
||||||
|
auto-commit: true |
||||||
|
validation-timeout: 3000 |
||||||
|
pool-name: DolphinScheduler |
||||||
|
maximum-pool-size: 50 |
||||||
|
connection-timeout: 30000 |
||||||
|
idle-timeout: 600000 |
||||||
|
leak-detection-threshold: 0 |
||||||
|
initialization-fail-timeout: 1 |
||||||
|
quartz: |
||||||
|
job-store-type: jdbc |
||||||
|
jdbc: |
||||||
|
initialize-schema: never |
||||||
|
properties: |
||||||
|
org.quartz.threadPool.threadPriority: 5 |
||||||
|
org.quartz.jobStore.isClustered: true |
||||||
|
org.quartz.jobStore.class: org.springframework.scheduling.quartz.LocalDataSourceJobStore |
||||||
|
org.quartz.scheduler.instanceId: AUTO |
||||||
|
org.quartz.jobStore.tablePrefix: QRTZ_ |
||||||
|
org.quartz.jobStore.acquireTriggersWithinLock: true |
||||||
|
org.quartz.scheduler.instanceName: DolphinScheduler |
||||||
|
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool |
||||||
|
org.quartz.jobStore.useProperties: false |
||||||
|
org.quartz.threadPool.makeThreadsDaemons: true |
||||||
|
org.quartz.threadPool.threadCount: 25 |
||||||
|
org.quartz.jobStore.misfireThreshold: 60000 |
||||||
|
org.quartz.scheduler.batchTriggerAcquisitionMaxCount: 1 |
||||||
|
org.quartz.scheduler.makeSchedulerThreadDaemon: true |
||||||
|
org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.PostgreSQLDelegate |
||||||
|
org.quartz.jobStore.clusterCheckinInterval: 5000 |
||||||
|
|
||||||
|
# Mybatis-plus configuration, you don't need to change it |
||||||
|
mybatis-plus: |
||||||
|
mapper-locations: classpath:org/apache/dolphinscheduler/dao/mapper/*Mapper.xml |
||||||
|
type-aliases-package: org.apache.dolphinscheduler.dao.entity |
||||||
|
configuration: |
||||||
|
cache-enabled: false |
||||||
|
call-setters-on-nulls: true |
||||||
|
map-underscore-to-camel-case: true |
||||||
|
jdbc-type-for-null: NULL |
||||||
|
global-config: |
||||||
|
db-config: |
||||||
|
id-type: auto |
||||||
|
banner: false |
||||||
|
|
||||||
|
|
||||||
|
registry: |
||||||
|
type: zookeeper |
||||||
|
zookeeper: |
||||||
|
namespace: dolphinscheduler |
||||||
|
connect-string: localhost:2181 |
||||||
|
retry-policy: |
||||||
|
base-sleep-time: 60ms |
||||||
|
max-sleep: 300ms |
||||||
|
max-retries: 5 |
||||||
|
session-timeout: 30s |
||||||
|
connection-timeout: 9s |
||||||
|
block-until-connected: 600ms |
||||||
|
digest: ~ |
||||||
|
|
||||||
|
master: |
||||||
|
listen-port: 5678 |
||||||
|
# master fetch command num |
||||||
|
fetch-command-num: 10 |
||||||
|
# master prepare execute thread number to limit handle commands in parallel |
||||||
|
pre-exec-threads: 10 |
||||||
|
# master execute thread number to limit process instances in parallel |
||||||
|
exec-threads: 100 |
||||||
|
# master dispatch task number per batch, if all the tasks dispatch failed in a batch, will sleep 1s. |
||||||
|
dispatch-task-number: 30 |
||||||
|
# master host selector to select a suitable worker, default value: LowerWeight. Optional values include random, round_robin, lower_weight |
||||||
|
host-selector: lower_weight |
||||||
|
# master heartbeat interval |
||||||
|
max-heartbeat-interval: 10s |
||||||
|
# master commit task retry times |
||||||
|
task-commit-retry-times: 5 |
||||||
|
# master commit task interval |
||||||
|
task-commit-interval: 1s |
||||||
|
state-wheel-interval: 5s |
||||||
|
server-load-protection: |
||||||
|
# If set true, will open master overload protection |
||||||
|
enabled: true |
||||||
|
# Master max system cpu usage, when the master's system cpu usage is smaller then this value, master server can execute workflow. |
||||||
|
max-system-cpu-usage-percentage-thresholds: 0.77 |
||||||
|
# Master max jvm cpu usage, when the master's jvm cpu usage is smaller then this value, master server can execute workflow. |
||||||
|
max-jvm-cpu-usage-percentage-thresholds: 0.77 |
||||||
|
# Master max System memory usage , when the master's system memory usage is smaller then this value, master server can execute workflow. |
||||||
|
max-system-memory-usage-percentage-thresholds: 0.77 |
||||||
|
# Master max disk usage , when the master's disk usage is smaller then this value, master server can execute workflow. |
||||||
|
max-disk-usage-percentage-thresholds: 0.77 |
||||||
|
# failover interval, the unit is minute |
||||||
|
failover-interval: 10m |
||||||
|
# kill yarn / k8s application when failover taskInstance, default true |
||||||
|
kill-application-when-task-failover: true |
||||||
|
registry-disconnect-strategy: |
||||||
|
# The disconnect strategy: stop, waiting |
||||||
|
strategy: waiting |
||||||
|
# The max waiting time to reconnect to registry if you set the strategy to waiting |
||||||
|
max-waiting-time: 100s |
||||||
|
worker-group-refresh-interval: 10s |
||||||
|
|
||||||
|
server: |
||||||
|
port: 5679 |
||||||
|
|
||||||
|
management: |
||||||
|
endpoints: |
||||||
|
web: |
||||||
|
exposure: |
||||||
|
include: health,metrics,prometheus |
||||||
|
endpoint: |
||||||
|
health: |
||||||
|
enabled: true |
||||||
|
show-details: always |
||||||
|
health: |
||||||
|
db: |
||||||
|
enabled: true |
||||||
|
defaults: |
||||||
|
enabled: false |
||||||
|
metrics: |
||||||
|
tags: |
||||||
|
application: ${spring.application.name} |
||||||
|
|
||||||
|
metrics: |
||||||
|
enabled: true |
@ -0,0 +1,67 @@ |
|||||||
|
/* |
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||||
|
* contributor license agreements. See the NOTICE file distributed with |
||||||
|
* this work for additional information regarding copyright ownership. |
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||||
|
* (the "License"); you may not use this file except in compliance with |
||||||
|
* the License. You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.apache.dolphinscheduler.meter.metrics; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
|
||||||
|
@Slf4j |
||||||
|
@Data |
||||||
|
public class BaseServerLoadProtection implements ServerLoadProtection { |
||||||
|
|
||||||
|
protected boolean enabled = true; |
||||||
|
|
||||||
|
protected double maxSystemCpuUsagePercentageThresholds = 0.7; |
||||||
|
|
||||||
|
protected double maxJvmCpuUsagePercentageThresholds = 0.7; |
||||||
|
|
||||||
|
protected double maxSystemMemoryUsagePercentageThresholds = 0.7; |
||||||
|
|
||||||
|
protected double maxDiskUsagePercentageThresholds = 0.7; |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isOverload(SystemMetrics systemMetrics) { |
||||||
|
if (!enabled) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
if (systemMetrics.getSystemCpuUsagePercentage() > maxSystemCpuUsagePercentageThresholds) { |
||||||
|
log.info( |
||||||
|
"OverLoad: the system cpu usage: {} is over then the maxSystemCpuUsagePercentageThresholds {}", |
||||||
|
systemMetrics.getSystemCpuUsagePercentage(), maxSystemCpuUsagePercentageThresholds); |
||||||
|
return true; |
||||||
|
} |
||||||
|
if (systemMetrics.getJvmCpuUsagePercentage() > maxJvmCpuUsagePercentageThresholds) { |
||||||
|
log.info( |
||||||
|
"OverLoad: the jvm cpu usage: {} is over then the maxJvmCpuUsagePercentageThresholds {}", |
||||||
|
systemMetrics.getJvmCpuUsagePercentage(), maxJvmCpuUsagePercentageThresholds); |
||||||
|
return true; |
||||||
|
} |
||||||
|
if (systemMetrics.getDiskUsedPercentage() > maxDiskUsagePercentageThresholds) { |
||||||
|
log.info("OverLoad: the DiskUsedPercentage: {} is over then the maxDiskUsagePercentageThresholds {}", |
||||||
|
systemMetrics.getDiskUsedPercentage(), maxDiskUsagePercentageThresholds); |
||||||
|
return true; |
||||||
|
} |
||||||
|
if (systemMetrics.getSystemMemoryUsedPercentage() > maxSystemMemoryUsagePercentageThresholds) { |
||||||
|
log.info( |
||||||
|
"OverLoad: the SystemMemoryUsedPercentage: {} is over then the maxSystemMemoryUsagePercentageThresholds {}", |
||||||
|
systemMetrics.getSystemMemoryUsedPercentage(), maxSystemMemoryUsagePercentageThresholds); |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,24 @@ |
|||||||
|
/* |
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||||
|
* contributor license agreements. See the NOTICE file distributed with |
||||||
|
* this work for additional information regarding copyright ownership. |
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||||
|
* (the "License"); you may not use this file except in compliance with |
||||||
|
* the License. You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.apache.dolphinscheduler.meter.metrics; |
||||||
|
|
||||||
|
public interface ServerLoadProtection { |
||||||
|
|
||||||
|
boolean isOverload(SystemMetrics systemMetrics); |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue