北极星中间件如何部署
·
北极星中间件支持多种部署方式,包括单机模式(开发测试)、集群模式(生产环境)和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 | 千兆 |
| MySQL | 4核+ | 8GB+ | 200GB SSD | 千兆 |
| Redis | 2核+ | 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 仪表板导入:
-
访问 https://github.com/polarismesh/polaris/tree/main/deploy/grafana
-
下载
polaris-overview.json -
在 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 中部署
关键注意点:
-
生产环境务必开启数据持久化
-
配置合理的监控和告警
-
定期备份数据
-
根据业务规模调整资源配置
-
考虑安全配置(TLS、鉴权)
北极星部署完成后,可以为其享统一的服务发现、配置管理、流量治理等能力,是微服务架构的重要基础设施。
更多推荐
所有评论(0)