Senate

多服务器部署

跨多台服务器部署服务,轻松实现弹性扩展

多服务器部署

把服务分布到多台服务器上,让你的应用更强大、更可靠。这篇指南会告诉你怎么添加远程服务器、合理分配负载,以及一些多服务器架构的实用技巧。

为什么要多服务器?

Senate 支持部署到:

  • 本地服务器:运行 Senate 的那台服务器
  • 远程服务器:任何能通过 SSH 连接的服务器

多服务器架构能带来这些好处:

  • 弹性扩展:流量大了就加服务器分担压力
  • 环境隔离:开发、测试、生产各用各的服务器,互不干扰
  • 高可用:一台挂了,其他的还能顶上
  • 就近部署:把服务部署在离用户更近的地方,访问更快

准备工作

添加远程服务器之前,先确认以下几点:

每台远程服务器都需要配置好 SSH 访问权限,Docker 可以稍后通过 Senate 安装。

远程服务器要求

  • Linux 服务器(Ubuntu、Debian、CentOS 等主流发行版都行)
  • SSH 可访问(默认 22 端口,或者你自己配的端口)
  • 有 Docker 权限的用户账号

安装 Docker

添加远程服务器时,如果 Senate 检测到该服务器还没装 Docker,会在控制台提示你一键安装。点一下按钮,Senate 就会自动帮你搞定 Docker 的安装,省心省力。

添加远程服务器

进入服务器管理页面

在 Senate 控制台侧边栏点击 Machines

点击添加服务器

填写连接信息:

字段说明
Name给服务器起个好记的名字(比如 生产服务器-1
HostIP 地址或域名
PortSSH 端口(默认 22)
UserSSH 登录用户名

添加服务器对话框

选择认证方式

推荐用 SSH 密钥,比密码更安全。也可以用密码认证,看你方便。

生成 SSH 密钥(如果用密钥认证)

点击「生成密钥」,Senate 会帮你创建一对密钥。把公钥复制下来。

把公钥添加到远程服务器

# 登录到远程服务器执行
mkdir -p ~/.ssh
echo "ssh-ed25519 AAAA... senate-generated" >> ~/.ssh/authorized_keys

测试连接并保存

点击「添加服务器」,Senate 会测试连接,成功后自动保存。

常见架构模式

模式一:单应用水平扩展

同一个应用部署到多台服务器,用负载均衡分发流量:

┌─────────────────────────────────────────┐
│              负载均衡器                  │
└─────────────────┬───────────────────────┘

    ┌─────────────┼─────────────┐
    ▼             ▼             ▼
┌────────┐   ┌────────┐   ┌────────┐
│服务器 1│   │服务器 2│   │服务器 3│
│  App   │   │  App   │   │  App   │
└────────┘   └────────┘   └────────┘

模式二:微服务分层部署

不同类型的服务放到不同服务器上,各司其职:

┌──────────────┐   ┌──────────────┐   ┌──────────────┐
│   服务器 1   │   │   服务器 2   │   │   服务器 3   │
│   前端服务   │   │   后端 API   │   │    数据库    │
│    网关      │   │   后台任务   │   │     缓存     │
└──────────────┘   └──────────────┘   └──────────────┘

模式三:按环境分服务器

开发、测试、生产环境各用独立的服务器,互不影响:

┌──────────────┐   ┌──────────────┐   ┌──────────────┐
│  开发服务器  │   │  测试服务器  │   │  生产服务器  │
│   全套服务   │   │   全套服务   │   │   全套服务   │
│  (develop)   │   │  (staging)   │   │   (main)     │
└──────────────┘   └──────────────┘   └──────────────┘

部署服务到指定服务器

创建服务时选择

  1. 在控制台点击目标服务器
  2. 点击侧边栏的「添加服务」
  3. 创建服务时就会自动绑定到这台服务器

服务会专门部署到你选的那台服务器上。

服务间通信

通过公网域名

最简单的方式,服务之间通过各自的域名互相调用:

// 服务器 1 上的前端调用服务器 2 上的 API
const response = await fetch('https://api.example.com/data');

私有网络

即将推出:内置 WireGuard 支持,让你的服务器之间建立安全的私有网络。到时候服务之间可以通过内网 IP 直接通信,既安全又快速,不用暴露到公网。

常见问题排查

连不上远程服务器

  1. 先手动试试能不能 SSH 上去:ssh user@host
  2. 检查防火墙有没有放行 22 端口
  3. 确认公钥已经加到 authorized_keys 里了
  4. 看看远程服务器上 Docker 是不是在正常运行

相关文档

目录