18-第18章-生产环境部署指南

第18章:生产环境部署指南

18.1 部署前准备

18.1.1 系统要求

最低配置:

  • CPU:2 核心
  • 内存:2 GB
  • 磁盘:10 GB(SSD 推荐)
  • 操作系统:Linux/Windows/macOS

推荐配置:

  • CPU:4+ 核心
  • 内存:8+ GB
  • 磁盘:100+ GB(SSD)
  • 操作系统:Linux(Ubuntu 20.04+)

18.1.2 依赖检查

bash 复制代码
# Go 版本
go version

# 检查端口占用
netstat -tulpn | grep -E '8081|1883'

# 检查磁盘空间
df -h

18.2 配置优化

18.2.1 生产配置示例

json 复制代码
{
  "db_path": "/var/lib/sfsedgestore/data",
  "db_use_encryption": false,
  "db_scenario": "edge",
  "mqtt_broker": "tcp://mqtt-broker:1883",
  "mqtt_client_id": "sfsedgestore-prod",
  "mqtt_qos": 1,
  "mqtt_batch_size": 100,
  "mqtt_batch_interval": 5,
  "http_port": "8081",
  "http_use_tls": true,
  "http_cert": "/etc/ssl/certs/sfsedgestore.crt",
  "http_key": "/etc/ssl/private/sfsedgestore.key",
  "log_level": "info",
  "log_file": "/var/log/sfsedgestore/app.log"
}

18.2.2 系统参数调优

bash 复制代码
# /etc/sysctl.conf
# 增加文件描述符限制
fs.file-max = 100000

# 网络调优
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1

# 内存调优
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
bash 复制代码
# /etc/security/limits.conf
sfsedgestore soft nofile 65536
sfsedgestore hard nofile 65536
sfsedgestore soft nproc 4096
sfsedgestore hard nproc 4096

18.3 容器化部署

18.3.1 Dockerfile

dockerfile 复制代码
FROM golang:1.21-alpine AS builder

WORKDIR /app

COPY go.mod go.sum ./
RUN go mod download

COPY . .
RUN CGO_ENABLED=0 go build -o sfsedgestore .

FROM alpine:latest

RUN apk --no-cache add ca-certificates

WORKDIR /root/

COPY --from=builder /app/sfsedgestore .
COPY --from=builder /app/config.json .

EXPOSE 8081

CMD ["./sfsedgestore"]

18.3.2 Docker Compose

yaml 复制代码
version: '3.8'

services:
  sfsedgestore:
    build: .
    ports:
      - "8081:8081"
    volumes:
      - data:/var/lib/sfsedgestore/data
      - logs:/var/log/sfsedgestore
    environment:
      - MQTT_BROKER=tcp://mosquitto:1883
    depends_on:
      - mosquitto
    restart: unless-stopped

  mosquitto:
    image: eclipse-mosquitto:2.0
    ports:
      - "1883:1883"
    volumes:
      - mosquitto-config:/mosquitto/config
      - mosquitto-data:/mosquitto/data
    restart: unless-stopped

volumes:
  data:
  logs:
  mosquitto-config:
  mosquitto-data:

18.4 Kubernetes 部署

18.4.1 Deployment

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sfsedgestore
spec:
  replicas: 3
  selector:
    matchLabels:
      app: sfsedgestore
  template:
    metadata:
      labels:
        app: sfsedgestore
    spec:
      containers:
      - name: sfsedgestore
        image: sfsedgestore:latest
        ports:
        - containerPort: 8081
        env:
        - name: MQTT_BROKER
          value: "tcp://mqtt-broker:1883"
        resources:
          requests:
            cpu: "500m"
            memory: "512Mi"
          limits:
            cpu: "2000m"
            memory: "2Gi"
        livenessProbe:
          httpGet:
            path: /health
            port: 8081
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /ready
            port: 8081
          initialDelaySeconds: 5
          periodSeconds: 5
        volumeMounts:
        - name: data
          mountPath: /var/lib/sfsedgestore/data
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: sfsedgestore-data

18.4.2 Service

yaml 复制代码
apiVersion: v1
kind: Service
metadata:
  name: sfsedgestore
spec:
  selector:
    app: sfsedgestore
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8081
  type: LoadBalancer

18.5 监控与告警

18.5.1 Prometheus 指标

go 复制代码
import "github.com/prometheus/client_golang/prometheus"

var (
    messagesReceived = prometheus.NewCounter(
        prometheus.CounterOpts{
            Name: "sfsedgestore_messages_received_total",
            Help: "Total number of messages received",
        },
    )
    httpRequests = prometheus.NewCounter(
        prometheus.CounterOpts{
            Name: "sfsedgestore_http_requests_total",
            Help: "Total number of HTTP requests",
        },
    )
    databaseLatency = prometheus.NewHistogram(
        prometheus.HistogramOpts{
            Name:    "sfsedgestore_database_latency_seconds",
            Help:    "Database operation latency",
            Buckets: prometheus.DefBuckets,
        },
    )
)

func init() {
    prometheus.MustRegister(messagesReceived)
    prometheus.MustRegister(httpRequests)
    prometheus.MustRegister(databaseLatency)
}

18.5.2 Grafana 仪表盘

json 复制代码
{
  "dashboard": {
    "panels": [
      {
        "title": "Messages Received",
        "type": "graph",
        "targets": [
          {
            "expr": "rate(sfsedgestore_messages_received_total[5m])"
          }
        ]
      },
      {
        "title": "HTTP Requests",
        "type": "graph",
        "targets": [
          {
            "expr": "rate(sfsedgestore_http_requests_total[5m])"
          }
        ]
      },
      {
        "title": "Database Latency",
        "type": "graph",
        "targets": [
          {
            "expr": "histogram_quantile(0.95, rate(sfsedgestore_database_latency_seconds_bucket[5m]))"
          }
        ]
      }
    ]
  }
}

18.6 备份与恢复

18.6.1 自动化备份脚本

bash 复制代码
#!/bin/bash
BACKUP_DIR="/var/backups/sfsedgestore"
DATA_DIR="/var/lib/sfsedgestore/data"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/sfsedgestore_$DATE.tar.gz"

mkdir -p $BACKUP_DIR

tar -czf $BACKUP_FILE -C $DATA_DIR .

find $BACKUP_DIR -name "sfsedgestore_*.tar.gz" -mtime +7 -delete

echo "Backup completed: $BACKUP_FILE"

18.6.2 Cron 定时备份

bash 复制代码
# /etc/cron.d/sfsedgestore-backup
0 2 * * * sfsedgestore /opt/sfsedgestore/scripts/backup.sh

18.7 实战练习

练习 18.1:生产部署

在生产环境中部署 sfsEdgeStore,包括监控和告警。

练习 18.2:灾难恢复

模拟数据丢失,执行灾难恢复流程。

练习 18.3:性能调优

根据生产环境监控数据,进行性能调优。

18.8 本章小结

本章讲解了生产环境部署:

  • 部署前准备和系统要求
  • 配置优化
  • 容器化部署(Docker、Kubernetes)
  • 监控与告警(Prometheus、Grafana)
  • 备份与恢复策略

完善的部署和运维流程是生产环境稳定运行的保障。


本书版本 :1.0.0
最后更新 :2026-03-08
sfsEdgeStore - 让边缘数据存储更简单!🚀
技术栈 - Go语言、sfsDb与EdgeX Foundry。纯golang工业物联网边缘计算技术栈
项目地址GitHub
GitCode 镜像GitCode

相关推荐
Apache RocketMQ14 小时前
海量接入、毫秒响应:易易互联基于 Apache RocketMQ + MQTT 构筑高可用物联网消息中枢
物联网·rocketmq
星恒讯工业路由器14 小时前
企业组网 企业加密内网、内网穿透、专线组网,三种方式该怎么选
网络·物联网·智能路由器·信息与通信
博晶网络14 小时前
户外高温物联网5网口工业4G路由器哪个牌子好|MR500U嵌入式工业级优选
物联网·工业4g路由器·5网口·户外高温·5网口工业4g路由器
还好还好不是吗15 小时前
我用 Puppeteer 把发掘金文章这步也自动化了——附 CLI 和 MCP 接口
electron·开源
南山电子nscn15 小时前
爱普生宽温32.768 kHz无源晶振FC2012SN,助力高温物联网与工控应用
物联网
lularible15 小时前
PTP协议精讲(4.4):从时钟程序实现——时间的“追随者“
网络·网络协议·开源·嵌入式·ptp
2603_9547083115 小时前
微电网分布式电源接入技术:光伏、风电的适配设计
人工智能·分布式·物联网·架构·系统架构·能源
切糕师学AI15 小时前
深入解析 gRPC:高性能开源 RPC 框架的原理与实战
网络协议·rpc·开源·grpc
qcx2315 小时前
开源首发:DocCenter — AI 时代的 HTML工作台深度解析
人工智能·开源·html
三佛科技-1341638421216 小时前
FT32F072系列 FT32F072RBAT7/CBAT7/KBBT7/KBBU7/KBCW7单片机共性与区别详细分析
单片机·嵌入式硬件·物联网·智能家居·pcb工艺