北极星中间件支持多种部署方式,包括单机模式(开发测试)、集群模式(生产环境)和Kubernetes部署(云原生)。单机部署可通过Docker快速启动,生产环境建议采用3节点集群架构,需配置MySQL和Redis存储。Kubernetes部署推荐使用Helm Chart,支持自动扩缩容和监控集成。部署后需配置监控(Prometheus+Grafana)、日志收集和定期备份策略,生产环境应启用鉴权和TLS加密。常见问题包括服务注册失败和节点通信问题,可通过检查网络和日志排查。北极星作为微服务治理平台,为服务发现、配置管理和流量治理提供统一解决方案。

北极星(Polaris)中间件部署指南

北极星支持多种部署方式,从单机开发环境到高可用生产集群。以下是详细的部署步骤和配置。

1. 部署方式概览

部署方式适用场景复杂度高可用说明
单机模式开发测试不支持快速启动,所有组件在一起
集群模式生产环境⭐⭐⭐支持完整高可用部署
Kubernetes云原生环境⭐⭐支持Helm Chart 部署
混合云多云部署⭐⭐⭐⭐支持跨云高可用

2. 单机部署(开发测试)

2.1 使用 Docker 快速启动

bash

# 1. 拉取北极星最新镜像
docker pull polarismesh/polaris-server:latest
docker pull polarismesh/polaris-console:latest

# 2. 创建网络和数据目录
docker network create polaris
mkdir -p /data/polaris/{logs,data}

# 3. 启动北极星服务端(单机版)
docker run -d \
  --name polaris \
  --network polaris \
  -p 8090:8090 \        # HTTP API端口
  -p 8091:8091 \        # gRPC API端口
  -p 8093:8093 \        # 控制台端口
  -v /data/polaris/logs:/root/logs \
  -v /data/polaris/data:/root/polaris \
  polarismesh/polaris-server:latest

# 4. 启动控制台(可选)
docker run -d \
  --name polaris-console \
  --network polaris \
  -p 80:80 \
  -e POLARIS_SERVER_ADDRESS=polaris:8090 \
  polarismesh/polaris-console:latest

2.2 使用 Docker Compose(推荐)

docker-compose.yml

yaml

version: '3'
services:
  polaris:
    image: polarismesh/polaris-server:latest
    container_name: polaris
    ports:
      - "8090:8090"  # HTTP API
      - "8091:8091"  # gRPC API
      - "8093:8093"  # 控制台
    volumes:
      - ./data/polaris:/root/polaris
      - ./logs/polaris:/root/logs
    environment:
      - MODE=standalone
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/health"]
      interval: 30s
      timeout: 10s
      retries: 3
    restart: unless-stopped

  polaris-console:
    image: polarismesh/polaris-console:latest
    container_name: polaris-console
    ports:
      - "8080:80"  # 控制台Web界面
    environment:
      - POLARIS_SERVER_ADDRESS=polaris:8090
    depends_on:
      - polaris
    restart: unless-stopped

  # 如果需要Prometheus监控(可选)
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - ./data/prometheus:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
    restart: unless-stopped

启动命令:

bash

# 创建目录
mkdir -p polaris-deploy && cd polaris-deploy
mkdir -p data/polaris logs/polaris

# 下载docker-compose文件
curl -O https://raw.githubusercontent.com/polarismesh/polaris/main/docker/standalone/docker-compose.yaml

# 启动
docker-compose up -d

# 验证
curl http://localhost:8090/health
# 预期返回: {"code":200000,"info":"success","size":0}

3. 集群部署(生产环境)

3.1 架构说明

text

高可用集群架构:
┌─────────────────────────────────────────────────────────┐
│                  北极星集群 (3节点)                       │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐            │
│  │  Node1   │  │  Node2   │  │  Node3   │            │
│  │  ┌────┐  │  │  ┌────┐  │  │  ┌────┐  │            │
│  │  │DB  │◄─┼──┼─►│DB  │◄─┼──┼─►│DB  │  │            │
│  │  └────┘  │  │  └────┘  │  │  └────┘  │            │
│  │  MySQL   │  │  MySQL   │  │  MySQL   │            │
│  └──────────┘  └──────────┘  └──────────┘            │
└─────────────────────────────────────────────────────────┘

3.2 硬件要求

组件CPU内存磁盘网络
北极星服务端4核+8GB+100GB SSD千兆
MySQL4核+8GB+200GB SSD千兆
Redis2核+4GB+50GB SSD千兆

3.3 部署步骤

步骤1:数据库准备

sql

-- 创建数据库
CREATE DATABASE polaris_server DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

-- 创建用户并授权
CREATE USER 'polaris'@'%' IDENTIFIED BY 'Polaris@123456';
GRANT ALL PRIVILEGES ON polaris_server.* TO 'polaris'@'%';
FLUSH PRIVILEGES;

-- 初始化表结构(可从官方获取SQL文件)
-- https://github.com/polarismesh/polaris/blob/main/store/sqldb/scripts/polaris_server.sql
步骤2:配置文件

polaris-server.yaml

yaml

# 全局配置
global:
  system:
    mode: cluster  # 集群模式
    discover: polaris  # 服务发现类型
  
  # 服务节点信息
  serverConnector:
    addresses:
      - 10.0.0.1:8091  # 节点1
      - 10.0.0.2:8091  # 节点2
      - 10.0.0.3:8091  # 节点3
  
  # API配置
  api:
    bindIP: "0.0.0.0"
    bindPort: 8090
  
  # gRPC配置
  grpc:
    bindIP: "0.0.0.0"
    bindPort: 8091

# 控制台配置
console:
  enable: true
  bindIP: "0.0.0.0"
  bindPort: 8093

# 命名空间配置
namespace:
  # 自动创建默认命名空间
  createDefault: true

# 存储配置
store:
  # MySQL配置
  db:
    enable: true
    dbType: mysql
    dbName: polaris_server
    dbAddr: "10.0.0.100:3306"  # MySQL地址
    dbUser: polaris
    dbPwd: "Polaris@123456"
    maxOpenConns: 50
    maxIdleConns: 10
  
  # Redis配置(用于缓存和会话)
  redis:
    enable: true
    kvAddr: "10.0.0.101:6379"
    kvPasswd: ""
    dbIndex: 0
    poolSize: 200
    minIdleConns: 50

# 鉴权配置(生产环境建议开启)
auth:
  enable: false  # 按需开启

# 监控配置
monitor:
  # Prometheus监控
  server:
    enable: true
    port: 9091
    
  # 调用链追踪
  trace:
    enable: true
    exporter: jaeger
    # jaeger配置
    jaeger:
      endpoint: "http://jaeger:14268/api/traces"
      username: ""
      password: ""
步骤3:启动集群

节点1启动脚本 start_node1.sh

bash

#!/bin/bash

# 环境变量
export POLARIS_MODE=cluster
export POLARIS_NODE_ID=node1
export POLARIS_BIND_IP=10.0.0.1
export POLARIS_HTTP_PORT=8090
export POLARIS_GRPC_PORT=8091
export POLARIS_CONSOLE_PORT=8093

# 创建数据目录
mkdir -p /data/polaris/{logs,data,conf}
cp polaris-server.yaml /data/polaris/conf/

# 启动北极星
/path/to/polaris-server start \
  --config=/data/polaris/conf/polaris-server.yaml \
  --log-dir=/data/polaris/logs \
  --data-dir=/data/polaris/data

# 或者使用systemd服务
cat > /etc/systemd/system/polaris.service << EOF
[Unit]
Description=Polaris Server
After=network.target

[Service]
Type=simple
User=polaris
Group=polaris
WorkingDirectory=/data/polaris
ExecStart=/path/to/polaris-server start --config=/data/polaris/conf/polaris-server.yaml
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable polaris
systemctl start polaris

节点2、3类似配置,只需修改IP和节点ID。

步骤4:验证集群状态

bash

# 检查节点健康状态
curl http://10.0.0.1:8090/health
curl http://10.0.0.2:8090/health
curl http://10.0.0.3:8090/health

# 查看集群成员
curl http://10.0.0.1:8090/v1/GetServerConnections

# 使用北极星CLI工具
polarisctl get service -n Polaris -s polaris.checker

4. Kubernetes 部署(云原生)

4.1 使用 Helm 部署

bash

# 1. 添加Helm仓库
helm repo add polaris https://polarismesh.github.io/helm-charts
helm repo update

# 2. 创建命名空间
kubectl create namespace polaris-system

# 3. 安装北极星
helm install polaris polaris/polaris \
  --namespace polaris-system \
  --set global.mode=cluster \
  --set mysql.enabled=true \
  --set redis.enabled=true \
  --set monitor.prometheus.enabled=true

# 4. 安装控制台
helm install polaris-console polaris/polaris-console \
  --namespace polaris-system \
  --set polaris.address="polaris.polaris-system.svc.cluster.local:8090"

4.2 自定义 Values.yaml

values-custom.yaml

yaml

global:
  mode: cluster
  
# 北极星服务配置
polaris:
  replicaCount: 3
  
  # 资源限制
  resources:
    requests:
      memory: "2Gi"
      cpu: "1000m"
    limits:
      memory: "4Gi"
      cpu: "2000m"
  
  # 存储配置
  storage:
    mysql:
      host: "polaris-mysql"
      port: 3306
      database: "polaris_server"
      username: "polaris"
      password: "Polaris@123456"
    
    redis:
      host: "polaris-redis"
      port: 6379
      password: ""
  
  # 服务暴露
  service:
    type: LoadBalancer
    httpPort: 8090
    grpcPort: 8091
    
  # 监控配置
  metrics:
    enabled: true
    serviceMonitor:
      enabled: true
  
  # 自动注入Sidecar
  sidecarInjector:
    enabled: true
    autoInject: true
    
# MySQL配置
mysql:
  enabled: true
  architecture: replication
  auth:
    database: "polaris_server"
    username: "polaris"
    password: "Polaris@123456"
  primary:
    persistence:
      size: 100Gi
  
# Redis配置
redis:
  enabled: true
  architecture: standalone
  auth:
    enabled: false
  master:
    persistence:
      size: 50Gi

4.3 部署命令

bash

# 使用自定义配置部署
helm upgrade --install polaris polaris/polaris \
  -n polaris-system \
  -f values-custom.yaml

# 验证部署
kubectl -n polaris-system get pods
# 预期输出:
# NAME                                  READY   STATUS    RESTARTS   AGE
# polaris-0                             1/1     Running   0          2m
# polaris-1                             1/1     Running   0          1m
# polaris-2                             1/1     Running   0          1m
# polaris-mysql-primary-0               1/1     Running   0          2m
# polaris-mysql-secondary-0             1/1     Running   0          2m
# polaris-redis-master-0                1/1     Running   0          2m

# 获取访问地址
kubectl -n polaris-system get svc polaris

5. 客户端接入配置

5.1 tRPC-Go 接入北极星

trpc_go.yaml

yaml

global:
  namespace: Development  # 命名空间
  env_name: test         # 环境名称

server:
  app: user
  server: service
  service:
    - name: trpc.user.service.User
      ip: ${ip}          # 自动获取IP
      port: 8000
      protocol: trpc
      network: tcp
      registry: polaris  # 使用北极星注册
      polaris:
        # 服务元数据
        metadata:
          version: v1.0
          region: ${zone}
        # 健康检查
        health_check:
          type: heartbeat
          heartbeat_ttl: 10

client:
  service:
    - name: trpc.order.service.Order
      target: polaris://Production/trpc.order.service.Order
      timeout: 1000
      network: tcp
      protocol: trpc
      polaris:
        # 负载均衡策略
        load_balancer: weightedRandom
        # 熔断配置
        circuit_breaker:
          enable: true
          error_threshold: 5
          success_threshold: 1
          timeout: 60000

plugins:
  registry:
    polaris:
      # 北极星服务端地址
      address:
        - 10.0.0.1:8091
        - 10.0.0.2:8091
        - 10.0.0.3:8091
      # 客户端配置
      client_config:
        connect_timeout: 1s
        request_timeout: 2s
      # 注册配置
      register:
        enable: true
        ttl: 10
        heartbeat: true
        heartbeat_interval: 5s

5.2 Java Spring Cloud 接入

application.yaml

yaml

spring:
  application:
    name: user-service
  cloud:
    polaris:
      # 北极星服务端地址
      address: grpc://10.0.0.1:8091
      # 命名空间
      namespace: Production
      # 服务注册
      discovery:
        register: true
        heartbeat:
          enable: true
          interval: 5s
      # 配置中心
      config:
        enabled: true
        auto-refresh: true
      # 路由规则
      router:
        enabled: true
      # 熔断限流
      circuitbreaker:
        enabled: true
        requestVolumeThreshold: 20
        sleepWindowInMilliseconds: 5000

6. 监控与运维

6.1 集成 Prometheus + Grafana

prometheus.yml

yaml

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'polaris'
    static_configs:
      - targets: ['10.0.0.1:9091', '10.0.0.2:9091', '10.0.0.3:9091']
    metrics_path: '/metrics'
    
  - job_name: 'polaris-services'
    kubernetes_sd_configs:
      - role: endpoints
    relabel_configs:
      - source_labels: [__meta_kubernetes_service_annotation_polarismesh_io_monitor]
        action: keep
        regex: true

Grafana 仪表板导入:

  1. 访问 https://github.com/polarismesh/polaris/tree/main/deploy/grafana

  2. 下载 polaris-overview.json

  3. 在 Grafana 中导入

6.2 日志收集

bash

# 配置日志轮转
cat > /etc/logrotate.d/polaris << EOF
/data/polaris/logs/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 644 polaris polaris
    postrotate
        systemctl reload polaris > /dev/null 2>&1 || true
    endscript
}
EOF

7. 高可用与灾难恢复

7.1 备份策略

bash

#!/bin/bash
# 北极星数据备份脚本

BACKUP_DIR="/backup/polaris/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR

# 备份MySQL数据
mysqldump -h 10.0.0.100 -u polaris -p'Polaris@123456' \
  --single-transaction \
  --routines \
  --events \
  polaris_server > $BACKUP_DIR/polaris_mysql_$(date +%H%M%S).sql

# 备份配置文件
tar czf $BACKUP_DIR/config_$(date +%H%M%S).tar.gz /data/polaris/conf/

# 保留最近7天备份
find /backup/polaris -type f -mtime +7 -delete

7.2 故障转移

yaml

# 使用Keepalived实现VIP故障转移
# keepalived.conf
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    
    virtual_ipaddress {
        10.0.0.100/24  # VIP地址
    }
    
    track_script {
        chk_polaris
    }
}

vrrp_script chk_polaris {
    script "/usr/bin/curl -f http://localhost:8090/health"
    interval 2
    weight -20
    fall 3
    rise 2
}

8. 安全配置

8.1 启用鉴权

yaml

# polaris-server.yaml 中的auth配置
auth:
  enable: true
  
  # JWT Token配置
  token:
    signKey: "your-256-bit-secret-key-here"
    expireTime: 24h
    
  # 用户管理
  user:
    - name: admin
      password: "$2a$10$NlBC84MVb7F95EXYTXwLneXgCca6/GipyWR5NHm8K0203bSQMLpvm"  # bcrypt加密
      role: owner
      token_enable: true
      
    - name: developer
      password: "$2a$10$8A5n5i5Qlz1mMpVq5u6JzO7vLwCqT0xY1Z"
      role: developer
      token_enable: true

8.2 TLS 加密

yaml

# 启用TLS
tls:
  enable: true
  cert_file: /path/to/server.crt
  key_file: /path/to/server.key
  ca_file: /path/to/ca.crt
  verify_client: false  # 是否验证客户端证书

9. 验证部署成功

bash

# 1. 访问控制台
# 浏览器访问: http://10.0.0.1:8093
# 默认用户名密码: polaris / polaris

# 2. API健康检查
curl -X POST http://10.0.0.1:8090/v1/ReportClient
# 预期返回: {"code":200000,"info":"execute success"}

# 3. 注册测试服务
curl -X POST http://10.0.0.1:8090/v1/RegisterInstance \
  -H "Content-Type: application/json" \
  -d '{
    "service": "test-service",
    "namespace": "Development",
    "host": "127.0.0.1",
    "port": 8080,
    "metadata": {
      "version": "v1.0"
    }
  }'

# 4. 查询服务
curl -X GET "http://10.0.0.1:8090/v1/Discover?type=1&namespace=Development&service=test-service"

# 5. 查看监控
# 访问: http://10.0.0.1:9090 (Prometheus)
# 访问: http://10.0.0.1:3000 (Grafana)

10. 常见问题

Q1: 服务注册失败

bash

# 检查网络连通性
curl http://10.0.0.1:8090/health

# 检查防火墙
sudo ufw status
sudo ufw allow 8090/tcp
sudo ufw allow 8091/tcp

# 查看日志
tail -f /data/polaris/logs/polaris.log

Q2: 控制台无法访问

bash

# 检查控制台服务状态
docker ps | grep polaris-console

# 检查端口占用
netstat -tlnp | grep :80

# 查看控制台日志
docker logs polaris-console

Q3: 集群节点间无法通信

bash

# 检查节点间网络
ping 10.0.0.2
telnet 10.0.0.2 8091

# 检查集群状态
curl http://10.0.0.1:8090/v1/GetServerConnections

# 验证时钟同步
date
ntpdate -q pool.ntp.org

总结

北极星的部署可以根据不同场景选择合适的方式:

  • 开发测试:使用 Docker Compose 单机部署

  • 生产环境:集群部署,确保高可用

  • 云原生环境:使用 Helm 在 Kubernetes 中部署

关键注意点:

  1. 生产环境务必开启数据持久化

  2. 配置合理的监控和告警

  3. 定期备份数据

  4. 根据业务规模调整资源配置

  5. 考虑安全配置(TLS、鉴权)

北极星部署完成后,可以为其享统一的服务发现、配置管理、流量治理等能力,是微服务架构的重要基础设施。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐