Files
ConfTemplate/src/schemas/etcd.js
T
cnbugs 2916dce148 feat: 新增 16 个中间件组件,总计 42 个
数据库: PostgreSQL, Oracle
搜索引擎: Elasticsearch
消息队列: RocketMQ, Kafka
服务治理: Nacos
分布式协调: ZooKeeper, Etcd
容器化: Docker, Docker Compose
日志监控: Logstash, Kibana, Prometheus, Grafana, Zabbix, Syslog

新增分类: 搜索引擎、消息队列、服务治理、分布式协调、容器化、日志监控
更新 README 组件矩阵与侧边栏计数
2026-07-18 19:54:57 +08:00

255 lines
7.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export const etcdSchema = {
id: 'etcd',
name: 'Etcd',
icon: 'Connection',
category: '分布式协调',
description: '分布式键值存储,用于配置共享和服务发现',
format: 'yml',
fileName: 'etcd.conf.yml',
groups: [
{
title: '节点配置',
fields: [
{
key: 'name',
label: '节点名称',
type: 'text',
default: 'etcd-0',
tip: '集群中每个节点的唯一名称',
},
{
key: 'dataDir',
label: '数据目录',
type: 'text',
default: '/var/lib/etcd',
},
],
},
{
title: '客户端通信',
fields: [
{
key: 'listenClientUrls',
label: '监听客户端地址',
type: 'text',
default: 'http://0.0.0.0:2379',
tip: '客户端连接地址,多个用逗号分隔',
},
{
key: 'advertiseClientUrls',
label: '对外通告客户端地址',
type: 'text',
default: 'http://localhost:2379',
tip: '通知客户端使用的地址',
},
],
},
{
title: '节点间通信',
fields: [
{
key: 'listenPeerUrls',
label: '监听节点间地址',
type: 'text',
default: 'http://0.0.0.0:2380',
tip: '集群内部通信地址',
},
{
key: 'initialAdvertisePeerUrls',
label: '对外通告节点间地址',
type: 'text',
default: 'http://localhost:2380',
},
{
key: 'initialCluster',
label: '初始集群配置',
type: 'text',
default: 'etcd-0=http://localhost:2380',
placeholder: 'node1=http://ip1:2380,node2=http://ip2:2380',
tip: '格式: name1=url1,name2=url2',
},
{
key: 'initialClusterState',
label: '初始集群状态',
type: 'select',
options: [
{ label: 'new (新建集群)', value: 'new' },
{ label: 'existing (加入已有集群)', value: 'existing' },
],
default: 'new',
},
{
key: 'initialClusterToken',
label: '集群令牌',
type: 'text',
default: 'etcd-cluster',
tip: '防止集群间误加入',
},
],
},
{
title: 'TLS 安全',
fields: [
{
key: 'enableTls',
label: '启用 TLS',
type: 'switch',
default: false,
tip: '生产环境建议开启',
},
{
key: 'certFile',
label: '证书文件路径',
type: 'text',
default: '/etc/etcd/server.crt',
dependsOn: { key: 'enableTls', value: true },
},
{
key: 'keyFile',
label: '私钥文件路径',
type: 'text',
default: '/etc/etcd/server.key',
dependsOn: { key: 'enableTls', value: true },
},
],
},
{
title: '压缩与存储',
fields: [
{
key: 'autoCompactionMode',
label: '自动压缩模式',
type: 'select',
options: [
{ label: 'periodic (按时间)', value: 'periodic' },
{ label: 'revision (按修订版本)', value: 'revision' },
],
default: 'periodic',
tip: '定期压缩历史数据以释放空间',
},
{
key: 'autoCompactionRetention',
label: '自动压缩保留',
type: 'text',
default: '1h',
tip: 'periodic 模式: 1h/1d; revision 模式: 版本数',
},
{
key: 'quotaBackendBytes',
label: '后端存储配额 (字节)',
type: 'number',
min: 0,
max: 8589934592,
default: 8589934592,
tip: '8GB0 表示不限制',
},
{
key: 'maxRequestBytes',
label: '最大请求大小 (字节)',
type: 'number',
min: 1048576,
max: 15728640,
default: 1572864,
tip: '1.5MB',
},
],
},
{
title: '性能与调试',
fields: [
{
key: 'heartbeatInterval',
label: '心跳间隔 (毫秒)',
type: 'number',
min: 50,
max: 3000,
default: 100,
tip: '建议为 electionTimeout 的 1/5~1/10',
},
{
key: 'electionTimeout',
label: '选举超时 (毫秒)',
type: 'number',
min: 500,
max: 30000,
default: 1000,
tip: '建议为 heartbeatInterval 的 5~10 倍',
},
{
key: 'enablePprof',
label: '开启 pprof',
type: 'switch',
default: false,
tip: '调试时开启,生产环境建议关闭',
},
],
},
],
}
export function generateEtcdYml(config) {
const lines = []
lines.push(`# Etcd 配置文件 - 由 ConfTemplate 生成`)
lines.push(`# 生成时间: ${new Date().toLocaleString('zh-CN')}`)
lines.push(``)
// 节点配置
lines.push(`# 节点配置`)
lines.push(`name: '${config.name}'`)
lines.push(`data-dir: '${config.dataDir}'`)
lines.push(``)
// 客户端通信
lines.push(`# 客户端通信`)
const listenClientUrls = config.listenClientUrls.split(',').map((u) => u.trim())
lines.push(`listen-client-urls: '${listenClientUrls.join(',')}'`)
const advertiseClientUrls = config.advertiseClientUrls.split(',').map((u) => u.trim())
lines.push(`advertise-client-urls: '${advertiseClientUrls.join(',')}'`)
lines.push(``)
// 节点间通信
lines.push(`# 节点间通信`)
const listenPeerUrls = config.listenPeerUrls.split(',').map((u) => u.trim())
lines.push(`listen-peer-urls: '${listenPeerUrls.join(',')}'`)
const initialAdvertisePeerUrls = config.initialAdvertisePeerUrls.split(',').map((u) => u.trim())
lines.push(`initial-advertise-peer-urls: '${initialAdvertisePeerUrls.join(',')}'`)
lines.push(`initial-cluster: '${config.initialCluster}'`)
lines.push(`initial-cluster-state: '${config.initialClusterState}'`)
lines.push(`initial-cluster-token: '${config.initialClusterToken}'`)
lines.push(``)
// TLS 安全
if (config.enableTls) {
lines.push(`# TLS 安全`)
lines.push(`client-transport-security:`)
lines.push(` cert-file: '${config.certFile}'`)
lines.push(` key-file: '${config.keyFile}'`)
lines.push(` client-cert-auth: true`)
lines.push(` trusted-ca-file: '/etc/etcd/ca.crt'`)
lines.push(`peer-transport-security:`)
lines.push(` cert-file: '${config.certFile}'`)
lines.push(` key-file: '${config.keyFile}'`)
lines.push(` client-cert-auth: true`)
lines.push(` trusted-ca-file: '/etc/etcd/ca.crt'`)
lines.push(``)
}
// 压缩与存储
lines.push(`# 压缩与存储`)
lines.push(`auto-compaction-mode: '${config.autoCompactionMode}'`)
lines.push(`auto-compaction-retention: '${config.autoCompactionRetention}'`)
lines.push(`quota-backend-bytes: ${config.quotaBackendBytes}`)
lines.push(`max-request-bytes: ${config.maxRequestBytes}`)
lines.push(``)
// 性能与调试
lines.push(`# 性能与调试`)
lines.push(`heartbeat-interval: ${config.heartbeatInterval}`)
lines.push(`election-timeout: ${config.electionTimeout}`)
lines.push(`enable-pprof: ${config.enablePprof}`)
lines.push(`logger: 'zap'`)
lines.push(`log-outputs: ['stderr']`)
return lines.join('\n')
}