kizumi_header_banner_img
文章导读

调整


avatar
Mortis-AveMuj1ca 2026年5月10日 37

从运维练习角度重新调整ebilibili下载站:
1,修改代码加上redis集群收集日志。
2,把ebilibili代码用dockerFile打包成镜像。
3,把镜像载入A B C服务器的Docker。
4,用nginx集群再做负载均衡分配给ebilibiliDocker。
5,部署Jenkins方便后期构建和推送镜像。
6,做监控zabbix+grafana

 

 

kubernetes.txt

// all nodes svc deployment replicaset pod container
kubectl get

//改 replicas 得到多个副本
kubectl edit replicaset nginx-xxx
kubectl logs nginx-xxx
kubectl exec -it nginx-xxx — /bin/bash
kubectl delete deployment nginx-xxx
kubectl create deployment nginx-dep –image=nginx –replicaset
kubectl create -f nginx-deployment.yml
kubectl delete -f nginx-deployment.yml
kubectl apply -f nginx-deployment.yml
kubectl get pod -o wide
kubectl describe service nginx-deployment
kubectl describe [nodes deployment pod] nginx-deployment

// Service提供服务
// 集群网络是隔离的;pod是不稳定的;
// service ClusterIP/type: NodePort 30000~32767
kubectl create service nginx-service
kubectl expose deployment nginx-deployment

//命名空间
kubectl apply -n portainer -f portainer.yaml
kubectl get ns
kubectl get all -n portainer

 

 

Ebilibili下载站 · 全栈运维架构蓝图 | 集群+监控+CI/CD

📦 Ebilibili 下载站 · 运维实战架构

✨ 生产级演练 · 多服务器集群 · 日志聚合 · 全链路监控 ✨
基于 Docker + Nginx 集群 + Redis 日志集群 + Jenkins + Zabbix+Grafana,全面落地站点高可用与可观测性
📡

1. Redis 集群日志收集 · Dockerfile 镜像构建

🔴 核心改造:ebilibili 代码集成 Redis 集群日志

在 Flask/Node 下载站逻辑中,增加异步日志推送至 Redis Cluster (3主3从模拟),存储用户下载、错误、访问日志。日志格式 JSON,方便 Logstash 或 Filebeat 消费。

# ebilibili/app.py 伪代码集成 import redis import logging from logging.handlers import RotatingFileHandler redis_cluster = redis.RedisCluster( startup_nodes=[{“host”: “redis-1”, “port”: 6379}, {“host”: “redis-2”, “port”: 6379}, {“host”: “redis-3”, “port”: 6379}], decode_responses=True ) def log_to_redis(level, msg): log_entry = f”{level}|{msg}|{time.time()}” redis_cluster.lpush(“ebi:app_logs”, log_entry) # 中间件调用 log_to_redis(“INFO”, f”download:{file}”)
🐳 Dockerfile 打包 ebilibili 镜像 (生产级)
FROM python:3.10-slim AS builder WORKDIR /app COPY requirements.txt . RUN pip install –no-cache-dir -r requirements.txt FROM python:3.10-slim WORKDIR /app COPY –from=builder /usr/local/lib/python3.10/site-packages /usr/local/lib/python3.10/site-packages COPY . . ENV REDIS_CLUSTER_NODES=”redis-1:6379,redis-2:6379,redis-3:6379″ EXPOSE 8000 CMD [“gunicorn”, “app:app”, “-b”, “0.0.0.0:8000”, “–workers”, “3”]
🔨 docker build -t ebilibili:v2 . 📌 镜像推送到私有仓库: harbor.ebi.local/ebilibili:v2
# 构建指令示例 docker build -t ebilibili:log-cluster . docker tag ebilibili:log-cluster 192.168.10.100:5000/ebilibili:latest docker push 192.168.10.100:5000/ebilibili:latest
⚙️

2. 镜像分发至 A/B/C 服务器 · Docker 运行站点

🖥️ 服务器 A (10.0.1.10)
负载权重: 1 | 部署 ebilibili 容器 ×2
docker pull harbor.ebi.local/ebilibili:latest
docker run -d –name ebi-node1 -p 8001:8000 –restart=always ebilibili:latest
docker run -d –name ebi-node2 -p 8002:8000 ebilibili:latest
✅ 加入 Nginx upstream 组
🖥️ 服务器 B (10.0.1.11)
负载权重: 1 | 高可用节点
docker pull harbor.ebi.local/ebilibili:latest
docker run -d –name ebi-nodeB1 -p 8001:8000 ebilibili:latest
docker run -d –name ebi-nodeB2 -p 8002:8000 ebilibili:latest
日志输出至 Redis Cluster 收集
🖥️ 服务器 C (10.0.1.12)
同样部署 ebilibili 容器 ×2
docker pull harbor.ebi.local/ebilibili:latest
docker run -d –name ebi-nodeC1 -p 8001:8000 ebilibili:latest
docker run -d –name ebi-nodeC2 -p 8002:8000 ebilibili:latest
🌐 Nginx 集群 (负载均衡层) —— 前置代理 + 流量分发
# nginx.conf (upstream ebilibili_backend) upstream ebilibili_cluster { least_conn; server 10.0.1.10:8001 weight=1 max_fails=3 fail_timeout=30s; server 10.0.1.10:8002 weight=1; server 10.0.1.11:8001 weight=1; server 10.0.1.11:8002 weight=1; server 10.0.1.12:8001 weight=1; server 10.0.1.12:8002 weight=1; } server { listen 80; location / { proxy_pass http://ebilibili_cluster; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } # 多节点nginx部署 (Nginx集群方案: 可用Keepalived + VIP 或 每服务器前置nginx)

✅ 三台服务器分别安装 Nginx 作为反向代理,对外提供统一入口,并做四层/七层负载分担,高可用由 DNS 轮询或硬件负载均衡保证。

🔄

3. Jenkins 持续集成/部署 · 镜像构建与分发

🔧 Jenkins 部署(任意中控机),集成 Docker pipeline 插件,对接 Git 仓库。代码变更 ➜ 自动打镜像 ➜ 推送到私有镜像仓库 ➜ 触发滚动更新 A/B/C 服务器。

pipeline { agent any stages { stage(‘Git Checkout’) { steps { git ‘https://git.ebi.local/ebilibili.git’ } } stage(‘Build Image’) { steps { sh ‘docker build -t ebilibili:${BUILD_NUMBER} .’ } } stage(‘Push Registry’) { steps { sh ‘docker tag ebilibili:${BUILD_NUMBER} 192.168.10.100:5000/ebilibili:latest’ sh ‘docker push 192.168.10.100:5000/ebilibili:latest’ } } stage(‘Rollout Servers’) { steps { sh ‘ansible playbook -i inventory deploy_ebi.yml’ // 或者脚本远程ssh执行 docker pull && 重启容器 } } } }
📦 镜像仓库(Harbor / Registry)
为 A/B/C 三台服务器提供统一拉取源;后期 Jenkins 自动推送,服务器配置定时拉取或者监听 webhook 热更新。

⚡ 部署脚本示例 (Ansible)
– name: 更新ebilibili容器 hosts: servers_group tasks: – name: 拉取最新镜像 shell: “docker pull 192.168.10.100:5000/ebilibili:latest” – name: 重启ebi容器 shell: “docker stop ebi-node1 || true && docker rm ebi-node1 || true; docker run -d –name ebi-node1 -p 8001:8000 ebilibili:latest”
📊

4. 全栈监控: Zabbix 采集 + Grafana 可视化

📈 Zabbix Server (监控A/B/C服务器&容器)
  • 监控 Docker 容器 CPU/内存/网络;
  • 自定义监控项:Redis 日志队列长度、ebilibili 请求响应时间;
  • Zabbix agent 部署在每台服务器,通过 Docker 插件采集容器指标;
  • 触发告警:日志错误率 >5%,容器重启频繁 、Nginx 5xx 错误。
# 自定义 UserParameter 采集 Redis 日志堆积 UserParameter=redis.log.len, redis-cli -h redis-1 llen ebi:app_logs # 监控 ebilibili 健康检查 UserParameter=ebi.health, curl -s localhost:8001/health | grep OK | wc -l
📉 Grafana + Zabbix 数据源

构建运维仪表盘,实时展示:

  • 三台服务器的 Ebilibili 容器 QPS / 延迟热力图
  • Redis 集群日志条目趋势 & 错误率监控
  • Nginx 负载均衡器连接数 & 上游健康状态
  • 告警集成钉钉/企微机器人
🔔 告警规则: 磁盘 >85% ⚠️ 日志堆积 >5000条 💥 站点不可用触发自动恢复
# 快速部署zabbix-agent 与 grafana (docker-compose) docker run -d –name zabbix-agent –link zabbix-server -e ZBX_HOSTNAME=ebi-serverA zabbix/zabbix-agent:alpine grafana: image: grafana/grafana:latest ports: 3000:3000 volumes: ./grafana_data:/var/lib/grafana
☸️

📘 运维进阶·Kubernetes 笔记 (eks / 自建集群演练)

🎯 常用kubectl操作(练习生产)
kubectl get nodes | pods | svc -o wide
kubectl edit replicaset <name> → 修改replicas得到多副本
kubectl logs <pod> -f
kubectl exec -it <pod> — /bin/bash
kubectl delete deployment <name>
kubectl create deployment ebi-dep –image=ebilibili:log-cluster –replicas=6
kubectl expose deployment ebi-dep –type=NodePort –port=8000 –target-port=8000
kubectl apply -f nginx-deployment.yml
kubectl describe service/pod/deployment
🔁 Service & 网络策略
ClusterIP 默认内部访问,NodePort 30000~32767 对外暴露
kubectl create service clusterip ebi-svc –tcp=8000:8000
命名空间隔离: kubectl create ns ebilibili-ns
kubectl get all -n ebilibili-ns
使用 Ingress 替代 Nginx 集群做7层路由

🧩 容器化到K8s过渡思路: 将当前 Docker 集群转化为 Deployment + Service + HPA,利用 Redis Cluster Operator 实现日志采集,并通过 Prometheus + Grafana 监控,Zabbix 亦可对接 K8s 监控插件。
🧭

🗺️ 最终部署总览 (A/B/C 服务器 + 负载 + 监控闭环)

+——————+ +————————+ +——————–+ | Git + Jenkins |—–>| Harbor镜像仓库 |<-----| A/B/C服务器集群 | | (CI触发构建) | | (存储ebilibili镜像) | | (每个节点2容器) | +------------------+ +------------------------+ +--------------------+ | +-------v-------+ | Nginx 集群 | | 负载均衡器 | | (UPSTREAM 6副本)| +-------v-------+ | [ Ebilibili 下载站 ] | +------------------+ | | Redis 集群(日志) |<------------+ | 3节点 收集访问日志 | +------------------+ | Zabbix+Grafana | | 监控服务器/容器/ | | Redis队列/Nginx | +------------------+
✔️ 步骤1: Redis集群日志收集 ✔️ 步骤2: Dockerfile 镜像化 ✔️ 步骤3: 镜像载入ABC服务器 ✔️ 步骤4: Nginx集群负载均衡 ✔️ 步骤5: Jenkins 自动构建推送 ✔️ 步骤6: Zabbix+Grafana监控

🎯 运维练习指南:模拟生产变更,滚动更新镜像,观察Redis日志聚合,通过Grafana看板定位瓶颈,使用kubectl命令将架构迁移至K8s进一步升级。

⚙️ 本文档基于真实运维场景设计 | 涵盖 CI/CD、容器编排、监控告警、日志集中 | 可落地至三台物理/云服务器完成全链路演练


评论(1)

查看评论列表
评论头像
Mortis-AveMuj1ca 博主 2026年05月10日
“不要动文字本身。美化输出html。”然后得到了🥲

发表评论

表情 颜文字
插入代码