ubuntu进程如何集群部署
导读:Ubuntu 进程集群部署实战指南 一、方案总览与选型 单机多进程:在一台 Ubuntu 上启动多个进程,利用多核 CPU,适合提升单机的吞吐与容错。常见工具:Node.js cluster 模块、PM2、Supervisor/syste...
Ubuntu 进程集群部署实战指南
一、方案总览与选型
- 单机多进程:在一台 Ubuntu 上启动多个进程,利用多核 CPU,适合提升单机的吞吐与容错。常见工具:Node.js cluster 模块、PM2、Supervisor/systemd。
- 多机横向扩展:多台 Ubuntu 协同运行进程,配合负载均衡与反向代理,适合对外提供稳定服务与弹性扩缩。常见组合:Nginx/HAProxy + 多实例。
- 容器与编排:将进程容器化,用 Docker Swarm 或 Kubernetes 管理副本、自愈、滚动升级与调度,适合生产级弹性与可观测。
- 并行计算/HPC:面向计算密集型任务,使用 MPI(如 MPICH/Hydra)在多节点上并行执行。
以上路径覆盖从单机并发到多机编排的主流场景,可按规模与复杂度逐步演进。
二、单机多进程快速落地
- Node.js 内置 cluster 模块
在同一台机器上按 CPU 核数 fork 多个工作进程,共享同一端口,示例代码要点:- 主进程 fork numCPUs 个子进程;子进程监听同一端口(如 3000/8000);主进程监听子进程退出并自动重启。
- 运行:node app.js。
- PM2 集群模式
- 安装:sudo npm install pm2 -g;启动:pm2 start app.js -i max(或 -i 4 指定实例数);常用:pm2 status、logs、monit、restart。
- 生产建议用配置文件 ecosystem.config.js:设置 name、script、instances、exec_mode: ‘cluster’、autorestart、max_memory_restart、env 等,然后 pm2 start ecosystem.config.js。
- 通用进程管理(非 Node 场景)
- Supervisor:apt 安装后新增 /etc/supervisor/conf.d/*.conf,配置 command、autostart、autorestart、stdout/stderr 日志;执行 supervisorctl reread & & update & & start 。
- systemd:编写 .service 单元,设置 ExecStart、Restart=always、User、WorkingDirectory、StandardOutput/Error,用 systemctl enable --now 管理。
以上方法便于在单机上快速获得多进程并发、自动重启与日志集中能力。
三、多机横向扩展与负载均衡
- 部署结构:在每台 Ubuntu 上运行多个应用实例(可用 PM2/Supervisor 管理),前置 Nginx/HAProxy 做反向代理与负载均衡。
- Nginx 示例(/etc/nginx/sites-available/default 或 /etc/nginx/nginx.conf 的 http 段):
- upstream node_app { server 192.168.1.11:3000; server 192.168.1.12:3000; server 192.168.1.13:3000; }
- server { listen 80; location / { proxy_pass http://node_app; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
- 生效:sudo systemctl restart nginx。
- 适用场景:对外暴露 80/443,后端多实例提升吞吐与可用性;结合健康检查与权重策略可进一步优化。
该方案简单稳健,适合从单机过渡到多机部署的多数 Web/API 服务。
四、容器与编排生产级部署
- Docker Swarm(轻量)
- 初始化:docker swarm init;部署服务:docker service create --replicas 3 --name my-app my-app:latest;可按需暴露端口与更新策略。
- Kubernetes(通用编排)
- 前置:在每个节点安装 containerd 与 kubeadm/kubelet/kubectl,并做系统调优(如禁用 swap、加载 overlay/br_netfilter、开启 ip_forward)。
- 初始化:kubeadm init --pod-network-cidr=10.244.0.0/16;配置 kubectl:mkdir -p $HOME/.kube & & sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config & & sudo chown $(id -u):$(id -g) $HOME/.kube/config。
- 加入节点:在 Worker 上执行 kubeadm join …;部署网络插件(如 Flannel):kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml。
- 部署应用:kubectl create deployment my-app --image=my-app:latest --replicas=3;暴露服务:kubectl expose deployment my-app --port=80 --type=NodePort。
容器化配合编排可获得副本管理、自愈、滚动升级、调度与资源隔离等能力,适合生产环境。
五、并行计算与 HPC 场景
- 适用:科学计算、批量任务、MPI 程序。
- 关键步骤:
- 各节点安装 MPICH(或兼容实现);
- 配置 SSH 免密登录(主节点 ssh-keygen,公钥分发至各节点,验证 ssh 无密码登录);
- 准备 MPI 程序并在各节点编译(避免路径/软链导致的运行问题);
- 使用 Hydra 进程管理器运行:mpiexec -f hosts -n 8 ./your_app(hosts 为节点清单,可指定每节点进程数)。
该路径面向多节点并行任务调度,强调节点间通信与统一执行。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu进程如何集群部署
本文地址: https://pptw.com/jishu/748318.html
